{
  "common": {
    "save": "Save",
    "saving": "Saving…",
    "discard": "Discard",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "add": "Add",
    "remove": "Remove",
    "loading": "Loading…",
    "yes": "Yes",
    "no": "No",
    "enabled": "Enabled",
    "disabled": "Disabled",
    "unsavedChanges": "You have unsaved changes",
    "saveSuccess": "Changes saved",
    "saveError": "Could not save changes",
    "networkError": "Network error",
    "back": "Back",
    "comingSoon": "Coming soon",
    "close": "Close",
    "optional": "Optional",
    "searchSelect": "Search and select…",
    "noResults": "No results",
      "clearSelection": "Clear selection"
  },
  "embedBuilder": {
    "title": "Title",
    "titlePlaceholder": "Welcome!",
    "description": "Description",
    "descriptionPlaceholder": "Glad you're here, {user}.",
    "color": "Color",
    "preview": "Preview",
    "previewTitlePlaceholder": "Embed title",
    "previewDescriptionPlaceholder": "Embed description appears here…",
    "clear": "Clear embed",
    "clearHint": "Empty fields do not save an embed.",
    "advancedToggle": "Advanced embed options (author, images, footer)",
    "authorSection": "Author (header)",
    "authorNamePlaceholder": "Author name, e.g. {server}",
    "authorIconPlaceholder": "Author icon URL or {server.icon}",
    "authorUrlPlaceholder": "Author link (https://…)",
    "mediaSection": "Media",
    "thumbnailPlaceholder": "Thumbnail URL or {user.avatar}",
    "imagePlaceholder": "Large image / banner URL (https://…)",
    "titleUrlPlaceholder": "Title link (https://…)",
    "footerSection": "Footer",
    "footerTextPlaceholder": "Footer text, e.g. Nexumi",
    "footerIconPlaceholder": "Footer icon URL or {server.icon}",
    "timestamp": "Show timestamp",
    "timestampPreview": "just now",
    "mediaHint": "Image URLs must start with http(s). For Welcome you can use {user.avatar} and {server.icon}."
  },
  "componentsV2Builder": {
    "blocks": "Layout blocks",
    "addBlock": "Add block…",
    "addNestedBlock": "Add nested block…",
    "empty": "No blocks yet — add a container or text block to get started.",
    "preview": "Preview",
    "previewEmptyText": "Text content…",
    "previewInvalidUrl": "Invalid image URL",
    "clear": "Clear layout",
    "clearHint": "Invalid blocks are dropped when saving.",
    "actionsTitle": "Button & select actions",
    "textPlaceholder": "Markdown-style text (Discord formatting)",
    "divider": "Show divider line",
    "spacing": "Spacing",
    "spacingSmall": "Small",
    "spacingLarge": "Large",
    "accentColor": "Accent color (decimal)",
    "spoiler": "Spoiler container",
    "sectionText": "Section text",
    "accessoryType": "Accessory",
    "accessoryThumbnail": "Thumbnail",
    "accessoryButton": "Button",
    "urlPlaceholder": "https://… or {user.avatar}",
    "addMediaItem": "Add image",
    "addButton": "Add button",
    "addSelect": "Add select…",
    "buttonLabel": "Button label",
    "linkUrl": "Link URL (https://…)",
    "actionId": "Action ID",
    "centralActionId": "Central action ID (optional)",
    "optionLabel": "Option label",
    "optionValue": "Option value",
    "optionActionId": "Per-option action ID (optional)",
    "addOption": "Add option",
    "removeOption": "Remove option",
    "selectPlaceholder": "Select placeholder",
    "replyContent": "Reply message",
    "roleAction": "Target role",
    "defaultButtonLabel": "Button",
    "blockTypes": {
      "container": "Container",
      "text_display": "Text",
      "separator": "Separator",
      "section": "Section",
      "media_gallery": "Media gallery",
      "action_row": "Action row",
      "button": "Button"
    },
    "buttonStyles": {
      "Primary": "Primary",
      "Secondary": "Secondary",
      "Success": "Success",
      "Danger": "Danger",
      "Link": "Link"
    },
    "selectTypes": {
      "string_select": "String select",
      "user_select": "User select",
      "role_select": "Role select",
      "channel_select": "Channel select",
      "mentionable_select": "Mentionable select"
    },
    "actionTypes": {
      "EPHEMERAL_REPLY": "Ephemeral reply",
      "PUBLIC_REPLY": "Public reply",
      "ASSIGN_ROLE": "Assign role",
      "REMOVE_ROLE": "Remove role",
      "TOGGLE_ROLE": "Toggle role",
      "ASSIGN_SELECTED_ROLES": "Assign selected roles",
      "NONE": "No action"
    }
  },
  "placeholders": {
    "toggle": "Show available placeholders",
    "hint": "Tap copy to insert. Only the placeholders listed here work in this field.",
    "copy": "Copy placeholder",
    "copied": "Placeholder copied",
    "copyFailed": "Could not copy",
    "desc": {
      "userMention": "Mention of the member",
      "userName": "Member display name",
      "userTag": "Member username/tag",
      "userId": "Member Discord ID",
      "userDisplayName": "Display name (no mention)",
      "userTagPlain": "Username without mention",
      "username": "Member display name",
      "server": "Server name",
      "memberCount": "Current member count",
      "args": "Arguments after the tag command",
      "random": "Random choice from options (separated by |)",
      "age": "Age in years (only if birth year is set)",
      "level": "Reached level",
      "count": "Current stats value",
      "feedTitle": "Feed item title",
      "feedUrl": "Feed item URL",
      "channelBracket": "Channel mention (dashboard syntax — replace the ID)",
      "channelNative": "Channel mention (Discord syntax — replace the ID)",
      "userAvatar": "Member avatar URL (for thumbnail/icons)",
      "serverIcon": "Server icon URL (for author/footer)"
    }
  },
  "nav": {
    "dashboard": "Dashboard",
    "overview": "Overview",
    "settings": "Settings",
    "modules": "Modules",
    "access": "Dashboard access",
    "commands": "Commands"
  },
  "moduleGroups": {
    "moderation": "Moderation",
    "engagement": "Engagement",
    "utility": "Utility",
    "community": "Community",
    "integrations": "Integrations"
  },
  "modules": {
    "moderation": {
      "label": "Moderation",
      "description": "Bans, warns, timeouts and the case system"
    },
    "automod": {
      "label": "Auto-Moderation",
      "description": "Spam, raid and nuke protection"
    },
    "logging": {
      "label": "Logging",
      "description": "Server event log channels"
    },
    "welcome": {
      "label": "Welcome & Leave",
      "description": "Join and leave messages, autoroles"
    },
    "verification": {
      "label": "Verification",
      "description": "Button and captcha verification"
    },
    "leveling": {
      "label": "Leveling & XP",
      "description": "Text and voice XP, level rewards"
    },
    "economy": {
      "label": "Economy",
      "description": "Currency, shop and games"
    },
    "fun": {
      "label": "Fun & Games",
      "description": "Mini games and media commands"
    },
    "giveaways": {
      "label": "Giveaways",
      "description": "Button-based giveaways"
    },
    "tickets": {
      "label": "Tickets",
      "description": "Support ticket panels and transcripts"
    },
    "selfroles": {
      "label": "Self Roles",
      "description": "Reaction, button and dropdown role panels"
    },
    "tags": {
      "label": "Tags",
      "description": "Custom commands and auto-responders"
    },
    "starboard": {
      "label": "Starboard",
      "description": "Highlight popular messages"
    },
    "suggestions": {
      "label": "Suggestions",
      "description": "Community suggestion voting"
    },
    "birthdays": {
      "label": "Birthdays",
      "description": "Birthday announcements and roles"
    },
    "tempvoice": {
      "label": "Temp Voice",
      "description": "Join-to-create voice channels"
    },
    "stats": {
      "label": "Server Stats",
      "description": "Auto-updating stat channels and invites"
    },
    "feeds": {
      "label": "Social Feeds",
      "description": "Twitch, YouTube, RSS and Reddit notifications"
    },
    "scheduler": {
      "label": "Scheduler",
      "description": "Scheduled and recurring announcements"
    },
    "guildbackup": {
      "label": "Backups",
      "description": "Server backup and restore"
    },
    "messages": {
      "label": "Messages",
      "description": "Send embeds or Components V2 layouts to a channel"
    }
  },
  "login": {
    "title": "Nexumi",
    "subtitle": "Sign in with Discord to manage your servers.",
    "cta": "Login with Discord",
    "footer": "By logging in you agree to the Nexumi Terms of Service and Privacy Policy.",
    "errors": {
      "access_denied": "You cancelled the Discord login.",
      "invalid_request": "Invalid login request. Please try again.",
      "invalid_state": "Your login session expired. Please try again.",
      "oauth_failed": "Discord login failed. Please try again."
    }
  },
  "dashboard": {
    "guildList": {
      "title": "Your servers",
      "subtitle": "Select a server to manage, or invite Nexumi to a new one.",
      "manage": "Manage",
      "invite": "Invite",
      "botMissing": "Not installed",
      "empty": "No servers found. You need the Manage Server permission on a Discord server to appear here."
    },
    "ownerBypass": {
      "title": "Owner access",
      "description": "You are editing this server via the Owner panel without Discord Manage Server permission.",
      "backToOwner": "Back to guild management"
    },
    "overview": {
      "title": "Overview",
      "moduleStatusTitle": "Module status",
      "moduleStatusEmpty": "No module data yet.",
      "recentAuditTitle": "Recent dashboard activity",
      "auditEmpty": "No dashboard changes yet.",
      "auditPath": "Path",
      "viewAllModules": "Manage modules",
      "activityTitle": "Activity (last 7 days)",
      "activityMessages": "Messages",
      "activityVoiceMinutes": "Voice minutes",
      "activityActiveUsers": "Active members",
      "activityHint": "Aggregated from the leveling and stats modules' activity tracking."
    }
  },
  "settings": {
    "general": {
      "title": "General settings",
      "description": "Language, timezone and the moderation module toggle for this server.",
      "localeLabel": "Dashboard & bot language",
      "localeHint": "Used for bot replies and dashboard defaults on this server.",
      "timezoneLabel": "Timezone",
      "timezoneHint": "IANA timezone identifier, e.g. Europe/Berlin or America/New_York.",
      "moderationLabel": "Moderation module",
      "moderationHint": "Enable moderation commands (ban, kick, warn, purge, …) on this server.",
      "snipeLabel": "Snipe / Editsnipe",
      "snipeHint": "Temporarily stores deleted/edited messages (off by default for privacy)."
    }
  },
  "modulesPage": {
    "title": "Modules",
    "description": "Enable or disable individual Nexumi modules for this server.",
    "configure": "Configure"
  },
  "access": {
    "title": "Dashboard access",
    "description": "Grant additional Discord roles access to specific dashboard sections, in addition to server administrators.",
    "roleIdLabel": "Role ID",
    "roleIdPlaceholder": "e.g. 123456789012345678",
    "roleIdHint": "Right-click a role in Discord with Developer Mode enabled and choose \"Copy Role ID\".",
    "modulesLabel": "Allowed modules",
    "allModulesOption": "All modules",
    "specificModulesOption": "Specific modules",
    "addRule": "Add rule",
    "removeRule": "Remove",
    "noRules": "No additional access rules configured. Only server administrators can access the dashboard.",
    "invalidRoleId": "Enter a valid Discord role ID (17–20 digits)."
  },
  "modulePlaceholder": {
    "title": "{module} settings",
    "message": "Module settings arrive in a later phase.",
    "backToModules": "Back to modules"
  },
  "modulePages": {
    "moderation": {
      "title": "Moderation",
      "description": "Enable the moderation module and configure automatic escalation rules.",
      "enabledLabel": "Moderation module enabled",
      "enabledHint": "Enables ban, kick, warn, purge and the case system on this server.",
      "escalationsTitle": "Escalation rules",
      "escalationsDescription": "Automatic penalties once a member reaches a certain number of warnings.",
      "noEscalations": "No escalation rules configured.",
      "addEscalation": "Add rule",
      "warnCount": "Warning count",
      "action": "Action",
      "actions": {
        "TIMEOUT": "Timeout",
        "KICK": "Kick",
        "BAN": "Ban"
      },
      "durationMs": "Duration (ms)",
      "reason": "Reason",
      "reasonPlaceholder": "Optional default reason",
      "casesTitle": "Cases",
      "casesDescription": "View moderation cases, edit the reason, or soft-delete.",
      "searchPlaceholder": "Search by user/moderator ID or reason",
      "actionPlaceholder": "Filter by action, e.g. BAN",
      "casesEmpty": "No cases found.",
      "target": "Target",
      "moderator": "Moderator",
      "createdAt": "Created at",
      "noReason": "No reason provided",
      "editReason": "Edit reason",
      "saveReason": "Save",
      "deleteCase": "Delete case",
      "confirmDeleteCase": "Really delete this case?",
      "warningsTitle": "Warnings",
      "warningsDescription": "Recent warnings. Remove deletes the warning entry.",
      "warningsEmpty": "No warnings found.",
      "warningsSearchUser": "Filter by user ID",
      "removeWarning": "Remove warning",
      "confirmRemoveWarning": "Really remove this warning?"
    },
    "automod": {
      "title": "Auto-Moderation",
      "description": "Filter rules, anti-raid and anti-nuke for this server.",
      "enabledLabel": "Auto-moderation enabled",
      "enabledHint": "Master switch: only enabled rules below apply when this is on.",
      "rulesTitle": "Filter rules",
      "rulesDescription": "Per rule: action, thresholds, word/link lists and exceptions.",
      "ruleAction": "Action",
      "timeoutMinutes": "Timeout (minutes)",
      "actions": {
        "DELETE": "Delete message",
        "WARN": "Warn",
        "TIMEOUT": "Timeout",
        "KICK": "Kick",
        "BAN": "Ban"
      },
      "thresholds": {
        "maxMessages": "Max messages",
        "windowSeconds": "Time window (seconds)",
        "maxMentions": "Max mentions",
        "capsPercent": "Caps ratio (%)",
        "minLength": "Min message length",
        "maxEmojis": "Max emojis",
        "duplicateCount": "Duplicate count"
      },
      "linkWhitelist": "Link whitelist (hosts)",
      "linkBlacklist": "Link blacklist (hosts)",
      "addHost": "Add host",
      "wordList": "Word list",
      "regexList": "Regex patterns",
      "wordPlaceholder": "banned word",
      "addWord": "Add word",
      "addRegex": "Add regex",
      "exceptionRoles": "Exception roles",
      "exceptionChannels": "Exception channels",
      "rules": {
        "SPAM": {
          "title": "Spam",
          "description": "Too many messages in a short time."
        },
        "MASS_MENTION": {
          "title": "Mass mentions",
          "description": "Too many @-mentions in one message."
        },
        "CAPS": {
          "title": "Caps",
          "description": "Mostly uppercase text."
        },
        "INVITE_LINK": {
          "title": "Invite links",
          "description": "Block Discord invite links."
        },
        "EXTERNAL_LINK": {
          "title": "External links",
          "description": "Check links against whitelist/blacklist."
        },
        "WORD_FILTER": {
          "title": "Word filter",
          "description": "Words and regex patterns."
        },
        "DUPLICATE": {
          "title": "Duplicates",
          "description": "Repeated identical messages."
        },
        "EMOJI_SPAM": {
          "title": "Emoji spam",
          "description": "Too many emojis in one message."
        },
        "ZALGO": {
          "title": "Zalgo",
          "description": "Block zalgo/combining characters."
        },
        "PHISHING": {
          "title": "Phishing",
          "description": "Known scam/phishing domains."
        }
      },
      "antiRaidTitle": "Anti-Raid",
      "antiRaidDescription": "Detects unusually fast join waves.",
      "antiRaidEnabled": "Anti-raid enabled",
      "antiRaidJoinThreshold": "Join threshold",
      "antiRaidWindowSeconds": "Time window (seconds)",
      "antiRaidAction": "Response",
      "antiRaidActions": {
        "LOCKDOWN": "Lockdown (lock channels)",
        "VERIFY": "Verify (unverified role)"
      },
      "antiRaidActionHint": "Verify applies the unverified role from the Verification module and continues for new joins until the raid status is cleared.",
      "antiNukeTitle": "Anti-Nuke",
      "antiNukeDescription": "Protects against mass bans or mass channel deletions by compromised accounts.",
      "antiNukeEnabled": "Anti-nuke enabled",
      "antiNukeBanThreshold": "Ban threshold",
      "antiNukeChannelThreshold": "Channel deletion threshold",
      "antiNukeWindowSeconds": "Time window (seconds)",
      "lockdownActive": "Raid response active",
      "lockdownActiveHint": "Lockdown: unlock channels when turned off. Verify: only clears the status flag."
    },
    "logging": {
      "title": "Logging",
      "description": "Log channels, ignore lists and the event-to-channel mapping.",
      "enabledLabel": "Logging enabled",
      "ignoreBotsLabel": "Ignore bot messages/actions",
      "ignoredChannelsLabel": "Ignored channels",
      "ignoredRolesLabel": "Ignored roles",
      "idsPlaceholder": "Comma-separated IDs, e.g. 123456789012345678, 234567890123456789",
      "idsHint": "Enter Discord IDs, comma-separated. Enable Developer Mode to copy IDs.",
      "retentionLabel": "Retention (days)",
      "retentionHint": "Delete cases and dashboard audit older than X days. 0 = keep forever.",
      "channelsTitle": "Event-channel mapping",
      "channelsDescription": "Pick a log channel and assign one or more event types to it.",
      "channelsEmpty": "No event-channel mappings configured.",
      "channelsHint": "Each event type can only map to one channel. Selecting it here removes it from other rows.",
      "eventType": "Event type",
      "eventTypesLabel": "Event types",
      "eventTypesPlaceholder": "Search event types…",
      "channelId": "Log channel",
      "addMapping": "Add mapping",
      "errors": {
        "duplicateEventType": "An event type is assigned more than once. Please check your selection."
      },
      "eventTypes": {
        "MESSAGE_EDIT": "Message edited",
        "MESSAGE_DELETE": "Message deleted",
        "MESSAGE_BULK_DELETE": "Messages bulk deleted",
        "MEMBER_JOIN": "Member joined",
        "MEMBER_LEAVE": "Member left",
        "MEMBER_BAN": "Member banned",
        "MEMBER_UNBAN": "Member unbanned",
        "MEMBER_UPDATE": "Member updated",
        "CHANNEL_CREATE": "Channel created",
        "CHANNEL_DELETE": "Channel deleted",
        "CHANNEL_UPDATE": "Channel updated",
        "VOICE_JOIN": "Voice joined",
        "VOICE_LEAVE": "Voice left",
        "VOICE_MOVE": "Voice moved",
        "INVITE_CREATE": "Invite created",
        "EMOJI_CREATE": "Emoji created",
        "EMOJI_UPDATE": "Emoji updated",
        "EMOJI_DELETE": "Emoji deleted",
        "STICKER_CREATE": "Sticker created",
        "STICKER_UPDATE": "Sticker updated",
        "STICKER_DELETE": "Sticker deleted",
        "THREAD_CREATE": "Thread created",
        "THREAD_UPDATE": "Thread updated",
        "THREAD_DELETE": "Thread deleted",
        "GUILD_UPDATE": "Server updated",
        "MOD_ACTION": "Moderation action"
      }
    },
    "welcome": {
      "welcomeTitle": "Welcome",
      "welcomeDescription": "Message, channel and autoroles for new members.",
      "welcomeEnabledLabel": "Welcome message enabled",
      "welcomeChannelId": "Welcome channel ID",
      "welcomeType": "Message type",
      "type": {
        "TEXT": "Text",
        "EMBED": "Embed",
        "IMAGE": "Image card",
        "COMPONENTS_V2": "Components V2"
      },
      "welcomeContent": "Message content",
      "contentPlaceholder": "Welcome {user} to {server}!",
      "placeholdersHint": "Available placeholders: see the list below.",
      "welcomeEmbed": "Embed",
      "welcomeComponents": "Components V2 layout",
      "welcomeDmEnabled": "Welcome DM enabled",
      "dmContentPlaceholder": "Optional private message to new members",
      "userAutoroles": "Autoroles for users",
      "botAutoroles": "Autoroles for bots",
      "imageTitle": "Image card: title",
      "imageSubtitle": "Image card: subtitle",
      "leaveTitle": "Leave",
      "leaveDescription": "Message and channel when a member leaves the server.",
      "leaveEnabledLabel": "Leave message enabled",
      "leaveChannelId": "Leave channel ID",
      "leaveType": "Message type",
      "leaveTypes": {
        "TEXT": "Text",
        "EMBED": "Embed",
        "COMPONENTS_V2": "Components V2"
      },
      "leaveContent": "Message content",
      "leaveContentPlaceholder": "Goodbye {user.tag} — see you around on {server}!",
      "leaveEmbed": "Embed",
      "leaveComponents": "Components V2 layout",
      "leaveEmbedTitlePlaceholder": "Goodbye",
      "leaveEmbedDescriptionPlaceholder": "{user.tag} left {server}."
    },
    "verification": {
      "title": "Verification",
      "description": "Mode, roles and requirements. Saving (enabled, with channel and role) posts or updates the verification panel in the selected channel.",
      "enabledLabel": "Verification enabled",
      "mode": "Mode",
      "modes": {
        "BUTTON": "Button",
        "CAPTCHA": "Captcha (WebUI)"
      },
      "captchaProvider": "Captcha provider",
      "captchaProviders": {
        "MATH": "Math challenge",
        "RECAPTCHA_V2": "Google reCAPTCHA v2",
        "RECAPTCHA_V3": "Google reCAPTCHA v3",
        "HCAPTCHA": "hCaptcha",
        "TURNSTILE": "Cloudflare Turnstile"
      },
      "failAction": "Action on failure",
      "failActions": {
        "KICK": "Kick",
        "BAN": "Ban",
        "NONE": "None"
      },
      "channelId": "Verification channel",
      "verifiedRoleId": "Role after verification",
      "unverifiedRoleId": "Role before verification",
      "minAccountAgeDays": "Minimum account age (days)",
      "altTitle": "Alt-account detection",
      "altDescription": "Flags likely alternate accounts via shared captcha IP (salted hash) and invite clustering. No browser fingerprinting.",
      "altDetectionEnabled": "Enable alt detection",
      "altBlockOnMatch": "Block on match",
      "altBlockOnMatchHint": "Uses the configured fail action (Kick/Ban/None). Off = flag only, still verify.",
      "altIpWindowDays": "IP window (days)",
      "altInviteWindowHours": "Invite cluster window (hours)",
      "altMaxAccountsPerInvite": "Max accounts per invite (cluster)",
      "errors": {
        "panelTimeout": "The bot did not confirm the verification panel in time. It may still be posting — check the channel and bot permissions, then save again.",
        "panelNotPosted": "The verification panel could not be created in the Discord channel. Check bot permissions (View Channel, Send Messages, Embed Links)."
      }
    },
    "leveling": {
      "title": "Leveling & XP",
      "description": "Text and voice XP rates, cooldowns and no-XP lists.",
      "enabledLabel": "Leveling enabled",
      "textXpMin": "Text XP (minimum)",
      "textXpMax": "Text XP (maximum)",
      "textCooldownSeconds": "Text XP cooldown (seconds)",
      "voiceXpPerMinute": "Voice XP per minute",
      "noXpChannels": "No-XP channels",
      "noXpRoles": "No-XP roles",
      "roleMultipliers": "Role multipliers",
      "channelMultipliers": "Channel multipliers",
      "multiplierHint": "Pick a role or channel and set a multiplier (e.g. 1.5).",
      "multiplierValue": "Multiplier",
      "addMultiplier": "Add multiplier",
      "errors": {
        "multiplierMissingId": "Every multiplier needs a role or channel.",
        "multiplierInvalid": "Multipliers must be a positive number.",
        "multiplierDuplicate": "Each role or channel may only appear once.",
        "rewardMissingRole": "Every reward needs a role.",
        "rewardInvalidLevel": "Level must be a whole number of at least 1.",
        "rewardDuplicateLevel": "Each level may only have one reward."
      },
      "levelUpTitle": "Level-up message",
      "levelUpMode": "Mode",
      "modes": {
        "CHANNEL": "Channel",
        "DM": "Direct message",
        "OFF": "Off"
      },
      "levelUpChannelId": "Level-up channel",
      "levelUpMessage": "Message content",
      "rewardsTitle": "Role rewards",
      "rewardsDescription": "Choose which role is granted at which level.",
      "rewardLevel": "Level",
      "rewardRole": "Role",
      "addReward": "Add reward",
      "stackRewards": "Stack role rewards",
      "stackRewardsHint": "On = keep all unlocked reward roles. Off = only the role for the current level.",
      "rankCardTitle": "Rank card",
      "cardAccentColor": "Accent color",
      "cardBackgroundColor": "Background color"
    },
    "economy": {
      "title": "Economy",
      "description": "Currency and amounts for the income commands.",
      "enabledLabel": "Economy enabled",
      "currencyName": "Currency name",
      "currencySymbol": "Currency symbol",
      "amountsTitle": "Amounts",
      "dailyAmount": "Daily reward",
      "weeklyAmount": "Weekly reward",
      "workMin": "Work: minimum",
      "workMax": "Work: maximum",
      "workCooldownSeconds": "Work cooldown (seconds)",
      "startingBalance": "Starting balance"
    },
    "fun": {
      "title": "Fun & Games",
      "description": "Mini games and media commands for this server.",
      "enabledLabel": "Fun module enabled",
      "enabledHint": "Enables mini games like trivia, tic-tac-toe and 8-ball.",
      "mediaEnabledLabel": "Media commands enabled",
      "mediaEnabledHint": "Enables API-based commands like /cat and /dog."
    },
    "tickets": {
      "title": "Tickets",
      "description": "Configure how support tickets are created and managed.",
      "enabledLabel": "Tickets module enabled",
      "mode": "Ticket mode",
      "modes": {
        "CHANNEL": "Private channel",
        "THREAD": "Private thread"
      },
      "categoryId": "Ticket category ID",
      "logChannelId": "Log channel",
      "inactivityHours": "Auto-close after inactivity (hours)",
      "transcriptDm": "DM transcript to ticket creator",
      "transcriptDmHint": "Sends a transcript to the user via DM once their ticket is closed.",
      "ratingEnabled": "Ask for a rating after closing",
      "categoriesTitle": "Ticket categories",
      "categoriesDescription": "Categories members can choose from when opening a ticket.",
      "categoriesEmpty": "No ticket categories configured yet.",
      "categoryName": "Name",
      "categoryEmoji": "Emoji",
      "categoryDescription": "Description",
      "supportRoleIds": "Support role IDs",
      "idsPlaceholder": "One or more IDs, comma-separated",
      "addCategory": "Add category",
      "nameRequired": "A name is required."
    },
    "giveaways": {
      "formIncomplete": "Please fill in the channel, prize and end date.",
      "created": "Giveaway created.",
      "confirmDelete": "Really delete this giveaway?",
      "createTitle": "Start a giveaway",
      "createDescription": "Posts a giveaway message in Discord and picks winners automatically when it ends.",
      "channelId": "Channel ID",
      "prize": "Prize",
      "winnerCount": "Winner count",
      "endsAt": "Ends at",
      "requiredRoleId": "Required role ID",
      "requiredLevel": "Required level",
      "requiredMemberDays": "Required membership (days)",
      "create": "Start giveaway",
      "listTitle": "Giveaways",
      "listDescription": "Active and ended giveaways for this server.",
      "empty": "No giveaways yet.",
      "entrants": "Entrants",
      "statusEnded": "Ended",
      "statusPaused": "Paused",
      "statusActive": "Active",
      "endedAt": "Ended at",
      "winners": "Winners",
      "pause": "Pause",
      "unpause": "Resume",
      "end": "End now"
    },
    "selfroles": {
      "formIncomplete": "Please fill in the channel, title and at least one role.",
      "confirmDelete": "Really delete this panel?",
      "createTitle": "Create a self-role panel",
      "createDescription": "Posts a message in Discord that members can use to assign themselves roles.",
      "channelId": "Channel ID",
      "panelTitle": "Panel title",
      "mode": "Mode",
      "modes": {
        "BUTTONS": "Buttons",
        "DROPDOWN": "Dropdown",
        "REACTIONS": "Reactions"
      },
      "behavior": "Behavior",
      "behaviors": {
        "NORMAL": "Normal (toggle freely)",
        "UNIQUE": "Unique (only one role from this panel)",
        "VERIFY": "Verification role",
        "TEMPORARY": "Temporary (expires after a while)"
      },
      "description": "Description",
      "roles": "Roles",
      "roleSelect": "Role",
      "roleLabel": "Label",
      "roleLabelPlaceholder": "Button display name",
      "roleEmoji": "Emoji",
      "roleDescription": "Description (optional)",
      "roleDescriptionPlaceholder": "Short text for dropdown",
      "addRole": "Add role",
      "emojiPlaceholder": "Choose emoji…",
      "emojiSearch": "Find the perfect emoji",
      "emojiSearchResults": "Search results",
      "emojiServer": "Server",
      "emojiServerEmpty": "No server emojis available.",
      "emojiUnicode": "Standard",
      "emojiSkinTone": "Skin tone",
      "emojiHoverHint": "Pick an emoji",
      "emojiCategories": {
        "people": "Smileys & People",
        "nature": "Animals & Nature",
        "foods": "Food & Drink",
        "activity": "Activities",
        "places": "Travel & Places",
        "objects": "Objects",
        "symbols": "Symbols",
        "flags": "Flags"
      },
      "emojiRequired": "Reaction mode requires an emoji for every role.",
      "tooManyRoles": "Maximum 25 roles per panel.",
      "rolesBuilderHint": "Pick a role, label, and optional emoji/description. Reaction mode requires an emoji.",
      "create": "Create panel",
      "listTitle": "Self-role panels",
      "listDescription": "Existing panels for this server.",
      "empty": "No self-role panels yet."
    },
    "tags": {
      "nameRequired": "A name is required.",
      "confirmDelete": "Really delete this tag?",
      "createTitle": "Create a tag",
      "createDescription": "Custom commands and auto-responders triggered by name or keyword.",
      "name": "Name",
      "responseType": "Response type",
      "responseTypes": {
        "TEXT": "Text",
        "EMBED": "Embed",
        "COMPONENTS_V2": "Components V2"
      },
      "triggerWord": "Trigger word (optional)",
      "content": "Content",
      "embed": "Embed",
      "components": "Components V2 layout",
      "embedRequired": "Embed tags need a title or description.",
      "componentsRequired": "Components V2 tags need at least one block.",
      "allowedRoleIds": "Allowed roles",
      "allowedChannelIds": "Allowed channel IDs",
      "idsPlaceholder": "One or more IDs, comma-separated",
      "create": "Create tag",
      "listTitle": "Tags",
      "listDescription": "Existing tags for this server.",
      "empty": "No tags yet."
    },
    "starboard": {
      "title": "Starboard",
      "description": "Highlight popular messages in a dedicated channel.",
      "enabledLabel": "Starboard enabled",
      "enabledHint": "A target channel is required before enabling starboard.",
      "channelId": "Starboard channel",
      "emoji": "Trigger emoji",
      "emojiHint": "Unicode (⭐) or custom emoji as <:name:id> / <a:name:id>.",
      "threshold": "Star threshold",
      "allowSelfStar": "Allow starring your own messages",
      "ignoredChannelIds": "Ignored channels",
      "nsfwHint": "NSFW channels are always excluded.",
      "errors": {
        "channelRequired": "Pick a starboard channel before enabling.",
        "thresholdRange": "Threshold must be between 1 and 100."
      }
    },
    "suggestions": {
      "configTitle": "Suggestions settings",
      "configDescription": "Configure where suggestions are posted and moved once reviewed.",
      "enabledLabel": "Suggestions enabled",
      "openChannelId": "Open channel ID",
      "approvedChannelId": "Approved channel ID",
      "deniedChannelId": "Denied channel ID",
      "createThread": "Create a discussion thread",
      "createThreadHint": "Automatically opens a thread under every new suggestion.",
      "listTitle": "Suggestions",
      "listDescription": "Review and moderate suggestions submitted by members.",
      "statusAll": "All statuses",
      "status": {
        "OPEN": "Open",
        "APPROVED": "Approved",
        "DENIED": "Denied",
        "CONSIDERED": "Considered",
        "IMPLEMENTED": "Implemented"
      },
      "empty": "No suggestions found.",
      "staffReason": "Staff reason",
      "reasonPlaceholder": "Optional reason shown to the author",
      "approve": "Approve",
      "deny": "Deny",
      "consider": "Consider",
      "implement": "Implement"
    },
    "birthdays": {
      "title": "Birthdays",
      "description": "Announce member birthdays and optionally assign a birthday role.",
      "enabledLabel": "Birthdays enabled",
      "channelId": "Announcement channel ID",
      "roleId": "Birthday role ID",
      "timezone": "Timezone",
      "message": "Announcement message",
      "messagePlaceholder": "Optional custom message, e.g. Happy birthday {user}!"
    },
    "tempvoice": {
      "title": "Temp Voice",
      "description": "Members joining the hub channel get their own temporary voice channel.",
      "enabledLabel": "Temp voice enabled",
      "hubChannelId": "Hub channel ID",
      "categoryId": "Category ID for created channels",
      "defaultName": "Default channel name",
      "defaultLimit": "Default user limit",
      "defaultLimitHint": "Set to 0 for no limit."
    },
    "stats": {
      "title": "Server Stats",
      "description": "Auto-updating voice channels showing live server statistics.",
      "enabledLabel": "Server stats enabled",
      "membersChannelId": "Members channel ID",
      "membersTemplate": "Members template",
      "onlineChannelId": "Online channel ID",
      "onlineTemplate": "Online template",
      "boostsChannelId": "Boosts channel ID",
      "boostsTemplate": "Boosts template",
      "templateHint": "Use {count} as a placeholder for the live value."
    },
    "feeds": {
      "title": "Social Feeds",
      "description": "Post notifications when new content is published on Twitch, YouTube, RSS or Reddit.",
      "empty": "No feeds configured yet.",
      "addFeed": "Add feed",
      "type": "Feed type",
      "sourceId": "Source ID",
      "sourceIdPlaceholder": "Channel name, subreddit or feed URL",
      "channelId": "Discord channel ID",
      "rolePingId": "Role to ping",
      "template": "Message template",
      "templatePlaceholder": "Optional custom message template",
      "formIncomplete": "Please fill in the source and channel ID.",
      "confirmDelete": "Really delete this feed?"
    },
    "scheduler": {
      "createTitle": "Schedule a message",
      "createDescription": "Send a message once at a specific time or repeatedly on a cron schedule.",
      "channelId": "Channel ID",
      "rolePingId": "Role to ping",
      "cron": "Cron expression",
      "runAt": "Run at",
      "content": "Message content",
      "embed": "Embed (optional)",
      "components": "Components V2 layout",
      "contentMode": "Message format",
      "contentModes": {
        "text": "Text",
        "embed": "Embed",
        "components_v2": "Components V2"
      },
      "componentsPreview": "(Components V2)",
      "cronHint": "Set a cron expression for recurring messages, or a one-time date/time — not both. Choose text, embed, or Components V2 (mutually exclusive).",
      "create": "Schedule message",
      "created": "Message scheduled.",
      "formIncomplete": "Please fill channel, choose a message format with content, and either a cron expression or a date/time.",
      "confirmDelete": "Really delete this schedule?",
      "listTitle": "Scheduled messages",
      "listDescription": "Upcoming and recurring scheduled messages.",
      "empty": "No scheduled messages yet.",
      "noContent": "(embed only)"
    },
    "guildbackup": {
      "createTitle": "Create a backup",
      "createDescription": "Snapshots roles, channels and server settings for later restore.",
      "name": "Backup name",
      "namePlaceholder": "e.g. Before season 3 update",
      "create": "Create backup",
      "created": "Backup created.",
      "nameRequired": "A name is required.",
      "listTitle": "Backups",
      "listDescription": "Existing backups for this server.",
      "empty": "No backups yet.",
      "info": "Info",
      "infoUnavailable": "Backup details are unavailable.",
      "infoGuildName": "Server name",
      "infoRoles": "Roles",
      "infoChannels": "Channels",
      "download": "Download JSON",
      "restore": "Restore",
      "confirmRestoreStep1": "Restore this backup? Missing roles/channels will be added and overwrites applied best-effort. Existing channels will not be deleted.",
      "confirmRestoreStep2": "Final confirmation: restore this backup now? This cannot be undone.",
      "restoreQueued": "Restore queued - it will run in the background.",
      "confirmDelete": "Really delete this backup?",
      "ownerOnlyBadge": "Owner-only restore"
    },
    "messages": {
      "sendTitle": "Send a message",
      "sendDescription": "Post an embed or Components V2 layout to a channel via the bot.",
      "channelId": "Target channel",
      "channelRequired": "Select a channel first.",
      "mode": "Message type",
      "modes": {
        "EMBED": "Embed",
        "COMPONENTS_V2": "Components V2"
      },
      "embedRequired": "Embed mode needs title, description, or a color.",
      "componentsRequired": "Add at least one valid Components V2 block.",
      "send": "Send message",
      "sending": "Sending…",
      "sent": "Message sent.",
      "sentWithId": "Message sent (ID: {id})."
    },
    "commands": {
      "title": "Commands",
      "description": "Enable/disable individual slash commands and restrict them by role, channel or cooldown.",
      "searchPlaceholder": "Search commands…",
      "empty": "No commands match your search.",
      "cooldownSeconds": "Cooldown (seconds)",
      "allowedRoleIds": "Allowed roles",
      "deniedRoleIds": "Denied roles",
      "allowedChannelIds": "Allowed channels",
      "deniedChannelIds": "Denied channels",
      "idsPlaceholder": "One or more IDs, comma-separated",
      "reset": "Reset to default",
      "globalTitle": "Global command rules",
      "globalDescription": "Channel whitelist and blacklist for all slash commands on this server. Empty whitelist = all channels (except blacklist). Per-command rules apply on top.",
      "globalAllowedChannels": "Whitelist channels",
      "globalDeniedChannels": "Blacklist channels",
      "globalAllowedHint": "When set, commands can only be used in these channels.",
      "globalDeniedHint": "Commands are always blocked in these channels.",
      "channelSearchPlaceholder": "Search channels…",
      "roleSearchPlaceholder": "Search roles…"
    }
  },
  "userMenu": {
    "theme": "Theme",
    "themeDark": "Dark",
    "themeLight": "Light",
    "logout": "Log out",
    "loggingOut": "Logging out…",
    "ownerPanel": "Owner panel"
  },
  "owner": {
    "nav": {
      "title": "Owner",
      "backToDashboard": "Back to dashboard",
      "overview": "Overview",
      "guilds": "Guilds",
      "users": "User blacklist",
      "flags": "Feature flags",
      "premium": "Premium",
      "presence": "Presence",
      "about": "About",
      "team": "Team",
      "jobs": "Jobs",
      "changelog": "Changelog",
      "audit": "Audit"
    },
    "common": {
      "empty": "No entries.",
      "noteOptional": "Note (optional)"
    },
    "overview": {
      "title": "Owner overview",
      "subtitle": "Global bot metrics and recent owner actions.",
      "guilds": "Guilds",
      "blacklistedUsers": "Blacklisted users",
      "blacklistedGuilds": "Blacklisted guilds",
      "maintenance": "Maintenance mode",
      "uptime": "WebUI uptime",
      "recentAudit": "Recent owner activity",
      "emptyAudit": "No owner actions yet.",
      "viewAudit": "Open audit",
      "changelog": "Changelog",
      "emptyChangelog": "No changelog entries yet.",
      "manageChangelog": "Manage changelog"
    },
    "guilds": {
      "title": "Guild management",
      "subtitle": "Search guilds, blacklist them, or leave with the bot.",
      "search": "Search guild name or ID…",
      "unknownName": "Unknown guild",
      "members": "{count} members",
      "membersUnknown": "Member count unknown",
      "createInvite": "Create invite",
      "inviteCopied": "Invite copied: {url}",
      "inviteCreated": "Invite created: {url}",
      "openDashboard": "Open dashboard",
      "blacklisted": "Blacklisted",
      "blacklist": "Blacklist",
      "unblacklist": "Remove blacklist",
      "leave": "Leave guild",
      "leaveConfirm": "Really remove the bot from this guild?"
    },
    "users": {
      "title": "User blacklist",
      "subtitle": "Globally blocked Discord users (bot ignores them everywhere).",
      "userIdPlaceholder": "Discord user ID"
    },
    "flags": {
      "title": "Feature flags",
      "subtitle": "Control modules globally and configure rollouts.",
      "keyPlaceholder": "Flag key (e.g. new.module)",
      "rollout": "Rollout %"
    },
    "premium": {
      "title": "Premium",
      "subtitle": "Free/Premium tiers, limits, and manual assignment (no payments).",
      "maxTags": "Max tags",
      "maxFeeds": "Max feeds",
      "maxBackups": "Max backups",
      "feature": {
        "tags": "Tags",
        "feeds": "Feeds",
        "guildbackup": "Backups"
      },
      "guildsTitle": "Guild assignments",
      "usersTitle": "User assignments",
      "guildIdPlaceholder": "Discord guild ID",
      "userIdPlaceholder": "Discord user ID",
      "expires": "Expires"
    },
    "presence": {
      "title": "Bot presence",
      "subtitle": "Status, activity, and maintenance mode.",
      "editorTitle": "Edit presence",
      "editorDescription": "Changes apply to the bot immediately after saving.",
      "previewTitle": "Preview",
      "previewRotatingHint": "Preview shows the first rotating line; Discord rotates about every minute.",
      "status": "Status",
      "activityType": "Activity type",
      "activityText": "Activity text",
      "activityTextHint": "Fallback when no rotating messages are set.",
      "rotating": "Rotating messages (one per line)",
      "rotatingHint": "Max. 20 lines of 128 characters. Rotates about every minute.",
      "maintenanceMode": "Maintenance mode enabled",
      "maintenanceMessage": "Maintenance message",
      "maintenanceHint": "Slash commands will only reply with the maintenance notice.",
      "maintenanceConfirm": "Really enable maintenance mode? Users will not be able to use commands.",
      "maintenancePreviewBanner": "Maintenance mode: Discord shows DND and the maintenance text.",
      "maintenanceFallbackActivity": "Maintenance",
      "readOnly": "View only — saving requires Admin owner role or higher.",
      "statusLabel": {
        "online": "Online",
        "idle": "Idle",
        "dnd": "Do not disturb",
        "invisible": "Invisible"
      },
      "activityTypeLabel": {
        "Playing": "Playing",
        "Listening": "Listening to",
        "Watching": "Watching",
        "Competing": "Competing in"
      }
    },
    "about": {
      "title": "About /about",
      "subtitle": "Content of the global /about reply in Discord.",
      "editorTitle": "About message",
      "editorDescription": "TEXT, embed, or Components V2 — shown for /about on every server.",
      "enabled": "About enabled",
      "enabledHint": "When off, /about replies with a disabled notice.",
      "messageType": "Message type",
      "type": {
        "TEXT": "Text",
        "EMBED": "Embed",
        "COMPONENTS_V2": "Components V2"
      },
      "content": "Text content",
      "contentPlaceholder": "Short text about Nexumi…",
      "embed": "Embed",
      "components": "Components V2",
      "componentsHint": "Role actions apply in the server where /about is used. No role picker here without a guild context.",
      "readOnly": "View only — saving requires Admin owner role or higher."
    },
    "team": {
      "title": "Team",
      "subtitle": "Additional owners/admins with graded permissions.",
      "bootstrap": "Bootstrap owners (OWNER_USER_IDS)",
      "noBootstrap": "No bootstrap owners set in OWNER_USER_IDS."
    },
    "jobs": {
      "title": "Jobs & migrations",
      "subtitle": "BullMQ queues and Prisma migration status.",
      "queues": "Queues",
      "migrations": "Migrations",
      "retryFailed": "Retry failed"
    },
    "changelog": {
      "title": "Changelog",
      "subtitle": "Release notes for the dashboard.",
      "version": "Version",
      "titleField": "Title",
      "body": "Body"
    },
    "audit": {
      "title": "Owner audit",
      "subtitle": "All owner actions in the global audit log."
    }
  },
  "serverSwitcher": {
    "switchServer": "Switch server",
    "allServers": "All servers",
    "noOtherServers": "No other manageable servers"
  },
  "errors": {
    "unauthorized": "Please log in to continue.",
    "forbidden": "You do not have access to this server.",
    "notFound": "Not found.",
    "generic": "Something went wrong. Please try again."
  },
  "site": {
    "nav": {
      "status": "Status",
      "invite": "Invite",
      "support": "Support",
      "login": "Log in",
      "dashboard": "Dashboard",
      "theme": "Theme"
    },
    "footer": {
      "status": "Status",
      "impressum": "Legal notice",
      "privacy": "Privacy",
      "terms": "Terms",
      "dashboard": "Dashboard"
    }
  },
  "landing": {
    "hero": {
      "subtitle": "Discord bot with moderation, community, and integration modules plus a web dashboard.",
      "invite": "Invite bot",
      "login": "Open dashboard",
      "dashboard": "Open dashboard",
      "support": "Support server"
    },
    "stats": {
      "guilds": "Servers",
      "users": "Users (approx.)"
    },
    "features": {
      "title": "Modules",
      "subtitle": "Features Nexumi provides per server."
    }
  },
  "status": {
    "title": "Status",
    "subtitle": "Availability, shard status, and recent notices.",
    "overall": {
      "operational": "Operational",
      "maintenance": "Maintenance",
      "degraded": "Degraded"
    },
    "latency": "API latency",
    "guilds": "Servers",
    "uptime": "Bot uptime",
    "shardsTitle": "Shards",
    "shardsEmpty": "No shard data from the bot (Redis bot:status missing or expired).",
    "shardLabel": "Shard {id}",
    "shardStatus": "Status",
    "updatesTitle": "Updates & incidents",
    "updatesEmpty": "No entries yet.",
    "incident": "Incident"
  },
  "search": {
    "title": "Search",
    "placeholder": "Search pages, commands, or settings…",
    "empty": "No results",
    "openNav": "Open navigation",
    "groups": {
      "pages": "Pages",
      "commands": "Commands",
      "settings": "Settings"
    }
  }
}
