Default messages.yml

Last updated Oct 28, 2026

Default messages.yml

Shipped defaults from SoapsAdmin 1.7.7. After first run, this file lives in plugins/SoapsAdmin/.

Updating the jar does not overwrite your live copy. Use this page to compare or reset.

See also: Config Reference · Configuration

# Player-facing strings (MiniMessage). Placeholders: {key}
# Legacy & / § codes still work. Keys below match MessageUtil paths.

# --- general ---
general:
  prefix: "<gradient:#FF6B6B:#FFE66D>[SoapsAdmin]</gradient> "
  no-permission: "<red>No permission.</red>"
  player-not-found: "<red>Player <yellow>{player}</yellow> not found. They may need to have joined the server before.</red>"
  player-not-online: "<red>Player <yellow>{player}</yellow> is not online.</red>"
  players-only: "<red>This command can only be used by players.</red>"
  unknown-subcommand: "<red>Unknown subcommand. Use /sa help</red>"
  config-reloaded: "<green>Configuration reloaded.</green>"
  file-reloaded: "<green>{file} reloaded.</green>"
  reload-summary-header: "<green>Reload complete:</green>"
  reload-summary-item: " <dark_gray>•</dark_gray> <gray>{item}</gray>"
  confirm-queue-hint: "<gray>Type <yellow>confirm</yellow> in chat or run <yellow>/sa confirm</yellow> to proceed.</gray>"
  no-pending-confirm: "<red>No pending confirmation.</red>"
  invalid-number: "<red>Invalid number: <yellow>{value}</yellow></red>"
  invalid-world: "<red>Unknown world: <yellow>{world}</yellow></red>"
  invalid-duration: "<red>Invalid duration. Examples: 10m, 3h, 7d, 1w2d3h</red>"
  divider: "<gray><st>                                                  </st></gray>"
  action-cancelled: "<gray>Action cancelled.</gray>"
  cannot-target-self: "<red>You cannot target yourself.</red>"
  prompt: "<yellow>{prompt}</yellow>"
  error: "<red>That action failed. Check the console or try again.</red>"
  input-timeout: "<red>Input timed out. Try again.</red>"
  cancel-prompt: "<dark_gray>Type <yellow>cancel</yellow> to stop.</dark_gray>"
  module-disabled: "<red>This feature is disabled.</red>"

platform:
  paper-only-itemeditor: "<red>The item editor requires Paper. Use a Paper server for data-component editing.</red>"
  paper-only-fakeplayer: "<red>Fake player / mannequin tools require Paper.</red>"
# ==================== MODERATION ====================
moderation:
  immune: "<red>{player} is immune to moderation actions.</red>"
  kick:
    broadcast: "<yellow>{player}</yellow> was kicked by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>Kicked <yellow>{player}</yellow>. Case: <yellow>{case_id}</yellow></green>"
    screen: "<red><bold>You have been kicked.</bold></red>\n<gray>Reason: <white>{reason}</white></gray>"
  ban:
    broadcast: "<yellow>{player}</yellow> was banned by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>Banned <yellow>{player}</yellow>. Case: <yellow>{case_id}</yellow></green>"
    already-banned: "<red>{player} is already banned (Case: {case_id})</red>"
    screen: "<red><bold>You have been banned.</bold></red>\n<gray>Reason: <white>{reason}</white></gray>\n<gray>Expires: <white>{expires}</white></gray>"
  tempban:
    broadcast: "<yellow>{player}</yellow> was temp-banned for <yellow>{duration}</yellow> by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>Temp-banned <yellow>{player}</yellow> for <yellow>{duration}</yellow>. Case: <yellow>{case_id}</yellow></green>"
    already-banned: "<red>{player} is already banned (Case: {case_id})</red>"
  banip:
    broadcast: "<yellow>{player}</yellow> was IP-banned by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>IP-banned <yellow>{player}</yellow> (<yellow>{ip}</yellow>). Case: <yellow>{case_id}</yellow></green>"
    no-ip: "<red>Could not resolve IP address for <yellow>{player}</yellow>. The player must be online or have a known IP.</red>"
    invalid-ip: "<red>Invalid IP address.</red>"
    already-banned-ip: "<red>IP <yellow>{ip}</yellow> is already banned (Case: {case_id})</red>"
  tempipban:
    broadcast: "<yellow>{ip}</yellow> was temp IP-banned for <yellow>{duration}</yellow> by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>Temp IP-banned <yellow>{ip}</yellow> for <yellow>{duration}</yellow>. Case: <yellow>{case_id}</yellow></green>"
  unbanip:
    broadcast: "<yellow>{ip}</yellow> was unbanned by <yellow>{staff}</yellow>"
    success: "<green>Unbanned IP <yellow>{ip}</yellow>.</green>"
    not-banned: "<red>IP <yellow>{ip}</yellow> is not banned.</red>"
    failed: "<red>Could not unban IP <yellow>{ip}</yellow>.</red>"
  unban:
    broadcast: "<yellow>{player}</yellow> was unbanned by <yellow>{staff}</yellow>"
    success: "<green>Unbanned <yellow>{player}</yellow>.</green>"
    not-banned: "<red>{player} is not banned.</red>"
  mute:
    broadcast: "<yellow>{player}</yellow> was muted by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>Muted <yellow>{player}</yellow>. Case: <yellow>{case_id}</yellow></green>"
    already-muted: "<red>{player} is already muted (Case: {case_id})</red>"
    target-notify: "<red>You have been muted. Reason: <white>{reason}</white></red>"
  tempmute:
    broadcast: "<yellow>{player}</yellow> was temp-muted for <yellow>{duration}</yellow> by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}]</dark_gray>"
    success: "<green>Temp-muted <yellow>{player}</yellow> for <yellow>{duration}</yellow>. Case: <yellow>{case_id}</yellow></green>"
    already-muted: "<red>{player} is already muted (Case: {case_id})</red>"
    target-notify: "<red>You have been muted for <white>{duration}</white>. Reason: <white>{reason}</white></red>"
    title: "<red><bold>Muted</bold></red>"
    subtitle: "<gray>Expires in <white>{expires}</white></gray>"
    actionbar: "<red><bold>Muted</bold></red> <gray>({remaining} remaining)</gray>"
  unmute:
    broadcast: "<yellow>{player}</yellow> was unmuted by <yellow>{staff}</yellow>"
    success: "<green>Unmuted <yellow>{player}</yellow>.</green>"
    not-muted: "<red>{player} is not muted.</red>"
    target-notify: "<green>You have been unmuted.</green>"
  warn:
    broadcast: "<yellow>{player}</yellow> was warned by <yellow>{staff}</yellow><gray> - {reason}</gray> <dark_gray>[{case_id}] (#{total})</dark_gray>"
    success: "<green>Warned <yellow>{player}</yellow> (Total: <yellow>{total}</yellow>). Case: <yellow>{case_id}</yellow></green>"
    target-notify: "<red>You have been warned. Reason: <white>{reason}</white></red>"
    target-count: "<gray>You now have <yellow>{total}</yellow> warning(s).</gray>"
    no-warnings: "<gray>{player} has no active warnings.</gray>"
    list-header: "<yellow>{player}</yellow><gray>'s Warnings ({count}):</gray>"
    list-entry: "<hover:show_text:'<yellow>Case {case_id}</yellow><newline><white>{reason}</white><newline><gray>By {staff}, {time_ago}</gray>'> <dark_gray>[{case_id}]</dark_gray> <gray>{reason} <dark_gray>- by {staff} ({time_ago})</dark_gray></hover>"
    no-warnings-to-clear: "<gray>{player} has no active warnings to clear.</gray>"
    cleared: "<green>Cleared <yellow>{count}</yellow> warning(s) for <yellow>{player}</yellow>.</green>"
    cleared-case: "<green>Cleared warning <yellow>{case_id}</yellow> for <yellow>{player}</yellow>.</green>"
    case-not-found: "<red>No active warning found for case <yellow>{case_id}</yellow>.</red>"
    case-wrong-player: "<red>Case <yellow>{case_id}</yellow> does not belong to <yellow>{player}</yellow>.</red>"
  note:
    success: "<green>Note added to case <yellow>{case_id}</yellow> for <yellow>{player}</yellow>.</green>"
    no-history: "<gray>No prior punishments. Adding a note for <yellow>{player}</yellow>.</gray>"
    no-notes: "<gray>{player} has no notes.</gray>"
    list-header: "<yellow>{player}</yellow><gray>'s Notes ({count}):</gray>"
    list-entry: "<hover:show_text:'<yellow>Note #{id} · Case {case_id}</yellow><newline><white>{text}</white><newline><gray>By {staff}, {time_ago}</gray>'> <dark_gray>#{id}</dark_gray> <dark_gray>[{case_id}]</dark_gray> <gray>{text} <dark_gray>- by {staff} ({time_ago})</dark_gray></hover>"
    deleted: "<green>Deleted note <yellow>#{id}</yellow> for <yellow>{player}</yellow>.</green>"
    edited: "<green>Updated note <yellow>#{id}</yellow> for <yellow>{player}</yellow>.</green>"
    not-found: "<red>Note <yellow>#{id}</yellow> not found.</red>"
    invalid-id: "<red>Invalid note id.</red>"
  rollback:
    success: "<green>Rolled back <yellow>{type}</yellow> for <yellow>{player}</yellow> (Case: <yellow>{case_id}</yellow>).</green>"
    broadcast: "<yellow>{staff}</yellow> rolled back <yellow>{case_id}</yellow> ({type} on {player})"
    not-found: "<red>No punishment found with case ID: <yellow>{case_id}</yellow></red>"
    already-inactive: "<red>Punishment <yellow>{case_id}</yellow> is already inactive.</red>"
    failed: "<red>Failed to rollback punishment <yellow>{case_id}</yellow>.</red>"
  escalation:
    kick: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-kicked at <yellow>{total}</yellow> warnings."
    kick-offline: "<gold><bold>Escalation:</bold></gold> <yellow>{player}</yellow> reached <yellow>{total}</yellow> warnings (kick skipped; player offline)."
    tempmute: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-tempmuted (<yellow>{duration}</yellow>) at <yellow>{total}</yellow> warnings."
    tempban: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-tempbanned (<yellow>{duration}</yellow>) at <yellow>{total}</yellow> warnings."
    ban: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-banned at <yellow>{total}</yellow> warnings."
    mute: "<red><bold>Escalation:</bold></red> <yellow>{player}</yellow> auto-muted at <yellow>{total}</yellow> warnings."
  join-alert: "<gray>[Alert] <yellow>{player}</yellow> joined with: {details}</gray>"
  join-alert-mute: "<red>active mute</red> "
  join-alert-warns: "<gold>{count} warning(s)</gold>"
  chat-muted: "<red>You are muted.</red> <gray>Reason: <white>{reason}</white></gray>{remaining}"
  chat-muted-remaining: " <gray>({remaining} remaining)</gray>"
  muted-command-blocked: "<red>You are muted and cannot use this command.</red>"
  invalid-duration: "<red>Invalid duration. Examples: 10m, 3h, 7d, 1w2d3h</red>"
  check-header: "<yellow>Moderation status for <white>{player}</white></yellow>"
  check-ban: " <red>Ban</red> <dark_gray>[{case_id}]</dark_gray> by <yellow>{staff}</yellow>: <white>{reason}</white> <gray>(expires: {expires})</gray>"
  check-ban-none: " <green>No active ban.</green>"
  check-mute: " <gold>Mute</gold> <dark_gray>[{case_id}]</dark_gray> by <yellow>{staff}</yellow>: <white>{reason}</white> <gray>(expires: {expires})</gray>"
  check-mute-none: " <green>No active mute.</green>"
  check-jail: " <red>Jailed</red> in <yellow>{room}</yellow>: <white>{reason}</white> <gray>({remaining} · by {staff})</gray>"
  check-jail-none: " <green>Not jailed.</green>"
  check-frozen: " <red>Frozen</red>"
  check-frozen-none: " <green>Not frozen.</green>"
  expiry-permanent: "Permanent"
  expiry-expired: "Expired"
  banlist-header: "<yellow>Active bans</yellow> <gray>({count}) · page {page}/{total_pages}</gray>"
  mutelist-header: "<yellow>Active mutes</yellow> <gray>({count}) · page {page}/{total_pages}</gray>"
  banlist-empty: "<gray>No active bans.</gray>"
  mutelist-empty: "<gray>No active mutes.</gray>"
  punishment-list-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> <dark_gray>[{case_id}]</dark_gray> <gray>{type}</gray> by {staff}: {reason} <dark_gray>({expires})</dark_gray>"
  freezelist-header: "<yellow>Frozen players</yellow> <gray>({count})</gray>"
  freezelist-empty: "<green>No frozen players.</green>"
  freezelist-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> <gray>(violations: {violations})</gray>"
  freezeinfo: "<yellow>{player}</yellow> is frozen <gray>(violations: {violations})</gray>"
  history-header: "<yellow>Punishment history for {player}</yellow> <gray>({count})</gray>"
  history-empty: "<gray>No punishment history.</gray>"
  history-entry: " <dark_gray>[{case_id}]</dark_gray> <gray>{type}</gray> <dark_gray>({active})</dark_gray> by {staff}: {reason} <dark_gray>({time_ago})</dark_gray>"
  case-not-found: "<red>No punishment found for case <yellow>{case_id}</yellow>.</red>"
  case-header: "<yellow>Case <white>{case_id}</white></yellow>"
  case-line: " <gray>Player:</gray> <yellow>{player}</yellow> · <gray>Type:</gray> {type} · <gray>Active:</gray> {active}<newline> <gray>Staff:</gray> {staff} · <gray>When:</gray> {time_ago}<newline> <gray>Reason:</gray> <white>{reason}</white><newline> <gray>Expires:</gray> {expires}"
  lastloc: "<yellow>{player}</yellow> last logout: <white>{world}</white> <gray>{x}, {y}, {z}</gray>"
  lastloc-unknown: "<red>No last logout location stored for <yellow>{player}</yellow>.</red>"
  lastloc-world-unloaded: "<yellow>{player}</yellow> last world <white>{world}</white> is not loaded."
freeze:
  already-frozen: "<red>{player} is already frozen.</red>"
  frozen-target: "<red><bold>You have been frozen.</bold></red> <gray>Do not log out.</gray>"
  frozen-staff: "<green>Froze <yellow>{player}</yellow>.</green>"
  broadcast: "<yellow>{player}</yellow> was <red>frozen</red> by <yellow>{staff}</yellow>"
  title: "<red><bold>Frozen</bold></red>"
  subtitle: "<gray>Do not log out</gray>"
  not-frozen: "<red>{player} is not frozen.</red>"
  unfrozen-target: "<green>You have been unfrozen.</green>"
  unfrozen-staff: "<green>Unfroze <yellow>{player}</yellow>. Violations: <yellow>{violations}</yellow></green>"
  unfreeze-broadcast: "<yellow>{player}</yellow> was <green>unfrozen</green> by <yellow>{staff}</yellow> <gray>(violations: {violations})</gray>"
  unfreeze-title: "<green><bold>Unfrozen</bold></green>"
  unfreeze-subtitle: "<gray>You can move again</gray>"
  disconnect-alert: "<red><bold>Alert:</bold></red> <yellow>{player}</yellow> <red>disconnected while frozen</red> <gray>(violations: {violations})</gray>"
  actionbar: "<red><bold>You are frozen. Do not log out.</bold></red>"
  cannot-chat: "<red>You cannot chat while frozen.</red>"
  cannot-teleport: "<red>You cannot teleport while frozen.</red>"
  cannot-command: "<red>You cannot use commands while frozen.</red>"
  cannot-freeze-self: "<red>You cannot freeze yourself.</red>"

# ==================== JAIL ====================
jail:
  room-exists: "<red>A jail room named <yellow>{room}</yellow> already exists. Use <yellow>/sa jail edit {room}</yellow> to modify it.</red>"
  room-not-found: "<red>No jail room named <yellow>{room}</yellow>. Use <yellow>/sa jail create {room}</yellow> to create it.</red>"
  no-room-available: "<red>No jail room available. Create one first with <yellow>/sa jail create <name></yellow>.</red>"
  already-jailed: "<red>{player} is already jailed. Unjail them first.</red>"
  immune: "<red>{player} cannot be jailed (immune).</red>"
  invalid-duration: "<red>Invalid duration. Use e.g. 10m, 1h, 7d, or 'permanent'.</red>"
  creation-started: "<green>Jail creation started for room <yellow>{room}</yellow>.</green>"
  tool-inventory-full: "<red>Your inventory is full. Free a slot for the jail setup tool and try again.</red>"
  creation-step1: "<gray>Step 1: <yellow>Right-click</yellow> to set the <bold>entry point</bold> (where jailed players teleport to).</gray>"
  creation-undo: "<gray>Use <yellow>Left-click</yellow> at any time to undo the last selection.</gray>"
  editing-started: "<green>Editing jail room <yellow>{room}</yellow>.</green>"
  editing-step1: "<gray>Step 1: <yellow>Right-click</yellow> to set the new <bold>entry point</bold>.</gray>"
  entry-set: "<green>Entry point set at <yellow>{location}</yellow>.</green>"
  entry-step2: "<gray>Step 2: <yellow>Right-click</yellow> to set the <bold>exit point</bold> (where players teleport on unjail).</gray>"
  exit-set: "<green>Exit point set at <yellow>{location}</yellow>.</green>"
  exit-cleared: "<yellow>Exit point cleared. Right-click to re-set it.</yellow>"
  entry-cleared: "<yellow>Entry point cleared. Right-click to re-set it.</yellow>"
  nothing-to-undo: "<red>Nothing to undo.</red>"
  creation-cancelled: "<red>Jail creation/editing cancelled.</red>"
  first-room-default: "<gray>This is the first jail room. It is set as <yellow>default</yellow>.</gray>"
  room-finalized: "<green>Jail room <yellow>{room}</yellow> {action}.</green>"
  room-finalized-broadcast: "<yellow>{staff}</yellow> {action} jail room <yellow>{room}</yellow>"
  room-deleted: "<green>Jail room <yellow>{room}</yellow> deleted.</green>"
  room-delete-has-players: "<red>Cannot delete: players are currently jailed in this room. Unjail them first.</red>"
  default-set: "<green>Default jail room set to <yellow>{room}</yellow>.</green>"
  default-not-found: "<red>No jail room named <yellow>{room}</yellow>.</red>"
  list-header: " <yellow><bold>Jail Rooms</bold></yellow>"
  list-empty: " <gray>No jail rooms created yet.</gray>"
  list-entry: " <dark_gray>-</dark_gray> <yellow>{room}</yellow>{default} <gray>Entry: {entry} | Exit: {exit}</gray>"
  list-default-tag: " <green>[Default]</green>"
  jailed-target: "<red><bold>You have been jailed.</bold></red>"
  jailed-duration: "<gray>Duration: <yellow>{duration}</yellow></gray>"
  jailed-permanent: "<gray>Duration: <red>Permanent</red></gray>"
  jailed-title: "<red><bold>Jailed</bold></red>"
  jailed-subtitle: "<gray>by {staff}</gray>"
  jailed-staff: "<green>Jailed <yellow>{player}</yellow> in room <yellow>{room}</yellow> for <yellow>{duration}</yellow>.</green>"
  jailed-broadcast: "<yellow>{player}</yellow> was <red>jailed</red> by <yellow>{staff}</yellow> <gray>({duration}, room: {room})</gray>"
  not-jailed: "<red>{player} is not jailed.</red>"
  list-jailed-empty: "<green>No players are currently jailed.</green>"
  list-jailed-header: "<yellow>Jailed players</yellow> <gray>({count})</gray>"
  list-jailed-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> in <white>{room}</white> <gray>({remaining})</gray>: {reason} <dark_gray>by {staff}</dark_gray>"
  info-header: "<yellow>Jail info for <white>{player}</white></yellow>"
  info-room: "<gray>Room:</gray> <yellow>{room}</yellow>"
  info-remaining: "<gray>Remaining:</gray> <white>{remaining}</white>"
  info-reason: "<gray>Reason:</gray> <white>{reason}</white>"
  info-staff: "<gray>Jailed by:</gray> <yellow>{staff}</yellow>"
  unjailed-target: "<green>You have been released from jail.</green>"
  unjailed-title: "<green><bold>Released</bold></green>"
  unjailed-subtitle: "<gray>You are free</gray>"
  unjailed-staff: "<green>Unjailed <yellow>{player}</yellow>.</green>"
  unjailed-broadcast: "<yellow>{player}</yellow> was <green>unjailed</green> by <yellow>{staff}</yellow>"
  still-jailed: "<red>You are still jailed.</red>"
  still-jailed-remaining: "<gray>Remaining: <yellow>{remaining}</yellow></gray>"
  expired: "<green>Your jail time has expired. You are free.</green>"
  expired-title: "<green><bold>Released</bold></green>"
  expired-subtitle: "<gray>Jail time expired</gray>"
  expired-broadcast: "<yellow>{player}</yellow>'s jail sentence has <green>expired</green>"
  actionbar: "<red><bold>Jailed</bold></red> <gray>({remaining})</gray>"
  cannot-chat: "<red>You cannot chat while jailed.</red>"
  cannot-teleport: "<red>You cannot teleport while jailed.</red>"
  cannot-command: "<red>You cannot use commands while jailed.</red>"
  tool-name: "<gold><bold>Jail Setup Tool</bold></gold>"
  tool-lore-rightclick: "<gray>Right-click: set point</gray>"
  tool-lore-leftclick: "<gray>Left-click: undo last point</gray>"
  editing-current-entry: "<gray>Current entry: <yellow>{location}</yellow></gray>"
  editing-current-exit: "<gray>Current exit: <yellow>{location}</yellow></gray>"
  delete-confirm: "<yellow>Shift+Right-click again to confirm deletion of jail room <red>{room}</red>.</yellow>"
  create-prompt: "<gradient:#FF5555:#AA0000><bold>Jail Room</bold></gradient> <dark_gray>›</dark_gray> <gray>Enter a room name (letters, numbers, underscores):</gray>"
  invalid-name: "<red>Invalid jail name. Use letters, numbers, underscores, or hyphens only.</red>"
  teleported-entry: "<green>Teleported to entry of jail room <yellow>{room}</yellow>.</green>"
  remaining-permanent: "Permanent"
  remaining-expired: "Expired"
  remaining-unknown: "Unknown"
  jail-duration-prompt: "<gradient:#FF5555:#AA0000><bold>Jail Duration</bold></gradient> <dark_gray>›</dark_gray> <gray>Enter duration (e.g. 10m, 1h, 7d) or <yellow>permanent</yellow>:</gray>"
  unjail-confirm: "<yellow>Click Jail again to confirm unjail of <white>{player}</white>.</yellow>"
  usage-header: "<red>Usage:</red>"
  usage-create: " <yellow>/sa jail create <name></yellow> <dark_gray>- Create a jail room</dark_gray>"
  usage-edit: " <yellow>/sa jail edit <name></yellow> <dark_gray>- Edit a jail room</dark_gray>"
  usage-delete: " <yellow>/sa jail delete <name></yellow> <dark_gray>- Delete a jail room</dark_gray>"
  usage-setdefault: " <yellow>/sa jail setdefault <name></yellow> <dark_gray>- Set default room</dark_gray>"
  usage-list: " <yellow>/sa jail list</yellow> <dark_gray>- List all rooms</dark_gray>"
  usage-gui: " <yellow>/sa jail</yellow> <dark_gray>- Open jail manager GUI</dark_gray>"
  usage-jail: " <yellow>/sa jail <player> <duration> [room]</yellow> <dark_gray>- Jail a player</dark_gray>"

# ==================== VANISH ====================
vanish:
  already-vanished: "<red>You are already vanished.</red>"
  vanished: "<green>You are now <bold>vanished</bold>.</green> <gray>(weight: {weight})</gray>"
  broadcast: "<yellow>{player}</yellow> is now <green>vanished</green> <gray>(weight: {weight})</gray>"
  not-vanished: "<red>You are not vanished.</red>"
  unvanished: "<red>You are no longer <bold>vanished</bold>.</red>"
  unvanish-broadcast: "<yellow>{player}</yellow> is no longer vanished"
  others-vanished: "<green>Vanished <yellow>{player}</yellow>.</green>"
  others-unvanished: "<green>Unvanished <yellow>{player}</yellow>.</green>"
  actionbar: "<dark_aqua><bold>Vanished</bold></dark_aqua> <gray>Hidden from players</gray>"

# ==================== STAFF MODE ====================
staffmode:
  already-enabled: "<red>You are already in staff mode.</red>"
  enabled: "<green>Staff mode <bold>enabled</bold>.</green>"
  title-enabled: "<gold><bold>Staff mode</bold></gold>"
  subtitle-enabled: "<gray>Tools equipped. Inventory saved.</gray>"
  actionbar: "<gold><bold>Staff mode</bold></gold> <dark_gray>·</dark_gray> {vanish}{spectate}"
  actionbar-vanish-on: "<aqua>Vanish ON</aqua>"
  actionbar-vanish-off: "<gray>Visible</gray>"
  broadcast-enabled: "<yellow>{player}</yellow> entered <green>staff mode</green>"
  not-enabled: "<red>You are not in staff mode.</red>"
  disabled: "<red>Staff mode <bold>disabled</bold>.</red>"
  broadcast-disabled: "<yellow>{player}</yellow> left <red>staff mode</red>"
  tool-inspector-name: "<yellow>Player Inspector</yellow>"
  tool-inspector-lore1: "<gray>Right-click a player to view snapshot</gray>"
  tool-inspector-lore2: "<dark_gray>Slot 1</dark_gray>"
  tool-history-name: "<yellow>Punishment History</yellow>"
  tool-history-lore1: "<gray>Right-click a player to view history</gray>"
  tool-history-lore2: "<dark_gray>Slot 2</dark_gray>"
  tool-freeze-name: "<aqua>Freeze Tool</aqua>"
  tool-freeze-lore1: "<gray>Right-click a player to freeze/unfreeze</gray>"
  tool-freeze-lore2: "<dark_gray>Slot 3</dark_gray>"
  tool-health-name: "<green>Server Health</green>"
  tool-health-lore1: "<gray>Right-click to view server diagnostics</gray>"
  tool-health-lore2: "<dark_gray>Slot 9</dark_gray>"
  tool-spectate-name: "<light_purple>Spectate Tool</light_purple>"
  tool-spectate-lore1: "<gray>Right-click a player to spectate</gray>"
  tool-spectate-lore2: "<dark_gray>Slot 4</dark_gray>"
  tool-jail-name: "<gold>Jail Tool</gold>"
  tool-jail-lore1: "<gray>Right-click a player to jail/unjail</gray>"
  tool-jail-lore2: "<dark_gray>Slot 5</dark_gray>"
  tool-vanish-toggle-name: "<light_purple>Vanish Toggle</light_purple>"
  tool-vanish-toggle-lore1: "<gray>Right-click to toggle vanish</gray>"
  tool-vanish-toggle-lore2: "<dark_gray>Slot 6</dark_gray>"
  tool-teleport-name: "<aqua>Teleport Tool</aqua>"
  tool-teleport-lore1: "<gray>Right-click a player to teleport</gray>"
  tool-teleport-lore2: "<dark_gray>Slot 7</dark_gray>"
  tool-dashboard-name: "<gold>Admin Dashboard</gold>"
  tool-dashboard-lore1: "<gray>Right-click to open the admin dashboard</gray>"
  tool-dashboard-lore2: "<dark_gray>Slot 8</dark_gray>"
  # Fallback ids kept for older staff.yml tool names
  tool-compass-name: "<yellow>Player Inspector</yellow>"
  tool-compass-lore1: "<gray>Right-click a player to view snapshot</gray>"
  tool-compass-lore2: "<dark_gray>Slot 1</dark_gray>"
  tool-inspect-name: "<yellow>Player Inspector</yellow>"
  tool-inspect-lore1: "<gray>Right-click a player to view snapshot</gray>"
  tool-inspect-lore2: "<dark_gray>Slot 1</dark_gray>"

