{
  "backups": {
    "warning": "Stop the battlegroup before taking or restoring a backup. Backups taken while the game is running may be inconsistent, and a restore requires the battlegroup stopped.",
    "loadFailed": "Failed to load backups: {{message}}",
    "take": {
      "title": "Take Backup",
      "desc": "Snapshot the battlegroup's PostgreSQL database to a timestamped file on the host. Recommended before risky changes.",
      "btn": "Take Backup"
    },
    "taken": "Backup created: {{name}}",
    "takeFailed": "Backup failed: {{message}}",
    "recent": {
      "title": "Recent Backups",
      "empty": "No backups yet."
    },
    "col": {
      "name": "File",
      "size": "Size",
      "modified": "Created"
    },
    "download": "Download",
    "restoreLabel": "Restore",
    "restoreFailed": "Restore failed: {{message}}",
    "restoreConfirmTitle": "Restore database?",
    "restoreConfirmDesc": "This replaces the live database with {{name}}. The battlegroup must be stopped — this cannot be undone.",
    "deleteLabel": "Delete",
    "deleteConfirmTitle": "Delete backup?",
    "deleteConfirmDesc": "Permanently delete {{name}}?",
    "deleteFailed": "Delete failed: {{message}}",
    "schedule": {
      "title": "Backup Schedule",
      "enable": "Enabled",
      "desc": "Run automatic backups on a weekly schedule. Times are in the configured timezone.",
      "nextBackup": "Next backup: {{when}}",
      "noneScheduled": "No backups scheduled",
      "noRules": "No rules yet — add one below.",
      "addRule": "Add rule",
      "removeRule": "Remove rule",
      "keepN": "Keep last",
      "keepHint": "0 = keep all",
      "timezone": "Timezone",
      "tzPlaceholder": "host local (e.g. UTC)",
      "save": "Save",
      "saveFailed": "Save failed: {{message}}"
    }
  },
  "serverHealth": {
    "directorProxied": "(proxied)",
    "ifaceLoadFailed": "Failed to load web interfaces: {{message}}",
    "ifaceSaveFailed": "Save failed: {{message}}",
    "ifaceLabel": "Label",
    "ifaceUrl": "URL (http:// or /path)",
    "editInterfaces": "Edit web interfaces",
    "removeInterface": "Remove",
    "addInterface": "Add interface",
    "saveInterfaces": "Save",
    "title": "Server Health",
    "subtitle": "Live VM, battlegroup, and port status.",
    "gamePorts": "Game (UDP)",
    "webPort": "Web",
    "vm": "VM",
    "bg": "Battlegroup",
    "up": "Up",
    "down": "Down",
    "bgVm": "Battlegroup + VM",
    "upFor": "Up {{uptime}}",
    "noUptime": "Uptime unavailable",
    "components": "Battlegroup Info",
    "bgState": "BG state",
    "database": "Database",
    "director": "Director",
    "configured": "Configured",
    "notConfigured": "Not configured",
    "uptime": "Uptime",
    "readyState": "Game Ready State",
    "ready": "Ready",
    "notReady": "Not ready",
    "webInterfaces": "Web Interfaces",
    "noInterfaces": "No web interfaces configured.",
    "copied": "Copied to clipboard",
    "copyFailed": "Copy failed",
    "copy": "Copy",
    "open": "Open",
    "gameServers": "Game Servers",
    "pods": "{{n}} pods"
  },
  "restarts": {
    "title": "Scheduled Restarts",
    "enable": "Enabled",
    "nextRestart": "Next restart: {{when}}",
    "noneScheduled": "No restarts scheduled",
    "noRules": "No rules yet — add one below.",
    "addRule": "Add rule",
    "removeRule": "Remove rule",
    "warnMinutes": "Warn (min)",
    "timezone": "Timezone",
    "tzPlaceholder": "host local (e.g. UTC)",
    "save": "Save",
    "skipNext": "Skip next",
    "failedToLoad": "Failed to load: {{message}}",
    "saveFailed": "Save failed: {{message}}"
  },
  "director": {
    "title": "Director Config",
    "subtitle": "Battlegroup Director settings — map instancing & advanced tunables (AMP).",
    "loading": "Loading director config…",
    "unsupported": "Director config editing is only available on the AMP control plane.",
    "save": "Save",
    "saveWithCount": "Save ({{count}})",
    "saveFailed": "Save failed: {{message}}",
    "readOnly": "read-only",
    "restartNote": "Changes are written to director_config.ini and take effect after a server restart."
  },
  "help": {
    "menu": "Help",
    "reportIssue": "Report an issue",
    "copyDiagnostics": "Copy diagnostics",
    "viewOnGitHub": "View on GitHub",
    "copied": "Diagnostics copied to clipboard",
    "copyFailed": "Could not copy to clipboard"
  },
  "landsraad": {
    "title": "Landsraad",
    "subtitle": "The weekly political term — decrees and the house task board (read-only).",
    "failedToLoad": "Failed to load Landsraad: {{message}}",
    "currentTerm": "Current Term",
    "noTerm": "No active term.",
    "testTerm": "Test term",
    "term": {
      "id": "Term",
      "window": "Window",
      "reigning": "Reigning Faction",
      "activeDecree": "Active Decree",
      "electedDecree": "Elected Decree",
      "winning": "Winning Faction"
    },
    "decrees": "Decrees",
    "decreesDesc": "Server-wide buffs that can be elected each term.",
    "noDecrees": "No decrees.",
    "weight": "Weight {{weight}}",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "taskBoard": "Task Board",
    "taskBoardDesc": "House contribution tasks for the current term.",
    "noTasks": "No tasks.",
    "tasks": {
      "index": "#",
      "house": "House",
      "goal": "Goal",
      "completed": "Status",
      "sysselraad": "Sysselraad",
      "done": "Done",
      "open": "Open",
      "yes": "Yes"
    }
  },
  "guilds": {
    "title": "Guilds ({{count}})",
    "subtitle": "Player guilds on this server.",
    "view": "View",
    "empty": "No guilds found.",
    "failedToLoad": "Failed to load guilds: {{message}}",
    "members": "Members",
    "invites": "Pending Invites",
    "noMembers": "No members.",
    "noInvites": "No pending invites.",
    "roleN": "Role {{id}}",
    "manage": "Manage",
    "editGuild": "Edit Guild",
    "nameLabel": "Name",
    "descLabel": "Description",
    "save": "Save",
    "saved": "Guild updated.",
    "saveFailed": "Save failed: {{message}}",
    "makeAdmin": "Make Admin",
    "roleAdmin": "Admin",
    "roleMember": "Member",
    "roleChanged": "Role updated.",
    "roleChangeFailed": "Role change failed: {{message}}",
    "invitedBy": "invited by {{name}}",
    "columns": {
      "name": "Name",
      "faction": "Faction",
      "members": "Members",
      "description": "Description"
    }
  },
  "app": {
    "reportIssue": "Report an issue on GitHub",
    "changesNote": "Changes on all tabs are saved together.",
    "checkUpdates": "Check for Updates",
    "configureBackend": "Configure backend",
    "goHome": "Go to home",
    "openSettings": "Open Settings",
    "reconnect": "Reconnect",
    "reconnected": "Reconnected — database connected",
    "reconnectFailed": "Reconnect failed: {{error}}",
    "reconnecting": "Reconnecting…",
    "reinstall": "Reinstall",
    "reinstalled": "Reinstalled {{version}}. Server is restarting…",
    "saveApply": "Save & Apply",
    "selectLanguage": "Select language",
    "selectTheme": "Select theme",
    "settings": "Settings",
    "signIn": "Sign In",
    "switchToSidenav": "Switch to side navigation",
    "switchToTopnav": "Switch to top navigation",
    "title": "DUNE ADMIN",
    "updateAvailable": "Update available",
    "updateAvailableBody": "A new version is available: v{{current}} → v{{latest}}.",
    "updated": "Updated to {{version}}. Server is restarting…",
    "updateFailed": "Update failed: {{message}}",
    "updateNow": "Update now",
    "viewReleaseNotes": "View release notes",
    "backendUnreachable": {
      "body": "The web app loaded, but it couldn't connect to the dune-admin backend. Make sure the dune-admin executable is running and reachable from this browser.",
      "hint1": "Make sure the dune-admin service/executable is running on the server.",
      "hint2": "Check that the backend URL above is correct and reachable (host, port, firewall, HTTPS).",
      "hint3": "Behind a proxy or on a different host? Set the backend URL in Settings.",
      "retry": "Retry",
      "targetLabel": "Configured backend",
      "title": "Can't reach the dune-admin backend"
    }
  },
  "bases": {
    "ariaLabel": "Player bases",
    "columns": {
      "id": "ID",
      "name": "Name",
      "pieces": "Pieces",
      "placeables": "Placeables"
    },
    "export": "Export",
    "failedToLoad": "Failed to load bases: {{message}}",
    "featureNotAvailable": "Feature not available",
    "featureNotAvailableDesc": "This version of the dune-admin binary does not support base listing. Upgrade to the latest release to use this feature.",
    "layoutAccountStrong": "Layout Tools",
    "noBasesFound": "No bases found.",
    "subtitle": "Live in-world player bases. Export any base as a solido-compatible blueprint.",
    "title_one": "Bases ({{count}})",
    "title_other": "Bases ({{count}})"
  },
  "battlegroup": {
    "actions": {
      "backup": "Backup",
      "backupMsg": "Create a database backup? This may take a few minutes.",
      "restart": "Restart",
      "restartMsg": "Restart the server? Players will be briefly disconnected.",
      "restore": "Restore",
      "restoreMsg": "Restore database from backup? This will overwrite current data.",
      "start": "Start",
      "startMsg": "Start the battlegroup server?",
      "stop": "Stop",
      "stopMsg": "Stop the server? All players will be disconnected.",
      "update": "Update",
      "updateMsg": "Run a server update? This takes the server offline briefly."
    },
    "backupLoadFailed": "Could not load backup files",
    "bodyPlaceholder": "Body",
    "broadcastBtn": "Broadcast",
    "broadcasts": "Broadcasts",
    "broadcastSent": "Broadcast sent",
    "clickRefresh": "Click Refresh to load status.",
    "cmdCompleted": "{{label}} completed",
    "cmdFailed": "{{label}} failed: {{message}}",
    "columns": {
      "age": "Age",
      "dim": "Dim",
      "map": "Map",
      "part": "Part",
      "phase": "Phase",
      "players": "Players",
      "queue": "Queue",
      "ready": "Ready"
    },
    "confirm": {
      "confirmPrefix": "Confirm",
      "serverSuffix": "Server"
    },
    "database": "Database",
    "durationLabel": "Duration (s)",
    "genericMessage": "Generic Message",
    "initializing": "(initializing)",
    "initWarning": "Server just started — game servers may still be initializing (~2 min).",
    "loadingStatus": "Loading status...",
    "modal": {
      "download": "Download"
    },
    "noGameServers": "No game servers found.",
    "noOutput": "(no output)",
    "phase": "Phase",
    "restore": {
      "dropzone": "Drop or click to upload a .backup or .zip from your computer",
      "noBackups": "No backup files on server yet.",
      "restoreBtn": "Restore {{file}}",
      "restoreCompleted": "Restore completed",
      "title": "Restore from Backup",
      "uploaded": "Uploaded {{name}}",
      "warning": "This overwrites current data. Server should be stopped first."
    },
    "restoreLabel": "Restore",
    "runningCmd": "Running {{cmd}}...",
    "serverControl": "Server Control",
    "shutdownBroadcast": "Shutdown Broadcast",
    "shutdownCancelled": "Shutdown broadcast cancelled",
    "shutdownDelay": "Delay (min)",
    "shutdownDelayLabel": "Delay minutes",
    "shutdownSent": "Shutdown broadcast sent ({{delay}} min)",
    "shutdownType": "Type",
    "shutdownTypeLabel": "Shutdown type",
    "statusFailed": "Status failed: {{message}}",
    "statusTitle": "Battlegroup Status",
    "titleFull": "{{bgTitle}} ({{bgName}})",
    "titlePlaceholder": "Title"
  },
  "blueprints": {
    "ariaLabel": "Blueprints",
    "columns": {
      "id": "ID",
      "itemId": "Item ID",
      "name": "Name",
      "owner": "Owner",
      "pieces": "Pieces",
      "placeables": "Placeables"
    },
    "failedToLoad": "Failed to load blueprints: {{message}}",
    "importBlueprint": "Import Blueprint",
    "importFailed": "Import failed: {{message}}",
    "importModal": {
      "blueprintFile": "Blueprint File",
      "dropzone": "Drop or click to upload a .json blueprint file",
      "import": "Import",
      "playerLabel": "Player",
      "playerPlaceholder": "Select a player…",
      "playersLabel": "Players",
      "title": "Import Blueprint"
    },
    "importSuccess": "Blueprint imported successfully",
    "layoutAccountStrong": "Layout Tools",
    "noBlueprintsFound": "No blueprints found.",
    "selectFile": "Select a blueprint file",
    "selectPlayer": "Select a player",
    "subtitle": "Manage saved base blueprints. Export or import player constructions.",
    "title_one": "Blueprints ({{count}})",
    "title_other": "Blueprints ({{count}})"
  },
  "common": {
    "timezone": "Timezone",
    "tzHostLocal": "Host local",
    "add": "Add",
    "cancel": "Cancel",
    "checking": "Checking…",
    "close": "Close",
    "confirm": "Confirm",
    "error": "Error:",
    "export": "Export",
    "failed": "Failed: {{message}}",
    "noResults": "No results.",
    "refresh": "Refresh",
    "remove": "Remove",
    "save": "Save",
    "saving": "Saving…",
    "send": "Send"
  },
  "database": {
    "columnColumn": "Column",
    "enterSearchTerm": "Enter a search term",
    "enterSQL": "Enter a SQL query",
    "enterTableName": "Enter a table name",
    "failed": "Failed: {{message}}",
    "limitLabel": "Limit",
    "noResults": "No results.",
    "nullableColumn": "Nullable",
    "refreshLabel": "Refresh",
    "resultLabel": "Result",
    "rowsColumn": "Rows",
    "rowsLimited": "Results limited to 200 rows.",
    "runBtn": "Run",
    "runHint": "Cmd/Ctrl+Enter to run · Tab accepts suggestion",
    "runQuery": "Run Query",
    "searchLabel": "Column or table name",
    "searchPlaceholder": "player_id, faction...",
    "sections": {
      "backups": "Backups",
      "describe": "Describe",
      "sample": "Sample",
      "search": "Search Columns",
      "sql": "Run SQL",
      "tables": "Tables"
    },
    "sideNavTitle": "Database",
    "sqlPlaceholder": "SELECT * FROM dune.actors LIMIT 10;",
    "tableColumn": "Table",
    "tableNameLabel": "Table name",
    "tablePlaceholder": "actors",
    "typeColumn": "Type"
  },
  "liveMap": {
    "betaBody": "This feature is under active development. Some functionality is still changing and may not be final.",
    "betaTitle": "Beta — Work in Progress",
    "calibActive": "Calibration mode — click on the map exactly where your character is standing.",
    "calibNoPlayer": "No online player to anchor calibration to.",
    "calibPoints": "{{n}} point(s) captured — needs 2+, far apart, to solve.",
    "calibrate": "Calibrate",
    "clear": "Clear",
    "clearFilters": "Clear all filters",
    "densityNoneSelected": "Enable resource types above to see their density.",
    "densityOverlay": "Show resource density",
    "dragTeleportDesc": "Safe-snap to ({{x}}, {{y}}) — player will land on nearest valid ground.",
    "dragTeleportTitle": "Teleport {{name}}?",
    "failedToLoad": "Failed to load map: {{message}}",
    "filter": "Filter",
    "filterBases": "Bases",
    "filterDensity": "Density Overlay",
    "filterHazards": "Hazards",
    "filterKeys": "Keys",
    "filterLandsraad": "Landsraad",
    "filterLive": "Live",
    "filterLocations": "Locations",
    "filterNPCs": "NPCs",
    "filterResources": "Resources",
    "filterSearch": "Find filter…",
    "filterStaticObjects": "Static Objects",
    "filterTrainers": "Trainers",
    "filterVendors": "Vendors",
    "players": "Players",
    "spawnsLoaded_one": "{{count}} static markers loaded",
    "spawnsLoaded_other": "{{count}} static markers loaded",
    "spawnTooltipCoords": "{{x}}, {{y}}",
    "subtitle": "Players, vehicles and bases on the live map",
    "teleportHere": "Teleport here",
    "teleportMode": "Teleport mode",
    "teleportModeActive": "Click the map to set destination",
    "teleportPlayer": "Player to teleport",
    "teleportSelectPlayer": "Select a player…",
    "teleportSent": "Teleport sent",
    "title": "Live Map",
    "total": "Total",
    "unsupported": "Live map is not available on this server.",
    "updated": "updated at {{time}}",
    "vehicles": "Vehicles"
  },
  "logs": {
    "antiCheatLabel": "Anti-cheat events",
    "antiCheatLog": "Anti-cheat log",
    "antiCheatTitle": "Anti-Cheat Events (7d)",
    "autoScroll": "Auto-scroll",
    "cheats7d": "Cheats (7d)",
    "clear": "Clear",
    "columns": {
      "character": "Character",
      "cheatType": "Cheat Type",
      "time": "Time"
    },
    "connectedPod": "● Connected · {{pod}}",
    "disconnected": "○ Disconnected",
    "disconnectedState": "Disconnected.",
    "eventsCount_one": "{{count}} events",
    "eventsCount_other": "{{count}} events",
    "failedToLoad": "Failed to load pods: {{message}}",
    "linesCount_one": "{{count}} lines",
    "linesCount_other": "{{count}} lines",
    "logFiles": "Log Files",
    "logFileSingular": "log file",
    "noCheatEvents": "No cheat events found in the last 7 days.",
    "pods": "Pods",
    "podSingular": "pod",
    "reconnect": "Reconnect",
    "selectFromPanel": "Select a {{label}} from the left panel to start streaming logs.",
    "selectSource": "○ Select a {{label}}",
    "sourceTitle_one": "{{label}} ({{count}})",
    "sourceTitle_other": "{{label}} ({{count}})",
    "stop": "Stop",
    "waitingForLines": "Waiting for log lines...",
    "wsError": "WebSocket error"
  },
  "market": {
    "bot": {
      "actions": {
        "cleanupFailed": "Cleanup failed: {{message}}",
        "dormantHint": "Bot disabled — enable it in the Server tab to use lifecycle controls.",
        "pause": "Pause",
        "pauseFailed": "Failed to pause bot: {{message}}",
        "pauseSuccess": "Bot pause: {{output}}",
        "reinitialize": "Reinitialize",
        "reinitializeFailed": "Failed to reinitialize bot: {{message}}",
        "reinitializeSuccess": "Bot reinitialize: {{output}}",
        "resume": "Resume",
        "resumeFailed": "Failed to resume bot: {{message}}",
        "resumeSuccess": "Bot resume: {{output}}",
        "wipedListings": "Wiped {{orders}} listings ({{items}} items)",
        "wipeListings": "Wipe Listings",
        "wipeListingsConfirm": "Wipe Listings",
        "wipeListingsDesc": "This deletes every active Revy listing on the exchange. Player listings, fulfilled-order history, and Revy's Solari balance are untouched. The next list tick will repopulate listings from the catalog.",
        "wipeListingsTitle": "Wipe all bot listings?"
      },
      "botSectionsLabel": "Bot sections",
      "config": "Config",
      "configEditor": {
        "buyThreshold": "Buy threshold",
        "buyThresholdDesc": "buys a listing only when its price is at or below this % of the bot's reference price. 100% = match or below · 70% = 30%+ discount required · 110% = up to 10% above bot price.",
        "buyThresholdHint": "{{pct}}% of bot's reference price",
        "buyTickHint": "e.g. 5m",
        "buyTickInterval": "Buy tick interval",
        "configSaved": "Config saved — changes apply on next tick",
        "gradeFlawless": "Flawless",
        "gradeMasterwork": "Masterwork",
        "gradeMultipliers": "Grade Multipliers",
        "gradeMultipliersDesc": "Scales the listing price by quality grade. Grade 0 (Standard) is the base and should stay at 1.0.",
        "gradePristine": "Pristine",
        "gradeRefined": "Refined",
        "gradeStandard": "Standard",
        "gradeSuperior": "Superior",
        "limits": "Limits",
        "limitsDesc": "Controls how many items the bot buys and lists each tick.",
        "listingsPerGrade": "Listings per grade",
        "listingsPerGradeDesc": "active listings maintained per item per quality grade (0 = Standard … 5 = Flawless). Stackables use grade 0 only. Example: 5 × 6 grades = up to 30 listings per gradeable item.",
        "listingsPerGradeHint": "per item per quality level",
        "listTickHint": "e.g. 30m, 1h",
        "listTickInterval": "List tick interval",
        "maxBuysPerTick": "Max buys per tick",
        "rarityMultipliers": "Rarity Multipliers",
        "rarityMultipliersDesc": "Applies to items with no NPC vendor price and to crafted Unique/Memento gear. Keyed by rarity; Common (1.0) is the baseline. Grade multipliers stack on top.",
        "tickIntervals": "Tick Intervals",
        "vendorMultipliers": "Vendor Multipliers",
        "vendorMultipliersDesc": "Applies to items that have an NPC vendor price (most items). Listing price = vendor price × this multiplier, keyed by rarity. Only one of Vendor or Rarity applies to a given item."
      },
      "configUnavailable": "Config unavailable.",
      "disabledItems": {
        "ariaLabel": "Disabled items",
        "columns": {
          "name": "Name",
          "templateId": "Template ID"
        },
        "disabledItemsCount_one": "Disabled Items ({{count}})",
        "disabledItemsCount_other": "Disabled Items ({{count}})",
        "disabledItemsHeading": "Disabled Items",
        "noDisabledItems": "No items are currently disabled.",
        "noMatchingItems": "No matching items found.",
        "searchAriaLabel": "Search disabled items",
        "searchLabel": "Search items to disable",
        "searchPlaceholder": "Search by name or template ID…"
      },
      "disabledItemsTab": "Disabled Items",
      "log": {
        "autoScroll": "Auto-scroll",
        "backendUnreachable": "Could not reach backend — check that it is running.",
        "clear": "Clear",
        "connClosed": "Connection closed (code {{code}})",
        "connClosedReason": "Connection closed (code {{code}}): {{reason}}",
        "connect": "Connect",
        "connected": "● connected",
        "connecting": "◌ connecting…",
        "connectingState": "Connecting…",
        "error": "✕ error",
        "idle": "○ disconnected",
        "notAvailable": "Log streaming not available",
        "stop": "Stop",
        "waitingForLines": "Waiting for log lines…",
        "wsError": "WebSocket connection failed — the log stream was interrupted."
      },
      "logs": "Logs",
      "panelTitle": "Bot Control — Revy",
      "reloadConfig": "Reload Config",
      "reset": "Reset",
      "saveConfig": "Save Config",
      "server": "Server",
      "serverConfig": {
        "cacheDb": "Cache DB",
        "changesNote": "Changes require a server restart to take effect.",
        "embeddedBot": "Embedded Bot",
        "enableEmbedded": "Enable embedded bot",
        "itemData": "Item data",
        "loadFailed": "Failed to load server config",
        "remoteBot": "Remote Bot",
        "remoteToken": "Remote token",
        "remoteUrl": "Remote URL",
        "restartRequired": "(restart required)",
        "savedConfig": "Server config saved — restart required to apply changes",
        "saveFailed": "Save failed: {{message}}",
        "statePath": "State path"
      },
      "status": {
        "balance": "Balance",
        "errors": "Errors",
        "label": "Status",
        "lastBuyTick": "Last Buy Tick",
        "lastListTick": "Last List Tick",
        "listings": "Listings",
        "nextBuyTick": "Next Buy Tick",
        "nextListTick": "Next List Tick",
        "paused": "⏸ Paused",
        "running": "● Running",
        "uptime": "Uptime"
      },
      "tickingEnabled": "Ticking enabled"
    },
    "botControl": "Bot Control",
    "itemDetail": {
      "activeListings": "Active Listings",
      "armorStats": "Armor Stats",
      "armorValue": "Armor Value",
      "armorValueByQuality": "Armor Value by Quality",
      "botStock": "Bot Stock",
      "category": "Category",
      "damageMultiplierByQuality": "Damage multiplier by quality",
      "itemInfo": "Item Info",
      "listingsLabel": "Listings",
      "lowestPrice": "Lowest Price",
      "noActiveListings": "No active listings.",
      "priceCol": "Price",
      "rarityLabel": "Rarity",
      "resistances": "Resistances",
      "seller": "Seller",
      "stockCol": "Stock",
      "tierLabel": "Tier",
      "totalStock": "Total Stock",
      "weaponQualityScaling": "Weapon Quality Scaling"
    },
    "noBotConnected": "No market bot connected — enable the built-in bot to manage it here",
    "search": {
      "allSellers": "All sellers",
      "ariaLabel": "Search items",
      "botOnly": "Bot only",
      "clearFilters": "Clear",
      "playersOnly": "Players only",
      "searchPlaceholder": "Search items...",
      "sellerAriaLabel": "Filter by seller"
    },
    "sidebar": {
      "allItems": "All Items",
      "categories": "Categories",
      "collapseAriaLabel": "Collapse sidebar",
      "expandAriaLabel": "Expand sidebar",
      "schematics": "Schematics"
    },
    "subtitle": "Browse active exchange listings from bot and player sellers.",
    "table": {
      "ariaLabel": "Market items",
      "botStock": "Bot Stock",
      "category": "Category",
      "grade": "Grade",
      "item": "Item",
      "listings": "Listings",
      "lowestPrice": "Lowest Price",
      "noItemsFound": "No items found.",
      "rarity": "Rarity",
      "stock": "Stock",
      "tier": "Tier"
    },
    "title": "Market Board"
  },
  "nav": {
    "director": "Director",
    "landsraad": "Landsraad",
    "guilds": "Guilds",
    "bases": "Bases",
    "battlegroup": "Server Health",
    "blueprints": "Blueprints",
    "database": "Database",
    "groups": {
      "economy": "Economy",
      "operations": "Operations",
      "playerWorld": "Player World"
    },
    "liveMap": "Live Map",
    "logs": "Logs",
    "market": "Market Bot",
    "players": "Players",
    "server": "Server Settings",
    "storage": "Storage",
    "welcome": "Welcome Kits"
  },
  "players": {
    "actions": {
      "admin": {
        "characterExport": "Character Export",
        "characterExportDesc": "Download character data as JSON",
        "confirmReset": "Confirm Reset",
        "confirmWipe": "Confirm Wipe",
        "delete": "Delete",
        "deleteTutorials": "Delete Tutorials",
        "deleteTutorialsConfirmDesc": "This will remove all tutorial completion records for {{player}}.",
        "deleteTutorialsDesc": "Removes all tutorial completion records",
        "deleteTutorialsTitle": "Delete tutorials?",
        "destructive": "Destructive Live Actions",
        "destructiveDesc": "Irreversible — player must be online.",
        "dismiss": "Dismiss",
        "dismissReturning": "Dismiss Returning Player Popup",
        "dismissReturningDesc": "Marks the award as claimed so the login popup stops appearing",
        "downloadExport": "Download",
        "exportDownloaded": "Export downloaded",
        "kick": "Kick",
        "kickDesc": "Disconnects the player from the server",
        "kickPlayer": "Kick Player",
        "liveActions": "Live Actions",
        "liveActionsDesc": "RabbitMQ commands — player must be online.",
        "loadingPlayers": "Loading players…",
        "manageLocations": "Manage Locations",
        "manageLocationsModal": {
          "addHint": "Enter a name and coordinates, then Save. Saving an existing name updates its coordinates. Leave Z blank for ground level (0).",
          "addSection": "Add / Update Location",
          "delete": "Delete",
          "done": "Done",
          "nameLabel": "Name",
          "namePlaceholder": "e.g. Windsack",
          "noLocations": "No locations yet — add one above.",
          "save": "Save",
          "title": "Manage Locations"
        },
        "mapPickerModal": {
          "cancel": "Cancel",
          "confirm": "Use These Coordinates",
          "hint": "Click anywhere on Hagga Basin to capture X/Y. Z defaults to {{z}} — adjust manually if needed.",
          "selected": "Selected:",
          "title": "Pick Location on Map"
        },
        "move": "Move",
        "moveToXyz": "Move to XYZ",
        "persistent": "Persistent",
        "pickOnMap": "Pick on Map",
        "pickTarget": "Pick a target…",
        "positionReadFailed": "Could not read player position",
        "resetActions": "Reset Actions",
        "resetProgression": "Reset Progression",
        "resetProgressionConfirmDesc": "This will wipe XP, skills, and journey progress for {{player}}. This action cannot be undone.",
        "resetProgressionDesc": "Wipes XP, skills and journey for the player",
        "resetProgressionTitle": "Reset progression permanently?",
        "selectSpawnLocation": "Select spawn location…",
        "selectTargetLabel": "Target player",
        "selectVehicle": "Select vehicle…",
        "spawn": "Spawn",
        "spawnLocationLabel": "Spawn location",
        "spawnVehicle": "Spawn Vehicle",
        "spawnVehicleDesc": "Player must be online. Spawns at the chosen partition location.",
        "teleport": "Teleport",
        "teleportNote": "Live if online · written to DB if offline",
        "teleportPlaceholder": "Select location...",
        "teleportToPlayer": "Teleport to Player",
        "templateLabel": "Template",
        "useCurrent": "Use Current",
        "vehicleLabel": "Vehicle type",
        "whisper": "Whisper",
        "whisperFrom": "From:",
        "whisperSent": "Whisper sent to {{player}}",
        "wipe": "Wipe",
        "wipeCodex": "Wipe Codex",
        "wipeCodexConfirmDesc": "This will clear all codex discoveries for {{player}}.",
        "wipeCodexDesc": "Clears all codex discoveries",
        "wipeCodexTitle": "Wipe codex?",
        "wipeInventory": "Wipe Inventory",
        "wipeInventoryConfirmDesc": "This will destroy all items in {{player}}'s inventory. This action cannot be undone.",
        "wipeInventoryDesc": "Destroys all items in the player's inventory",
        "wipeInventoryTitle": "Wipe inventory permanently?"
      },
      "contracts": {
        "applyContracts_one": "Apply Contract(s) ({{count}})",
        "applyContracts_other": "Apply Contract(s) ({{count}})",
        "clearAll": "clear all",
        "count_one": "{{count}} contracts",
        "count_other": "{{count}} contracts",
        "desc": "Applies the contract's AddedFlagsOnCompletion tags + tier-promotion side effects. Multi-select supported.",
        "filterLabel": "Filter contracts",
        "filterPlaceholder": "Filter contracts (e.g. Trainer_Mentat, Atre_Rank01)...",
        "loadFailed": "load failed: {{error}} — restart the server",
        "loadingContracts": "loading…",
        "noMatching": "No matching contracts",
        "reverseContracts_one": "Reverse Contract(s) ({{count}})",
        "reverseContracts_other": "Reverse Contract(s) ({{count}})",
        "tagCount_one": "{{count}} tag",
        "tagCount_other": "{{count}} tag",
        "tagCountPlural_one": "{{count}} tags",
        "tagCountPlural_other": "{{count}} tags",
        "title": "Complete Contract(s)"
      },
      "experimental": {
        "confirmRun": "Confirm Run",
        "customScript": "CheatScript — Custom",
        "customScriptDesc": "Try any script name or console command.",
        "customScriptLabel": "Custom script name",
        "customScriptPlaceholder": "Script / command name…",
        "knownScripts": "CheatScript — Known Scripts",
        "knownScriptsDesc": "Named scripts defined in DefaultGame.ini. Fire-and-forget.",
        "run": "Run",
        "runTitle": "Run {{label}}?",
        "scripts": {
          "AwardPlayerXP": "Award Player XP",
          "AwardPlayerXPDesc": "Awards 10,000 Combat + 10,000 Exploration + 10,000 Science XP",
          "LeaveMeAlone": "Leave Me Alone",
          "LeaveMeAloneDesc": "Destroys all NPCs, clears encounters + sandstorms, disables sandworm (server-wide)",
          "PlaytestSetup": "Playtest Setup",
          "PlaytestSetupAdmin": "Playtest Setup (Admin)",
          "PlaytestSetupAdminDesc": "⚠ DESTRUCTIVE — same as Playtest Setup but uses raw template names",
          "PlaytestSetupDesc": "⚠ DESTRUCTIVE — ResetProgression + CleanInventory, then full gear kit",
          "UnlockAllAbilities": "Unlock All Abilities",
          "UnlockAllAbilitiesDesc": "Sets all ability modules to level 1",
          "UnlockAllSkills": "Unlock All Skills",
          "UnlockAllSkillsDesc": "Sets all skill tree modules to level 1"
        },
        "try": "Try",
        "warning": "⚠ Experimental — these commands are sent via RabbitMQ but their effects are unverified. Use on test characters only."
      },
      "history": {
        "columns": {
          "difficulty": "Difficulty",
          "dungeon": "Dungeon",
          "duration": "Duration",
          "eventType": "Event Type",
          "location": "Location",
          "map": "Map",
          "partySize": "Party Size",
          "time": "Time"
        },
        "dungeonLabel": "Dungeon records",
        "dungeonRecords": "Dungeon Records",
        "gameEvents": "Game Events",
        "gameEventsLabel": "Game events",
        "noDungeons": "No dungeon records",
        "noEvents": "No events"
      },
      "journey": {
        "columns": {
          "done": "Done",
          "nodeId": "Node ID",
          "revealed": "Revealed",
          "reward": "Reward"
        },
        "complete": "Complete",
        "filterPlaceholder": "Filter nodes...",
        "journeyLabel": "Journey nodes",
        "noMatching": "No matching nodes",
        "noNodes": "No journey nodes found",
        "redo": "↻ Re-do",
        "reset": "Reset",
        "title": "Journey Nodes",
        "wipeAll": "Wipe All",
        "wipeAllDesc": "This will delete all journey progress for {{player}}. This action cannot be undone.",
        "wipeAllTitle": "Wipe all journey nodes?"
      },
      "progression": {
        "apply": "Apply",
        "applyUnlock": "Apply Unlock",
        "loadingPresets": "Loading…",
        "mainQuestLabel": "Main quest",
        "nodes_one": "{{count}} nodes",
        "nodes_other": "{{count}} nodes",
        "noPresets": "No presets available",
        "presets": {
          "a_new_beginning": {
            "desc": "Main story intro — crafting Stillsuit, harvesting resources, fabricator research. Unlocks early game.",
            "name": "Complete: A New Beginning"
          },
          "act1_complete": {
            "desc": "A New Beginning + Find the Fremen combined. Player starts ready for Act 2.",
            "name": "Complete: All of Act 1"
          },
          "deep_desert_intro": {
            "desc": "Completes the Deep Desert side quest chain.",
            "name": "Skip: Deep Desert Intro"
          },
          "find_the_fremen": {
            "desc": "All 7 trials, the Sietch, and Epilogue. Unlocks the Fremkit (Stillsuit, Thumper, Cryss Knife, etc.) and completes Act 1.",
            "name": "Complete: Find the Fremen (Trials of Aql)"
          },
          "overland_intro": {
            "desc": "Completes the Overland map side quest chain (Hark Landsraad missions, keystones).",
            "name": "Skip: Overland Map Intro"
          },
          "skip_npe": {
            "desc": "Marks the tutorial/NPE as complete. Useful for experienced players who don't need the intro.",
            "name": "Skip NPE (New Player Experience)"
          },
          "taxation_intro": {
            "desc": "Completes the exchange/travel tutorial chain.",
            "name": "Skip: Taxation / Exchange Tutorial"
          },
          "unlock_all_lore": {
            "desc": "Reveals all Dunipedia entries: Known Universe, Landmarks, Manual of the Friendly Desert, War for Arrakis.",
            "name": "Unlock All Lore (Dunipedia)"
          },
          "vermillius_intro": {
            "desc": "Completes all Vermillius Gap tutorial quests (research, crafting, exploration). No tag side effects — pure tutorial skip.",
            "name": "Skip: Vermillius Gap Tutorials"
          }
        },
        "progressionUnlock": "Progression Unlock",
        "progressionUnlockDesc": "Completes DA_FQ_ClimbTheRanks journey nodes and writes faction tier tags.",
        "quickPresets": "Quick Presets",
        "quickPresetsDesc": "Curated bundles that complete one or more root journey nodes and cascade to all children + tags.",
        "resetSkillTree": "Reset Skill Tree",
        "resetSkillTreeDesc": "This will wipe the full {{trainer}} job skill tree for {{player}}.",
        "resetSkillTreeTitle": "Reset {{trainer}} skill tree?",
        "reverseUnlock": "Reverse Unlock",
        "reverseUnlockDesc": "This will undo the {{preset}} preset for {{faction}} and remove associated tags from {{player}}.",
        "reverseUnlockTitle": "Reverse progression unlock?",
        "trainerLabel": "Trainer",
        "unlockMainQuest": "Unlock Main Quest",
        "unlockMainQuestDesc": "Flips every DA_MQ_<name>.* journey row complete and applies the m_TagsToAdd union.",
        "unlockTrainer": "Unlock Trainer",
        "unlockTrainerDesc": "Completes every Trainer_X_* contract and grants the full job skill tree."
      },
      "resources": {
        "award": "Award",
        "awardCharXP": "Award Char XP",
        "awardIntel": "Award Intel",
        "characterXP": "Character XP",
        "charXPNote": "Max 344,440 (level 200) · live if online, DB if offline",
        "currencyResources": "Currency & Resources",
        "currentXP": "Current: {{xp}} XP — Level {{level}} / 200",
        "faction": "Faction",
        "factionReputation": "Faction Reputation",
        "fill": "Fill",
        "fillWater": "Fill Water",
        "fillWaterNote": "Fills all water containers to max (player must be online)",
        "give": "Give",
        "giveCurrency": "Give Currency",
        "giveScrip": "Give Scrip",
        "liveActions": "Live Actions",
        "liveActionsNote": "Player must be online.",
        "reputation": "Reputation",
        "reputationNote": "Adds to current, max 12,474",
        "selectModule": "Select module…",
        "set": "Set",
        "setSkillModule": "Set Skill Module",
        "skillModules": "Skill modules",
        "skillPoints": "Skill Points",
        "skillPointsNote": "Sets unspent points"
      },
      "sections": {
        "admin": "Admin",
        "contracts": "Contracts",
        "experimental": "Experimental",
        "history": "History",
        "journey": "Journey",
        "progression": "Progression",
        "resources": "Stats",
        "specs": "Specs",
        "tags": "Tags"
      },
      "specs": {
        "columns": {
          "level": "Level",
          "track": "Track",
          "xp": "XP"
        },
        "grantMax": "Grant Max",
        "grantMaxKeystones": "Grant Max Keystones",
        "onlineWarning": "⚠ Player is online — XP changes may not take effect until they reconnect",
        "resetAllKeystones": "Reset All Keystones",
        "resetKeystonesDesc": "This will remove all granted keystones for {{player}}. This action cannot be undone.",
        "resetKeystonesTitle": "Reset all keystones?",
        "resetSpec": "Reset Spec",
        "resetSpecDesc": "This will wipe all XP and levels for the {{track}} specialization track.",
        "resetSpecTitle": "Reset {{track}} spec?",
        "specializations": "Specializations",
        "specsLabel": "Specializations"
      },
      "tags": {
        "activeTags_one": "Active Tags ({{count}})",
        "activeTags_other": "Active Tags ({{count}})",
        "activeTagsLabel": "Active tags",
        "addCount_one": "Add ({{count}})",
        "addCount_other": "Add ({{count}})",
        "addTags": "Add Tags",
        "filterPlaceholder": "Filter to remove…",
        "noTags": "No tags",
        "removedTag": "Removed tag",
        "searchPlaceholder": "Search tags…",
        "tagColumn": "Tag"
      }
    },
    "dashboard": {
      "activityTrend": "Activity — last {{days}} days",
      "avgLevel": "Avg character level",
      "avgLevelCol": "Avg level",
      "byFaction": "By faction",
      "byMap": "Players by map",
      "econPctCol": "% econ",
      "factionCol": "Faction",
      "growthApprox": "Approximate — from online snapshots",
      "growthTitle": "Faction growth",
      "metricLevel": "Avg level",
      "metricSolaris": "Solaris",
      "navLabel": "Server Overview",
      "noPlayers": "No players yet",
      "online": "Online now",
      "playersCol": "Players",
      "scripCol": "Scrip",
      "sessions": "Sessions",
      "solarisCol": "Solaris",
      "subtitle": "Server-wide player stats and trends",
      "title": "Server Overview",
      "totalPlayers": "Total players",
      "totalPlaytime": "Total playtime",
      "totalScrip": "Total Scrip",
      "totalSolaris": "Total Solaris"
    },
    "detail": {
      "avgSession": "Avg",
      "charXP": "Char XP",
      "earned": "Earned",
      "economy": "Economy",
      "factionAlignment": "Faction Alignment",
      "unaligned": "Unaligned",
      "factionTier": "Faction tier",
      "failedToLoad": "Failed to load stats.",
      "lastSeen": "Last seen",
      "milestones": "Milestones",
      "playtime": "Playtime",
      "pois": "POIs",
      "progression": "Progression",
      "scrip": "Scrip",
      "sessionCount": "Count",
      "sessionHistory": "Session History",
      "sessionHistoryEmpty": "Session data accumulates as players log in. The tracker polls every 5 minutes.",
      "sessions": "Sessions",
      "skillPts": "Skill pts",
      "solaris": "Solaris",
      "solarisBalance": "Balance",
      "solarisHistory": "Solaris History",
      "solarisHistoryEmpty": "Solaris snapshots are written every 5 minutes while players are online.",
      "spent": "Spent",
      "tier": "Tier {{tier}}",
      "xpCharXP": "Char XP",
      "xpCombat": "Combat",
      "xpCrafting": "Crafting",
      "xpExploration": "Exploration",
      "xpGathering": "Gathering",
      "xpHistory": "XP History",
      "xpHistoryEmpty": "XP snapshots are written every 5 minutes while players are online.",
      "xpSabotage": "Sabotage"
    },
    "give": {
      "add": "Add",
      "gave": "✓ Gave:",
      "gaveItems_one": "Gave {{count}} item to {{player}}",
      "gaveItems_other": "Gave {{count}} items to {{player}}",
      "giveCount_one": "Give {{count}} Item",
      "giveCount_other": "Give {{count}} Items",
      "loadPack": "Load Pack…",
      "managePacks": "Manage Packs",
      "modalTitle": "{{name}} — Give Items",
      "qty": "Qty",
      "quality": "Quality",
      "searchTemplates": "Search templates...",
      "selectTemplate": "Select a template",
      "skipped": "✕ Skipped {{template}}: {{reason}}"
    },
    "givePacks": {
      "addItem": "Add Item",
      "addPack": "Add Pack",
      "category": "Category",
      "deletePack": "Delete pack",
      "duplicateId": "A pack with that ID already exists.",
      "editingPack": "Editing Pack",
      "newPack": "New Pack",
      "noItemsYet": "No items in this pack yet.",
      "noPacks": "No packs yet — add one above.",
      "noPackSelected": "Select a pack to edit its items.",
      "packId": "ID",
      "packName": "Name",
      "removeItem": "Remove item",
      "save": "Save Packs",
      "saved": "Packs saved",
      "saveFailed": "Failed to save packs: {{message}}",
      "searchTemplates": "Search item templates…",
      "tier": "Tier",
      "title": "Manage Give-Items Packs",
      "updatePack": "Update Pack"
    },
    "inventory": {
      "columns": {
        "durability": "Durability",
        "quality": "Quality",
        "stack": "Stack",
        "template": "Template"
      },
      "deleteOnlineWarning": "Player is online — deleting items may cause inventory desyncs. Continue?",
      "itemDeleted": "Item deleted",
      "itemsLabel": "Items",
      "noItemsFound": "No items found",
      "repair": "Repair",
      "repaired": "Repaired {{name}}",
      "repairGear": "Repair gear",
      "repairGearDone": "Repaired {{repaired}} of {{scanned}} gear pieces — relog to see in-game",
      "repairGearNone": "No gear needed repair ({{scanned}} items scanned)",
      "repairNotice": "Durability changes are written to the DB. Player must relog to see updated values in-game.",
      "title": "Inventory"
    },
    "searchLabel": "Search players",
    "searchPlaceholder": "Filter players...",
    "tabs": {
      "actions": "Actions",
      "give": "Give",
      "inventory": "Inventory",
      "overview": "Overview",
      "vehicles": "Vehicles"
    },
    "title": "Players",
    "vehicles": {
      "backup": "Backup",
      "columns": {
        "chassis": "Chassis",
        "class": "Class",
        "location": "Location",
        "name": "Name",
        "type": "Type"
      },
      "noVehiclesFound": "No vehicles found",
      "recovered": "Recovered",
      "refuel": "Refuel",
      "refuelDone": "Refueled {{label}} — relog to see in-game",
      "repair": "Repair",
      "repairDone": "Repaired {{repaired}} modules on {{label}} — relog to see in-game",
      "repairNone": "No modules found on {{label}}",
      "repairNotice": "Vehicle repairs require a server restart to take effect in-game.",
      "repairPartial": "Repaired {{repaired}} of {{total}} modules on {{label}} ({{skipped}} skipped) — relog to see in-game",
      "vehiclesLabel": "Vehicles"
    }
  },
  "server": {
    "advancedCategories": "Advanced",
    "advancedCategoriesDesc": "Click a category to expand it in place. Click again or pick another to switch.",
    "collapse": "Cancel",
    "collapseCategory": "Collapse category",
    "collapseSection": "Collapse section",
    "commonSettings": "Common Settings",
    "commonSettingsDesc": "The dozen or so knobs admins reach for most often. Everything else lives in the categories below.",
    "deleteFailed": "Delete failed: {{message}}",
    "iniNotFound": "Could not locate server INI files: {{error}}. For kubectl, ensure the game server PVC is mounted. For docker/local, add server_ini_dir to ~/.dune-admin/config.yaml.",
    "loading": "Loading settings…",
    "noMatchSettings": "No settings match \"{{query}}\".",
    "overriddenCount_one": "{{count}} overridden",
    "overriddenCount_other": "{{count}} overridden",
    "rawIniDesc": "Array entries (+key=val) and unrecognised keys, grouped by INI section.",
    "rawIniSections": "Raw INI Sections",
    "rawPlaceholder": "Key=Value or +Key=Value for array entries",
    "removedFrom": "Removed from {{file}}",
    "save": "Save",
    "savedTo": "Saved to {{file}}",
    "saveFailed": "Save failed: {{message}}",
    "saveWithCount_one": "Save ({{count}})",
    "saveWithCount_other": "Save ({{count}})",
    "searchLabel": "Search settings",
    "searchPlaceholder": "Search settings…",
    "settingCount_one_one": "{{count}} setting",
    "settingCount_one_other": "{{count}} setting",
    "settingCount_other_one": "{{count}} settings",
    "settingCount_other_other": "{{count}} settings",
    "showAll": "All",
    "showAllAriaLabel": "Showing all settings — click to show user settings only",
    "showUser": "User",
    "showUserAriaLabel": "Showing user settings only — click to show all",
    "title": "Server Settings",
    "unsaved": "unsaved",
    "userOverride": "· user override",
    "expertCategories": "Expert",
    "expertCategoriesDesc": "Engine and system internals. Change these only if you know exactly what you're doing.",
    "ampManagedTooltip": "Managed via the AMP API — applied on the next server restart",
    "removeFrom": "Remove from {{file}}"
  },
  "settings": {
    "adv": {
      "applyReload": "Apply & Reload",
      "backendUrlHint": "Only needed when the UI is served from a different host (SSH tunnel, CDN). Leave blank for single-binary setup.",
      "backupDir": "Backup directory",
      "defaultIniDir": "Default INI directory",
      "defaultIniDirHint": "DefaultGame.ini base layer",
      "directorUrl": "Director URL",
      "directorUrlHint": "proxied at /director/",
      "listenAddr": "Listen address",
      "listenAddrHint": "⚠ restart required",
      "reset": "Reset",
      "scripCurrency": "Scrip currency ID",
      "serverIniDir": "Server INI directory",
      "serverIniDirHint": "UserGame.ini location",
      "url": "URL",
      "urlHint": "stored in browser, not server"
    },
    "amp": {
      "containerName": "Container name",
      "containerNameHint": "default: AMP_<instance>",
      "dataRoot": "Data root",
      "instanceName": "Instance name",
      "logPath": "Log path",
      "useContainer": "Use container (podman exec)",
      "useContainerHint": "Disable to run on host as the AMP user directly.",
      "user": "AMP user",
      "apiUser": "AMP API user",
      "apiPassword": "AMP API password",
      "apiPort": "AMP API port",
      "apiHint": "AMP Web API login. Lets dune-admin manage server settings under AMP so they survive restarts. Default port 8081."
    },
    "broker": {
      "adminAddr": "Admin addr",
      "execPrefix": "Exec prefix",
      "execPrefixHint": "when broker is inside a container",
      "gameAddr": "Game addr",
      "jwtSecret": "JWT secret",
      "jwtSecretHint": "blank = built-in default",
      "optionalHint": "Enables capture and notifications when configured.",
      "password": "Password",
      "user": "User",
      "useTls": "Use TLS (amqps://)"
    },
    "cmd": {
      "restart": "Restart",
      "start": "Start",
      "status": "Status",
      "stop": "Stop"
    },
    "configSaved": "Config saved — applying settings…",
    "control": {
      "amp": "amp — CubeCoders AMP",
      "docker": "docker — Docker containers",
      "kubectl": "kubectl — Kubernetes / k3s",
      "local": "local — bare metal / LGSM / shell",
      "modeHint": "How dune-admin manages the game server",
      "selectMode": "Select a control mode above to see mode-specific settings."
    },
    "db": {
      "host": "Host",
      "hostHint": "127.0.0.1 over SSH tunnel",
      "name": "Database name",
      "password": "Password",
      "passwordHint": "send placeholder to keep existing",
      "port": "Port",
      "schema": "Schema",
      "user": "User"
    },
    "docker": {
      "brokerAdmin": "Broker (admin)",
      "brokerGame": "Broker (game)",
      "database": "Database",
      "gameServer": "Game server"
    },
    "k8s": {
      "namespace": "Namespace",
      "namespaceHint": "blank = auto-discover"
    },
    "loadFailed": "Could not load config: {{message}}",
    "loadingConfig": "Loading config…",
    "saveFailed": "Save failed: {{message}}",
    "sections": {
      "amp": "CubeCoders AMP",
      "backendUrlOverride": "Backend URL Override",
      "controlPlane": "Control Plane",
      "database": "Database",
      "dockerContainers": "Docker containers",
      "kubernetes": "Kubernetes",
      "paths": "Paths",
      "rabbitmq": "RabbitMQ (optional)",
      "server": "Server",
      "serverCommands": "Server commands",
      "ssh": "SSH (leave blank for local)"
    },
    "ssh": {
      "hostPort": "Host : port",
      "hostPortHint": "enables SSH tunnel for all DB + exec",
      "privateKey": "Private key path",
      "privateKeyHint": "absolute path, blank = auto-detect",
      "user": "User"
    },
    "tabs": {
      "advanced": "Advanced",
      "broker": "Broker",
      "connection": "Connection",
      "control": "Control"
    }
  },
  "storage": {
    "addItems": "Add Items",
    "addModal": {
      "add": "Add",
      "qtyColLabel": "Qty",
      "qtyLabel": "Qty",
      "qualityColLabel": "Quality",
      "qualityLabel": "Quality",
      "searchPlaceholder": "Search templates...",
      "selectTemplate": "Select a template",
      "templateLabel": "Template"
    },
    "ariaLabel": "Container items",
    "columns": {
      "durability": "Durability",
      "id": "ID",
      "quality": "Quality",
      "stack": "Stack",
      "template": "Template"
    },
    "containerEmpty": "Container is empty",
    "containersTitle_one": "Containers ({{count}})",
    "containersTitle_other": "Containers ({{count}})",
    "containerTitle": "Container #{{id}}",
    "itemRemoved": "Item removed",
    "ownerLabel": "Owner: {{name}}",
    "remove": "Remove",
    "searchLabel": "Search containers",
    "searchPlaceholder": "Search...",
    "selectContainer": "Select a container to view its contents",
    "warningText": "Items added to or removed from storage containers require a server zone restart to become visible to other players."
  },
  "welcome": {
    "activeVersionGranted": "ACTIVE VERSION(S) (GRANTED)",
    "addItem": "Add Item",
    "addVersion": "Add Version",
    "columns": {
      "character": "Character",
      "error": "Error",
      "flsId": "FLS ID",
      "status": "Status",
      "tries": "Tries",
      "updated": "Updated",
      "version": "Version"
    },
    "configSubtitle": "Enable grants, set active packages and configure the welcome message.",
    "editingVersion": "Editing version",
    "enabledHint": "— grants the active package to online players who haven't received that version.",
    "enabledLabel": "Enabled",
    "failedToLoad": "Failed to load welcome package: {{message}}",
    "grantsLabel": "Welcome package grants",
    "grantsTitle_one": "Grant History ({{count}})",
    "grantsTitle_other": "Grant History ({{count}})",
    "message": {
      "enabledHint": "Sent once per player per active version via the GM persona. Tracked in the grants ledger.",
      "enabledLabel": "Send whisper to new players on first login",
      "messageLabel": "Message",
      "messagePlaceholder": "Welcome to the server! Enjoy your starter pack.",
      "senderLabel": "Sender FLS ID (optional)",
      "senderPlaceholder": "Leave blank to use the seeded GM persona",
      "title": "Welcome Message"
    },
    "newVersionLabel": "New version name",
    "newVersionPlaceholder": "e.g. v2 or season2",
    "noGrants": "No grants yet.",
    "noItemsYet": "No items in this version yet.",
    "noPackageSelected": "No package selected. Add a version to start.",
    "packagesSubtitle": "Build and manage item packages. Each version can be granted independently.",
    "removeItem": "Remove item",
    "retry": "Retry",
    "retryCleared": "Cleared — will re-attempt on the next scan",
    "retryFailed": "Retry failed: {{message}}",
    "runFailed": "Run failed: {{message}}",
    "runNow": "Run Now",
    "saveConfig": "Save Config",
    "savedDisabled": "Welcome package saved (disabled)",
    "savedEnabled": "Enabled — granting \"{{version}}\" within one scan tick",
    "saveFailed": "Save failed: {{message}}",
    "scanComplete": "Scan complete — granted {{granted}}, failed {{failed}}, skipped {{skipped}}",
    "scanInterval": "Scan interval (seconds)",
    "sections": {
      "config": "Configuration",
      "grants": "Grants",
      "packages": "Packages"
    },
    "title": "Welcome Kits",
    "revoke": "Revoke",
    "revoked": "Grant revoked — the package can be granted again",
    "revokeFailed": "Revoke failed: {{message}}",
    "motd": {
      "enabledHint": "Whispered via the GM persona on each join (every session, not just the first). Use {player} for the player's name.",
      "enabledLabel": "Send a message to players every time they join",
      "messageLabel": "Message",
      "messagePlaceholder": "Welcome back, {player}! Check the Discord for events.",
      "senderLabel": "Sender FLS ID (optional)",
      "senderPlaceholder": "Leave blank to use the seeded GM persona",
      "title": "Message of the Day"
    },
    "runConfirmTitle": "Grant welcome package now?",
    "runConfirmBody": "This grants package(s) {{versions}} to all eligible online players right now. Continue?"
  }
}