# ==================== SPECTATE ====================
spectate:
  cannot-self: "<red>You cannot spectate yourself.</red>"
  already-spectating: "<red>You are already spectating. Use <yellow>/sa unspectate</yellow> first.</red>"
  started: "<green>Now spectating <yellow>{player}</yellow>. Use <yellow>/sa unspectate</yellow> or change gamemode to exit.</green>"
  restored-after-disconnect: "<yellow>Restored your location and gamemode after spectating.</yellow>"
  broadcast-started: "<yellow>{staff}</yellow> is now spectating <yellow>{player}</yellow>"
  not-spectating: "<red>You are not spectating anyone.</red>"
  ended: "<red>Spectator mode ended.</red> <gray>Teleported back to your original location.</gray>"
  broadcast-ended: "<yellow>{staff}</yellow> stopped spectating <yellow>{player}</yellow>"
  target-quit: "<yellow>{player}</yellow> went offline. Spectator mode ended."

# ==================== CHAT ====================
chat:
  links-blocked: "<red>Links are not allowed in chat.</red>"
  filter-blocked: "<red>Message blocked. Filtered word: <yellow>{word}</yellow>.</red>"
  slowmode: "<red>Slowmode active. Wait <yellow>{remaining}s</yellow> before chatting.</red>"
  slowmode-actionbar: "<red>Slowmode. Wait <yellow>{remaining}s</yellow></red>"
  slowmode-not-active: "<red>Slowmode is not active.</red>"
  slowmode-invalid: "<red>Slowmode delay must be between 1 and 300 seconds.</red>"
  slowmode-enabled: "<gray>Slowmode <green>enabled</green> (<yellow>{seconds}s</yellow> delay) by <yellow>{staff}</yellow>.</gray>"
  slowmode-disabled: "<gray>Slowmode has been <red>disabled</red> by <yellow>{staff}</yellow>.</gray>"
  chat-cleared: "<gray>Chat has been cleared by <yellow>{staff}</yellow>.</gray>"
  chat-cleared-force: "<gray>Chat has been <red>force-cleared</red> by <yellow>{staff}</yellow>.</gray>"
  chat-cleared-player: "<gray>Cleared chat for <yellow>{player}</yellow>.</gray>"
  chat-cleared-target: "<gray>Your chat has been cleared by <yellow>{staff}</yellow>.</gray>"
  staffchat-enabled: "<green>Staff chat mode <bold>enabled</bold>.</green> <gray>All your messages go to staff only.</gray>"
  staffchat-disabled: "<red>Staff chat mode <bold>disabled</bold>.</red> <gray>Your messages go to public chat.</gray>"

# ==================== REPORT ====================
report:
  cooldown: "<red>You must wait <yellow>{remaining}s</yellow> before reporting again.</red>"
  failed: "<red>Could not submit report. Try again.</red>"
  success: "<green>Report #<yellow>{id}</yellow> submitted against <yellow>{player}</yellow>.</green>"
  broadcast: "<red><bold>[REPORT]</bold></red> <yellow>{reporter}</yellow> reported <yellow>{player}</yellow><gray> - {reason}</gray> <click:run_command:/sa reports><dark_gray>[View Reports]</dark_gray></click>"
  cannot-self: "<red>You cannot report yourself.</red>"
  enter-reason: "<yellow>Enter a reason for reporting <white>{player}</white>:</yellow>"
  invalid-id: "<red>Invalid report ID.</red>"
  header: " <red><bold>Open Reports</bold></red> <gray>({count})</gray>"
  no-reports: " <green>No open reports.</green>"
  entry: " <dark_gray>#{id}</dark_gray> <yellow>{player}</yellow> <gray>by {reporter} ({time_ago})</gray>"
  entry-actions: "   <white>{reason}</white> <click:run_command:/sa resolvereport {id}><green>[Resolve]</green></click> <click:run_command:/sa snapshot {player}><gray>[Snapshot]</gray></click>"
  target-header: " <red><bold>Reports for {player}</bold></red> <gray>({count})</gray>"
  target-no-reports: " <gray>No reports found.</gray>"
  target-entry: " <dark_gray>#{id}</dark_gray> <gray>by {reporter} ({time_ago}) - {status}</gray>"
  target-entry-reason: "   <white>{reason}</white>"
  status-open: "<red>Open</red>"
  status-resolved: "<green>Resolved</green> <gray>by {resolved_by}</gray>"
  resolve-not-found: "<red>Report #{id} not found or already resolved.</red>"
  resolve-success: "<green>Report #<yellow>{id}</yellow> on <yellow>{player}</yellow> has been resolved.</green>"
  resolve-broadcast: "<gray>Report #{id} (<yellow>{player}</yellow>) resolved by <yellow>{staff}</yellow></gray>"
  resolve-confirm: "<yellow>Shift+Right-click / click Resolve again to confirm resolve of report <red>#{id}</red>.</yellow>"
  reopen-not-found: "<red>Report #{id} not found or is not resolved.</red>"
  reopen-success: "<green>Report #<yellow>{id}</yellow> has been reopened.</green>"
  reopen-broadcast: "<gray>Report #{id} reopened by <yellow>{staff}</yellow>.</gray>"
  note-not-found: "<red>Report #{id} not found.</red>"
  note-added: "<green>Staff note added to report #<yellow>{id}</yellow>.</green>"
  teleported: "<green>Teleported to <yellow>{player}</yellow>.</green>"
  gui-empty: "<green>No open reports.</green>"
  unassigned: "Unassigned"
  entry-assigned: "   <gray>Assigned to <yellow>{staff}</yellow></gray>"
  claim-not-found: "<red>Open report #{id} not found.</red>"
  claim-already-yours: "<yellow>Report #{id} is already assigned to you.</yellow>"
  claim-failed: "<red>Could not claim report #{id}.</red>"
  claim-success: "<green>Claimed report #<yellow>{id}</yellow> on <yellow>{player}</yellow>.</green>"
  claim-broadcast: "<gray>Report #{id} (<yellow>{player}</yellow>) claimed by <yellow>{staff}</yellow></gray>"
  claim-reassigned: "<yellow>Reassigned report #{id} on <white>{player}</white> from <white>{staff}</white> to you.</yellow>"
  claim-reassign-broadcast: "<gray>Report #{id} (<yellow>{player}</yellow>) reassigned from <white>{previous}</white> to <yellow>{staff}</yellow></gray>"

# ==================== INSPECTION ====================
inspection:
  invsee: "<green>Viewing <yellow>{player}</yellow>'s inventory{mode}</green>"
  endersee: "<green>Viewing <yellow>{player}</yellow>'s ender chest{mode}</green>"
  mode-editable: " <gray>(editable)</gray>"
  mode-readonly: " <gray>(read-only)</gray>"

# ==================== INVENTORY LOCK ====================
inventory-lock:
  already-locked: "<red>{player}'s inventory is already locked.</red>"
  locked-target: "<red><bold>Your inventory has been locked.</bold></red> <gray>You cannot move or drop items.</gray>"
  locked-staff: "<green>Locked <yellow>{player}</yellow>'s inventory.</green>"
  broadcast-locked: "<yellow>{player}</yellow>'s inventory was <red>locked</red> by <yellow>{staff}</yellow>"
  not-locked: "<red>{player}'s inventory is not locked.</red>"
  unlocked-target: "<green>Your inventory has been unlocked.</green>"
  unlocked-staff: "<green>Unlocked <yellow>{player}</yellow>'s inventory.</green>"
  broadcast-unlocked: "<yellow>{player}</yellow>'s inventory was <green>unlocked</green> by <yellow>{staff}</yellow>"
  actionbar: "<red><bold>🔒 INVENTORY LOCKED</bold></red>"
  cannot-lock-self: "<red>You cannot lock your own inventory.</red>"

# ==================== SNAPSHOT ====================
snapshot:
  header: " <yellow><bold>Player Snapshot:</bold> {player}</yellow>"
  first-join: " <gray>First Join:</gray> <white>{value}</white>"
  last-join: " <gray>Last Join:</gray> <white>{value}</white>"
  playtime: " <gray>Total Playtime:</gray> <white>{value}</white>"
  ip-count: " <gray>IP Count:</gray> <white>{value}</white>"
  no-data: " <gray>No data available (player never joined).</gray>"
  status-online: " <gray>Status:</gray> <green>Online</green>"
  status-offline: " <gray>Status:</gray> <red>Offline</red>"
  punishments-header: " <yellow><bold>Punishments:</bold></yellow>"
  banned: " <red>Banned:</red> <white>{reason}</white> <gray>(expires: {expires}) [{case_id}]</gray>"
  ban-none: " <gray>Ban:</gray> <green>None</green>"
  muted: " <red>Muted:</red> <white>{reason}</white> <gray>(expires: {expires}) [{case_id}]</gray>"
  mute-none: " <gray>Mute:</gray> <green>None</green>"
  warnings: " <gray>Warnings:</gray> <yellow>{count}</yellow>"
  frozen: " <gray>Frozen:</gray> "
  frozen-yes: "<red>Yes</red>"
  frozen-no: "<green>No</green>"
  activity-header: " <yellow><bold>Recent Activity:</bold></yellow>"
  activity-entry: " <dark_gray>[{time_ago}]</dark_gray> <gray>{action} by {staff}</gray>"

# ==================== PLAYER INFO ====================
playerinfo:
  header: " <yellow><bold>{player}'s Info</bold></yellow>"
  health: " <gray>Health:</gray> <red>{health}</red> <dark_gray>/</dark_gray> <red>{max}</red>"
  hunger: " <gray>Hunger:</gray> <gold>{hunger}</gold> <dark_gray>/</dark_gray> <gold>20</gold>"
  xp: " <gray>XP:</gray> <green>Level {level}</green> <dark_gray>({percent}%)</dark_gray>"
  ping: " <gray>Ping:</gray> <aqua>{ping}ms</aqua>"
  playtime: " <gray>Playtime:</gray> <white>{time}</white>"
  balance: " <gray>Balance:</gray> <green>{balance}</green>"
  gamemode: " <gray>Gamemode:</gray> <white>{gamemode}</white>"
  cannot-self: "<red>You cannot view your own player info. Target another player.</red>"
  offline-tag: " <gray>Status:</gray> <yellow>Offline</yellow>"
  offline-gui-unavailable: "<gray>GUI unavailable for offline <yellow>{player}</yellow>. Showing chat summary.</gray>"
  last-seen: " <gray>Last seen:</gray> <white>{time}</white>"
  offline-homes-hint: " <gray>Homes:</gray> <white>/sa homes {player}</white>"

invsee:
  cannot-self: "<red>You cannot open your own inventory with invsee.</red>"
  offline-snapshot: "<yellow>{player}</yellow> is offline. Showing latest snapshot <gray>({reason})</gray>."
  offline-unavailable: "<yellow>{player}</yellow> is offline and no inventory snapshot is available."
  offline-hint: "<gray>Use <yellow>/sa invsnapshot list {player}</yellow> to browse saved snapshots.</gray>"

endersee:
  cannot-self: "<red>You cannot open your own ender chest with endersee.</red>"

# ==================== DIAGNOSTICS ====================
diagnostics:
  header: " <yellow><bold>Server Health</bold></yellow>"
  tps: " <gray>TPS (1m/5m/15m):</gray> {tps1} <dark_gray>/</dark_gray> {tps5} <dark_gray>/</dark_gray> {tps15}"
  mspt: " <gray>MSPT:</gray> <{color}>{value}ms</{color}>"
  players: " <gray>Players:</gray> <white>{online}/{max}</white>"
  entities: " <gray>Entities:</gray> <white>{count}</white>"
  chunks: " <gray>Loaded Chunks:</gray> <white>{count}</white>"
  memory: " <gray>Memory:</gray> <{color}>{used}MB / {total}MB ({percent}%)</{color}>"

# ==================== TELEPORT ====================
teleport:
  tphere-success: "<green>Teleported <yellow>{player}</yellow> to your location.</green>"
  tphere-target: "<yellow>You have been teleported to <white>{staff}</white>.</yellow>"
  tpto-success: "<green>Teleported to <yellow>{player}</yellow>.</green>"
  cannot-self: "<red>You cannot teleport yourself to yourself.</red>"
  cannot-self-to: "<red>You cannot teleport to yourself.</red>"
  tppos-success: "<green>Teleported to <yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow> in <yellow>{world}</yellow>.</green>"
  tppos-invalid-coords: "<red>Invalid coordinates. Enter valid numbers.</red>"
  biome-searching: "<yellow>Searching for <white>{biome}</white> biome...</yellow>"
  biome-success: "<green>Teleported to <yellow>{biome}</yellow> biome at <yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>.</green>"
  biome-not-found: "<red>Could not find a <yellow>{biome}</yellow> biome within search range.</red>"
  biome-invalid: "<red>Unknown biome: <yellow>{biome}</yellow>. Use tab completion for valid biomes.</red>"

# ==================== ALTS ====================
alts:
  header: " <yellow><bold>Alt Detection:</bold> {player}</yellow>"
  no-alts: " <green>No alt accounts detected.</green>"
  found: " <gray>Found <yellow>{count}</yellow> possible alt(s):</gray>"
  entry: " <dark_gray>-</dark_gray> <yellow>{name}</yellow> {status}{ban_status} <dark_gray>(Last: {last_seen})</dark_gray> <click:run_command:/sa snapshot {name}><hover:show_text:'<gray>View snapshot</gray>'><dark_gray>[Snapshot]</dark_gray></hover></click>"
  status-online: "<green>Online</green>"
  status-offline: "<red>Offline</red>"
  status-banned: " <red>[Banned]</red>"

# ==================== QUICK PUNISH ====================
quick-punish:
  unknown-template: "<red>Unknown template: <yellow>{template}</yellow>. Use /sa qp to see available templates.</red>"
  invalid-template-duration: "<red>Invalid template duration: {duration}</red>"
  unknown-template-type: "<red>Unknown template type: {type}</red>"
  list-header: " <gray>Available templates:</gray>"
  list-entry: " <dark_gray>-</dark_gray> <yellow>{name}</yellow> <gray>[{type}]</gray>{duration} <dark_gray>{reason}</dark_gray>"

# ==================== AUDIT ====================
audit:
  player-header: " <yellow><bold>Player Audit: {name}</bold></yellow>"
  staff-header: " <yellow><bold>Staff Audit: {name}</bold></yellow>"
  type-header: " <yellow><bold>Audit by Type: {type}</bold></yellow>"
  no-entries: " <gray>No audit entries found.</gray>"
  entry: " <dark_gray>{time_ago}</dark_gray> <gray>{case_info}{action} by <white>{staff}</white>{target}</gray>"
  unknown-action-type: "<red>Unknown action type: {type}</red>"
  entry-detail: "<gray>{action} by {staff} ({time}): {meta}</gray>"
  gui-hint: " <gray>GUI: <yellow>{cmd}</yellow></gray>"
  next-page-hint: " <gray>More entries may exist. Append page <yellow>{page}</yellow> to view next page.</gray>"
  prompt-player: "<yellow>Enter a <bold>player name</bold> to view their audit log (or <white>cancel</white>):</yellow>"
  prompt-type: "<yellow>Enter an <bold>action type</bold> (or <white>cancel</white>):</yellow>"

# ==================== HELP ====================
help:
  header: " <gradient:#FF6B6B:#FFE66D><bold>SoapsAdmin</bold></gradient> <gray>v{version}</gray>"
  page-info: " <gray>Page <white>{page}</white>/<white>{total}</white> · <white>{count}</white> commands</gray>"
  page-info-search: " <gray>Search <yellow>{query}</yellow> · page <white>{page}</white>/<white>{total}</white> · <white>{count}</white> match(es)</gray>"
  entry: " <click:suggest_command:'{suggest}'><hover:show_text:'<dark_gray>Click to suggest</dark_gray>'><yellow>{usage}</yellow></hover></click> <dark_gray>- {description}</dark_gray>"
  footer: " <gray>Search: <yellow>/sa help give</yellow> · silent: add <yellow>-s</yellow> at the end</gray>"
  empty: " <gray>No commands available for you.</gray>"
  no-match: " <gray>No commands matching <yellow>{query}</yellow>.</gray>"
  custom-header: " <gold>Custom commands</gold>"
  custom-default: "Custom command"
  nav-back: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>« Back</yellow></hover></click>"
  nav-back-disabled: "<dark_gray>« Back</dark_gray>"
  nav-next: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>Next »</yellow></hover></click>"
  nav-next-disabled: "<dark_gray>Next »</dark_gray>"
  nav-page: "<gray>[</gray><white>{page}</white><gray>/</gray><white>{total}</white><gray>]</gray>"
  kick: "Kick a player"
  ban: "Permanently ban a player"
  tempban: "Temporarily ban a player"
  unban: "Unban a player"
  mute: "Mute a player"
  tempmute: "Temporarily mute a player"
  unmute: "Unmute a player"
  warn: "Warn a player"
  warns: "View player warnings"
  clearwarns: "Clear player warnings"
  note: "Add a note on a player"
  notes: "View notes for a player"
  freeze: "Freeze a player"
  check: "Show active ban/mute/jail/freeze status"
  banlist: "List active bans"
  mutelist: "List active mutes"
  jaillist: "List jailed players"
  freezelist: "List frozen players"
  freezeinfo: "Show freeze info for a player"
  punishhistory: "Open punishment history for a player"
  case: "Look up a punishment case"
  lastloc: "Show a player's last logout coordinates"
  report-claim: "Claim an open report"
  jail-info: "Show jail details for a player"
  home-manage: "Rename, set default, or move homes"
  warp-info: "Show warp coordinates and permission"
  tpa-pending: "Show pending TPA requests"
  kit-preview: "Preview a kit without claiming"
  sell-categories: "List sell categories"
  whois: "Alias for playerinfo"
  r: "Alias for reply"
  ignore-manage: "List or clear ignored players"
  unfreeze: "Unfreeze a player"
  invsee: "View player inventory"
  endersee: "View ender chest"
  staffmode: "Toggle staff mode"
  health: "View server health"
  snapshot: "View player snapshot"
  audit: "View audit log"
  alts: "Detect alt accounts"
  report: "Report a player"
  reports: "View open reports"
  resolve-report: "Resolve a report"
  vanish: "Toggle vanish mode"
  qp: "Quick punish from template"
  rollback: "Rollback a punishment"
  spectate: "Spectate a player"
  unspectate: "Stop spectating"
  sc: "Toggle staff chat / send message"
  nickname: "Set or clear your nickname"
  friend: "Manage friends and friend teleport"
  recipe: "Browse or manage custom recipes"
  rtp: "Random teleport to a world"
  attribute: "View or edit player living attributes (not item attributes)"
  iteminfo: "Inspect the item in your hand"
  stafflist: "List online staff"
  staffrollcall: "Staff roll call with ping, AFK, vanish, staff mode"
  vanishlist: "List vanished players"
  moneylog: "View economy transaction log"
  tax: "Tax all online players"
  skull: "Give yourself a player head"
  seen: "Check when a player was last online"
  furnace: "Open a virtual furnace"
  clearchat: "Clear global chat"
  slowmode: "Toggle chat slowmode"
  tphere: "Teleport player to you"
  tpto: "Teleport to a player"
  tppos: "Teleport to coordinates"
  biome: "Teleport to a biome"
  jail: "Jail a player"
  jail-manage: "Manage jail rooms"
  unjail: "Unjail a player"
  lockinv: "Toggle inventory lock"
  admin: "Open admin hub pages (tickets, announcements, MOTD, worlds, and related panels)"
  dashboard: "Open player dashboard (kits, warps, homes, and related tools)"
  reload: "Reload config or a module (/sa reload [all|config|messages|gui|<module>])"
  doubledoors: "Toggle or view your DoubleDoors helper state"
  deathcoords: "Show your last death coordinates"
  deathsettings: "List or toggle death/respawn settings"
  seekitem: "Scan nearby containers for an item"
  playtime: "View playtime or leaderboard"
  weather: "Change world weather"
  weather-lock: "Lock current weather"
  weather-unlock: "Unlock weather"
  time: "Change world time"
  time-lock: "Lock current time"
  time-unlock: "Unlock time"
  god: "Toggle god mode"
  kill: "Kill a player"
  killall: "Remove entities by type, group, or Mythic mob"
  spawnmob: "Spawn vanilla or Mythic mobs at your location"
  fakeop: "Send fake op message"
  burn: "Set a player on fire"
  extinguish: "Put out fire on a player"
  nightvision: "Toggle night vision for yourself or a player"
  more: "Refill held item stack to max"
  effect: "Apply a potion effect (registry id, e.g. speed)"
  feed: "Feed a player"
  heal: "Heal a player"
  damage: "Damage a player with optional type"
  hunger: "Set player hunger value"
  gamemode: "Change player gamemode"
  lightning: "Strike lightning"
  walkspeed: "Set walk speed"
  flyspeed: "Set fly speed"
  fly: "Toggle flight"
  kickall: "Kick all players"
  tpall: "Teleport all (or listed) players to you"
  experience: "Give, remove, or reset experience"
  maintenance: "Toggle maintenance mode"
  clearinv: "Clear player inventory"
  clearground: "Clear ground items"
  clearlag: "Auto clearlag system"
  repair: "Repair items"
  enchant: "Enchant held items via command"
  unenchant: "Remove an enchantment from held item"
  enchants: "List all Minecraft enchantments"
  itemeditor: "Item editor"
  afk: "Toggle AFK mode"
  afkzone: "Manage AFK zones"
  fakeplayer: "Manage mannequin entities"
  invsnapshot: "Inventory snapshot system"
  pluginmonitor: "Plugin performance monitor"
  uptime: "Show server uptime"
  ping: "Check player ping"
  hat: "Wear held item as a hat"
  cleareffects: "Clear potion effects"
  top: "Teleport to highest block"
  jump: "Teleport to the block you are looking at"
  tpoffline: "Teleport to a player's last logout location"
  near: "List nearby players"
  smite: "Strike player with lightning"
  rocket: "Vertical troll launch with firework (not look-direction)"
  pumpkinhead: "Put pumpkin on player head"
  sudo: "Force player to run command/chat"
  stack: "Stack similar items"
  world: "Teleport to a world or manage worlds (if permitted)"
  worldmanager: "Manage worlds (create, load, unload, list, teleport)"
  back: "Return to previous location"
  ipwhitelist: "Manage trusted IPs for alt detection"
  sort: "Sort inventory alphabetically"
  pm-conflicts: "Detect plugin conflicts"
  setspawn: "Set the server spawn point"
  spawn: "Teleport to spawn"
  setworldspawn: "Set this world's spawn point"
  worldspawn: "Teleport to this world's spawn"
  setfirstspawn: "Set the first-join spawn"
  delspawn: "Delete the server spawn"
  broadcast: "Send a broadcast message"
  commandspy: "Toggle command spy"
  socialspy: "Toggle social spy"
  home: "Teleport to a home"
  sethome: "Set a home location"
  delhome: "Delete a home"
  homes: "List your homes"
  warp: "Teleport to a warp"
  setwarp: "Create a warp point"
  delwarp: "Delete a warp"
  warps: "List available warps"
  tpa: "Request teleport to player"
  tpahere: "Request player teleport to you"
  tpaccept: "Accept a teleport request"
  tpdeny: "Deny a teleport request"
  tpacancel: "Cancel your outgoing teleport request"
  tptoggle: "Toggle teleport requests"
  tpauto: "Toggle auto-accept for teleport requests"
  itemblacklist: "Manage banned items"
  ticket: "Create and manage support tickets"
  announce: "Manage scheduled announcements"
  motd: "Manage server MOTD and icon"
  staffdash: "View staff activity dashboard"
  staffstats: "View staff leaderboard"
  customcommand: "Manage custom commands"
  interactive: "Bind custom commands to blocks"
  rules: "View the server rules"
  signedit: "Toggle sign edit mode (right-click to edit)"
  bookedit: "Open book editing interface"
  bookcopy: "Copy a written book"
  bookunsign: "Unsign a written book (make editable)"
  kit: "Claim a kit"
  kits: "View available kits"
  kit-manage: "Create, edit, set, or delete kits"
  kit-reset: "Reset kit cooldown/usage for a player"
  realname: "Resolve a nickname to the player's real name"
  mail: "Send and read private mail"
  spawner: "Edit the spawner you are looking at"
  saveinventory: "Save your inventory as a kit"
  anvil: "Open a virtual anvil"
  workbench: "Open a virtual crafting table"
  launch: "Reposition a player along their look direction (not rocket)"
  playerinfo: "View detailed player stats"
  balance: "Check your or another player's balance"
  baltop: "View balance leaderboard"
  modules: "Manage toggleable feature modules"
  shop: "Open the shop hub GUI"
  buy: "Buy items from the server shop"
  sell: "Sell items or open the sell GUI"
  sellall: "Sell all sellable items in your inventory"
  price: "Look up buy/sell prices (held item if no arg)"
  worth: "Show total worth of held item (or inventory)"
  value: "Line breakdown of inventory (or hand) worth"
  trash: "Open the trash disposal GUI"
  itemfilter: "Manage personal item pickup blacklist"
  autopickup: "Toggle magnet pickup of nearby drops"
  autosell: "Auto-sell listed items on pickup"
  paytoggle: "Toggle incoming /pay payments"
  msgtoggle: "Toggle incoming private messages"
  tradetoggle: "Toggle incoming trade requests"
  trade: "Request, accept, or deny player trades"
  vault: "Open your player vaults"
  vaultadmin: "Manage other players' vaults"
  cheque: "Withdraw or deposit economy cheques"
  chatroom: "Create, join, and manage chat rooms"
  mutechat: "Globally mute or unmute the server chat"
  unloadchunks: "Unload idle chunks to free memory"
  tprandom: "Teleport to a random player (cycles through all before repeating)"
  waypoint: "Personal waypoints with optional display markers"
  waypoints: "Personal waypoints with optional display markers"
  gamerules: "Open gamerule editor or list/toggle/set rules"
  xraycheck: "View mining statistics for anti-xray review"
  laghotspots: "Scan for lag hotspot chunks"
  chunkactivity: "Show most active chunks"
  mobdensity: "Show areas with high mob density"
  redstonecheck: "Scan for heavy redstone activity"
  payall: "Pay all online players a set amount"
  daily: "Claim your daily economy reward"
  bottom: "Teleport to the bottom of your current column"
  version: "Show plugin version info"
  info: "View plugin info and status"
  debug: "Show debug and diagnostic info"
  settings: "Open settings dashboard"
  guiconfig: "List, reload, or regenerate gui.yml"
  give: "Give an item (supports enchants, name, lore, effects)"
  take: "Take an item from a player"
  economy-give: "Give currency to a player"
  economy-take: "Take currency from a player"
  economy-set: "Set player balance"
  economy-reset: "Reset player balance"
  economy-resetall: "Reset all player balances for an economy"
  economy-manage: "Manage custom economies"
  pay: "Pay another player"
  banip: "Ban a player's IP address"
  backup: "Create plugin data or world backups"
  msg: "Send a private message"
  reply: "Reply to last private message"
  lastmsg: "Show who /sa r would reply to"
  ignore: "Ignore a player's messages"
  sit: "Sit down"
  spin: "Start spinning"

# ==================== PLUGIN MONITOR ====================
pluginmonitor:
  header: " <gradient:#00CED1:#00FA9A><bold>Plugin Monitor</bold></gradient>"
  list-header: " <gray>Plugins, page <white>{page}</white> of <white>{total_pages}</white> (<white>{total_plugins}</white> total)</gray>"
  list-entry: " <{color}>{name}</{color}> <dark_gray>v{version}</dark_gray> <gray>| <{color}>{label} ({score})</{color}> | L: {listeners} | T: {tasks}</gray>{status}"
  top-header: " <gold><bold>Top {count} Plugins by Impact</bold></gold>"
  top-entry: " <gold>#{rank}</gold> <{color}>{name}</{color}> <gray>| Impact: <{color}>{score}</{color}> ({label}) | L: {listeners} | T: {tasks}</gray>"
  not-found: "<red>Plugin '{name}' not found.</red>"
  scan-complete: "<green>Scan complete. Profiled <yellow>{count}</yellow> plugin(s).</green>"
  detail-header: " <gold><bold>{name}</bold></gold> <gray>v{version}</gray>"
  detail-status: " <gray>Status: <{color}>{status}</{color}></gray>"
  detail-authors: " <gray>Authors: <white>{authors}</white></gray>"
  detail-website: " <gray>Website: <white>{website}</white></gray>"
  detail-description: " <gray>Description: <white>{description}</white></gray>"
  detail-api: " <gray>API Version: <white>{api}</white></gray>"
  detail-impact: " <gray>Impact Score: <{color}><bold>{score}/100</bold></{color}> ({label})</gray>"
  detail-listeners: " <gray>Event Listeners: <white>{count}</white></gray>"
  detail-heavy-warning: "   <red>⚠ Heavy: {event}</red>"
  detail-listener-entry: "   <dark_gray>• {event}</dark_gray>"
  # Conflict detection
  conflicts-header: " <gradient:#FF6347:#FF8C00><bold>Plugin Conflict Detector</bold></gradient>"
  conflicts-commands-header: " <gold><bold>Duplicate Commands:</bold></gold>"
  conflicts-command-entry: "  <yellow>{command}</yellow> <gray>→ registered by:</gray> <white>{plugins}</white>"
  conflicts-events-header: " <gold><bold>Overlapping Event Listeners (3+ plugins):</bold></gold>"
  conflicts-event-entry: "  <yellow>{event}</yellow> <gray>({count} plugins):</gray> <white>{plugins}</white>"
  conflicts-none: " <green>No notable conflicts detected.</green>"
  detail-commands: " <gray>Commands: <white>{commands}</white></gray>"
  detail-tasks: " <gray>Tasks. Sync: <white>{sync}</white> | Async: <white>{async}</white> | Total Active: <white>{total}</white></gray>"
  detail-depends: " <gray>Dependencies: <white>{depends}</white></gray>"
  detail-softdepends: " <gray>Soft Dependencies: <white>{softdepends}</white></gray>"

# ==================== FAKE PLAYER / MANNEQUIN ====================
fakeplayer:
  spawned: "<green>Spawned mannequin <yellow>{name}</yellow> at <gray>{x}, {y}, {z}</gray>.</green>"
  removed: "<green>Removed mannequin <yellow>{name}</yellow>.</green>"
  removed-all: "<green>Removed <yellow>{count}</yellow> mannequin(s).</green>"
  removeall-confirm: "<yellow>Remove <red>all</red> managed mannequins on the server? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  none-nearby: "<red>No mannequins found within 10 blocks.</red>"
  none-active: "<yellow>No managed mannequins found.</yellow>"
  list-header: "<gold>Managed mannequins ({count}):</gold>"
  list-entry: "<gray> - <white>{name}</white> <dark_gray>[{world}]</dark_gray> <yellow>{x}, {y}, {z}</yellow> <dark_gray>(by {owner})</dark_gray></gray>"
  # GUI / property messages
  skin-set: "<green>Skin set to <yellow>{name}</yellow>.</green>"
  name-set: "<green>Name set to <yellow>{name}</yellow>.</green>"
  description-set: "<green>Subtitle set to <yellow>{value}</yellow>.</green>"
  description-cleared: "<green>Subtitle cleared.</green>"
  description-hidden: "<green>Subtitle (NPC line) hidden.</green>"
  description-shown: "<green>Subtitle shown again.</green>"
  description-default: "<green>Subtitle reset to default <yellow>NPC</yellow>.</green>"
  pose-set: "<green>Pose set to <yellow>{value}</yellow>.</green>"
  rotated: "<green>Rotated to <yellow>{value}°</yellow>.</green>"
  mainhand-set: "<green>Main hand set to <yellow>{value}</yellow>.</green>"
  equipment-set: "<green>Equipped <yellow>{slot}</yellow> from your hand.</green>"
  equipment-cleared: "<green>Cleared <yellow>{slot}</yellow> slot.</green>"
  equipment-cleared-all: "<green>Cleared all mannequin equipment.</green>"
  preset-applied: "<green>Applied preset <yellow>{name}</yellow>.</green>"
  equip-no-item: "<red>You are not holding any item.</red>"
  property-toggled: "<green>{property} is now {state}.</green>"
  toggle-on: "<green>ON</green>"
  toggle-off: "<red>OFF</red>"
  prompt-skin: "Enter the player name for the skin"
  prompt-name: "Enter the new display name (supports MiniMessage)"
  prompt-description: "Enter subtitle text under the name (default is NPC). Type hide, or npc/default to reset"
  prompt-equip: "Type <yellow>hand</yellow> to equip from hand, <yellow>clear</yellow> to remove ({slot}), or hold an item and left-click the slot in the GUI"
  # Chat-based editor (when GUI is disabled)
  chat-editor-header: "<gold><bold>Mannequin Editor</bold></gold> <gray>(<white>{name}</white>)</gray>"
  chat-editor-pose: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer pose'><hover:show_text:'<gray>Cycle to the next pose</gray>'><yellow>Cycle Pose</yellow></hover></click>"
  chat-editor-rotate: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer rotate'><hover:show_text:'<gray>Rotate 45°</gray>'><yellow>Rotate</yellow></hover></click>"
  chat-editor-glow: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer glow'><hover:show_text:'<gray>Toggle glow effect</gray>'><yellow>Toggle Glow</yellow></hover></click>"
  chat-editor-name-visible: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer namevisible'><hover:show_text:'<gray>Toggle name visibility</gray>'><yellow>Toggle Name</yellow></hover></click>"
  chat-editor-remove: " <dark_gray>▸</dark_gray> <click:run_command:'/sa fakeplayer remove'><hover:show_text:'<red>Remove this mannequin</red>'><red>Delete</red></hover></click>"
  chat-editor-hint: " <gray>Use <yellow>/sa fakeplayer edit</yellow> to reopen the editor.</gray>"
  look-at-me: "<green>Mannequin is now looking at you.</green>"
  moved-here: "<green>Mannequin moved to your location.</green>"
  yaw-snapped: "<green>Yaw snapped to <yellow>{value}°</yellow>.</green>"
  yaw-copied: "<green>Copied your yaw onto the mannequin.</green>"
  snapped-block: "<green>Mannequin snapped to block center.</green>"
  cloned: "<green>Cloned mannequin <yellow>{name}</yellow>. Editing the copy.</green>"
  clone-failed: "<red>Could not clone that mannequin.</red>"
  delete-shift: "<yellow>Shift-click Delete to permanently remove this mannequin.</yellow>"
  equipment-copied: "<green>Copied your armor and hands onto the mannequin.</green>"
  nudged-y: "<green>Mannequin height set to <yellow>{value}</yellow>.</green>"
  nudged-xz: "<green>Mannequin moved to <yellow>{x}</yellow>, <yellow>{z}</yellow>.</green>"
  adjust-started: "<green>Placement adjust mode.</green> <gray>Stay within 12 blocks of the mannequin.</gray>"
  adjust-ended: "<gray>Left placement adjust mode.</gray>"
  adjust-out-of-range: "<yellow>Adjust mode ended.</yellow> <gray>You moved too far away or changed worlds.</gray>"
  adjust-hint: "<gray>Aim in the air · Left/Right click rotate · Sneak+click raise/lower · Scroll strafe · F nudge · Drop (Q) done</gray>"
  adjust-actionbar: "<gold>Adjust</gold> <gray>|</gray> <white>Air click</white> <gray>rotate</gray> <dark_gray>·</dark_gray> <white>Sneak+Click</white> <gray>Y</gray> <dark_gray>·</dark_gray> <white>Scroll</white> <gray>strafe</gray> <dark_gray>·</dark_gray> <white>Q</white> <gray>done</gray>"
  adjuster-name: "<gold><bold>Mannequin Adjuster</bold></gold>"
  adjuster-lore-1: "<gray>Click in the air (or a block): rotate ±15°</gray>"
  adjuster-lore-2: "<gray>Sneak + click: move up / down</gray>"
  adjuster-lore-3: "<gray>Scroll: strafe · F: nudge forward (sneak = back)</gray>"
  adjuster-lore-4: "<yellow>Drop (Q) to finish and reopen editor</yellow>"

# ==================== ITEM EDITOR ====================
editor:
  gui-title: "<gradient:#FF6B6B:#FFE66D><bold>Item Editor</bold></gradient>"
  lore-gui-title: "<gradient:#55FF55:#AAFFAA><bold>Lore Editor</bold></gradient>"
  enchant-gui-title: "<gradient:#55FFFF:#55AAFF><bold>Enchantments</bold></gradient>"
  enchant-picker-title: "<gradient:#55FFFF:#55AAFF><bold>Add Enchantment</bold></gradient>"
  attrib-gui-title: "<gradient:#FFE66D:#FF6B6B><bold>Item Attributes</bold></gradient>"
  attrib-select-title: "<gradient:#FFE66D:#FF6B6B><bold>Select Item Attribute</bold></gradient>"
  flags-gui-title: "<gradient:#FFE66D:#FFAA00><bold>Item Flags</bold></gradient>"
  template-gui-title: "<gradient:#FFE66D:#FF6B6B><bold>Templates</bold></gradient>"
  no-item-held: "<red>Hold an item in your main hand and click the hopper to start editing.</red>"
  no-session: "<red>No active editing session. Open the editor first with <yellow>/sa itemeditor</yellow>.</red>"
  draft-restored: "<green>Restored your previous editing session.</green>"
  draft-failed: "<red>Could not restore draft.</red>"
  draft-saved-close: "<gold>Editor closed. Progress saved as a draft. Reopen <yellow>/sa itemeditor</yellow> to continue.</gold>"
  session-started: "<green>Editing session started. Use the GUI or commands to edit the item.</green>"
  session-finished: "<green>Item updated.</green>"
  session-cancelled: "<yellow>Editing cancelled. Your original item was returned.</yellow>"
  cancel-confirm: "<yellow>Click <red>Cancel</red> again to discard your edits.</yellow>"
  reset-confirm: "<yellow>Click <red>Reset</red> again to discard all changes.</yellow>"
  mode-changed: "<gray>Editor mode changed to <yellow>{mode}</yellow>.</gray>"
  undo-success: "<yellow>Undone: <gray>{change}</gray></yellow>"
  undo-empty: "<red>Nothing to undo.</red>"
  reset-success: "<yellow>Item reset to original state.</yellow>"
  name-set: "<green>Display name updated.</green>"
  lore-added: "<green>Lore line added.</green>"
  lore-set: "<green>Lore line updated.</green>"
  lore-removed: "<green>Lore line removed.</green>"
  lore-cleared: "<green>All lore cleared.</green>"
  lore-clear-confirm: "<yellow>Click <red>Clear All Lore</red> again to confirm.</yellow>"
  enchant-added: "<green>Added <yellow>{enchant}</yellow> level <yellow>{level}</yellow>.</green>"
  enchant-applied: "<green>Enchantment applied.</green>"
  enchant-removed: "<green>Enchantment removed.</green>"
  enchants-cleared: "<green>All enchantments cleared.</green>"
  enchant-clear-confirm: "<yellow>Click <red>Clear All</red> again to remove every enchantment.</yellow>"
  enchant-at-max: "<red><yellow>{enchant}</yellow> is already at max level <white>{level}</white>. Switch to <yellow>EXPERT</yellow> mode for unsafe levels.</red>"
  invalid-enchantment: "<red>Invalid enchantment name.</red>"
  flag-added: "<green>Item flag added.</green>"
  flag-removed: "<green>Item flag removed.</green>"
  invalid-flag: "<red>Invalid item flag. Valid examples: HIDE_ENCHANTS, HIDE_ATTRIBUTES, HIDE_UNBREAKABLE.</red>"
  now-unbreakable: "<green>Item is now unbreakable.</green>"
  now-breakable: "<yellow>Item is now breakable.</yellow>"
  modeldata-set: "<green>Custom model data set.</green>"
  invalid-number: "<red>Invalid number.</red>"
  invalid-color: "<red>Invalid color. Use format: R,G,B (each 0-255)</red>"
  invalid-potion: "<red>Invalid potion type. Examples: SPEED, STRENGTH, HEALING</red>"
  invalid-attribute: "<red>Invalid attribute name. Examples: generic_max_health, generic_attack_damage</red>"
  invalid-operation: "<red>Invalid operation. Use: add, mult_base, mult_total</red>"
  attribute-added: "<green>Attribute modifier added.</green>"
  attribute-selected: "<green>Selected: <gold>{attribute}</gold></green>"
  requires-advanced: "<red>This feature requires ADVANCED editor mode.</red>"
  use-gui-for-attributes: "<yellow>Attribute editing is only available through the GUI. Use <green>/sa itemeditor</green> to open it.</yellow>"
  cmd-fallback-help: "<gray>Use <yellow>/sa itemeditor name|lore|enchant|flag|template</yellow> for command-based editing.</gray>"
  template-saved: "<green>Template <yellow>{name}</yellow> saved.</green>"
  template-loaded: "<green>Template <yellow>{name}</yellow> loaded into working copy.</green>"
  template-deleted: "<green>Template <yellow>{name}</yellow> deleted.</green>"
  template-renamed: "<green>Template renamed <yellow>{old}</yellow> → <yellow>{name}</yellow>.</green>"
  template-cloned: "<green>Template <yellow>{old}</yellow> cloned as <yellow>{name}</yellow>.</green>"
  template-rename-failed: "<red>Could not rename template (missing or name <yellow>{name}</yellow> already exists).</red>"
  template-clone-failed: "<red>Could not clone template (missing or name <yellow>{name}</yellow> already exists).</red>"
  template-info: "<gray>Template <yellow>{name}</yellow> · creator <white>{creator}</white> · global <white>{global}</white> · locked <white>{locked}</white></gray>"
  template-delete-confirm: "<yellow>Shift-click <white>{name}</white> again to confirm deletion.</yellow>"
  template-not-found: "<red>Template not found.</red>"
  template-invalid-name: "<red>Invalid template name.</red>"
  template-not-owner: "<red>You don't own that template.</red>"
  template-locked: "<red>That template is locked.</red>"
  no-templates: "<gray>No templates available.</gray>"
  template-list-header: " <yellow><bold>Templates</bold></yellow>"
  template-list-entry: "<click:run_command:'/sa itemeditor template load {name}'><hover:show_text:'<green>Click to load template'> <dark_gray>-</dark_gray> <yellow>{name}</yellow></hover></click>"
  draft-available: "<gold>You have an unsaved item editor draft! Use <yellow>/sa itemeditor</yellow> to recover it.</gold>"

# ==================== AFK ====================
afk:
  enabled-self: "<gray>You are now <yellow>AFK</yellow>.</gray>"
  disabled-self: "<gray>You are no longer <yellow>AFK</yellow>.</gray>"
  enabled: "<gray>Marked <yellow>{player}</yellow> as <yellow>AFK</yellow>.</gray>"
  disabled: "<gray>Unmarked <yellow>{player}</yellow> from <yellow>AFK</yellow>.</gray>"
  enabled-target: "<gray>You have been marked as <yellow>AFK</yellow>.</gray>"
  disabled-target: "<gray>You are no longer marked as <yellow>AFK</yellow>.</gray>"
  broadcast-enabled: "<gray><yellow>{player}</yellow> is now AFK.</gray>"
  broadcast-disabled: "<gray><yellow>{player}</yellow> is no longer AFK.</gray>"
  actionbar: "<yellow><bold>AFK</bold></yellow>"
  zone-exists: "<red>An AFK zone named <yellow>{zone}</yellow> already exists.</red>"
  zone-not-found: "<red>No AFK zone named <yellow>{zone}</yellow>.</red>"
  zone-created: "<green>AFK zone <yellow>{zone}</yellow> created at your location.</green>"
  zone-deleted: "<green>AFK zone <yellow>{zone}</yellow> deleted.</green>"
  zone-set-active: "<green>AFK zone <yellow>{zone}</yellow> is now active.</green>"
  zone-already-active: "<red>AFK zone <yellow>{zone}</yellow> is already active.</red>"
  zone-deactivated: "<green>AFK zone <yellow>{zone}</yellow> deactivated.</green>"
  zone-not-active: "<red>AFK zone <yellow>{zone}</yellow> is not currently active.</red>"
  drop-cancelled: "<red>You cannot drop items while AFK. Your AFK status has been removed.</red>"
  zone-list-header: " <yellow><bold>AFK Zones</bold></yellow>"
  zone-list-empty: " <gray>No AFK zones created yet.</gray>"
  zone-list-entry: " <dark_gray>-</dark_gray> <yellow>{zone}</yellow>{active} <gray>({location})</gray>"
  zone-active-tag: "<green>[Active]</green>"

# ==================== UTILITY ====================
utility:
  god-enabled-self: "<green>God mode enabled.</green>"
  god-disabled-self: "<red>God mode disabled.</red>"
  god-enabled: "<green>God mode enabled for <yellow>{player}</yellow>.</green>"
  god-disabled: "<red>God mode disabled for <yellow>{player}</yellow>.</red>"
  god-enabled-target: "<green>God mode enabled for you.</green>"
  god-disabled-target: "<red>God mode disabled for you.</red>"
  weather-set: "<green>Weather set to <yellow>{type}</yellow> in <yellow>{world}</yellow>.</green>"
  weather-invalid: "<red>Invalid weather type. Use: clear, rain, thunder</red>"
  time-set: "<green>Time set to <yellow>{value}</yellow> in <yellow>{world}</yellow>.</green>"
  time-invalid: "<red>Invalid time. Use: day, noon, sunset, night, midnight, sunrise, or a tick value (0-24000)</red>"
  time-locked: "<green>Time <bold>locked</bold> in <yellow>{world}</yellow> for <yellow>{duration}</yellow>.</green>"
  time-unlocked: "<green>Time <bold>unlocked</bold> in <yellow>{world}</yellow>.</green>"
  time-not-locked: "<red>Time is not locked in <yellow>{world}</yellow>.</red>"
  time-lock-expired: "<gray>Time lock expired in <yellow>{world}</yellow>.</gray>"
  weather-locked: "<green>Weather <bold>locked</bold> to <yellow>{type}</yellow> in <yellow>{world}</yellow> for <yellow>{duration}</yellow>.</green>"
  weather-unlocked: "<green>Weather <bold>unlocked</bold> in <yellow>{world}</yellow>.</green>"
  weather-not-locked: "<red>Weather is not locked in <yellow>{world}</yellow>.</red>"
  weather-lock-expired: "<gray>Weather lock expired in <yellow>{world}</yellow>.</gray>"
  healed-self: "<green>You have been healed.</green>"
  healed: "<green>Healed <yellow>{player}</yellow>.</green>"
  healed-target: "<green>You have been healed by <yellow>{staff}</yellow>.</green>"
  fed-self: "<green>You have been fed.</green>"
  fed: "<green>Fed <yellow>{player}</yellow>.</green>"
  fed-target: "<green>You have been fed by <yellow>{staff}</yellow>.</green>"
  nightvision-toggled: "<dark_aqua>Night vision <yellow>{state}</yellow>.</dark_aqua>"
  nightvision-toggled-other: "<dark_aqua>Night vision <yellow>{state}</yellow> for <yellow>{player}</yellow>.</dark_aqua>"
  killed: "<green>Killed <yellow>{player}</yellow>.</green>"
  fakeop-sent: "<green>Sent fake op message to <yellow>{player}</yellow>.</green>"
  fakeop-notification: "<gray>[Server: Made {player} a server operator]</gray>"
  burned: "<green>Set <yellow>{player}</yellow> on fire for <yellow>{seconds}s</yellow>.</green>"
  burn-invalid-duration: "<red>Invalid burn duration. Must be a positive number.</red>"
  extinguish-self: "<green>Fire extinguished.</green>"
  extinguish: "<green>Extinguished <yellow>{player}</yellow>.</green>"
  extinguish-target: "<green>Your fire was put out by <yellow>{staff}</yellow>.</green>"
  more-self: "<green>Main hand refilled to <yellow>{amount}</yellow>.</green>"
  more: "<green>Refilled <yellow>{player}</yellow>'s main hand to <yellow>{amount}</yellow>.</green>"
  more-target: "<green>Your main hand was refilled to <yellow>{amount}</yellow> by <yellow>{staff}</yellow>.</green>"
  more-no-item-self: "<red>Hold an item in your main hand.</red>"
  more-no-item: "<red><yellow>{player}</yellow> is not holding an item in their main hand.</red>"
  effect-unknown: "<red>Unknown effect: <yellow>{value}</yellow>. Use tab completion for ids (e.g. speed, slowness).</red>"
  effect-applied: "<green>Applied <yellow>{effect}</yellow> to <yellow>{player}</yellow> for <yellow>{duration}</yellow> (amp <yellow>{amp}</yellow>).</green>"
  effect-applied-target: "<green>You received effect <yellow>{effect}</yellow> from <yellow>{staff}</yellow>.</green>"
  lightning: "<green>Struck <yellow>{player}</yellow> with lightning.</green>"
  gamemode-set-self: "<green>Gamemode set to <yellow>{mode}</yellow>.</green>"
  gamemode-set: "<green>Set <yellow>{player}</yellow>'s gamemode to <yellow>{mode}</yellow>.</green>"
  gamemode-set-target: "<green>Your gamemode was set to <yellow>{mode}</yellow> by <yellow>{staff}</yellow>.</green>"
  gamemode-invalid: "<red>Invalid gamemode. Use: survival, creative, adventure, spectator (or s, c, a, sp, 0, 1, 2, 3)</red>"
  walkspeed-set-self: "<green>Walk speed set to <yellow>{speed}</yellow>.</green>"
  walkspeed-set: "<green>Set <yellow>{player}</yellow>'s walk speed to <yellow>{speed}</yellow>.</green>"
  walkspeed-set-target: "<green>Your walk speed was set to <yellow>{speed}</yellow>.</green>"
  flyspeed-set-self: "<green>Fly speed set to <yellow>{speed}</yellow>.</green>"
  flyspeed-set: "<green>Set <yellow>{player}</yellow>'s fly speed to <yellow>{speed}</yellow>.</green>"
  flyspeed-set-target: "<green>Your fly speed was set to <yellow>{speed}</yellow>.</green>"
  speed-invalid: "<red>Invalid speed. Must be between -1 and 1.</red>"
  fly-enabled-self: "<green>Flight enabled.</green>"
  fly-disabled-self: "<red>Flight disabled.</red>"
  fly-enabled: "<green>Flight enabled for <yellow>{player}</yellow>.</green>"
  fly-disabled: "<red>Flight disabled for <yellow>{player}</yellow>.</red>"
  fly-enabled-target: "<green>Flight enabled for you.</green>"
  fly-disabled-target: "<red>Flight disabled for you.</red>"
  kickall-success: "<green>Kicked <yellow>{count}</yellow> player(s).</green>"
  kickall-screen: "<red><bold>Server Kick</bold></red>\n<gray>{reason}</gray>"
  kickall-default-reason: "Server restart"
  tpall-success: "<green>Teleported <yellow>{count}</yellow> player(s) to your location.</green>"
  tpall-world: "<green>Teleported <yellow>{count}</yellow> player(s) from <yellow>{world}</yellow> to your location.</green>"
  tpall-players: "<green>Teleported <yellow>{count}</yellow> player(s) to you: <white>{players}</white>.</green>"
  tpall-none: "<red>No online players to teleport.</red>"
  exp-gave-self: "<green>Gave yourself <yellow>{amount}</yellow> {type}.</green>"
  exp-removed-self: "<red>Removed <yellow>{amount}</yellow> {type} from yourself.</red>"
  exp-gave: "<green>Gave <yellow>{amount}</yellow> {type} to <yellow>{player}</yellow>.</green>"
  exp-gave-target: "<green>You received <yellow>{amount}</yellow> {type} from <yellow>{staff}</yellow>.</green>"
  exp-removed: "<red>Removed <yellow>{amount}</yellow> {type} from <yellow>{player}</yellow>.</red>"
  exp-removed-target: "<red><yellow>{staff}</yellow> removed <yellow>{amount}</yellow> {type} from you.</red>"
  exp-reset-self: "<green>Your experience has been reset.</green>"
  exp-reset: "<green>Reset experience for <yellow>{player}</yellow>.</green>"
  exp-reset-target: "<yellow>Your experience was reset by <white>{staff}</white>.</yellow>"
  exp-show-self: "<gray>Experience: <white>Level {level}</white> <dark_gray>({percent}%)</dark_gray> · total <white>{total}</white></gray>"
  exp-show: "<gray><yellow>{player}</yellow> experience: <white>Level {level}</white> <dark_gray>({percent}%)</dark_gray> · total <white>{total}</white></gray>"
  maintenance-enabled: "<red><bold>Maintenance mode</bold></red> <gray>enabled by <yellow>{staff}</yellow>.</gray>"
  maintenance-disabled: "<green><bold>Maintenance mode</bold></green> <gray>disabled by <yellow>{staff}</yellow>.</gray>"
  maintenance-kick-screen: "<red><bold>Server is in maintenance mode.</bold></red>\n<gray>Try again later.</gray>"
  clearinv-self: "<green>Your inventory has been cleared.</green>"
  clearinv: "<green>Cleared <yellow>{player}</yellow>'s inventory.</green>"
  clearinv-target: "<red>Your inventory was cleared by <yellow>{staff}</yellow>.</red>"
  clearinv-confirm: "<yellow>Are you sure you want to clear <red>{player}</red>'s inventory? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  kickall-confirm: "<yellow>Kick <red>all</red> online players? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  tpall-confirm: "<yellow>Teleport <red>all</red> players to you? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  tpall-confirm-world: "<yellow>Teleport all players in <red>{world}</red> to you? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  clearground-confirm: "<yellow>Clear ground items in radius <red>{radius}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  clearlag-force-confirm: "<yellow>Force a clearlag sweep now? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  clearlag-preview-result: "<gray>Clearlag preview: <yellow>{count}</yellow> item(s) would be removed. <dark_gray>({preserved} preserved)</dark_gray></gray>"
  give-self: "<green>Gave yourself <yellow>{amount}x {material}</yellow>.</green>"
  give: "<green>Gave <yellow>{player}</yellow> <yellow>{amount}x {material}</yellow>.</green>"
  give-target: "<green>You received <yellow>{amount}x {material}</yellow> from <yellow>{staff}</yellow>.</green>"
  take-self: "<green>Removed <yellow>{amount}x {material}</yellow> from your inventory.</green>"
  take: "<green>Took <yellow>{amount}x {material}</yellow> from <yellow>{player}</yellow>.</green>"
  take-target: "<red><yellow>{staff}</yellow> removed <yellow>{amount}x {material}</yellow> from your inventory.</red>"
  take-not-enough: "<red><yellow>{player}</yellow> does not have any <yellow>{material}</yellow>.</red>"
  clearground: "<green>Cleared <yellow>{count}</yellow> ground item(s). <gray>({preserved} preserved)</gray></green>"
  clearground-invalid-radius: "<red>Invalid radius. Must be a positive number.</red>"
  killall-success: "<green>Removed <yellow>{count}</yellow> <yellow>{type}</yellow> entities.</green>"
  killall-invalid-type: "<red>Unknown entity type or group: <yellow>{type}</yellow>. Use 'all', 'hostile', 'passive', 'vehicle', 'projectile', 'utility', 'item', or a specific entity type.</red>"
  repair-self: "<green>Your held item has been repaired.</green>"
  repair: "<green>Repaired <yellow>{player}</yellow>'s held item.</green>"
  repair-target: "<green>Your held item was repaired by <yellow>{staff}</yellow>.</green>"
  repair-no-item: "<red>You are not holding an item.</red>"
  repair-no-item-target: "<red><yellow>{player}</yellow> is not holding an item.</red>"
  repair-not-damageable: "<red>Your held item cannot be repaired (no damage or not damageable).</red>"
  repair-not-damageable-target: "<red><yellow>{player}</yellow>'s held item cannot be repaired.</red>"
  repair-all-self: "<green>Repaired <yellow>{count}</yellow> item(s) in your inventory.</green>"
  repair-all: "<green>Repaired <yellow>{count}</yellow> item(s) in <yellow>{player}</yellow>'s inventory.</green>"
  repair-all-target: "<green><yellow>{count}</yellow> item(s) in your inventory were repaired by <yellow>{staff}</yellow>.</green>"
  repair-all-nothing: "<red>No damaged items to repair in your inventory.</red>"
  repair-all-nothing-target: "<red>No damaged items to repair in <yellow>{player}</yellow>'s inventory.</red>"
  enchant-no-item: "<red>You are not holding an item.</red>"
  enchant-applied: "<green>Applied <yellow>{enchant}</yellow> level <yellow>{level}</yellow> to your held item.</green>"
  enchant-removed: "<green>Removed <yellow>{enchant}</yellow> from your held item.</green>"
  enchant-cleared: "<green>Removed <yellow>{count}</yellow> enchantment(s) from your held item.</green>"
  enchant-none-on-item: "<red>Your held item has no enchantments.</red>"
  enchant-incompatible: "<red><yellow>{enchant}</yellow> cannot be applied to <yellow>{item}</yellow>.</red>"
  enchant-not-present: "<red>Your held item does not have <yellow>{enchant}</yellow>.</red>"
  enchant-conflict: "<red><yellow>{enchant}</yellow> conflicts with <yellow>{other}</yellow> already on the item.</red>"
  enchant-invalid-level: "<red>Enchantment level must be at least 1.</red>"
  enchant-level-too-high: "<red>Level exceeds vanilla max (<yellow>{max}</yellow>). Use level <yellow>op</yellow> or permission <yellow>soapsadmin.enchant.op</yellow>.</red>"
  enchant-overlimit-cap: "<red>Over-limit level cannot exceed <yellow>{max}</yellow>.</red>"
  enchant-suggestions: "<red>Unknown enchantment. Did you mean: <yellow>{suggestions}</yellow>?</red>"
  enchant-invalid-page: "<red>Invalid page. Use <yellow>1</yellow> to <yellow>{max}</yellow>.</red>"
  enchant-invalid-page-number: "<red>Page must be a number. Usage: <yellow>/sa enchants [page]</yellow></red>"
  enchant-bulk-max: "<green>Applied <yellow>{count}</yellow> compatible enchantment(s) at vanilla max level.</green>"
  enchant-bulk-op: "<green>Applied <yellow>{count}</yellow> compatible enchantment(s) at over-limit level (255).</green>"
  enchant-bulk-skipped: "<gray>Skipped <yellow>{count}</yellow> conflicting enchantment(s) (max mode respects exclusives).</gray>"
  enchant-bulk-summary: "<gray>Result: <white>{enchants}</white></gray>"
  enchants-all-header: "<yellow><bold>All enchantments</bold></yellow> <dark_gray>(page {page}/{pages}, {total} total)</dark_gray>"
  enchants-page-hint: "<dark_gray>Next page: <yellow>{command}</yellow></dark_gray>"
  enchants-item-header: "<yellow><bold>Compatible enchantments for <white>{item}</white></bold></yellow> <dark_gray>({count})</dark_gray>"
  enchants-item-current: "<gray>Current: <white>{enchants}</white></gray>"
  enchants-item-entry: "<dark_gray>  •</dark_gray> <white>{enchant}</white> <dark_gray>({id})</dark_gray> max <yellow>{max}</yellow> · now {current}"
  enchants-item-footer: "<dark_gray>Use <yellow>/sa enchant [enchant] [level|max|op]</yellow> · bulk: <yellow>/sa enchant max</yellow> or <yellow>op</yellow></dark_gray>"
  enchants-item-empty: "<red>No enchantments can be applied to <yellow>{item}</yellow>.</red>"
  clearlag-warning: "<yellow><bold>⚠</bold> Ground items will be cleared in <red>{seconds}s</red>.</yellow>"
  clearlag-bossbar: "<yellow>Clearlag in {seconds}s</yellow>"
  clearlag-cleared: "<gray>Cleared <yellow>{count}</yellow> ground item(s). <dark_gray>({preserved} preserved)</dark_gray></gray>"
  clearlag-enabled: "<green>Clearlag <bold>running</bold>. Interval: <yellow>{interval}s</yellow>.</green>"
  clearlag-disabled: "<red>Clearlag <bold>stopped</bold>.</red>"
  clearlag-not-enabled: "<red>Clearlag is not enabled in the config.</red>"
  clearlag-status: "<gray>Clearlag runtime: {status} <dark_gray>| config: {config_enabled} <dark_gray>| next <yellow>{remaining}s</yellow> · interval <white>{interval}s</white> · mode <white>{mode}</white></dark_gray></gray>"
  ptime-set: "<green>Set client time for <yellow>{player}</yellow> to <yellow>{value}</yellow> <gray>(relative: {relative})</gray></green>"
  ptime-reset: "<green>Reset client time for <yellow>{player}</yellow>.</green>"
  pweather-set: "<green>Set client weather for <yellow>{player}</yellow> to <yellow>{type}</yellow>.</green>"
  pweather-reset: "<green>Reset client weather for <yellow>{player}</yellow>.</green>"
  clearlag-force: "<green>Forced a clearlag sweep. Removed <yellow>{count}</yellow> item(s).</green>"
  # Tier 1 - New Utility Commands
  uptime: "<green>Server uptime: <yellow>{time}</yellow></green>"
  ping-self: "<green>Your ping: <{color}>{ping}ms</{color}></green>"
  ping: "<green><yellow>{player}</yellow>'s ping: <{color}>{ping}ms</{color}></green>"
  hat-success: "<green>You are now wearing your held item as a hat.</green>"
  hat-no-item: "<red>You must be holding an item to wear as a hat.</red>"
  cleareffects-self: "<green>Cleared <yellow>{count}</yellow> potion effect(s) from yourself.</green>"
  cleareffects-self-none: "<gray>You have no potion effects to clear.</gray>"
  cleareffects: "<green>Cleared <yellow>{count}</yellow> potion effect(s) from <yellow>{player}</yellow>.</green>"
  cleareffects-none: "<gray><yellow>{player}</yellow> has no potion effects to clear.</gray>"
  cleareffects-target: "<green>Your potion effects were cleared by <yellow>{staff}</yellow>.</green>"
  cleareffects-target-none: "<gray><yellow>{staff}</yellow> tried to clear your potion effects, but you had none.</gray>"
  top: "<green>Teleported to the highest block at Y=<yellow>{y}</yellow>.</green>"
  jump: "<green>Jumped to <yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>.</green>"
  jump-unsafe: "<red>That location looks unsafe to jump to.</red>"
  tpoffline: "<green>Teleported to <yellow>{player}</yellow>'s last logout (<white>{world}</white> @ {x}, {y}, {z}).</green>"
  tpoffline-online: "<yellow>{player}</yellow> <red>is online. Use /sa tpto instead.</red>"
  tpoffline-unknown: "<red>No last logout location stored for <yellow>{player}</yellow>.</red>"
  tpoffline-world-missing: "<red>Last logout world <yellow>{world}</yellow> for <white>{player}</white> is not loaded.</red>"
  tpoffline-unsafe: "<red>Last logout location for <yellow>{player}</yellow> looks unsafe.</red>"
  bottom: "<green>Teleported to Y <yellow>{y}</yellow>.</green>"
  bottom-unsafe: "<red>Cannot teleport further down safely.</red>"
  near-header: "<green>Found <yellow>{count}</yellow> player(s) within <yellow>{radius}</yellow> blocks:</green>"
  near-none: "<yellow>No players found within <white>{radius}</white> blocks.</yellow>"
  near-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow> <gray>({distance} blocks)</gray>{vanished}"
  near-vanished-tag: " <dark_aqua>[vanished]</dark_aqua>"
  near-invalid-radius: "<red>Invalid radius. Must be between 1 and 1000.</red>"
  near-invalid-count: "<red>Invalid count for --count.</red>"
  smite: "<green>Smote <yellow>{player}</yellow> with lightning.</green>"
  smite-target: "<red>You were smitten by <yellow>{staff}</yellow>.</red>"
  damage-self: "<yellow>You damaged yourself by <white>{amount}</white> (<white>{type}</white>).</yellow>"
  damage: "<green>Damaged <yellow>{player}</yellow> by <white>{amount}</white> (<white>{type}</white>).</green>"
  damage-target: "<red><yellow>{staff}</yellow> damaged you by <white>{amount}</white> (<white>{type}</white>).</red>"
  hunger-self: "<green>Your hunger was set to <yellow>{amount}</yellow>.</green>"
  hunger: "<green>Set <yellow>{player}</yellow>'s hunger to <yellow>{amount}</yellow>.</green>"
  hunger-target: "<yellow>{staff}</yellow> set your hunger to <yellow>{amount}</yellow>."
  rocket: "<green>Rocketted <yellow>{player}</yellow> upward with a firework.</green>"
  rocket-target: "<red>You were rocketted into the air.</red>"
  pumpkinhead: "<green>Put a pumpkin on <yellow>{player}</yellow>'s head.</green>"
  pumpkinhead-target: "<red>A pumpkin has been placed on your head.</red>"
  sudo-success: "<green>Forced <yellow>{player}</yellow> to execute: <white>{input}</white></green>"
  sudo-exempt: "<red><yellow>{player}</yellow> is exempt from sudo.</red>"
  stack-success: "<green>Stacked similar items in your inventory.</green>"
  # Tier 2 - World Teleport
  world-list-header: "<yellow>Available worlds:</yellow>"
  world-list-entry: "<click:run_command:'/sa world {world}'><hover:show_text:'<green>Click to teleport'> <gray>- <white>{world}</white> <dark_gray>({environment}, {players} players)</dark_gray></gray></hover></click>"
  world-teleport-self: "<green>Teleported to world <yellow>{world}</yellow>.</green>"
  world-teleport: "<green>Teleported <yellow>{player}</yellow> to world <yellow>{world}</yellow>.</green>"
  world-teleport-target: "<green>You were teleported to world <yellow>{world}</yellow> by <yellow>{staff}</yellow>.</green>"
  world-not-found: "<red>World <yellow>{world}</yellow> not found.</red>"
  # Tier 2 - Back Command
  back-success: "<green>Teleported to your previous location.</green>"
  back-none: "<red>No previous location saved.</red>"
  back-world-unloaded: "<red>Your previous location's world is no longer loaded.</red>"
  # Tier 2 - IP Whitelist
  ipwhitelist-added: "<green>Added <yellow>{ip}</yellow> to the trusted IP whitelist.</green>"
  ipwhitelist-removed: "<green>Removed <yellow>{ip}</yellow> from the trusted IP whitelist.</green>"
  ipwhitelist-not-found: "<red>IP <yellow>{ip}</yellow> is not in the trusted list.</red>"
  ipwhitelist-empty: "<yellow>No trusted IPs configured.</yellow>"
  ipwhitelist-header: "<green>Trusted IPs (<yellow>{count}</yellow>):</green>"
  ipwhitelist-entry: " <gray>• <white>{ip}</white></gray>"
  # Tier 2 - Inventory Sort
  sort-success: "<green>Inventory sorted and stacks merged.</green>"
  sort-other: "<green>Sorted <yellow>{player}</yellow>'s inventory.</green>"
  sort-target: "<green>Your inventory was sorted by <yellow>{staff}</yellow>.</green>"
  invalid-amount: "<red>Invalid amount. Must be a positive number (1-6400).</red>"
  invalid-material: "<red>Unknown item: <yellow>{material}</yellow>.</red>"
  # Item info
  iteminfo-header: "<gray><st>           </st></gray> <gold><bold>Item Info</bold></gold> <gray><st>           </st></gray>"
  iteminfo-air: "<gray>You are not holding any item <dark_gray>(air)</dark_gray>.</gray>"
  # Identity
  iteminfo-id: "<dark_aqua>ID: <white>{id}</white></dark_aqua>"
  iteminfo-material: "<gray>Material: <white>{material}</white></gray>"
  iteminfo-amount: "<gray>Amount: <white>{amount}</white></gray>"
  iteminfo-slot: "<gray>Held Slot: <white>{slot}</white></gray>"
  iteminfo-max-stack: "<gray>Max Stack: <white>{max}</white></gray>"
  iteminfo-translation-key: "<gray>Translation Key: <dark_gray>{key}</dark_gray></gray>"
  iteminfo-rarity: "<gray>Rarity: <white>{rarity}</white></gray>"
  # Display
  iteminfo-display-name: "<gray>Display Name: <reset>{name}</reset></gray>"
  iteminfo-lore-header: "<gray>Lore:</gray>"
  iteminfo-lore-line: "<dark_gray>  {i}. {line}</dark_gray>"
  # Enchantments
  iteminfo-enchants-header: "<aqua>Enchantments:</aqua>"
  iteminfo-enchant: "<dark_gray>  •</dark_gray> <aqua>{enchant}</aqua> <white>{level}</white>"
  iteminfo-stored-enchants-header: "<aqua>Stored Enchantments:</aqua>"
  # Durability
  iteminfo-durability: "<gray>Durability: <white>{current}</white><dark_gray>/</dark_gray><white>{max}</white> <dark_gray>({pct}%)</dark_gray></gray>"
  iteminfo-unbreakable: "<gray>Unbreakable: <green>yes</green></gray>"
  # Flags & model
  iteminfo-flags: "<gray>Item Flags: <white>{flags}</white></gray>"
  iteminfo-custom-model: "<gray>Custom Model Data: <white>{cmd}</white></gray>"
  # Attributes
  iteminfo-attributes-header: "<yellow>Attribute Modifiers:</yellow>"
  iteminfo-attribute: "<dark_gray>  •</dark_gray> <yellow>{attr}</yellow> <dark_gray>{op}</dark_gray> <white>{amount}</white> <dark_gray>[{slot}]</dark_gray>"
  # Type-specific
  iteminfo-book-title: "<gray>Book Title: <white>{title}</white></gray>"
  iteminfo-book-author: "<gray>Book Author: <white>{author}</white></gray>"
  iteminfo-book-pages: "<gray>Book Pages: <white>{pages}</white></gray>"
  iteminfo-skull-owner: "<gray>Skull Owner: <white>{owner}</white></gray>"
  iteminfo-potion-type: "<gray>Potion Type: <white>{type}</white></gray>"
  iteminfo-custom-effects-header: "<gray>Custom Potion Effects:</gray>"
  iteminfo-potion-effect: "<dark_gray>  •</dark_gray> <gray>{effect}</gray> <white>amp={amp} dur={dur}s</white>"
  iteminfo-leather-color: "<gray>Leather Color: <white>#{hex}</white> <dark_gray>(R:{r} G:{g} B:{b})</dark_gray></gray>"
  iteminfo-firework-power: "<gray>Firework Power: <white>{power}</white></gray>"
  iteminfo-firework-effect: "<dark_gray>  •</dark_gray> <gray>{type}</gray> <dark_gray>trail={trail} twinkle={twinkle}</dark_gray>"
  iteminfo-map-id: "<gray>Map ID: <white>{id}</white></gray>"
  iteminfo-compass-lodestone: "<gray>Lodestone: <white>{world} ({x},{y},{z})</white> <dark_gray>tracked={tracked}</dark_gray></gray>"
  iteminfo-bundle-items: "<gray>Bundle Contents: <white>{count} item(s)</white></gray>"
  # PDC / NBT
  iteminfo-pdc-header: "<light_purple>Persistent Data <dark_gray>({count} keys):</dark_gray></light_purple>"
  iteminfo-pdc-entry: "<dark_gray>  •</dark_gray> <light_purple>{key}</light_purple><dark_gray>=</dark_gray><white>{value}</white>"
  # Legacy kept for backward compat
  iteminfo-type: "<gray>Item Type: <white>{type}</white></gray>"

# ==================== WORLD STATE ====================
world-state:
  safe-spawn: "<gray>World <yellow>{world}</yellow> was unavailable. You were moved to a safe spot in this world.</gray>"

# ==================== WORLD MANAGER ====================
world-manager:
  already-loaded: "<red>World <yellow>{world}</yellow> is already loaded.</red>"
  folder-exists: "<red>A world folder named <yellow>{world}</yellow> already exists. Use <yellow>/sa world load {world}</yellow> to load it.</red>"
  not-found: "<red>No world folder found for <yellow>{world}</yellow>.</red>"
  invalid-layout: "<red>World folder <yellow>{world}</yellow> exists but does not match recognized world layout markers.</red>"
  not-loaded: "<red>World <yellow>{world}</yellow> is not currently loaded.</red>"
  creating: "<yellow>Creating world <white>{world}</white>… Queued behind other world ops.</yellow>"
  created: "<green>World <yellow>{world}</yellow> created. <dark_gray>(type: {type}, env: {env})</dark_gray></green>"
  create-failed: "<red>Failed to create world <yellow>{world}</yellow>. Check the console for details.</red>"
  loading: "<yellow>Loading world <white>{world}</white>…</yellow>"
  loaded: "<green>World <yellow>{world}</yellow> loaded.</green>"
  load-failed: "<red>Failed to load world <yellow>{world}</yellow>. Check the console for details.</red>"
  unloading: "<yellow>Unloading world <white>{world}</white>…</yellow>"
  unloaded: "<green>World <yellow>{world}</yellow> unloaded <dark_gray>({saved})</dark_gray>.</green>"
  unload-failed: "<red>Could not unload <yellow>{world}</yellow>. Is it the default world?</red>"
  deleting: "<yellow>Deleting world <white>{world}</white>…</yellow>"
  queued: "<gray>World op queued for <white>{world}</white> <dark_gray>(#{position})</dark_gray>. Waiting for previous work to finish.</gray>"
  kicked-from-world: "<yellow>You were teleported away because world <white>{world}</white> is unloading.</yellow>"
  usage: "<red>Usage: /sa world [help|create|load|unload|list|fixgenerator|gui|tp] [name] [type] [env] [seed] [biome|--biome biome|single:biome]</red>"
  usage-fixgen: "<red>Usage: /sa world fixgenerator <world></red>"
  fixgen-started: "<yellow>Re-attaching generator for <white>{world}</white> (unload → reload)…</yellow>"
  fixgen-ok: "<green>Generator restored for <yellow>{world}</yellow> <dark_gray>({generator})</dark_gray>.</green>"
  fixgen-failed: "<red>Could not reattach generator for <yellow>{world}</yellow>. Check console / make sure it is not the default world.</red>"
  fixgen-default-world: "<red>Cannot reattach generator on the main/default world <yellow>{world}</yellow>.</red>"
  fixgen-terrain-note: "<gray>Already-generated land chunks stay on disk. To clear them: unload the world, delete its <white>region/</white> folder (keep spawn if you want), then <white>/sa world load</white>.</gray>"
  list-header: "<yellow>Known worlds <dark_gray>(★ = loaded)</dark_gray>:</yellow>"
  list-entry-loaded: " <green>★ <white>{world}</white> <dark_gray>({env}, {players} players)</dark_gray></green>"
  list-entry-unloaded: " <dark_gray>◦ {world} (unloaded)</dark_gray>"
  invalid-env: "<red>Invalid environment. Use: normal, nether, end</red>"
  invalid-type: "<red>Invalid type. Use: default, flat, amplified, void</red>"
  invalid-biome: "<red>Invalid biome <yellow>{biome}</yellow>. Use tab-completion for valid biome keys.</red>"
  deleted: "<green>World <yellow>{world}</yellow> has been permanently deleted.</green>"
  delete-failed: "<red>Could not delete world <yellow>{world}</yellow>. Is it the default world or still in use?</red>"
  delete-confirm: "<yellow>Shift+Right-click <white>{world}</white> again to confirm deletion.</yellow>"
  invalid-name: "<red>Invalid world name. Use letters, numbers, underscores, or hyphens only.</red>"
  wizard-started: "<yellow>Creating world <white>{world}</white>… You will be returned to the world list when ready.</yellow>"

# ==================== TELEPORTATION ====================
teleportation:
  warmup: "<yellow>Teleporting in <white>{seconds}</white> seconds. Stay still.</yellow>"
  warmup-actionbar: "<yellow>Teleporting in <white>{seconds}s</white>...</yellow>"
  teleported-actionbar: "<green>Teleported.</green>"
  warmup-cancelled-move: "<red>Teleport cancelled. You moved.</red>"
  warmup-cancelled-damage: "<red>Teleport cancelled. You took damage.</red>"
  cooldown: "<red>You must wait <yellow>{seconds}</yellow> seconds before teleporting again.</red>"
  claims-denied: "<red>You cannot teleport into that claim or protected region.</red>"
  claims-denied-set: "<red>You cannot set a home or warp here. You need build access (or be friends with the claim owner).</red>"
  claims-denied-rtp: "<red>Could not find a safe unclaimed location. Try again.</red>"
  invalid-destination: "<red>Teleport cancelled. Destination is no longer available.</red>"

# ==================== SPAWN ====================
spawn:
  set: "<green>Spawn set at <yellow>{world}</yellow> (<yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>).</green>"
  first-spawn-set: "<green>First-join spawn set at <yellow>{world}</yellow> (<yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>).</green>"
  deleted: "<green>Spawn point deleted.</green>"
  not-set: "<red>No spawn point has been set.</red>"
  teleported: "<green>Teleported to spawn.</green>"
  teleported-other: "<green>Teleported <yellow>{player}</yellow> to spawn.</green>"
  teleported-by: "<green>You were teleported to spawn by <yellow>{staff}</yellow>.</green>"
  world-spawn-set: "<green>World spawn set for <yellow>{world}</yellow> (<yellow>{x}</yellow>, <yellow>{y}</yellow>, <yellow>{z}</yellow>).</green>"
  world-spawn-teleported: "<green>Teleported to world spawn in <yellow>{world}</yellow>.</green>"
  world-spawn-failed: "<red>Could not use world spawn. Try again.</red>"

# ==================== BROADCAST ====================
broadcast:
  sent: "<green>Broadcast template <yellow>{name}</yellow> sent.</green>"
  raw-sent: "<green>Raw broadcast sent.</green>"
  template-not-found: "<red>Broadcast template <yellow>{name}</yellow> not found.</red>"
  no-templates: "<yellow>No broadcast templates configured.</yellow>"
  list-header: "<green>Broadcast Templates (<yellow>{count}</yellow>):</green>"
  list-entry: " <gray>• <yellow>{name}</yellow> <dark_gray>({mode})</dark_gray></gray>"
  edit-prompt: "<yellow>Enter new message for template <gold>{name}</gold> (current: {current}):</yellow>"
  edit-saved: "<green>Template <yellow>{name}</yellow> message updated in config.yml.</green>"
  edit-cancelled: "<gray>Template edit cancelled.</gray>"

# ==================== PRIVATE MESSAGES ====================
pm:
  sent: "<gray>[<yellow>me</yellow> → <yellow>{player}</yellow>]</gray> <white>{message}</white>"
  received: "<gray>[<yellow>{player}</yellow> → <yellow>me</yellow>]</gray> <white>{message}</white>"
  cannot-self: "<red>You cannot message yourself.</red>"
  ignored-by-target: "<red>This player is not accepting your messages.</red>"
  no-reply-target: "<red>You have nobody to reply to.</red>"
  reply-offline: "<red>That player is no longer online.</red>"
  ignored: "<green>You are now ignoring <yellow>{player}</yellow>.</green>"
  unignored: "<green>You are no longer ignoring <yellow>{player}</yellow>.</green>"
  cannot-ignore-staff: "<red>You cannot ignore staff members.</red>"
  ignore-list-empty: "<gray>Your ignore list is empty.</gray>"
  ignore-list-header: "<yellow>Ignored players</yellow> <gray>({count})</gray>"
  ignore-list-entry: " <dark_gray>-</dark_gray> <yellow>{player}</yellow>"
  ignore-cleared: "<green>Cleared your ignore list.</green>"

lastmsg:
  none: "<gray>You have nobody to reply to yet.</gray>"
  partner: "<gray>/sa r would reply to <yellow>{player}</yellow>.</gray>"
  partner-offline: "<gray>/sa r would reply to <yellow>{player}</yellow> <red>(offline)</red>.</gray>"

# ==================== PLAYER ACTIONS ====================
actions:
  sit-start: "<green>You are now sitting. Move to stand up.</green>"
  spin-start: "<green>You are now spinning.</green>"
  cancelled: "<gray>Action cancelled.</gray>"

# ==================== COMMAND SPY ====================
commandspy:
  enabled: "<green>Command Spy <bold>enabled</bold>. Monitoring all players.</green>"
  enabled-player: "<green>Command Spy <bold>enabled</bold>. Monitoring <yellow>{player}</yellow>.</green>"
  disabled: "<red>Command Spy <bold>disabled</bold>.</red>"
  format: "<dark_gray>[<aqua>CS</aqua>] <white>{player}</white>: <gray>{command}</gray></dark_gray>"

# ==================== SOCIAL SPY ====================
socialspy:
  enabled: "<green>Social Spy <bold>enabled</bold>. Monitoring private messages.</green>"
  disabled: "<red>Social Spy <bold>disabled</bold>.</red>"
  format: "<dark_gray>[<light_purple>SS</light_purple>] <white>{sender}</white> → <white>{target}</white>: <gray>{message}</gray></dark_gray>"

# ==================== GUI ====================
gui:
  disabled: "<red>GUI is disabled in the config. Use commands instead.</red>"
  disabled-hint: "<gray>Available: /sa help</gray>"
  unknown-menu: "<red>Menu '<white>{menu}</white>' does not exist.</red>"
  requires-context: "<red>This menu requires additional context and cannot be opened from here.</red>"
  item-opened: "<gray>Opened menu <yellow>{menu}</yellow>.</gray>"
  disabled-actions: "<red>GUI is disabled. Use commands for player actions.</red>"
  disabled-snapshot: "<red>GUI is disabled. Use <yellow>/sa snapshot <player></yellow> directly.</red>"
  player-not-online: "<red>Player is no longer online.</red>"
  player-offline: "<red>Player is no longer online.</red>"
  shift-confirm-destructive: "<yellow>Shift-click to confirm this destructive action.</yellow>"
  player-not-found: "<red>Player <yellow>{player}</yellow> not found. They may need to have joined the server before.</red>"
  action-title: "<gold>Actions: <yellow>{player}</yellow></gold>"
  dashboard-title: "<gold><bold>SoapsAdmin Dashboard</bold></gold>"
  player-dashboard-title: "<gradient:#00CED1:#00FA9A><bold>Player Dashboard</bold></gradient>"
  dashboard-player-lookup-prompt: "<yellow>Enter the <bold>player name</bold> to look up:</yellow>"
  dashboard-broadcast-prompt: "<yellow>Type your <bold>broadcast message</bold> to send to all players:</yellow>"
  dashboard-player-not-found: "<red>Player <yellow>{player}</yellow> not found.</red>"
  online: "<green>Online</green>"
  offline: "<red>Offline</red>"
  frozen: "<aqua>[Frozen]</aqua>"
  jailed: "<red>[Jailed]</red>"
  staff: "<gold>[Staff]</gold>"
  afk: "<yellow>[AFK]</yellow>"
  chat-input-kick: "<yellow>Enter the <bold>kick reason</bold> for <white>{player}</white>:</yellow>"
  chat-input-ban: "<yellow>Enter the <bold>ban reason</bold> for <white>{player}</white>:</yellow>"
  chat-input-mute: "<yellow>Enter the <bold>mute reason</bold> for <white>{player}</white>:</yellow>"
  chat-input-warn: "<yellow>Enter the <bold>warn reason</bold> for <white>{player}</white>:</yellow>"
  chat-input-tempban: "<yellow>Enter <bold>duration reason</bold> for tempban on <white>{player}</white>:</yellow>\n<gray>Example: <white>7d Hacking</white></gray>"
  chat-input-tempmute: "<yellow>Enter <bold>duration reason</bold> for tempmute on <white>{player}</white>:</yellow>\n<gray>Example: <white>1h Spam</white></gray>"
  chat-input-qp: "<yellow>Enter the <bold>template name</bold> for quick punish on <white>{player}</white>:</yellow>\n<gray>Available: {templates}</gray>"
  chat-input-lookup: "<yellow>Enter the <bold>player name</bold> to look up:</yellow>"
  chat-input-pay: "<yellow>Enter the <bold>amount</bold> to pay <white>{player}</white>:</yellow>\n<gray>Optionally specify economy: <white>100 coins</white></gray>"
  duration-reason-usage: "<red>Usage: <duration> <reason> (example: {example})</red>"
  invalid-duration: "<red>Invalid duration. Use e.g. 10m, 1h, 7d</red>"

guiconfig:
  usage: "<gray>Usage: <white>/sa guiconfig list|reload|regenerate</white></gray>"
  list-header: "<gold>Built-in GUI panels:</gold>"
  list-entry: " <gray>- <white>{menu}</white> <dark_gray>[{flags}]</dark_gray></gray>"
  regenerate-ok: "<green>Regenerated <white>gui.yml</white> from jar defaults (<white>{path}</white>).</green>"
  regenerate-backup-hint: "<gray>A previous copy was saved as <white>gui.yml.bak</white> when one existed. You can also delete <white>gui.yml</white> and reload to recreate it.</gray>"
  regenerate-failed: "<red>Failed to regenerate gui.yml. Check the console.</red>"
  reloaded: "<green>gui.yml reloaded.</green>"

# ==================== USAGE ====================
usage:
  kick: "<red>Usage: /sa kick <player> [reason]</red>"
  ban: "<red>Usage: /sa ban <player> [reason]</red>"
  tempban: "<red>Usage: /sa tempban <player> <duration> [reason]</red>"
  unban: "<red>Usage: /sa unban <player></red>"
  mute: "<red>Usage: /sa mute <player> [reason]</red>"
  tempmute: "<red>Usage: /sa tempmute <player> <duration> [reason]</red>"
  unmute: "<red>Usage: /sa unmute <player></red>"
  warn: "<red>Usage: /sa warn <player> [reason]</red>"
  warns: "<red>Usage: /sa warns <player></red>"
  clearwarns: "<red>Usage: /sa clearwarns <player> [case_id]</red>"
  note: "<red>Usage: /sa note <player> <text> | delete <player> <id> | edit <player> <id> <text></red>"
  note-delete: "<red>Usage: /sa note delete <player> <id></red>"
  note-edit: "<red>Usage: /sa note edit <player> <id> <text></red>"
  notes: "<red>Usage: /sa notes <player></red>"
  freeze: "<red>Usage: /sa freeze <player></red>"
  unfreeze: "<red>Usage: /sa unfreeze <player></red>"
  check: "<red>Usage: /sa check <player></red>"
  banlist: "<red>Usage: /sa banlist [page]</red>"
  mutelist: "<red>Usage: /sa mutelist [page]</red>"
  punishhistory: "<red>Usage: /sa punishhistory <player></red>"
  case: "<red>Usage: /sa case <case_id></red>"
  lastloc: "<red>Usage: /sa lastloc <player></red>"
  freezeinfo: "<red>Usage: /sa freezeinfo <player></red>"
  report-claim: "<red>Usage: /sa reportclaim <id> or /sa reports claim <id></red>"
  jail-info: "<red>Usage: /sa jail info <player></red>"
  home-rename: "<red>Usage: /sa home rename <old> <new></red>"
  home-setdefault: "<red>Usage: /sa home setdefault <name></red>"
  home-move: "<red>Usage: /sa home move <name></red>"
  home-invite: "<red>Usage: /sa home invite <name> <player></red>"
  home-uninvite: "<red>Usage: /sa home uninvite <name> <player></red>"
  home: "<red>Usage: /sa home [name|rename|setdefault|move|invite|uninvite] ...</red>"
  report-reopen: "<red>Usage: /sa reports reopen <id></red>"
  report-note: "<red>Usage: /sa reports note <id> <text></red>"
  reload-module: "<red>Usage: /sa reload module <module></red>"
  warp-info: "<red>Usage: /sa warp info <name></red>"
  kit-preview: "<red>Usage: /sa kit preview <name></red>"
  invsee: "<red>Usage: /sa invsee [-view] <player></red>"
  endersee: "<red>Usage: /sa endersee <player></red>"
  playerinfo: "<red>Usage: /sa playerinfo <player></red>"
  snapshot: "<red>Usage: /sa snapshot <player></red>"
  audit: "<red>Usage: /sa audit | /sa audit <player> | /sa audit staff <staff> | /sa audit type <action> | /sa audit gui ...</red>"
  audit-gui: "<red>Usage: /sa audit gui <staff|player|type> <name> [page]</red>"
  audit-staff: "<red>Usage: /sa audit staff <staffname></red>"
  audit-type: "<red>Usage: /sa audit type <action></red>"
  audit-types-list: "<gray>Types: {types}</gray>"
  alts: "<red>Usage: /sa alts <player></red>"
  report: "<red>Usage: /sa report <player> <reason></red>"
  resolve-report: "<red>Usage: /sa resolvereport <id></red>"
  qp: "<red>Usage: /sa qp <player> <template></red>"
  rollback: "<red>Usage: /sa rollback <case_id></red>"
  spectate: "<red>Usage: /sa spectate <player></red>"
  slowmode: "<red>Usage: /sa slowmode <seconds|off></red>"
  tphere: "<red>Usage: /sa tphere <player></red>"
  tpto: "<red>Usage: /sa tpto <player></red>"
  tppos: "<red>Usage: /sa tppos <x> <y> <z> [world]</red>"
  biome: "<red>Usage: /sa biome <biome></red>"
  jail-create: "<red>Usage: /sa jail create <name></red>"
  jail-edit: "<red>Usage: /sa jail edit <name></red>"
  jail-delete: "<red>Usage: /sa jail delete <name></red>"
  jail-setdefault: "<red>Usage: /sa jail setdefault <name></red>"
  jail-player: "<red>Usage: /sa jail <player> <duration|permanent> [room]</red>"
  unjail: "<red>Usage: /sa unjail <player></red>"
  lockinv: "<red>Usage: /sa lockinv <player></red>"
  weather: "<red>Usage: /sa weather <clear|sun|rain|thunder|storm|lock|unlock></red>"
  time: "<red>Usage: /sa time <day|noon|sunset|night|midnight|sunrise|ticks|lock|unlock></red>"
  god: "<red>Usage: /sa god [player]</red>"
  kill: "<red>Usage: /sa kill <player></red>"
  spawnmob: "<red>Usage: /sa spawnmob <mob|mythic:Id> <count> <spread></red> <gray>(aliases: summon, smob, sm)</gray>"
  fakeop: "<red>Usage: /sa fakeop <player></red>"
  burn: "<red>Usage: /sa burn <player> [seconds]</red>"
  extinguish: "<red>Usage: /sa extinguish [player]</red>"
  more: "<red>Usage: /sa more [player]</red>"
  effect: "<red>Usage: /sa effect <player> <effect> [seconds|inf] [amplifier]</red>"
  feed: "<red>Usage: /sa feed [player]</red>"
  heal: "<red>Usage: /sa heal [player]</red>"
  nightvision: "<red>Usage: /sa nightvision [player]</red>"
  damage: "<red>Usage: /sa damage <player> <amount> [damage_type]</red>"
  hunger: "<red>Usage: /sa hunger <player> <amount></red>"
  gamemode: "<red>Usage: /sa gamemode <mode> [player]</red>"
  lightning: "<red>Usage: /sa lightning <player></red>"
  walkspeed: "<red>Usage: /sa walkspeed <speed> [player]</red>"
  flyspeed: "<red>Usage: /sa flyspeed <speed> [player]</red>"
  fly: "<red>Usage: /sa fly [player]</red>"
  kickall: "<red>Usage: /sa kickall [reason]</red>"
  killall: "<red>Usage: /sa killall <type|group|mythic[:Id]> [radius] [-force] [-s]</red>"
  tpall: "<red>Usage: /sa tpall [world|player…]</red>"
  clearinv: "<red>Usage: /sa clearinv [player] [-confirm]</red>"
  banip: "<red>Usage: /sa banip <player|ip> [reason]</red>"
  tempipban: "<red>Usage: /sa tempipban <player|ip> <duration> <reason></red>"
  unbanip: "<red>Usage: /sa unbanip <ip></red>"
  ptime: "<red>Usage: /sa ptime [-r] <day|noon|night|...> [player] | reset [player]</red>"
  pweather: "<red>Usage: /sa pweather <clear|sun|rain|storm|thunder> [player] | reset [player]</red>"
  setwarp: "<red>Usage: /sa setwarp <name> [category] [description]</red>"
  backup: "<red>Usage: /sa backup <data|worlds|list|prune></red>"
  backup-prune: "<red>Usage: /sa backup prune <filename></red>"
  give: "<red>Usage: /sa give [player] <material> <amount></red>"
  take: "<red>Usage: /sa take [player] <material> <amount></red>"
  experience: "<red>Usage: /sa experience [player] [show|reset|<amount> <points|levels>]</red>"
  tpoffline: "<red>Usage: /sa tpoffline <player></red>"
  realname: "<red>Usage: /sa realname <nickname></red>"
  clearground: "<red>Usage: /sa clearground [radius]</red>"
  invsnapshot: "<red>Usage: /sa invs <list|restore|view|give|take|delete> <player> [args]</red>"
  clearlag: "<red>Usage: /sa clearlag <on|off|status|force|preview></red>"
  repair: "<red>Usage: /sa repair [all] [player]</red>"
  enchant: "<red>Usage: /sa enchant [enchantment] [level|max|op] | max | op</red>"
  unenchant: "<red>Usage: /sa unenchant <enchantment|all></red>"
  afk: "<red>Usage: /sa afk [player]</red>"
  afkzone: "<red>Usage: /sa afkzone <create|delete|setactive|list> [name]</red>"
  afkzone-create: "<red>Usage: /sa afkzone create <name></red>"
  afkzone-delete: "<red>Usage: /sa afkzone delete <name></red>"
  afkzone-setactive: "<red>Usage: /sa afkzone setactive <name></red>"
  afkzone-setdeactivate: "<red>Usage: /sa afkzone setdeactivate <name></red>"
  itemeditor: "<red>Usage: /sa itemeditor [name|lore|enchant|flag|unbreakable|modeldata|template|undo|reset|finish|cancel]</red>"
  itemeditor-name: "<red>Usage: /sa itemeditor name <text></red>"
  itemeditor-lore: "<red>Usage: /sa itemeditor lore <add|set|remove|clear> ...</red>"
  itemeditor-lore-add: "<red>Usage: /sa itemeditor lore add <text></red>"
  itemeditor-lore-set: "<red>Usage: /sa itemeditor lore set <line#> <text></red>"
  itemeditor-lore-remove: "<red>Usage: /sa itemeditor lore remove <line#></red>"
  itemeditor-enchant: "<red>Usage: /sa itemeditor enchant <add|remove|clear> [name] [level]</red>"
  itemeditor-enchant-add: "<red>Usage: /sa itemeditor enchant add <name> <level></red>"
  itemeditor-enchant-remove: "<red>Usage: /sa itemeditor enchant remove <name></red>"
  itemeditor-flag: "<red>Usage: /sa itemeditor flag <flag_name></red>"
  itemeditor-modeldata: "<red>Usage: /sa itemeditor modeldata <value></red>"
  itemeditor-template: "<red>Usage: /sa itemeditor template <save|load|delete|list|rename|clone|info> [name] [newname]</red>"
  itemeditor-template-save: "<red>Usage: /sa itemeditor template save <name></red>"
  itemeditor-template-load: "<red>Usage: /sa itemeditor template load <name></red>"
  itemeditor-template-delete: "<red>Usage: /sa itemeditor template delete <name></red>"
  itemeditor-template-rename: "<red>Usage: /sa itemeditor template rename <old> <new></red>"
  itemeditor-template-clone: "<red>Usage: /sa itemeditor template clone <source> <new></red>"
  itemeditor-template-info: "<red>Usage: /sa itemeditor template info <name></red>"
  pluginmonitor: "<red>Usage: /sa pm <list|inspect|scan|top|conflicts> [args]</red>"
  pluginmonitor-inspect: "<red>Usage: /sa pm inspect <plugin_name></red>"
  fakeplayer: "<red>Usage: /sa fakeplayer <name|edit|remove|removeall|list|pose|rotate|glow|namevisible> [-confirm]</red>"
  smite: "<red>Usage: /sa smite <player></red>"
  rocket: "<red>Usage: /sa rocket <player></red>"
  pumpkinhead: "<red>Usage: /sa pumpkinhead <player></red>"
  sudo: "<red>Usage: /sa sudo <player> <message|/command></red>"
  ping: "<red>Usage: /sa ping [player]</red>"
  cleareffects: "<red>Usage: /sa cleareffects [player]</red>"
  near: "<red>Usage: /sa near [radius]</red>"
  world: "<red>Usage: /sa world <world> [player]</red>"
  ipwhitelist: "<red>Usage: /sa ipwhitelist <add|remove|list> [ip]</red>"
  ipwhitelist-add: "<red>Usage: /sa ipwhitelist add <ip></red>"
  ipwhitelist-remove: "<red>Usage: /sa ipwhitelist remove <ip></red>"
  sort: "<red>Usage: /sa sort [player]</red>"
  broadcast: "<red>Usage: /sa broadcast <template|list|raw> [args]</red>"
  broadcast-raw: "<red>Usage: /sa broadcast raw [--mode] <message></red>"
  sethome: "<red>Usage: /sa sethome [name]</red>"
  delhome: "<red>Usage: /sa delhome <name></red>"
  warp: "<red>Usage: /sa warp <name></red>"
  delwarp: "<red>Usage: /sa delwarp <name></red>"
  tpa: "<red>Usage: /sa tpa <player></red>"
  tpahere: "<red>Usage: /sa tpahere <player></red>"
  itemblacklist: "<red>Usage: /sa itemblacklist <add|remove|list> [material]</red>"
  itemblacklist-add: "<red>Usage: /sa itemblacklist add <material></red>"
  itemblacklist-remove: "<red>Usage: /sa itemblacklist remove <material></red>"
  ticket: "<red>Usage: /sa ticket <create|list|view|respond|close|assign|reopen|delete></red>"
  ticket-create: "<red>Usage: /sa ticket create <message></red>"
  ticket-view: "<red>Usage: /sa ticket view <id></red>"
  ticket-respond: "<red>Usage: /sa ticket respond <id> <message></red>"
  ticket-close: "<red>Usage: /sa ticket close <id></red>"
  ticket-assign: "<red>Usage: /sa ticket assign <id> <player></red>"
  ticket-reopen: "<red>Usage: /sa ticket reopen <id></red>"
  ticket-priority: "<red>Usage: /sa ticket priority <id> <low|medium|high|urgent></red>"
  ticket-delete: "<red>Usage: /sa ticket delete <id></red>"
  announce: "<red>Usage: /sa announce <create|delete|list|toggle|interval|mode|test></red>"
  announce-create: "<red>Usage: /sa announce create <id> <message></red>"
  announce-delete: "<red>Usage: /sa announce delete <id></red>"
  announce-toggle: "<red>Usage: /sa announce toggle <id></red>"
  announce-interval: "<red>Usage: /sa announce interval <id> <seconds></red>"
  announce-mode: "<red>Usage: /sa announce mode <id> <chat|title|actionbar|bossbar|title+chat|bossbar+chat></red>"
  announce-test: "<red>Usage: /sa announce test <id></red>"
  motd: "<red>Usage: /sa motd <set|preview|icon|maintenance|maxplayers|minplayers></red>"
  motd-set: "<red>Usage: /sa motd set <line1|line2></red>"
  motd-icon: "<red>Usage: /sa motd icon <path></red>"
  motd-maintenance: "<red>Usage: /sa motd maintenance <line1|line2></red>"
  motd-maxplayers: "<red>Usage: /sa motd maxplayers <number|+offset></red>"
  motd-minplayers: "<red>Usage: /sa motd minplayers <number|-1></red>"
  staffdash: "<red>Usage: /sa staffdash [player]</red>"
  staffstats: "<red>Usage: /sa staffstats [today|week|month]</red>"
  customcommand: "<red>Usage: /sa customcommand <list|create|delete|toggle|info|settings|gui|test|bind|unbind|binds></red>"
  interactive: "<red>Usage: /sa interactive <bind|unbind|binds|listbinds></red>"
  interactive-bind: "<red>Usage: /sa interactive bind <commandName></red>"
  customcommand-test: "<red>Usage: /sa customcommand test <name> [args...]</red>"
  customcommand-create: "<red>Usage: /sa customcommand create <name> <commands (;-separated)></red>"
  customcommand-delete: "<red>Usage: /sa customcommand delete <name></red>"
  customcommand-toggle: "<red>Usage: /sa customcommand toggle <name></red>"
  customcommand-info: "<red>Usage: /sa customcommand info <name></red>"
  kit: "<red>Usage: /sa kit <name|create|delete|edit|set|reset|list></red>"
  kit-create: "<red>Usage: /sa kit create <name></red>"
  kit-delete: "<red>Usage: /sa kit delete <name></red>"
  kit-edit: "<red>Usage: /sa kit edit <name></red>"
  kit-settings: "<red>Usage: /sa kit settings <name></red>"
  kit-set: "<red>Usage: /sa kit set <name> <setting> <value></red>"
  kit-reset: "<red>Usage: /sa kit reset <kit|all> [player]</red>"
  msg: "<red>Usage: /sa msg <player> <message></red>"
  reply: "<red>Usage: /sa reply <message></red>"
  ignore: "<red>Usage: /sa ignore <player></red>"
  saveinventory: "<red>Usage: /sa saveinventory <kit></red>"
  friend: "<yellow>Usage: /sa friend <add|accept|deny|remove|list|tp|pvp> [player]</yellow>"
  friend-add: "<yellow>Usage: /sa friend add <player></yellow>"
  friend-remove: "<yellow>Usage: /sa friend remove <player></yellow>"
  friend-tp: "<yellow>Usage: /sa friend tp <player></yellow>"
  seen: "<red>Usage: /sa seen <player></red>"
  pay: "<red>Usage: /sa pay <player> <amount> [economy]</red>"
  economy: "<red>Usage: /sa economy <give|take|set|reset|resetall|delete|create|manage> <args></red>"
  economy-resetall: "<red>Usage: /sa economy resetall [economy] [-confirm]</red>"
  economy-give: "<red>Usage: /sa economy give <player> <amount> [economy]</red>"
  economy-take: "<red>Usage: /sa economy take <player> <amount> [economy]</red>"
  economy-set: "<red>Usage: /sa economy set <player> <amount> [economy]</red>"
  economy-reset: "<red>Usage: /sa economy reset <player> [economy]</red>"
  economy-delete: "<red>Usage: /sa economy delete <id></red>"
  customcommand-settings: "<red>Usage: /sa customcommand settings <name></red> <gray>(opens the settings GUI)</gray>"
  mail: "<red>Usage: /sa mail [send|read|clear|list]</red>"
  mail-send: "<red>Usage: /sa mail send <player> <message></red>"
  mail-read: "<red>Usage: /sa mail read [id]</red>"
  mail-clear: "<red>Usage: /sa mail clear <id|all></red>"
  spawner: "<red>Usage: /sa spawner [info|gui|list]</red>"
  mutechat: "<red>Usage: /sa mutechat [on|off|toggle] [duration]</red>"
  unloadchunks: "<red>Usage: /sa unloadchunks [-f|-force] [-confirm]</red>"
  tprandom: "<red>Usage: /sa tprandom | /sa tp random</red>"

# ==================== INVENTORY SNAPSHOT ====================
inventory-snapshot:
  created: "<green>Snapshot saved for <yellow>{player}</yellow> <gray>({reason})</gray></green>"
  restored: "<green>Inventory restored for <yellow>{player}</yellow> <gray>(snapshot {index}, {time_ago}, {reason})</gray></green>"
  restored-target: "<green>Your inventory has been restored by <yellow>{staff}</yellow>.</green>"
  deleted: "<green>Snapshot {index} deleted for <yellow>{player}</yellow>.</green>"
  give-success: "<green>Gave item from snapshot {index} slot {slot} to <yellow>{player}</yellow>.</green>"
  give-received: "<green>You received an item from an admin.</green>"
  no-snapshots: "<red>No snapshots found for <yellow>{player}</yellow>.</red>"
  invalid-index: "<red>Invalid snapshot index. Use <yellow>/sa invs list {player}</yellow></red>"
  manual-taken: "<green>Manual snapshot taken for <yellow>{player}</yellow>.</green>"
  empty: "<red><yellow>{player}</yellow> has an empty inventory. Snapshot not saved.</red>"
  list-header: "<yellow>Snapshots for <white>{player}</white>:</yellow>"
  list-entry: "<gray> {index}. <white>{time_ago}</white> \u2014 <yellow>{reason}</yellow> ({world}, {item_count} items)</gray>"
  list-empty: "<gray>No snapshots saved.</gray>"
  overflow-dropped: "<yellow>{count} overflow item(s) dropped on the ground.</yellow>"
  overflow-cancelled: "<red>Restore cancelled \u2014 target inventory not empty enough.</red>"
  target-offline: "<red>Target player must be online for restore.</red>"
  restore-queued: "<yellow>Queued snapshot {index} restore for <white>{player}</white>. Applies on next join.</yellow>"
  restore-queued-applied: "<green>Applied queued inventory restore for <yellow>{player}</yellow> <gray>(snapshot {index})</gray>.</green>"
  broadcast-restored: "<gray>{staff} restored inventory for {player} (snapshot {index}, {reason})</gray>"

# ==================== HOMES ====================
home:
  set: "<green>Home <yellow>{name}</yellow> set at your current location.</green>"
  teleported: "<green>Teleported to home <yellow>{name}</yellow>.</green>"
  deleted: "<green>Home <yellow>{name}</yellow> deleted.</green>"
  not-found: "<red>Home <yellow>{name}</yellow> not found.</red>"
  no-homes: "<red>You have no homes set.</red>"
  no-homes-other: "<red><yellow>{player}</yellow> has no homes set.</red>"
  max-reached: "<red>You have reached your maximum number of homes ({max}).</red>"
  unsafe: "<red>Cannot set home here. The location is not safe.</red>"
  name-too-long: "<red>Home name is too long (max {max} characters).</red>"
  invalid-name: "<red>Home names can only contain letters, numbers, underscores, and hyphens.</red>"
  list-header: "<yellow>Homes ({count}/{max}):</yellow>"
  list-header-other: "<yellow>Homes for <white>{player}</white> ({count}):</yellow>"
  list-entry: "<click:run_command:'/sa home {name}'><hover:show_text:'<green>Click to teleport'> <gray>- <white>{name}</white>{default} <dark_gray>({world}, {x}, {y}, {z})</dark_gray></gray></hover></click>"
  default-tag: " <gold>(default)</gold>"
  renamed: "<green>Renamed home <yellow>{old}</yellow> → <yellow>{new}</yellow>.</green>"
  rename-exists: "<red>Home <yellow>{name}</yellow> already exists.</red>"
  setdefault: "<green>Default home set to <yellow>{name}</yellow>.</green>"
  moved: "<green>Moved home <yellow>{name}</yellow> to your current location.</green>"
  delete-confirm: "<yellow>Delete home <red>{name}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  share-invited: "<green>Invited <yellow>{player}</yellow> to home <yellow>{name}</yellow>.</green>"
  share-received: "<green><yellow>{owner}</yellow> shared home <yellow>{name}</yellow> with you. Use <white>/sa home {owner}:{name}</white>.</green>"
  share-renamed: "<yellow>{owner}</yellow> renamed shared home <white>{old}</white> → <white>{new}</white>."
  share-uninvited: "<green>Removed <yellow>{player}</yellow> from home <yellow>{name}</yellow>.</green>"
  share-already: "<gray><yellow>{player}</yellow> already has access to <yellow>{name}</yellow>.</gray>"
  share-not-shared: "<red><yellow>{player}</yellow> is not invited to <yellow>{name}</yellow>.</red>"
  share-not-invited: "<red>You are not invited to that home.</red>"
  shared-none: "<gray>No homes have been shared with you.</gray>"
  shared-header: "<yellow>Homes shared with you:</yellow>"
  shared-entry: " <gray>- <white>{owner}</white>:<white>{name}</white> <click:run_command:'/sa home {command}'><green>[Go]</green></click></gray>"
  teleported-shared: "<green>Teleported to <yellow>{owner}</yellow>'s home <yellow>{name}</yellow>.</green>"

# ==================== WARPS ====================
warp:
  set: "<green>Warp <yellow>{name}</yellow> set at your current location.</green>"
  teleported: "<green>Teleported to warp <yellow>{name}</yellow>.</green>"
  deleted: "<green>Warp <yellow>{name}</yellow> deleted.</green>"
  not-found: "<red>Warp <yellow>{name}</yellow> not found.</red>"
  no-warps: "<red>No warps are set.</red>"
  no-permission: "<red>You don't have permission to use warp <yellow>{name}</yellow>.</red>"
  unsafe: "<red>Cannot set warp here. The location is not safe.</red>"
  invalid-name: "<red>Warp names can only contain letters, numbers, underscores, and hyphens.</red>"
  name-too-long: "<red>Warp name is too long (max <yellow>{max}</yellow> characters).</red>"
  list-header: "<yellow>Available warps:</yellow>"
  list-entry: "<click:run_command:'/sa warp {name}'><hover:show_text:'<green>Click to teleport<newline>{description}'> <gray>- <white>{name}</white> <dark_gray>({world}, {x}, {y}, {z}) · {category}</dark_gray></gray></hover></click>"
  category-header: "<yellow>{category}</yellow>"
  category-entry: " <dark_gray>-</dark_gray> <white>{name}</white> <gray>{description}</gray>"
  info-category: "<gray>Category:</gray> <white>{category}</white>"
  info-description: "<gray>Description:</gray> <white>{description}</white>"
  info-header: "<yellow>Warp <white>{name}</white></yellow>"
  info-location: "<gray>Location:</gray> <white>{world}</white> <gray>({x}, {y}, {z})</gray>"
  info-permission: "<gray>Permission:</gray> <white>{permission}</white>"

# ==================== TPA ====================
tpa:
  sent: "<green>TPA request sent to <yellow>{player}</yellow>.</green>"
  sent-here: "<green>TPA-here request sent to <yellow>{player}</yellow>.</green>"
  received: "<yellow>{player}</yellow> <green>wants to teleport to you.</green>"
  received-here: "<yellow>{player}</yellow> <green>wants you to teleport to them.</green>"
  accepted: "<green>You accepted <yellow>{player}</yellow>'s teleport request.</green>"
  accepted-requester: "<green><yellow>{player}</yellow> accepted your teleport request.</green>"
  accepted-here: "<green>You were teleported to <yellow>{player}</yellow>.</green>"
  accepted-here-requester: "<green><yellow>{player}</yellow> was teleported to you.</green>"
  denied: "<red>You denied <yellow>{player}</yellow>'s teleport request.</red>"
  denied-requester: "<red><yellow>{player}</yellow> denied your teleport request.</red>"
  no-pending: "<red>You have no pending teleport requests.</red>"
  requester-offline: "<red>The requester is no longer online.</red>"
  expired: "<yellow>Your TPA request to <white>{player}</white> has expired.</yellow>"
  expired-target: "<yellow>TPA request from <white>{player}</white> has expired.</yellow>"
  blocked: "<red><yellow>{player}</yellow> has teleport requests disabled.</red>"
  cooldown: "<red>You must wait <yellow>{seconds}</yellow> seconds before sending another TPA request.</red>"
  already-pending: "<red><yellow>{player}</yellow> already has a pending request.</red>"
  request-replaced: "<yellow>Your TPA request to <white>{player}</white> was replaced by a newer request.</yellow>"
  cannot-self: "<red>You cannot send a TPA request to yourself.</red>"
  toggle-on: "<green>Teleport requests <yellow>enabled</yellow>.</green>"
  toggle-off: "<red>Teleport requests <yellow>disabled</yellow>.</red>"
  unsafe-location: "<red>Teleport cancelled. The destination looks unsafe.</red>"
  unsafe-location-requester: "<red>Teleport cancelled. The destination looks unsafe.</red>"
  claims-denied: "<red>Teleport cancelled. You cannot enter that claim or protected region.</red>"
  claims-denied-requester: "<red>Teleport cancelled. The destination is inside a protected claim.</red>"
  no-outgoing: "<red>You have no outgoing teleport request to cancel.</red>"
  cancelled: "<green>Cancelled your teleport request to <yellow>{player}</yellow>.</green>"
  cancelled-multiple: "<green>Cancelled <yellow>{count}</yellow> outgoing teleport request(s).</green>"
  pending-none: "<gray>You have no pending teleport requests.</gray>"
  pending-header: "<yellow>Pending TPA requests</yellow>"
  pending-incoming: " <green>Incoming:</green> <yellow>{player}</yellow> · {type} · <gray>{seconds}s ago</gray>"
  pending-outgoing: " <gold>Outgoing:</gold> <yellow>{player}</yellow> · {type} · <gray>{seconds}s ago</gray>"
  pending-type-tpa: "TPA"
  pending-type-tpahere: "TPA Here"
  cancelled-target: "<yellow>{player}</yellow> <red>cancelled their teleport request.</red>"
  auto-on: "<green>Auto-accept teleport requests is now <yellow>enabled</yellow>.</green>"
  auto-off: "<yellow>Auto-accept teleport requests is now <red>disabled</red>.</yellow>"
  auto-accepted: "<green>Auto-accepted teleport request from <yellow>{player}</yellow>.</green>"
  auto-accepted-requester: "<green><yellow>{player}</yellow> auto-accepted your teleport request.</green>"
  pending-bossbar-requester: "TPA pending. Waiting for {player} ({seconds}s)"
  pending-bossbar-target: "TPA request from {player} ({seconds}s)"

# ==================== ITEM BLACKLIST ====================
item-blacklist:
  added: "<green>Added <yellow>{material}</yellow> to the item blacklist.</green>"
  removed: "<green>Removed <yellow>{material}</yellow> from the item blacklist.</green>"
  already-listed: "<red><yellow>{material}</yellow> is already on the blacklist.</red>"
  not-listed: "<red><yellow>{material}</yellow> is not on the blacklist.</red>"
  invalid-material: "<red>Unknown material: <yellow>{material}</yellow>. Use a valid Bukkit Material name.</red>"
  empty: "<yellow>The item blacklist is empty.</yellow>"
  list-header: "<yellow>Blacklisted items ({count}):</yellow>"
  list-entry: " <gray>- <white>{material}</white></gray>"
  staff-alert: "<red>[Blacklist] <yellow>{player}</yellow> had <white>{material}</white> detected ({context})</red>"
  confiscated: "<red>A prohibited item (<yellow>{material}</yellow>) was confiscated from you.</red>"

# ==================== TICKETS ====================
ticket:
  disabled: "<red>The ticket system is currently disabled.</red>"
  created: "<green>Ticket <yellow>{id}</yellow> created. Staff have been notified.</green>"
  staff-alert: "<gold>[Ticket] <yellow>{player}</yellow> opened ticket <white>{id}</white>: <gray>{message}</gray></gold>"
  not-found: "<red>Ticket <yellow>{id}</yellow> not found.</red>"
  already-closed: "<red>Ticket <yellow>{id}</yellow> is already closed.</red>"
  not-yours: "<red>You do not have access to this ticket.</red>"
  cooldown: "<red>Wait <yellow>{seconds}</yellow> seconds before creating another ticket.</red>"
  max-open: "<red>You already have <yellow>{max}</yellow> open tickets. Close one first.</red>"
  responded: "<green>Response added to ticket <yellow>{id}</yellow>.</green>"
  notify-response: "<gold>[Ticket] Staff <yellow>{staff}</yellow> responded to ticket <white>{id}</white>: <gray>{message}</gray></gold>"
  staff-notify-response: "<gold>[Ticket] <yellow>{player}</yellow> responded to ticket <white>{id}</white>: <gray>{message}</gray></gold>"
  mail-response: "Staff {staff} responded to ticket {id}: {message}"
  closed: "<green>Ticket <yellow>{id}</yellow> has been closed.</green>"
  notify-closed: "<yellow>Ticket <white>{id}</white> was closed by <white>{staff}</white>.</yellow>"
  mail-closed: "Ticket {id} was closed by {staff}."
  not-closed: "<red>Ticket <yellow>{id}</yellow> is not closed.</red>"
  reopened: "<green>Ticket <yellow>{id}</yellow> has been reopened.</green>"
  assigned: "<green>Ticket <yellow>{id}</yellow> assigned to <yellow>{staff}</yellow>.</green>"
  assigned-to-you: "<gold>[Ticket] You have been assigned ticket <white>{id}</white> from <yellow>{player}</yellow>.</gold>"
  priority-set: "<green>Ticket <yellow>{id}</yellow> priority set to {priority}.</green>"
  invalid-priority: "<red>Invalid priority. Use: low, medium, high, urgent</red>"
  deleted: "<green>Ticket <yellow>{id}</yellow> has been permanently deleted.</green>"
  delete-confirm: "<yellow>Shift-click the delete button to permanently remove ticket <white>{id}</white>.</yellow>"
  view-header: " <gold><bold>Ticket {id}</bold></gold> <gray>| {status} | {priority} | By: {player} | Assigned: {assigned} | {time_ago}</gray>"
  view-message: " <gray>[{time_ago}]</gray> <yellow>{sender}</yellow><gray>: {message}</gray>"
  list-header: " <gold><bold>Tickets</bold></gold> <gray>({count} results, filter: {filter})</gray>"
  list-entry: "<click:run_command:'/sa ticket view {id}'><hover:show_text:'<green>Click to view ticket'> <yellow>{id}</yellow> <gray>by</gray> <white>{player}</white> <gray>| {status} | {priority} | {time_ago} | {message}</gray></hover></click>"
  list-empty: " <gray>No tickets found.</gray>"

# ==================== ANNOUNCEMENTS ====================
announce:
  created: "<green>Announcement <yellow>{id}</yellow> created (interval: 300s, mode: chat).</green>"
  deleted: "<green>Announcement <yellow>{id}</yellow> deleted.</green>"
  not-found: "<red>Announcement <yellow>{id}</yellow> not found.</red>"
  already-exists: "<red>Announcement <yellow>{id}</yellow> already exists.</red>"
  enabled: "<green>Announcement <yellow>{id}</yellow> enabled.</green>"
  disabled: "<red>Announcement <yellow>{id}</yellow> disabled.</red>"
  interval-set: "<green>Interval for <yellow>{id}</yellow> set to <yellow>{seconds}</yellow> seconds.</green>"
  interval-minimum: "<red>Interval must be at least <yellow>{min}</yellow> seconds.</red>"
  mode-set: "<green>Mode for <yellow>{id}</yellow> set to <yellow>{mode}</yellow>.</green>"
  mode-invalid: "<red>Invalid mode. Use: chat, title, actionbar, bossbar, title+chat, bossbar+chat.</red>"
  tested: "<green>Announcement <yellow>{id}</yellow> sent once to all players.</green>"
  none: "<yellow>No announcements configured.</yellow>"
  list-header: " <gold><bold>Announcements</bold></gold> <gray>({count} total)</gray>"
  list-entry: "<click:run_command:'/sa announce toggle {id}'><hover:show_text:'<green>Click to toggle on/off'> <yellow>{id}</yellow> <gray>| {status} | Every {interval}s | Mode: {mode}</gray></hover></click>"
  preview-self: "<gray>Preview of <yellow>{id}</yellow> (only you):</gray>"

# ==================== MOTD ====================
motd:
  set: "<green>Server MOTD updated.</green>"
  maintenance-set: "<green>Maintenance MOTD updated and enabled.</green>"
  maintenance-enabled: "<green>Maintenance MOTD <yellow>enabled</yellow>.</green>"
  maintenance-disabled: "<yellow>Maintenance MOTD <red>disabled</red>.</yellow>"
  icon-not-found: "<red>Icon file not found: <yellow>{path}</yellow></red>"
  icon-invalid-size: "<red>Icon must be exactly 64x64 pixels.</red>"
  icon-set: "<green>Server icon set to <yellow>{path}</yellow>.</green>"
  icon-failed: "<red>Failed to load server icon. Ensure it is a valid PNG file.</red>"
  maxplayers-set: "<green>Max players override set to <yellow>{value}</yellow>.</green>"
  maxplayers-invalid: "<red>Invalid number. Use a positive number, +offset (e.g. +1), or -1 for default.</red>"
  minplayers-set: "<green>Minimum displayed players set to <yellow>{value}</yellow>.</green>"
  minplayers-disabled: "<green>Minimum displayed players override <yellow>disabled</yellow>.</green>"
  minplayers-invalid: "<red>Invalid number. Use a positive number, or -1 (or 0) to disable.</red>"
  reloaded: "<green>MOTD settings reloaded.</green>"
  preview-header: "<yellow>MOTD Preview:</yellow>"

# ==================== STAFF DASHBOARD ====================
staffdash:
  console-specify-player: "<red>Console must specify a player name.</red>"
  header: " <gradient:#00CED1:#00FA9A><bold>Staff Dashboard</bold></gradient> \u2014 <white>{player}</white>"
  period: " <yellow>{period}:</yellow>"
  stats: "  <gray><white>{punishments}</white> punishments, <white>{reports}</white> reports resolved, <white>{tickets}</white> tickets handled (<white>{total}</white> total)</gray>"
  breakdown-header: " <yellow>Top Actions (All Time):</yellow>"
  breakdown-entry: "  <gray>{action}: <white>{count}</white></gray>"

# ==================== STAFF LEADERBOARD ====================
staffstats:
  header: " <gradient:#FFD700:#FFA500><bold>Staff Leaderboard</bold></gradient> \u2014 <white>{period}</white>"
  empty: "<gray>No staff activity found for this period.</gray>"
  entry: " <yellow>{rank}.</yellow> <white>{player}</white> \u2014 <green>{actions}</green> actions"

# ==================== CUSTOM COMMANDS ====================
customcommand:
  disabled: "<red>This command has been disabled.</red>"
  cooldown: "<red>You must wait <yellow>{seconds}</yellow> seconds before using this command again.</red>"
  limit-reached: "<red>You have reached the maximum usage limit (<yellow>{limit}</yellow>) for this command.</red>"
  world-denied: "<red>You cannot use that command in this world.</red>"
  chain-depth: "<red>That custom command chain is too deep. Check for loops.</red>"
  usage: "<red>Usage:</red> <yellow>{usage}</yellow>"
  warmup-start: "<yellow>Warming up... Stand still for <white>{seconds}</white> seconds.</yellow>"
  warmup-cancelled: "<red>Warmup cancelled. You moved.</red>"
  warmup-already: "<red>You already have a warmup in progress.</red>"
  list-header: " <gradient:#00CED1:#00FA9A><bold>Custom Commands</bold></gradient> <gray>({count})</gray>"
  list-empty: "<gray>No custom commands configured.</gray>"
  list-entry: " <gray>•</gray> <white>{name}</white> {status} <gray>| {description}</gray>"
  status-enabled: "<green>[ON]</green>"
  status-disabled: "<red>[OFF]</red>"
  created: "<green>Custom command <yellow>{name}</yellow> created.</green>"
  deleted: "<green>Custom command <yellow>{name}</yellow> deleted.</green>"
  toggled: "<green>Custom command <yellow>{name}</yellow> is now {status}.</green>"
  already-exists: "<red>A custom command named <yellow>{name}</yellow> already exists.</red>"
  not-found: "<red>Custom command <yellow>{name}</yellow> not found.</red>"
  invalid-permission: "<red>Invalid permission node. Use letters, numbers, dots, dashes, and underscores only.</red>"
  reloaded: "<green>Custom commands reloaded.</green>"
  not-creating: "<red>You are not currently creating a custom command. Use <yellow>/sa customcommand create</yellow>.</red>"
  no-commands-yet: "<red>No custom commands have been created yet.</red>"
  no-commands-provided: "<red>No valid commands provided. Use semicolons to separate commands.</red>"
  info-header: " <gradient:#00CED1:#00FA9A><bold>Custom Command:</bold></gradient> <white>{name}</white>"
  info-status: " <gray>Status:</gray> {status}"
  info-description: " <gray>Description:</gray> <white>{description}</white>"
  info-permission: " <gray>Permission:</gray> <white>{permission}</white>"
  info-commands: " <gray>Commands ({count}):</gray>"
  info-command-entry: "   <gray>•</gray> <white>{command}</white>"
  info-cooldown: " <gray>Cooldown:</gray> <white>{seconds}s</white>"
  info-delay: " <gray>Delay:</gray> <white>{seconds}s</white>"
  info-warmup: " <gray>Warmup:</gray> <white>{seconds}s</white>"
  info-limit: " <gray>Limit:</gray> <white>{limit} uses</white>"
  info-autouse: " <gray>Auto-use:</gray> <white>{trigger}</white>"
  info-aliases: " <gray>Aliases:</gray> <white>{aliases}</white>"
  test-header: " <gold>Dry-run: <yellow>{name}</yellow></gold> <gray>(not executed)</gray>"
  test-empty: " <gray>No resolved actions.</gray>"
  test-line: " <gray>→</gray> <white>{command}</white>"
  create-pick-type: "<yellow>Pick a custom command type in the GUI.</yellow>"
  create-name-prompt: "<yellow>Enter a name for the new custom command:</yellow>"
  create-invalid-name: "<red>Invalid name. Must be a single word with no spaces.</red>"
  create-started: "<green>Creating <white>{type}</white> command: <yellow>{name}</yellow></green>"
  create-commands-hint: "<gray>Use the <white>Command Builder</white> GUI to add steps. Chat still works if you prefer.</gray>"
  create-commands-prompt: "<gray>Type commands one at a time in chat. Example: <white>sa heal {player}</white></gray>"
  create-commands-console: "<gray>Prefix with <white>console:</white> to run as console.</gray>"
  create-commands-finish: "<yellow>Click <white>Finish</white> in the builder, or type <white>/sa customcommand finish</white>.</yellow>"
  create-prompt-player: "<yellow>Type a player command (no leading /). Example: <white>sa heal {player}</white></yellow>"
  create-prompt-console: "<yellow>Type a console command (no leading /). Example: <white>sa kick {player}</white></yellow>"
  create-command-added: "<green>+</green> <gray>Step <white>#{count}</white> added</gray>"
  create-command-added-line: "<dark_gray>  ›</dark_gray> <white>{command}</white>"
  create-command-removed: "<yellow>−</yellow> <gray>Step <white>#{index}</white> removed</gray>"
  create-need-commands: "<red>Add at least one command step before finishing.</red>"
  create-finished: "<green>Custom command <yellow>{name}</yellow> created.</green>"
  create-ready: "<gray>Registered. Use <yellow>/sa {name}</yellow> (no reload needed).</gray>"
  subcommand-enabled: "<green>Subcommand <yellow>{name}</yellow> enabled.</green>"
  subcommand-disabled: "<red>Subcommand <yellow>{name}</yellow> disabled.</red>"
  override-updated: "<green>Override updated for <yellow>{name}</yellow>.</green>"

# ==================== Interactive Commands ====================
interactive:
  bound: "<green>Bound <yellow>{name}</yellow> to block at <white>{coords}</white>.</green>"
  unbound: "<green>Removed bind at <white>{coords}</white>.</green>"
  no-bind: "<red>No interactive command is bound to that block.</red>"
  command-missing: "<red>Bound command <yellow>{name}</yellow> is missing or disabled.</red>"
  no-target: "<red>Look at a block within 5 blocks to bind to it.</red>"
  list-header: " <gradient:#00CED1:#00FA9A><bold>Interactive Binds</bold></gradient> <gray>({count})</gray>"
  list-empty: "<gray>No interactive command binds configured.</gray>"
  list-entry: "<click:run_command:'/sa tppos {x} {y} {z} {world}'><hover:show_text:'<gray>Click to teleport'> <gray>•</gray> <white>{coords}</white> <gray>→</gray> <yellow>{name}</yellow></hover></click>"

# ==================== Rules ====================
rules:
  disabled: "<red>The rules display is currently disabled.</red>"
  header: "<gradient:#FFD700:#FFA500><bold>Server Rules</bold></gradient>"
  footer: "<gray>Follow these rules while playing.</gray>"
  entry: " <gold>{number}.</gold> <white>{rule}</white>"

# ==================== Sign & Book Editor ====================
signbook:
  sign-edit-on: "<green>Sign edit mode enabled.</green> <gray>Right-click a sign to edit. You can also sneak + right-click anytime with permission.</gray>"
  sign-edit-off: "<yellow>Sign edit mode disabled.</yellow>"
  sign-editing: "<green>Editing <yellow>{side}</yellow> of sign...</green>"
  not-a-sign: "<red>That is not a sign.</red>"
  book-not-found: "<red>You must hold a writable or written book.</red>"
  book-given: "<green>You received a writable book.</green>"
  book-already-editable: "<green>That book is already editable.</green> <gray>Right-click to edit it.</gray>"
  book-copied: "<green>Book copied to your inventory.</green>"
  book-unsigned: "<green>Book unsigned. It is now editable.</green>"
  book-not-written: "<red>That book is not a written book.</red>"

# ==================== Kit ====================
kit:
  claimed: "<green>You received the <yellow>{name}</yellow> kit.</green>"
  not-found: "<red>Kit <yellow>{name}</yellow> not found.</red>"
  cooldown: "<red>This kit is on cooldown for <yellow>{seconds}s</yellow>.</red>"
  limit-reached: "<red>You have reached the usage limit ({limit}) for this kit.</red>"
  wrong-world: "<red>This kit is not available in this world.</red>"
  wrong-time: "<red>This kit requires {required} time.</red>"
  wrong-weather: "<red>This kit requires {required} weather.</red>"
  not-enough-exp: "<red>You need at least <yellow>{required}</yellow> levels.</red>"
  not-enough-exp-points: "<red>You need at least <yellow>{required}</yellow> experience points.</red>"
  not-enough-money: "<red>You need at least <yellow>${required}</yellow>.</red>"
  not-enough-items: "<red>You need <yellow>{amount}x {material}</yellow>.</red>"
  warmup-start: "<yellow>Kit warmup started. Stay still for {seconds}s.</yellow>"
  warmup-actionbar: "<yellow>Kit in <white>{seconds}s</white>. Stay still.</yellow>"
  warmup-already: "<red>You already have a kit warmup in progress.</red>"
  warmup-cancelled: "<red>Kit warmup cancelled. You moved.</red>"
  inventory-full: "<red>Your inventory is too full to receive the <yellow>{name}</yellow> kit.</red>"
  created: "<green>Kit <yellow>{name}</yellow> created.</green>"
  deleted: "<green>Kit <yellow>{name}</yellow> deleted.</green>"
  already-exists: "<red>A kit named <yellow>{name}</yellow> already exists.</red>"
  saved: "<green>Kit <yellow>{name}</yellow> items saved.</green>"
  inventory-saved: "<green>Your inventory has been saved as kit <yellow>{name}</yellow>.</green>"
  unknown-setting: "<red>Unknown setting. Valid settings: cooldown, permission, one-time, world, time, weather, cost, cost-xp, cost-items.</red>"
  invalid-time: "<red>Invalid time. Use: day, night, any</red>"
  invalid-weather: "<red>Invalid weather. Use: clear, rain, thunder, any</red>"
  preview-title: "<gold>Kit Preview</gold> <dark_gray>•</dark_gray> <white>{kit}</white>"
  reset-usage: "<green>Reset kit usage for <yellow>{kit}</yellow> on <white>{player}</white>.</green>"
  reset-usage-notify: "<yellow>Your cooldown/usage for kit <white>{kit}</white> was reset by staff.</yellow>"
  delete-confirm: "<yellow>Delete kit <red>{name}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"

# ==================== BACKUP ====================
backup:
  starting-data: "<yellow>Starting data backup... This may take a moment.</yellow>"
  starting-worlds: "<yellow>Starting world backup... This may take a while depending on world sizes.</yellow>"
  data-success: "<green>Data backup complete. File: <yellow>{file}</yellow> (<yellow>{size}</yellow>)</green>"
  worlds-success: "<green>World backup complete. <yellow>{count}</yellow> world(s) backed up. File: <yellow>{file}</yellow> (<yellow>{size}</yellow>)</green>"
  failed: "<red>Backup failed: {error}</red>"
  no-data: "<red>No data folder found to backup.</red>"
  list-empty: "<yellow>No backup files found in plugins/SoapsAdmin/backups/</yellow>"
  list-header: "<gold>Backups</gold> <gray>({count})</gray>"
  list-entry: " <gray>• <yellow>{file}</yellow> <dark_gray>({size}, {age} ago)</dark_gray></gray>"
  prune-success: "<green>Deleted backup <yellow>{file}</yellow>.</green>"
  prune-failed: "<red>Could not delete backup <yellow>{file}</yellow>.</red>"

# ==================== Launch ====================
launch:
  launched: "<green>Launched <yellow>{player}</yellow> with power <yellow>{power}</yellow>.</green>"
  launched-target: "<yellow>{staff}</yellow> <green>launched you.</green>"
  invalid-power: "<red>Invalid power. Must be a number between 0.1 and 10.</red>"
  invalid-angle: "<red>Invalid y-velocity. Must be a number between 0 and 5.</red>"

# ==================== Economy ====================
economy:
  balance-self: "<green>Your balance: <yellow>{balance}</yellow></green>"
  balance-other: "<green><yellow>{player}</yellow>'s balance: <yellow>{balance}</yellow></green>"
  balance-self-economy: "<green>Your <yellow>{economy}</yellow> balance: <yellow>{balance}</yellow></green>"
  balance-other-economy: "<green><yellow>{player}</yellow>'s <yellow>{economy}</yellow> balance: <yellow>{balance}</yellow></green>"
  give-success: "<green>Gave <yellow>{amount}</yellow> to <yellow>{player}</yellow>. New balance: <yellow>{balance}</yellow></green>"
  take-success: "<green>Took <yellow>{amount}</yellow> from <yellow>{player}</yellow>. New balance: <yellow>{balance}</yellow></green>"
  set-success: "<green>Set <yellow>{player}</yellow>'s balance to <yellow>{balance}</yellow>.</green>"
  reset-success: "<green>Reset <yellow>{player}</yellow>'s <yellow>{economy}</yellow> balance.</green>"
  reset-all-success: "<green>Reset all <yellow>{economy}</yellow> balances for all players.</green>"
  reset-all-confirm: "<yellow>Reset <red>all</red> player balances for <white>{economy}</white>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  insufficient: "<red>Insufficient funds. Required: <yellow>{amount}</yellow>, Balance: <yellow>{balance}</yellow></red>"
  not-found: "<red>Economy <yellow>{economy}</yellow> not found.</red>"
  disabled: "<red>Economy system is disabled.</red>"
  already-exists: "<red>An economy with ID <yellow>{economy}</yellow> already exists.</red>"
  created: "<green>Economy <yellow>{economy}</yellow> created.</green>"
  deleted: "<green>Economy <yellow>{economy}</yellow> has been deleted.</green>"
  updated: "<green>Economy <yellow>{economy}</yellow> has been updated.</green>"
  list-header: "<gold><bold>Economies:</bold></gold>"
  list-entry: "<gray> - <yellow>{economy}</yellow> <dark_gray>({id})</dark_gray></gray>"
  create-prompt-id: "<yellow>Enter an ID for the economy <gray>(a-z, numbers, no spaces - type 'cancel' to cancel)</gray>:</yellow>"
  create-prompt-name: "<yellow>Enter the display name:</yellow>"
  create-prompt-symbol: "<yellow>Enter the currency symbol <gray>(e.g. $, ¤, ⛃)</gray>:</yellow>"
  create-prompt-format: "<yellow>Enter the number format <gray>(e.g. #,##0.00)</gray>:</yellow>"
  create-prompt-starting: "<yellow>Enter the starting balance:</yellow>"
  create-prompt-min: "<yellow>Enter the minimum balance <gray>(use 0 for none)</gray>:</yellow>"
  create-prompt-max: "<yellow>Enter the maximum balance <gray>(use 0 for unlimited)</gray>:</yellow>"
  create-prompt-icon: "<yellow>Enter the GUI icon material name:</yellow>"
  create-prompt-description: "<yellow>Enter a description for this economy:</yellow>"
  create-prompt-color: "<yellow>Enter the MiniMessage color tag <gray>(e.g. <green>, <#FF5500>)</gray>:</yellow>"
  create-cancel-hint: "<gray>Type <yellow>cancel</yellow> to go back.</gray>"
  edit-prompt-name: "<yellow>Enter the new display name:</yellow>"
  edit-prompt-symbol: "<yellow>Enter the new symbol:</yellow>"
  edit-prompt-format: "<yellow>Enter the new number format:</yellow>"
  edit-prompt-starting: "<yellow>Enter the new starting balance:</yellow>"
  edit-prompt-min: "<yellow>Enter the new minimum balance:</yellow>"
  edit-prompt-max: "<yellow>Enter the new maximum balance:</yellow>"
  edit-prompt-icon: "<yellow>Enter the new GUI icon material:</yellow>"
  edit-prompt-description: "<yellow>Enter the new description:</yellow>"
  edit-prompt-color: "<yellow>Enter the new color tag:</yellow>"
  prompt-permission: "<yellow>Enter permission node, or <white>none</white> for everyone:</yellow>"
  prompt-cheque-material: "<yellow>Enter cheque item material (e.g. PAPER, MAP):</yellow>"
  prompt-cheque-name: "<yellow>Enter cheque display name (MiniMessage · {currency} {amount}):</yellow>"
  prompt-cheque-min: "<yellow>Enter minimum cheque withdraw amount:</yellow>"
  prompt-cheque-max: "<yellow>Enter maximum cheque withdraw amount:</yellow>"
  prompt-drop-material: "<yellow>Enter mob-drop item material (e.g. GOLD_NUGGET):</yellow>"
  prompt-drop-value: "<yellow>Enter currency value per dropped item:</yellow>"
  prompt-drop-name: "<yellow>Enter drop item display name (MiniMessage), or <white>none</white> for auto:</yellow>"
  prompt-drop-chance: "<yellow>Enter default mob drop chance (0.0 to 1.0, or 0 to 100%):</yellow>"
  prompt-drop-min-items: "<yellow>Enter minimum items dropped on a successful roll:</yellow>"
  prompt-drop-max-items: "<yellow>Enter maximum items dropped on a successful roll:</yellow>"
  invalid-amount: "<red>Invalid amount. Enter a valid number.</red>"
  economy-pay-success: "<green>You paid <yellow>{amount}</yellow> to <yellow>{player}</yellow>.</green>"
  economy-pay-received: "<green>You received <yellow>{amount}</yellow> from <yellow>{player}</yellow>.</green>"
  pay-received-actionbar: "<green>+{amount}</green> <gray>from {player}</gray>"
  cannot-pay-self: "<red>You cannot pay yourself.</red>"
  target-max-balance: "<red>That player's balance is already at the maximum.</red>"
  pay-confirm: "<yellow>Pay <red>{amount}</red> to <white>{player}</white>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  cheque:
    disabled-for-economy: "<red>Cheques are not enabled for <yellow>{economy}</yellow>.</red>"
    below-minimum: "<red>Minimum cheque amount is <yellow>{min}</yellow>.</red>"
    above-maximum: "<red>Maximum cheque amount is <yellow>{max}</yellow>.</red>"
    withdraw-success: "<green>Cheque issued for <yellow>{amount}</yellow> <gold>{currency}</gold>. Right-click to deposit.</green>"
    deposit-success: "<green>Deposited <yellow>{amount}</yellow> <gold>{currency}</gold> from cheque.</green>"
    deposit-failed: "<red>Could not deposit that cheque (balance full or currency unavailable).</red>"
    inventory-full: "<red>Your inventory is full. Free a slot before withdrawing a cheque.</red>"
    not-cheque: "<red>You are not holding a valid cheque.</red>"
    usage-withdraw: "<yellow>Usage: /sa cheque withdraw <economy> <amount></yellow>"
    help-header: "<gold><bold>Cheque Commands</bold></gold>"
    help-withdraw: " <gray>/sa cheque withdraw <economy> <amount></gray>  <dark_gray>| Withdraw to a cheque item</dark_gray>"
    help-deposit: " <gray>/sa cheque deposit</gray>  <dark_gray>| Deposit held cheque to balance</dark_gray>"

# ==================== MODULES ====================
modules:
  header: "<gold><bold>Module Manager</bold></gold> <gray>({enabled}/{total} enabled)</gray>"
  toggled: "<gray>Module <yellow>{module}</yellow> has been {state}<gray>."
  enabled-state: "<green>enabled"
  disabled-state: "<red>disabled"
  unknown-module: "<red>Unknown module: <yellow>{module}</yellow>. Use <yellow>/sa modules list</yellow> to see available modules.</red>"
  reloaded: "<green>modules.yml reloaded.</green>"
  usage-toggle: "<yellow>Usage: /sa modules toggle <module></yellow>"
  usage-enable: "<yellow>Usage: /sa modules enable <module></yellow>"
  usage-disable: "<yellow>Usage: /sa modules disable <module></yellow>"
  disable-confirm: "<yellow>Disable module <red>{module}</red>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  usage-main: "<yellow>Usage: /sa modules <list|toggle|enable|disable|gui></yellow>"
  search-prompt: "<yellow>Type a search</yellow> <gray>(module name, category, or command like</gray> <white>ban</white><gray>)</gray><yellow>. Type</yellow> <white>clear</white> <yellow>to reset.</yellow>"
  search-applied: "<green>Module search set to</green> <yellow>{query}</yellow><green>.</green>"
  search-cleared: "<gray>Module search cleared.</gray>"
  search-needs-chat: "<red>Chat search needs the Chat module enabled (ChatInput). Use the category and status filters instead.</red>"

# ==================== FRIENDS ====================
friends:
  request-sent: "<green>Friend request sent to <yellow>{player}</yellow>.</green>"
  request-received: "<yellow>{player}</yellow> <green>wants to be your friend.</green>"
  request-expired: "<gray>Your friend request to <yellow>{player}</yellow> has expired.</gray>"
  request-expired-target: "<gray>Friend request from <yellow>{player}</yellow> has expired.</gray>"
  request-replaced: "<yellow>Your friend request to <white>{player}</white> was replaced by a newer request.</yellow>"
  already-friends: "<yellow>You are already friends with <yellow>{player}</yellow>.</yellow>"
  already-pending: "<yellow>You already have a pending request to <yellow>{player}</yellow>.</yellow>"
  cannot-self: "<red>You cannot add yourself as a friend.</red>"
  no-pending: "<yellow>You have no pending friend requests.</yellow>"
  accepted: "<green>You are now friends with <yellow>{player}</yellow>.</green>"
  accepted-requester: "<green><yellow>{player}</yellow> accepted your friend request.</green>"
  denied: "<red>You denied the friend request from <yellow>{player}</yellow>.</red>"
  denied-requester: "<red><yellow>{player}</yellow> denied your friend request.</red>"
  removed: "<yellow>You removed <yellow>{player}</yellow> from your friends list.</yellow>"
  removed-by: "<yellow><yellow>{player}</yellow> removed you from their friends list.</yellow>"
  not-friends: "<red>You are not friends with <yellow>{player}</yellow>.</red>"
  no-friends: "<gray>You don't have any friends yet. Use <yellow>/sa friend add <player></yellow> to send a request.</gray>"
  list-header: "<gold><bold>Friends</bold></gold> <gray>({count} total)</gray>"
  list-entry: "<gray> - </gray>{status} <yellow>{player}</yellow>"
  teleported: "<green>Teleported to <yellow>{player}</yellow>.</green>"
  teleported-target: "<green><yellow>{player}</yellow> teleported to you.</green>"
  pvp-blocked: "<yellow>You can't attack your friend <yellow>{player}</yellow>.</yellow>"
  pvp-toggled: "<green>Friend PvP is now {state}<green>.</green>"

# ==================== NICKNAME ====================
nickname:
  none: "<gray>You don't have a nickname set.</gray>"
  current: "<gray>Your nickname: </gray>{nickname}"
  set: "<green>Nickname set to: </green>{nickname}"
  reset: "<green>Your nickname has been reset.</green>"
  set-other: "<green>Set <yellow>{player}</yellow>'s nickname to: </green>{nickname}"
  reset-other: "<green>Reset <yellow>{player}</yellow>'s nickname.</green>"
  set-by-staff: "<yellow>A staff member set your nickname to: </yellow>{nickname}"
  reset-by-staff: "<yellow>A staff member reset your nickname.</yellow>"
  too-short: "<red>Nickname must be at least {min} characters long.</red>"
  too-long: "<red>Nickname must be at most {max} characters long.</red>"
  no-colors: "<red>You don't have permission to use colors in nicknames.</red>"
  no-events: "<red>Nicknames cannot include click, hover, or other interactive tags.</red>"
  realname: "<gray>Nickname </gray><white>{nickname}</white><gray> belongs to </gray><yellow>{player}</yellow>"
  realname-not-found: "<red>No player found with nickname <yellow>{nickname}</yellow>.</red>"
  realname-ambiguous: "<yellow>Multiple players use nickname <white>{nickname}</white>: <gray>{players}</gray></yellow>"
  realname-no-nick: "<gray><yellow>{player}</yellow> has no nickname set.</gray>"
  preview-line: "<gray>Nickname preview:</gray>"

# ==================== SEEN ====================
seen:
  online: "<green><yellow>{player}</yellow> is currently online.</green>"
  header: "<gold><bold>Player Info:</bold></gold> <yellow>{player}</yellow>"
  last-seen: "<gray>  Last Seen: </gray><white>{time}</white>"
  first-join: "<gray>  First Join: </gray><white>{time}</white>"
  playtime: "<gray>  Playtime: </gray><white>{time}</white>"
  last-location: "<gray>  Last Logout: </gray><white>{world}</white> <gray>({x}, {y}, {z})</gray>"
  last-world-unloaded: "<gray>  Last world <white>{world}</white> (not loaded)</gray>"
  flags: "<gray>  Status: </gray>{flags}"
  flags-none: "<gray>  Status: </gray><green>clean</green>"
  flag-banned: "<red>banned</red>"
  flag-muted: "<gold>muted</gold>"
  flag-jailed: "<red>jailed</red>"
  flag-frozen: "<red>frozen</red>"
  suggest-check: "<click:suggest_command:'/sa check {player}'><gray>  → /sa check {player}</gray></click>"
  suggest-history: "<click:suggest_command:'/sa punishhistory {player}'><gray>  → /sa punishhistory {player}</gray></click>"

# ==================== PLAYTIME ====================
playtime:
  show: "<yellow>{player}</yellow><gray>'s playtime: </gray><white>{time}</white>"
  top-empty: "<gray>No playtime data is available yet.</gray>"
  top-header: "<gold><bold>Playtime Top</bold></gold> <gray>(showing up to {count})</gray>"
  top-line: "<gray>{rank}.</gray> <yellow>{player}</yellow> <dark_gray>-</dark_gray> <white>{time}</white>"

doubledoors:
  usage: "<yellow>Usage: /sa doubledoors <toggle|status></yellow>"
  toggled-on: "<green>DoubleDoors helpers are now enabled for you.</green>"
  toggled-off: "<yellow>DoubleDoors helpers are now disabled for you.</yellow>"
  status-enabled: "<green>DoubleDoors helpers are currently enabled for you.</green>"
  status-disabled: "<yellow>DoubleDoors helpers are currently disabled for you.</yellow>"

deathcoords:
  usage: "<yellow>Usage: /sa deathcoords [last]</yellow>"
  no-last-death: "<gray>No saved death location (or it expired).</gray>"
  death-reminder: "<gray>You died at </gray><white>{x} {y} {z}</white><gray> in </gray><yellow>{world}</yellow><gray> ({dimension}).</gray>"
  death-reminder-action: "<gray>Death: </gray><white>{x} {y} {z}</white><gray> - </gray><yellow>{world}</yellow>"
  death-reminder-team: "<gray>{player} died at </gray><white>{x} {y} {z}</white><gray> ({world}).</gray>"

seekitem:
  scan-started: "<gray>Scanning for </gray><white>{material}</white><gray> r=</gray><white>{radius}</white><gray> [</gray><dark_aqua>{flags}</dark_aqua><gray>]...</gray>"
  header: "<green>Found {count} {material} match(es):</green>"
  none-found: "<gray>No </gray><white>{material}</white><gray> found nearby.</gray>"
  tp-hover: "<gray>Click to teleport</gray>"
  label-ground: "Ground Drop"
  label-item-frame: "Item Frame"
  label-glow-frame: "Glow Item Frame"
  label-armor-stand: "Armor Stand"
  already-running: "<gray>A scan is already running. Use </gray><yellow>/sa seekitem cancel</yellow><gray> to stop it.</gray>"
  cancelled: "<gray>Scan cancelled.</gray>"
  no-scan-running: "<gray>No scan is currently running.</gray>"
  hand-empty: "<red>Hold an item in your main hand first.</red>"
  progress: "<dark_gray>[SeekItem] </dark_gray><gray>Scanning… </gray><white>{percent}%</white><gray> | </gray><white>{found}</white><gray> found so far.</gray>"
  usage: "<yellow>Usage: /sa seekitem <material|hand|cancel> [radius] [-players] [-ground] [-frames] [-enchanted] [-named] [-amount:<n>]</yellow>"
  bad-material: "<red>Unknown material: {mat}</red>"
  bad-amount: "<red>Invalid amount. Use -amount:<number>.</red>"
  bad-radius: "<red>Radius must be a number.</red>"
  bad-radius-range: "<red>Radius must be between {min} and {max}.</red>"
  cooldown: "<gray>Wait </gray><white>{seconds}</white><gray>s before scanning again.</gray>"
  disabled: "<gray>SeekItem is disabled.</gray>"
  world-disabled: "<gray>SeekItem is disabled in this world.</gray>"

# ==================== RECIPE ====================
recipe:
  list-header: "<gold><bold>Custom Recipes</bold></gold> <gray>({count} total)</gray>"
  list-entry: " <gray>•</gray> <yellow>{id}</yellow> <dark_gray>[{type}]</dark_gray> <gray>| {name}</gray>"
  no-recipes: "<gray>No custom recipes configured.</gray>"
  not-found: "<red>Recipe <yellow>{id}</yellow> not found.</red>"
  exists: "<red>Recipe <yellow>{id}</yellow> already exists.</red>"
  deleted: "<green>Deleted recipe <yellow>{id}</yellow>.</green>"
  saved: "<green>Saved recipe <yellow>{id}</yellow>.</green>"
  reloaded: "<green>Recipes reloaded.</green>"
  search-prompt: "<yellow>Enter recipe search filter</yellow> <gray>(id, result, or ingredient; type clear to reset)</gray>"
  create-usage: "<yellow>Usage: /sa recipe create <id> <type></yellow>"
  edit-usage: "<yellow>Usage: /sa recipe edit <id></yellow>"
  delete-usage: "<yellow>Usage: /sa recipe delete <id></yellow>"
  view-usage: "<yellow>Usage: /sa recipe view <id></yellow>"
  invalid-id: "<red>Invalid recipe ID. Use letters, numbers, dots, underscores, or dashes.</red>"
  invalid-type: "<red>Invalid recipe type: <yellow>{type}</yellow>.</red>"
  created-draft: "<green>Created recipe draft <yellow>{id}</yellow> as <yellow>{type}</yellow>. Open GUI to finish.</green>"
  edit-opened: "<green>Opened recipe editor for <yellow>{id}</yellow>.</green>"
  no-permission: "<red>You don't have permission to craft <yellow>{recipe}</yellow>.</red>"
  cannot-afford: "<red>You can't afford to craft <yellow>{recipe}</yellow>.</red>"
  no-shift-craft: "<yellow>Craft one at a time. <white>{recipe}</white> has a crafting cost.</yellow>"
  cost-deducted: "<gray>Crafting cost: <yellow>{amount}</yellow> deducted for <yellow>{recipe}</yellow>.</gray>"
  wizard:
    session-missing: "<red>No active recipe wizard session found.</red>"
    invalid: "<red>Recipe is incomplete or invalid. Check result/ingredients resolve (Crucible needs MythicMobs).</red>"
    invalid-number: "<red>Invalid number.</red>"
    invalid-item-ref: "<red>Item reference cannot be empty.</red>"
    unresolved-item: "<yellow>Could not resolve <white>{ref}</white>. Check the id / that MythicMobs (Crucible) is loaded.</yellow>"
    item-set: "<green>Result set to <white>{ref}</white>.</green>"
    prompt-result-material: "<yellow>Enter result material (DIAMOND_SWORD) or Crucible id (crucible:MyItem):</yellow>"
    prompt-result-amount: "<yellow>Enter result amount (1-64):</yellow>"
    prompt-result-name: "<yellow>Enter display name (MiniMessage/&), or 'none':</yellow>"
    prompt-result-lore: "<yellow>Enter lore lines separated with |, or 'none':</yellow>"
    prompt-result-enchants: "<yellow>Enter enchants as key:level,key:level or 'none':</yellow>"
    prompt-shape: "<yellow>Enter 3 shape rows using | (example: ABC| D |   ):</yellow>"
    prompt-ingredients-map: "<yellow>Enter map as A=STONE,B=crucible:MyItem:</yellow>"
    prompt-ingredients-list: "<yellow>Enter ingredients list (STONE,crucible:MyItem):</yellow>"
    prompt-input: "<yellow>Enter input material or crucible:ItemId:</yellow>"
    prompt-cook-time: "<yellow>Enter cooking time in ticks:</yellow>"
    prompt-experience: "<yellow>Enter experience amount:</yellow>"
    prompt-template: "<yellow>Enter smithing template material or crucible:ItemId:</yellow>"
    prompt-base: "<yellow>Enter smithing base material or crucible:ItemId:</yellow>"
    prompt-addition: "<yellow>Enter smithing addition material or crucible:ItemId:</yellow>"
    prompt-permission: "<yellow>Enter permission node, or 'none':</yellow>"
    prompt-cost-economy: "<yellow>Enter economy ID, or 'none':</yellow>"
    prompt-cost-amount: "<yellow>Enter crafting cost amount:</yellow>"
    prompt-category: "<yellow>Enter recipe category:</yellow>"
    prompt-gui-icon: "<yellow>Enter GUI icon material, or 'none':</yellow>"
    hand-empty: "<red>Hold an item in your main hand first.</red>"
    hand-crucible: "<green>Captured Crucible/Mythic item <yellow>crucible:{id}</yellow>.</green>"
    hand-vanilla: "<green>Captured vanilla material <yellow>{material}</yellow>.</green>"
    hand-ingredient: "<green>Captured ingredient <white>{ref}</white>.</green>"

# ==================== RTP ====================
rtp:
  searching: "<gray>Searching for a safe location...</gray>"
  search-actionbar: "<gray>Searching for safe location... <yellow>{progress}%</yellow></gray>"
  already-searching: "<yellow>RTP is already searching. Wait for it to finish.</yellow>"
  teleporting: "<green>Teleporting to <yellow>{world}</yellow>...</green>"
  teleported: "<green>Teleported to <yellow>{world}</yellow> at <yellow>{x}</yellow>, <yellow>{z}</yellow>.</green>"
  warmup: "<gray>Teleporting in <yellow>{seconds}s</yellow>. Stay still.</gray>"
  no-safe-location: "<red>Could not find a safe location. Try again.</red>"
  world-disabled: "<red>RTP is disabled in <yellow>{world}</yellow>.</red>"
  void-world-disabled: "<red>RTP is not available in void world <yellow>{world}</yellow>.</red>"
  cooldown: "<red>You must wait <yellow>{seconds}s</yellow> before using RTP again.</red>"

# ==================== DEATH SETTINGS ====================
death-settings:
  header: "<gold><bold>Death Settings</bold></gold>"
  status-line: " <gray>•</gray> <yellow>{flag}</yellow><gray>:</gray> {state}"
  status-on: "<green>ON</green>"
  status-off: "<red>OFF</red>"
  toggled: "<green>Death setting <yellow>{flag}</yellow> set to {state}.</green>"
  usage: "<yellow>Usage: /sa deathsettings [flag] [true|false]</yellow>"
  unknown-flag: "<red>Unknown flag <yellow>{flag}</yellow>. Flags: insta-respawn, bed-respawn, spawn-respawn, rtp-respawn.</red>"
  reloaded: "<green>Death settings reloaded.</green>"

# ==================== WAYPOINTS ====================
waypoint:
  created: "<green>Waypoint <yellow>{name}</yellow> created.</green>"
  updated: "<green>Waypoint <yellow>{name}</yellow> moved to your location.</green>"
  deleted: "<green>Waypoint <yellow>{name}</yellow> deleted.</green>"
  renamed: "<green>Renamed waypoint <yellow>{old}</yellow> to <yellow>{new}</yellow>.</green>"
  not-found: "<red>Waypoint <yellow>{name}</yellow> not found.</red>"
  max-reached: "<red>You have reached your maximum of <yellow>{max}</yellow> waypoints.</red>"
  already-exists: "<red>A waypoint named <yellow>{name}</yellow> already exists.</red>"
  invalid-name: "<red>Invalid waypoint name. Use only letters, numbers, underscores, spaces, and hyphens.</red>"
  name-too-long: "<red>Waypoint name too long (max <yellow>{max}</yellow> characters).</red>"
  create-prompt: "Enter a name for this waypoint"
  rename-prompt: "Enter a new name for <yellow>{name}</yellow>"
  unsafe: "<red>That location is not safe for a waypoint.</red>"
  teleporting: "<green>Teleporting to waypoint <yellow>{name}</yellow>...</green>"
  teleported: "<green>Arrived at waypoint <yellow>{name}</yellow>.</green>"
  arrived: "<green>You reached waypoint <yellow>{name}</yellow>.</green>"
  cross-world: "<red>Cannot teleport to waypoints in other worlds.</red>"
  world-not-found: "<red>Waypoint world <yellow>{world}</yellow> is not loaded.</red>"
  tracking-started: "<green>Now tracking <yellow>{name}</yellow>.</green> <gray>Follow the bar at the top of your screen.</gray>"
  tracking-other-world: "<yellow>{name}</yellow> <gray>is in another world.</gray>"
  tracking-too-far: "<yellow>{name}</yellow> <gray>is more than {max}m away.</gray>"
  tracking-bar: "<yellow>{name}</yellow> <gray>| {distance}m {direction}</gray>"
  tracking-stopped: "<green>Stopped tracking waypoint.</green>"
  not-tracking: "<gray>You are not tracking any waypoint.</gray>"
  icon-set: "<green>Waypoint icon set to <yellow>{icon}</yellow>.</green>"
  icon-invalid: "<red>Invalid material: <yellow>{icon}</yellow>.</red>"
  display-on: "<green>Display marker enabled for <yellow>{name}</yellow>.</green>"
  display-off: "<gray>Display marker disabled for <yellow>{name}</yellow>.</gray>"
  display-material-set: "<green>Display block for <yellow>{name}</yellow> set to <aqua>{material}</aqua>.</green>"
  display-material-invalid: "<red>Hold a block in your main hand, or pass a block material name.</red>"
  display-material-denied: "<red>Material <yellow>{material}</yellow> is not allowed for waypoint displays.</red>"
  display-color-set: "<green>Beam color for <yellow>{name}</yellow> set to <aqua>{color}</aqua>.</green>"
  display-color-invalid: "<red>Unknown color <yellow>{color}</yellow>.</red>"
  label-style-updated: "<green>Updated label style for <yellow>{name}</yellow>.</green>"
  list-header: "<gold><bold>Your Waypoints</bold></gold> <gray>({count}/{max})</gray>"
  list-entry: " <gray>•</gray> <yellow>{name}</yellow> <dark_gray>[{world}]</dark_gray> <gray>| {distance} blocks</gray>"
  no-waypoints: "<gray>You have no waypoints. Use <yellow>/sa waypoint</yellow> and Create waypoint, or <yellow>/sa waypoint set <name></yellow>.</gray>"
  usage: "<yellow>Usage: /sa waypoint <set|delete|rename|list|teleport|track|stop|display|color|material|gui></yellow>"
  reloaded: "<green>Waypoints config reloaded.</green>"

# ==================== ATTRIBUTES ====================
attribute:
  set: "<green>Set <yellow>{attribute}</yellow> to <yellow>{value}</yellow> for <yellow>{player}</yellow>.</green>"
  reset-all: "<green>Reset all attributes to defaults for <yellow>{player}</yellow>.</green>"
  not-supported: "<red>This attribute is not supported for that entity.</red>"
  list-header: "<gold><bold>Attributes for {player}</bold></gold>"
  list-entry: " <gray>•</gray> <yellow>{name}</yellow><gray>: {value}{default}</gray>"
  usage: "<yellow>Usage: /sa attribute <player> [attribute] [set|reset] [value]</yellow>"

# ==================== SHOP ====================
shop:
  economy-unavailable: "<red>Economy is not available.</red>"
  not-for-sale: "<red>This item is not for sale.</red>"
  cannot-sell: "<red>This item cannot be sold.</red>"
  not-vanilla-item: "<red>Only plain vanilla items can be sold. Custom or modified items are not accepted.</red>"
  not-enough-currency: "<red>Not enough funds! Need <gold>{price}</gold>."
  not-enough-items: "<red>You don't have enough of this item.</red>"
  inventory-full: "<red>Your inventory is full.</red>"
  buy-success: "<green>Purchased <white>{item} x{amount}</white> for <gold>{price}</gold>."
  sell-success: "<green>Sold <white>{item} x{amount}</white> for <gold>{price}</gold>."
  sell-total: "<green>Sold <white>{amount}</white> items for <gold>{price}</gold>."
  sell-partial: "<green>Sold <white>{amount}</white> items for <gold>{price}</gold> <gray>(partial sale; balance at cap)</gray>"
  nothing-to-sell: "<gray>No sellable items found.</gray>"
  categories-header: "<yellow>Sell categories:</yellow>"
  categories-entry: " <dark_gray>-</dark_gray> <yellow>{id}</yellow> <gray>({name})</gray>"
  max-balance: "<red>Your balance is at the maximum. Nothing was sold.</red>"
  nothing-in-hand: "<gray>You are not holding anything.</gray>"
  invalid-item: "<red>Unknown item.</red>"
  invalid-amount: "<red>Invalid amount.</red>"
  invalid-category: "<red>Unknown sell category.</red>"
  usage-buy: "<yellow>Usage: /sa buy <item> [amount]</yellow>"
  usage-price: "<yellow>Usage: /sa price [item]</yellow> <gray>(held item if omitted)</gray>"
  usage-worth: "<yellow>Usage: /sa worth [hand|inventory]</yellow> <gray>(hand by default)</gray>"
  usage-value: "<yellow>Usage: /sa value [inventory|hand]</yellow> <gray>(inventory line breakdown by default)</gray>"
  usage: "<yellow>Usage: /sa shop [gui|buy|sell|sellall|price|worth|value|reload]</yellow>"
  price: "<white>{item}</white> | Buy: <green>{buy}</green> | Sell: <red>{sell}</red>"
  worth-total: "<gold>Total worth: {total}</gold>"
  worth-line: " <gray>•</gray> <white>{item}</white> x{amount} = <gold>{total}</gold>"
  value-header: "<gold><bold>Inventory Worth: {total}</bold></gold>"
  reloaded: "<green>Shop and prices reloaded.</green>"
  search-prompt: "<yellow>Enter shop search filter</yellow> <gray>(item name contains; type clear to reset)</gray>"
  sell-preview-confirm: "<gray>Selling <white>{amount}</white> items for ~<gold>{price}</gold> ({currency})...</gray>"

# ==================== DAILY ====================
daily:
  claimed: "<green>Daily reward claimed! <gold>{money}</gold>"
  cooldown: "<red>Daily reward available in <yellow>{time}</yellow>.</red>"
  inventory-full: "<red>Your inventory is full. Free space before claiming your daily reward.</red>"

dupehand:
  empty: "<red>You are not holding an item.</red>"
  success: "<green>Duplicated held item.</green>"

skull:
  usage: "<yellow>Usage: /sa skull <player></yellow>"
  given: "<green>Given head of <yellow>{player}</yellow>.</green>"

payall:
  usage: "<yellow>Usage: /sa payall <amount> [economy] [-confirm]</yellow>"
  confirm: "<yellow>Pay <red>{amount}</red> to <white>{count}</white> online players? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  success: "<green>Paid <gold>{amount}</gold> to <yellow>{count}</yellow> players.</green>"

moneylog:
  header: "<gold><bold>Money Log</bold></gold> <gray>(page {page})</gray>"
  line: "<gray>{line}</gray>"

tax:
  usage: "<yellow>Usage: /sa tax <percent></yellow>"
  invalid: "<red>Invalid tax percent.</red>"
  applied: "<green>Applied <yellow>{percent}%</yellow> tax. Collected <gold>{total}</gold>."

emojitoggle:
  on: "<green>Chat emojis enabled.</green>"
  off: "<red>Chat emojis disabled.</red>"

stafflist:
  header: "<gold><bold>Staff Online</bold></gold>"
  entry: " <gray>•</gray> <yellow>{player}</yellow>"

staffrollcall:
  header: "<gold><bold>Staff Roll Call</bold></gold>"
  entry: " <yellow>{player}</yellow> <dark_gray>| {world} | {ping}ms | AFK: {afk} | Vanish: {vanish} | Staff: {staffmode}</dark_gray>"
  none: "<gray>No staff online.</gray>"
  afk-yes: "<red>yes</red>"
  afk-no: "<green>no</green>"
  vanish-yes: "<red>yes</red>"
  vanish-no: "<green>no</green>"
  staff-yes: "<aqua>yes</aqua>"
  staff-no: "<gray>no</gray>"

vanishlist:
  header: "<gold><bold>Vanished Players</bold></gold>"
  entry: " <gray>•</gray> <yellow>{player}</yellow> <dark_gray>(weight {weight})</dark_gray>"

gamerules:
  header: "<gradient:#5EEAD4:#38BDF8><bold>Gamerules</bold></gradient> <dark_gray>|</dark_gray> <aqua>{world}</aqua>"
  no-worlds: "<red>No worlds are loaded.</red>"
  line: " <dark_gray>┃</dark_gray> <aqua>{rule}</aqua> <dark_gray>→</dark_gray> {value}"
  invalid: "<red>Unknown gamerule.</red>"
  not-boolean: "<red><yellow>{rule}</yellow> is not a boolean gamerule.</red>"
  not-integer: "<red><yellow>{rule}</yellow> is not an integer gamerule.</red>"
  unsupported-type: "<red><yellow>{rule}</yellow> cannot be edited from the GUI.</red>"
  toggled: "<green>Set <yellow>{rule}</yellow> to <white>{value}</white>.</green>"
  set: "<green>Set <yellow>{rule}</yellow> to <white>{value}</white>.</green>"
  usage: "<yellow>Usage: /sa gamerules [gui|list|toggle <rule>|set <rule> <value>]</yellow>"
  usage-toggle: "<yellow>Usage: /sa gamerules toggle <rule></yellow>"
  usage-set: "<yellow>Usage: /sa gamerules set <rule> <value></yellow>"
  world-selected: "<gray>Editing gamerules for world <yellow>{world}</yellow>.</gray>"

performance:
  scanning: "<gray>Scanning...</gray>"
  laghotspots-header: "<gold><bold>Lag Hotspots</bold></gold>"
  chunkactivity-header: "<gold><bold>Active Chunks</bold></gold>"
  mobdensity-header: "<gold><bold>Mob Density</bold></gold>"
  redstone-header: "<gold><bold>Redstone Hotspots</bold></gold>"
  chunk-line: " <gray>•</gray> <yellow>{world}</yellow> <white>{x}, {z}</white> <gray>score {score}</gray>"

xraycheck:
  usage: "<yellow>Usage: /sa xraycheck <player></yellow>"
  header: "<gold><bold>Mining Statistics: {player}</bold></gold>"
  no-data: "<gray>No mining data recorded for <white>{player}</white> yet.</gray>"
  stone: "<gray>Stone mined: <white>{count}</white></gray>"
  diamonds: "<gray>Diamond ore: <white>{count}</white> <dark_gray>({ratio})</dark_gray></gray>"
  debris: "<gray>Ancient debris: <white>{count}</white> <dark_gray>({ratio})</dark_gray></gray>"
  diamond-ratio: "<gray>Diamond ratio: <white>{ratio}</white></gray>"
  debris-ratio: "<gray>Ancient debris ratio: <white>{ratio}</white></gray>"
  suspicious: "<gray>Suspicious paths: <white>{paths}</white> (score <white>{score}</white>)</gray>"
  top-ore: " <gray>•</gray> <yellow>{item}</yellow> <white>×{count}</white>"
  recent-header: "<gray>Recent ore finds:</gray>"
  ore: " <dark_gray>›</dark_gray> <white>{location}</white>"

# ==================== ITEM FILTER ====================
itemfilter:
  usage: "<yellow>Usage: /sa itemfilter <add|remove|list|clear> [material|hand]</yellow>"
  added: "<green>Added <yellow>{item}</yellow> to your pickup filter.</green>"
  removed: "<green>Removed <yellow>{item}</yellow> from your pickup filter.</green>"
  already: "<red><yellow>{item}</yellow> is already filtered.</red>"
  not-listed: "<red><yellow>{item}</yellow> is not on your filter list.</red>"
  empty: "<gray>Your item filter is empty.</gray>"
  header: "<gold><bold>Item Filter</bold></gold> <gray>({count})</gray>"
  line: " <gray>•</gray> <white>{item}</white>"
  cleared: "<green>Item filter cleared.</green>"
  limit: "<red>Filter limit reached (<yellow>{max}</yellow> entries).</red>"
  need-hand: "<red>Hold an item, or specify a material name.</red>"

# ==================== AUTOPICKUP (magnet /sa autopickup) ====================
autopickup:
  on: "<green>Magnet autopickup enabled.</green>"
  off: "<red>Magnet autopickup disabled.</red>"

# ==================== AUTOSELL ====================
autosell:
  usage: "<yellow>Usage: /sa autosell [gui|add|remove|list|clear] [material|hand]</yellow>"
  gui-title: "<green>Autosell</green>"
  gui-empty: "<gray>No materials on your autosell list.</gray>"
  gui-add-hand: "<green>Add hand item</green>"
  gui-add-hand-lore: "<gray>Click to add the item in your hand.</gray>"
  gui-clear: "<red>Clear list</red>"
  gui-clear-lore: "<gray>Remove all autosell entries.</gray>"
  gui-entry-lore: "<gray>Click to remove from autosell.</gray>"
  gui-info: "<aqua>Autosell</aqua>"
  gui-info-lore: "<gray>Listed items sell automatically on pickup.</gray>"
  added: "<green>Added <yellow>{item}</yellow> to autosell.</green>"
  removed: "<green>Removed <yellow>{item}</yellow> from autosell.</green>"
  already: "<red><yellow>{item}</yellow> is already on autosell.</red>"
  not-listed: "<red><yellow>{item}</yellow> is not on your autosell list.</red>"
  empty: "<gray>Your autosell list is empty.</gray>"
  header: "<gold><bold>Autosell List</bold></gold> <gray>({count})</gray>"
  line: " <gray>•</gray> <white>{item}</white>"
  cleared: "<green>Autosell list cleared.</green>"
  limit: "<red>Autosell limit reached (<yellow>{max}</yellow> entries).</red>"

# ==================== PRIVACY ====================
privacy:
  pay-on: "<green>You are now accepting payments.</green>"
  pay-off: "<red>You are no longer accepting payments.</red>"
  pay-disabled: "<red>That player is not accepting payments.</red>"
  msg-on: "<green>You are now accepting private messages.</green>"
  msg-off: "<red>You are no longer accepting private messages.</red>"
  msg-disabled: "<red>That player is not accepting private messages.</red>"
  trade-on: "<green>You are now accepting trade requests.</green>"
  trade-off: "<red>You are no longer accepting trade requests.</red>"
  trade-disabled: "<red>That player is not accepting trade requests.</red>"

# ==================== TRADE ====================
trade:
  usage: "<yellow>Usage: /sa trade <player> | accept | deny | cancel</yellow>"
  cannot-self: "<red>You cannot trade with yourself.</red>"
  already-in-trade: "<red>You are already in a trade.</red>"
  target-busy: "<red>That player is busy.</red>"
  too-far: "<red>You are too far away to trade.</red>"
  request-sent: "<green>Trade request sent to <yellow>{player}</yellow>.</green>"
  request-received: "<yellow>{player}</yellow> wants to trade with you."
  no-pending: "<red>You have no pending trade requests.</red>"
  accepted: "<green>Trade started with <yellow>{player}</yellow>.</green>"
  denied: "<red><yellow>{player}</yellow> declined your trade request.</red>"
  you-denied: "<gray>Trade request declined.</gray>"
  cancelled: "<red>Trade cancelled.</red>"
  cancelled-damage: "<red>Trade cancelled because you took damage.</red>"
  expired: "<red>Trade request expired.</red>"
  player-offline: "<red>The other player went offline.</red>"
  inventory-full: "<red>Trade blocked. <yellow>{player}</yellow> does not have enough inventory space.</red>"
  complete: "<green>Trade completed with <yellow>{player}</yellow>.</green>"
  countdown-actionbar: "<aqua>Trade completing in <white>{seconds}</white>s…</aqua>"
  money-disabled: "<red>Soft money trading is disabled.</red>"
  money-prompt: "<yellow>Enter the money amount to offer (or cancel):</yellow>"
  money-invalid: "<red>Invalid money amount.</red>"
  money-insufficient: "<red>You do not have that much money.</red>"
  money-insufficient-other: "<red><yellow>{player}</yellow> does not have enough money for their offer.</red>"
  money-no-access: "<red><yellow>{player}</yellow> cannot use that currency.</red>"
  money-receiver-full: "<red><yellow>{player}</yellow> cannot receive that much money (near max balance).</red>"
  xp-disabled: "<red>XP trading is disabled.</red>"
  xp-prompt: "<yellow>Enter XP levels to offer (or cancel):</yellow>"
  xp-invalid: "<red>Invalid XP level amount.</red>"
  xp-insufficient: "<red>You do not have that many XP levels.</red>"
  xp-insufficient-other: "<red><yellow>{player}</yellow> does not have enough XP levels for their offer.</red>"
  transfer-failed: "<red>Trade failed while transferring money or XP. Nothing was completed.</red>"
  overflow-dropped: "<yellow>Some trade items did not fit and were dropped at your feet.</yellow>"

# ==================== PLAYER VAULTS ====================
vault:
  usage: "<yellow>Usage: /sa vault [open|gui|list|autopickup] [args]</yellow>"
  invalid-number: "<red>Invalid vault number. You can use vaults 1-<yellow>{max}</yellow>.</red>"
  list-header: "<gold><bold>Your Vaults</bold></gold> <gray>(max <white>{count}</white>, autopickup <white>{mode}</white> → #{apvault})</gray>"
  list-line: " <gray>•</gray> Vault <yellow>#{vault}</yellow> <dark_gray>|</dark_gray> <white>{used}</white>/<white>{capacity}</white> {bar}"
  list-gui-hint: "<gray>Open the picker with <white>/sa vault</white> or <white>/sa vault gui</white>.</gray>"
  autopickup-usage: "<yellow>Usage: /sa vault autopickup [off|direct|overflow] | vault <n></yellow>"
  autopickup-vault-usage: "<yellow>Usage: /sa vault autopickup vault <number></yellow>"
  autopickup-set: "<green>Vault autopickup mode set to <yellow>{mode}</yellow>.</green>"
  autopickup-vault-set: "<green>Vault autopickup target set to vault <yellow>#{vault}</yellow>.</green>"
  autopickup-mode-denied: "<red>You do not have permission for vault autopickup mode <yellow>{mode}</yellow>.</red>"
  blacklist-returned: "<yellow>Some blacklisted items were returned to you.</yellow>"
  blacklist-denied: "<red><yellow>{item}</yellow> cannot be stored in vaults.</red>"
  admin-usage: "<yellow>Usage: /sa vaultadmin <open|clear|info> <player> [vault|page]</yellow>"
  admin-info-header: "<gold><bold>Vaults: <white>{player}</white></bold></gold>"
  admin-info-line: "<gray>Max <white>{max}</white> · Rows <white>{rows}</white> · Autopickup <white>{mode}</white> → #{apvault}</gray>"
  admin-info-page: " <gray>Page <white>{page}</white>/<white>{total}</white> · <white>{count}</white> vaults</gray>"
  admin-info-bad-page: "<red>Invalid page number.</red>"
  admin-info-nav-back: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>« Back</yellow></hover></click>"
  admin-info-nav-back-disabled: "<dark_gray>« Back</dark_gray>"
  admin-info-nav-next: "<click:run_command:'{cmd}'><hover:show_text:'<gray>Go to page {page}'><yellow>Next »</yellow></hover></click>"
  admin-info-nav-next-disabled: "<dark_gray>Next »</dark_gray>"
  admin-info-nav-page: "<gray>[</gray><white>{page}</white><gray>/</gray><white>{total}</white><gray>]</gray>"
  admin-cleared: "<green>Cleared vault <yellow>#{vault}</yellow> for <white>{player}</white>.</green>"
  admin-clear-confirm: "<yellow>Clear vault <red>#{vault}</red> for <white>{player}</white>? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"
  admin-open-busy: "<red>That vault is currently open. Close it first.</red>"
  already-open: "<red>That vault is already open by someone else. Try again in a moment.</red>"

# ==================== PROFILE ====================
profile:
  msg-hint: "<gray>Message <yellow>{player}</yellow> with <white>/msg {player} <message></white></gray>"
  pay-hint: "<gray>Pay <yellow>{player}</yellow> with <white>/pay {player} <amount></white></gray>"

spawnmob:
  unknown-type: "<red>Unknown mob type: <yellow>{value}</yellow></red>"
  unknown-mythic: "<red>Unknown Mythic mob: <yellow>{value}</yellow></red>"
  not-living: "<red>That type cannot be spawned as a living mob: <yellow>{value}</yellow></red>"
  bad-count: "<red>Count must be between 1 and <yellow>{max}</yellow>.</red>"
  bad-spread: "<red>Spread must be between 0 and <yellow>{max}</yellow>.</red>"
  denied-type: "<red>Spawning <yellow>{mob}</yellow> is blocked by configuration.</red>"
  done: "<green>Spawned <yellow>{spawned}</yellow>× <white>{mob}</white>. Skipped: <gray>{skipped}</gray></green>"

# ==================== MAIL ====================
mail:
  sent: "<green>Mail sent to <yellow>{player}</yellow> <gray>(#{id})</gray>.</green>"
  received-notify: "<aqua>You have new mail from <yellow>{from}</yellow>! <gray>({count} unread)</gray> Use <white>/sa mail</white>.</aqua>"
  join-unread: "<aqua>You have <yellow>{count}</yellow> unread mail message(s). Use <white>/sa mail</white>.</aqua>"
  join-unread-actionbar: "<aqua>{count} unread mail. Open /sa mail</aqua>"
  inbox-empty: "<gray>Your inbox is empty.</gray>"
  list-header: "<yellow>Inbox</yellow> <gray>({count} messages, {unread} unread)</gray>"
  list-entry: "<gray>#{id}</gray> <white>{from}</white> <dark_gray>[{status}]</dark_gray> <gray>{preview}</gray>"
  read-header: "<yellow>Mail #{id}</yellow> <gray>from <white>{from}</white> · {time}</gray>"
  read-body: "<white>{body}</white>"
  not-found: "<red>Mail <yellow>#{id}</yellow> was not found.</red>"
  cleared: "<green>Deleted mail <yellow>#{id}</yellow>.</green>"
  cleared-all: "<green>Cleared <yellow>{count}</yellow> mail message(s).</green>"
  marked-read: "<green>Marked mail <yellow>#{id}</yellow> as read.</green>"
  empty-body: "<red>Mail body cannot be empty.</red>"
  body-too-long: "<red>Mail body is too long (max <yellow>{max}</yellow> characters).</red>"
  cannot-self: "<red>You cannot send mail to yourself.</red>"
  inbox-full: "<red><yellow>{player}</yellow>'s inbox is full (50 messages).</red>"
  clear-all-confirm: "<yellow>Shift-click Clear All to confirm deleting every message.</yellow>"
  clear-all-chat-confirm: "<yellow>Delete <red>all</red> mail messages? Type <green>confirm</green> to proceed or type <red>cancel</red>.</yellow>"

# ==================== INTEGRATIONS ====================
integrations:
  mythic-required: "<red>MythicMobs (or MythicCrucible) is required for this action but is not available.</red>"

# ==================== SPAWNER ====================
spawner:
  look-at-spawner: "<red>Look at a spawner block within 100 blocks.</red>"
  not-spawner: "<red>That block is not a spawner.</red>"
  info: "<green>Spawner</green> <gray>{type}</gray> <dark_gray>@</dark_gray> <white>{x}, {y}, {z}</white> <gray>· tick {delay} · radius {radius} · spread {spread} · trigger {trigger} · kills {kills}/{max}</gray>"
  type-set: "<green>Spawner type set to <yellow>{type}</yellow>.</green>"
  type-set-mythic: "<green>Spawner set to MythicMobs <light_purple>{type}</light_purple>.</green>"
  mythic-unavailable: "<red>MythicMobs is not installed or failed to load.</red>"
  mythic-cleared: "<yellow>Cleared MythicMobs override. Using vanilla type.</yellow>"
  mythic-spawn-failed: "<red>Failed to spawn Mythic mob <yellow>{type}</yellow> from spawner.</red>"
  enabled: "<green>Spawner enabled.</green>"
  disabled: "<yellow>Spawner disabled. It will not spawn.</yellow>"
  prompt-search: "<yellow>Enter a name filter</yellow> <gray>(or 'clear' / 'none'); type cancel to stop</gray>"
  tick-set: "<green>Spawn tick set to <yellow>{value}</yellow> ticks.</green>"
  tick-failed: "<red>Could not set spawn tick to <yellow>{value}</yellow>.</red>"
  radius-set: "<green>Spawn radius set to <yellow>{value}</yellow> blocks.</green>"
  spread-set: "<green>Spawn spread set to <yellow>{value}</yellow> mobs.</green>"
  trigger-set: "<green>Trigger radius set to <yellow>{value}</yellow>.</green>"
  particle-set: "<green>Spawn particle set to <yellow>{value}</yellow>.</green>"
  sound-set: "<green>Spawn sound set to <yellow>{value}</yellow>.</green>"
  budget-set: "<green>Kill budget set to <yellow>{value}</yellow>.</green>"
  budget-reset: "<green>Spawner kill counter reset to 0.</green>"
  budget-disabled: "<yellow>Spawner kill budget is disabled in economy config.</yellow>"
  delay-set: "<green>Spawner delay set to <yellow>{delay}</yellow> ticks.</green>"
  prompt-tick: "<yellow>Enter spawn tick delay</yellow> <gray>({min}-{max}, current {current}); type cancel to stop</gray>"
  prompt-radius: "<yellow>Enter spawn radius</yellow> <gray>({min}-{max}, current {current}); type cancel to stop</gray>"
  prompt-spread: "<yellow>Enter spawn spread (mob count)</yellow> <gray>({min}-{max}, current {current}); type cancel to stop</gray>"
  prompt-trigger: "<yellow>Enter trigger radius</yellow> <gray>({min}-{max}, 0=always, current {current}); type cancel to stop</gray>"
  prompt-budget: "<yellow>Enter kill budget</yellow> <gray>(-1=global, 0=unlimited, or 1-{max}; current {current}); type cancel to stop</gray>"
  invalid-number: "<red>Enter a whole number between <yellow>{min}</yellow> and <yellow>{max}</yellow>.</red>"
  settings-copied: "<green>Spawner settings copied to clipboard.</green>"
  settings-pasted: "<green>Pasted spawner settings from clipboard.</green>"
  clipboard-empty: "<red>No spawner settings in your clipboard.</red>"
  list-empty: "<yellow>No managed spawners with custom settings.</yellow>"
  list-header: "<gold>Managed Spawners</gold> <gray>({count})</gray>"
  list-entry: " <gray>• <yellow>{world}</yellow> @ <white>{x}, {y}, {z}</white></gray>"
  list-teleport: "<green>Teleported to spawner at <yellow>{world}</yellow> <white>{x}, {y}, {z}</white>.</green>"
  list-world-unloaded: "<red>That spawner's world is not loaded.</red>"

# ==================== GLOBAL CHAT MUTE ====================
mutechat:
  enabled: "<gray>Global chat has been <red>muted</red> by <yellow>{staff}</yellow>.</gray>"
  enabled-timed: "<gray>Global chat has been <red>muted</red> by <yellow>{staff}</yellow> for <white>{duration}</white>.</gray>"
  disabled: "<gray>Global chat has been <green>unmuted</green> by <yellow>{staff}</yellow>.</gray>"
  not-muted: "<red>Global chat is not currently muted.</red>"
  already-muted: "<red>Global chat is already muted.</red>"
  chat-blocked: "<red>Chat is globally muted by <yellow>{staff}</yellow>. You cannot chat right now.</red>"

# ==================== UNLOAD CHUNKS ====================
unloadchunks:
  done: "<green>Unloaded <yellow>{count}</yellow> chunk(s) <gray>({mode} mode)</gray>.</green>"
  mode-force: "force"
  mode-safe: "safe"
  force-confirm: "<yellow>Force-unload all chunks? Run <white>/sa unloadchunks -f -confirm</white> to proceed.</yellow>"

# ==================== RANDOM TP ====================
tprandom:
  teleported: "<green>Teleported to <yellow>{player}</yellow>.</green>"
  received: "<gray><yellow>{player}</yellow> teleported to you.</gray>"
  no-players: "<red>No other players are online to teleport to.</red>"

# ==================== CHAT ROOMS ====================
chatroom:
  gui-create-prompt: "<yellow>Type a room name in chat</yellow> <gray>(optional: name -private). Type cancel to abort.</gray>"
  gui-invite-prompt: "<yellow>Type the player name to invite</yellow> <gray>(or cancel).</gray>"
  created: "<green>Room <yellow>{name}</yellow> created. <gray>({visibility})</gray></green>"
  already-exists: "<red>A room named <yellow>{name}</yellow> already exists.</red>"
  name-too-long: "<red>Room name must be 32 characters or fewer.</red>"
  invalid-name: "<red>Room name may only contain letters, numbers, underscores, and hyphens.</red>"
  not-found: "<red>Room <yellow>{name}</yellow> not found.</red>"
  already-member: "<yellow>You are already in room <white>{name}</white>.</yellow>"
  locked: "<red>Room <yellow>{name}</yellow> is locked.</red>"
  private: "<red>Room <yellow>{name}</yellow> is private. You need an invite.</red>"
  joined: "<green>Joined room <yellow>{name}</yellow>.</green>"
  joined-mode-hint: "<dark_gray>Your messages now go to the room. Use <yellow>/sa cr toggle</yellow> to switch back to public chat.</dark_gray>"
  player-joined: "<gray>[Room] <yellow>{player}</yellow> joined.</gray>"
  player-left: "<gray>[Room] <yellow>{player}</yellow> left.</gray>"
  player-kicked: "<gray>[Room] <yellow>{player}</yellow> was kicked.</gray>"
  left: "<gray>You left room <yellow>{name}</yellow>.</gray>"
  not-in-room: "<red>You are not in a room.</red>"
  not-owner: "<red>Only the room owner can do that.</red>"
  cannot-kick-owner: "<red>You cannot kick the room owner.</red>"
  target-not-member: "<red><yellow>{player}</yellow> is not in your room.</red>"
  ownership-transferred: "<yellow>You are now the owner of room <white>{name}</white>.</yellow>"
  room-deleted: "<gray>[Room] Room <yellow>{name}</yellow> has been deleted.</gray>"
  deleted: "<green>Room <yellow>{name}</yellow> deleted.</green>"
  list-empty: "<gray>No rooms are currently available.</gray>"
  list-header: "<aqua>Chat Rooms</aqua>"
  list-entry: " <gray>- <yellow>{name}</yellow> <dark_gray>({count} members, owner: {owner}) {visibility}{locked}</dark_gray></gray>"
  invited: "<green>Invited <yellow>{player}</yellow> to room <yellow>{name}</yellow>.</green>"
  invite-received: "<yellow>{player}</yellow> <green>has invited you to join room <yellow>{name}</yellow>. Use <gray>/sa cr join {name}</gray> to accept.</green>"
  you-were-kicked: "<red>You were kicked from room <yellow>{name}</yellow> by <yellow>{by}</yellow>.</red>"
  info-header: "<aqua>Room: {name}</aqua>"
  info-owner: " <gray>Owner: <yellow>{owner}</yellow></gray>"
  info-visibility: " <gray>Type: <yellow>{visibility}</yellow>{locked}</gray>"
  info-members: " <gray>Members: <yellow>{count}</yellow></gray>"
  info-members-list: " <gray>Players: <white>{members}</white></gray>"
  info-mode: " <gray>Chat mode: <yellow>{mode}</yellow></gray>"
  mode-on: "<green>room</green>"
  mode-off: "<gray>public</gray>"
  mode-toggled: "<gray>Chat mode set to <yellow>{mode}</yellow> for room <yellow>{name}</yellow>.</gray>"
  visibility-public: "<green>public</green>"
  visibility-private: "<red>private</red>"
  tag-locked: " <red>[locked]</red>"
  chat-format: "<dark_gray>[<gold>Room: {room}</gold>]</dark_gray> <yellow>{player}</yellow><gray>:</gray> {message}"
  locked-set: "<gray>[Room] Room <yellow>{name}</yellow> is now <red>locked</red>.</gray>"
  unlocked-set: "<gray>[Room] Room <yellow>{name}</yellow> is now <green>unlocked</green>.</gray>"
  usage-create: "<yellow>Usage: /sa cr create <name> [-private]</yellow>"
  usage-join: "<yellow>Usage: /sa cr join <name></yellow>"
  usage-invite: "<yellow>Usage: /sa cr invite <player></yellow>"
  usage-kick: "<yellow>Usage: /sa cr kick <player></yellow>"
  usage-delete: "<yellow>Usage: /sa cr delete [name]</yellow>"
  usage-lock: "<yellow>Usage: /sa cr lock|unlock</yellow>"

Still stuck? Ask about this page