{
	"title": "Settings",
	"language": {
		"title": "Language",
		"description": "Choose the language for the Videotto interface",
		"saveError": "Could not save your language choice. Please try again."
	},
	"page": {
		"title": "Settings",
		"meta": {
			"title": "Settings - Videotto"
		}
	},
	"organizationBanner": {
		"title": "Organization Member",
		"partOf": "You are part of <strong>{organizationName}</strong>",
		"defaultOrgName": "an organization",
		"creditsAvailable": "{credits} credits available",
		"adminSuffix": "• Admin",
		"viewDashboardButton": "View Dashboard"
	},
	"subscription": {
		"toast": {
			"resumeFailed": "Failed to resume subscription.",
			"portalFailed": "Failed to open billing portal. Please try again."
		}
	},
	"basicInfo": {
		"title": "Basic Information",
		"avatarAlt": "User avatar",
		"avatarFallbackLetter": "U",
		"nameLabel": "Name:",
		"emailLabel": "Email:",
		"logoutButton": "Logout"
	},
	"password": {
		"changeTitle": "Change Password",
		"addTitle": "Add a Password",
		"changeDescription": "Update your account password",
		"addDescription": "Add a password to sign in without Google"
	},
	"subscriptionSection": {
		"title": "Subscription",
		"planLabel": "{tierName} Plan",
		"defaultTierName": "Pro",
		"noActivePlan": "No active plan",
		"paymentFailed": "Your last payment failed. Update your card in the Billing Portal to keep your plan, or cancel it from Manage Plan.",
		"overageSuffix": "(+{overage} overage)",
		"downgradingTo": "Downgrading to {tierName} at period end",
		"managePlanButton": "Manage Plan",
		"upgradeButton": "Upgrade",
		"nextBillingDate": "Next billing date:",
		"planEndsOn": "Plan ends:",
		"scheduledToCancel": "Your subscription is scheduled to cancel on <strong>{date}</strong>.",
		"periodEndFallback": "the end of your billing period",
		"resumingButton": "Resuming…",
		"resumeButton": "Resume subscription",
		"loadingButton": "Loading...",
		"billingPortalButton": "Billing Portal"
	},
	"connectedAccounts": {
		"title": "Connected Accounts",
		"description": "Manage third-party services linked to your Videotto account",
		"socialTitle": "Social accounts",
		"socialDescription": "The accounts you schedule and publish posts to."
	},
	"apiKeys": {
		"title": "API Keys",
		"description": "API keys allow you to integrate Videotto with your applications. To request API access, please contact our support team.",
		"contactSupportButton": "Contact Support"
	},
	"emailPreferences": {
		"title": "Manage Preferences",
		"description": "Choose which emails you'd like to receive",
		"unavailable": "Email preferences are not available for your account.",
		"loadError": "Failed to load preferences. Please try again later.",
		"saveError": "Could not save your email preference. Please try again.",
		"config": {
			"expiryReminders": {
				"label": "Clip expiry reminders",
				"description": "Get a reminder before your clips are deleted."
			},
			"processingUpdates": {
				"label": "Processing Notifications",
				"description": "Receive updates when your video is ready"
			},
			"accountAlerts": {
				"label": "Social account alerts",
				"description": "Get an email when a connected account like YouTube or Instagram needs you to sign in again, so your scheduled posts still go out."
			}
		}
	},
	"aiModel": {
		"title": "AI Model",
		"description": "Staging experiment — choose the model behind Otto's AI chat and Motion Graphics. Applies to new conversations and jobs, not ones already running. Motion Graphics (planner, designers, judges), sub-agents, and footage analysis all follow your choice; while GLM/GPT chat is being enabled, the chat director itself stays on the default model for those choices.",
		"activeLabel": "Active",
		"toast": {
			"set": "AI model set to {modelLabel}. Applies to new conversations and jobs.",
			"saveFailed": "Could not save model choice: {reason}"
		}
	},
	"mgSceneMode": {
		"title": "Motion Graphics Style",
		"description": "Choose how motion graphics occupy the frame. Applies to new Motion Graphics runs, not ones already running. Fullscreen is the default; scenes already on your timeline keep the style they were authored with.",
		"activeLabel": "Active",
		"options": {
			"takeoverLabel": "Fullscreen",
			"takeoverDetail": "The graphic covers the whole frame for its moment — current default",
			"insetLabel": "Overlay",
			"insetDetail": "You stay on screen; the graphic sits in the free space around you"
		},
		"toast": {
			"set": "Motion graphics style set to {modeLabel}. Applies to new runs.",
			"saveFailed": "Could not save motion graphics style: {reason}"
		}
	},
	"supportChannels": {
		"title": "Join our channels for support:",
		"whatsappAlt": "WhatsApp"
	},
	"organization": {
		"loading": "Loading...",
		"notFound": "Organization not found",
		"pilotExpired": {
			"title": "Congratulations on completing your pilot!",
			"description": "Here's a summary of what your team accomplished during the pilot period.",
			"contactManager": "Contact your Videotto account manager to continue with a paid plan."
		},
		"pilotUsage": {
			"title": "Pilot Usage",
			"loading": "Loading usage stats...",
			"videosClipped": "Videos Clipped",
			"clipsGenerated": "Clips Generated",
			"noData": "No usage data available."
		},
		"enterprise": {
			"creditsTitle": "Credits",
			"minutesUsed": "minutes used"
		},
		"storage": {
			"title": "Storage",
			"used": "used",
			"unlimited": "Unlimited",
			"percentUsed": "{percent}% used"
		},
		"creditBalance": {
			"title": "Credit Balance",
			"addCreditsButton": "Add Credits",
			"creditsLabel": "Credits"
		},
		"members": {
			"title": "Members ({count})",
			"inviteButton": "Invite Member",
			"table": {
				"email": "Email",
				"name": "Name",
				"role": "Role",
				"actions": "Actions"
			},
			"removeButton": "Remove",
			"removeConfirm": "Are you sure you want to remove {name} from the organization?",
			"pendingInviteBadge": "Pending invite",
			"expiresLabel": "Expires",
			"toast": {
				"removeFailedWithReason": "Failed to remove member: {reason}",
				"removeFailed": "Failed to remove member. Please try again."
			}
		},
		"inviteModal": {
			"title": "Invite Member",
			"emailLabel": "Email",
			"emailPlaceholder": "member@example.com",
			"roleLabel": "Role",
			"roleMember": "Member",
			"roleAdmin": "Admin",
			"expiryNote": "An email invitation will be sent. The link expires in 7 days.",
			"sendButton": "Send Invite",
			"cancelButton": "Cancel",
			"errors": {
				"emailRequired": "Email is required",
				"alreadyMember": "This email is already a member of the organization.",
				"alreadyInvited": "An invite has already been sent to this email."
			},
			"toast": {
				"sent": "Invite sent to {email}",
				"failedWithReason": "Failed to invite {email}: {reason}",
				"failed": "Failed to invite {email}. Please try again."
			}
		},
		"addCredits": {
			"title": "Add Credit Balance",
			"closeAriaLabel": "Close",
			"rateNote": "$1 = 10 credits",
			"amountLabel": "Amount (USD)",
			"creditsLabel": "Credits",
			"minMaxNote": "Min: S$1 (10 credits) • Max: S$1,000 (10,000 credits)",
			"processingButton": "Processing...",
			"continueButton": "Continue",
			"errors": {
				"minAmount": "Minimum amount is S$1",
				"maxAmount": "Maximum amount is S$1000"
			},
			"toast": {
				"checkoutFailed": "Failed to initiate checkout. Please try again."
			}
		},
		"meta": {
			"title": "Organization Dashboard - Videotto"
		}
	},
	"brands": {
		"meta": {
			"title": "Brand Presets - Videotto"
		},
		"hydrateFallback": "Loading Brand Workspace...",
		"defaultBadge": "Default",
		"loginRequired": "Please log in to manage your brand settings.",
		"header": {
			"title": "Brand Presets",
			"subtitle": "Save your colors, fonts, and caption styles. Apply to any video with one click.",
			"importButton": "Import",
			"newButton": "New Brand Preset"
		},
		"empty": {
			"title": "No brand presets yet",
			"createButton": "Create your first brand preset"
		},
		"preview": {
			"label": "Preview",
			"hint": "Hover a brand kit to see it applied here."
		},
		"cardMenu": {
			"setAsDefault": "Set as Default",
			"rename": "Rename",
			"export": "Export",
			"delete": "Delete",
			"toast": {
				"exporting": "Exporting brand preset...",
				"exported": "Brand preset exported!",
				"exportFailed": "Export failed"
			}
		},
		"import": {
			"invalidFile": "Please select a .vbrand file exported from Videotto.",
			"toast": {
				"importing": "Importing brand preset...",
				"imported": "Brand preset imported!",
				"importFailed": "Import failed"
			}
		},
		"setDefault": {
			"toast": {
				"settingDefault": "Setting as default...",
				"setDefault": "Brand preset set as default!",
				"setDefaultFailed": "Failed to set default"
			}
		},
		"delete": {
			"dialog": {
				"title": "Delete brand preset?",
				"description": "“{name}” will be permanently deleted. This can’t be undone.",
				"descriptionFallback": "This brand preset will be permanently deleted. This can’t be undone.",
				"cancel": "Cancel",
				"confirm": "Delete preset",
				"deleting": "Deleting..."
			},
			"toast": {
				"deleting": "Deleting brand preset...",
				"deleted": "Brand preset deleted!",
				"deleteFailed": "Failed to delete"
			}
		},
		"rename": {
			"toast": {
				"renaming": "Renaming brand preset...",
				"renamed": "Brand preset renamed!",
				"renameFailed": "Failed to rename"
			}
		},
		"row": {
			"setDefaultTitle": "Set \"{name}\" as default",
			"defaultAriaLabel": "{name} (default)",
			"setDefaultAriaLabel": "Set {name} as default",
			"editTitle": "Edit brand kit",
			"editAriaLabel": "Edit {name}",
			"menuAriaLabel": "More actions for {name}"
		}
	},
	"brandKit": {
		"hydrateFallback": "Loading Brand Preset...",
		"preparingNew": "Preparing new brand preset…",
		"notFound": "Brand preset not found.",
		"loginRequired": "Please log in to manage your brand presets.",
		"namePlaceholder": "Brand Preset Name",
		"defaultBadge": "Default",
		"backButton": "Back",
		"setAsDefaultButton": "Set as Default",
		"exportButton": "Export",
		"deleteButton": "Delete",
		"untitledBrand": "Untitled Brand",
		"uploadingLabel": "Uploading…",
		"outroSection": {
			"replaceButton": "Replace",
			"removeButton": "Remove",
			"formatHint": "MP4, WebM, MOV. Max 100MB, 3-10s recommended.",
			"uploadingEllipsis": "Uploading...",
			"clickToUpload": "Click to upload outro",
			"dimensionsLabel": "{width} × {height} • {duration}s",
			"removeDialog": {
				"title": "Remove outro video?",
				"description": "The outro video will no longer be added to clips made with this brand preset.",
				"confirm": "Remove",
				"cancel": "Cancel"
			}
		},
		"hideCaptionsLabel": "Hide captions",
		"hideCaptionsDescription": "Captions are still generated, but start hidden in the editor and are left out of the rendered video. You can re-enable them per clip.",
		"pricingModal": {
			"title": "Upgrade to Pro to save Brand Presets",
			"message": "Brand presets are a Pro feature. Upgrade to save your brand colors, fonts, logos, and caption styles for consistent, professional content."
		},
		"errors": {
			"readVideoMetadata": "Failed to read video metadata",
			"readAudioMetadata": "Failed to read audio metadata",
			"getUploadUrl": "Failed to get upload URL",
			"loadVideoMetadata": "Failed to load video metadata",
			"registerOutro": "Failed to register outro"
		},
		"toast": {
			"mediaUploaded": "Media uploaded",
			"mediaUploadFailed": "Failed to upload media",
			"mediaRemoved": "Media removed",
			"mediaRemoveFailed": "Failed to remove media",
			"saveFailed": "Failed to save brand preset",
			"deleted": "Brand preset deleted",
			"deleteFailed": "Failed to delete brand preset",
			"setAsDefault": "Set as default brand preset",
			"setAsDefaultFailed": "Failed to set as default",
			"logoUploaded": "Logo uploaded",
			"logoUploadFailed": "Failed to upload logo",
			"logoRemoved": "Logo removed",
			"logoRemoveFailed": "Failed to remove logo",
			"activeLogoUpdated": "Active logo updated",
			"logoUpdateFailed": "Failed to update logo",
			"outroUploaded": "Outro uploaded successfully",
			"outroUploadFailed": "Failed to upload outro",
			"outroRemoved": "Outro removed",
			"outroRemoveFailed": "Failed to remove outro",
			"exporting": "Exporting brand preset...",
			"exported": "Brand preset exported!",
			"exportFailed": "Export failed"
		},
		"miniPreview": {
			"headerSample": "Header",
			"activeLogoAlt": "Active brand logo"
		},
		"layersPanel": {
			"captions": "Captions",
			"header": "Header",
			"logo": "Logo",
			"shape": "Shape",
			"text": "Text",
			"element": "Element",
			"layer": "Layer",
			"title": "Layers",
			"noLayersYet": "No layers yet",
			"moveUpAria": "Move {label} up",
			"moveDownAria": "Move {label} down",
			"movedAnnouncement": "{label} moved to position {position} of {total}"
		},
		"mediaPanel": {
			"remove": "Remove",
			"fileTooLarge": "File exceeds 100MB limit",
			"uploadsLabel": "Uploads",
			"saveFirstHint": "Save the brand preset first to upload media assets.",
			"uploading": "Uploading...",
			"uploadFileButton": "Upload File",
			"noMediaYet": "No media yet",
			"noMediaHint": "Upload images, videos, or audio files",
			"dragToAddAria": "Drag to add \"{filename}\" to canvas",
			"removeAria": "Remove {filename}",
			"removeConfirmTitle": "Remove this asset?",
			"cancel": "Cancel"
		},
		"paletteForm": {
			"primary": "Primary",
			"secondary": "Secondary",
			"accent": "Accent",
			"customColors": "Custom Colors",
			"addButton": "+ Add",
			"noCustomColorsYet": "No custom colors yet. Click + Add to start.",
			"removeColorAria": "Remove color",
			"background": "Background",
			"limitReached": "Custom color limit reached ({max})",
			"swatchAria": "Edit custom color {index} ({color})",
			"pickerAria": "Custom color {index} picker",
			"hexLabel": "Hex value",
			"hexError": "Enter a hex color, e.g. #4f46e5"
		},
		"headerStylePreview": {
			"titleSample": "Title"
		},
		"importModal": {
			"wrongFileType": "Please select a .vbrand file exported from Videotto.",
			"importFailed": "Import failed",
			"title": "Import Brand Preset",
			"dragDropHint": "Drag & drop a .vbrand file here",
			"or": "or",
			"chooseFileButton": "Choose File",
			"successMessage": "Brand preset imported successfully!",
			"closeButton": "Close",
			"openBrandPresetButton": "Open Brand Preset",
			"tryAgainButton": "Try Again"
		},
		"logoDropzone": {
			"uploadingLogo": "Uploading logo...",
			"uploadLogo": "Upload Logo",
			"fileHint": "PNG, JPG, SVG up to 25MB",
			"noLogosYet": "No logos uploaded yet.",
			"activeBadge": "Active",
			"brandLogoAlt": "Brand logo",
			"setActiveButton": "Set Active",
			"removeButton": "Remove",
			"dropHere": "Drop to upload",
			"logoLabel": "Logo {index}",
			"logoLabelWithFormat": "Logo {index} · {format}",
			"removeConfirm": "Remove {label}?",
			"cancelButton": "Cancel"
		},
		"phoneMockup": {
			"originalAudio": "Original audio",
			"logoAlt": "logo"
		},
		"nameLabel": "Brand preset name",
		"replayPreview": "Replay",
		"sections": {
			"style": "Style",
			"font": "Font",
			"format": "Format",
			"colour": "Colour",
			"position": "Position"
		},
		"sidebar": {
			"captions": "Captions",
			"header": "Header",
			"text": "Text",
			"elements": "Elements",
			"uploads": "Media",
			"brand": "Brand",
			"logo": "Logo",
			"outro": "Outro",
			"layers": "Layers"
		},
		"textSection": {
			"hint": "Add a text layer, then drag it on the canvas. Select any text layer to edit its style here."
		},
		"layersSection": {
			"addText": "Add text layer"
		},
		"autosave": {
			"saving": "Saving…",
			"saved": "Saved",
			"failedRetry": "Save failed — retry",
			"notSaving": "Not saving — upgrade"
		},
		"onboarding": {
			"appliedTitle": "Applied to every clip",
			"appliedBody": "Anything you set here styles every clip made with this kit. You don't apply it each time.",
			"defaultKitBody": "This is your default kit — new clips use it unless you pick another or turn brand styling off.",
			"checklistTitle": "What this kit controls",
			"checklistHint": "Pick one to jump to its settings. Anything you skip keeps Videotto's default look.",
			"setCount": "{set} of {total} set",
			"allSet": "All set",
			"hideChecklist": "Hide",
			"showChecklist": "Show checklist ({set} of {total} set)",
			"stateSet": "Set",
			"stateUnset": "Not set",
			"items": {
				"colors": {
					"title": "Brand colours",
					"effect": "Caption text, highlights and backgrounds."
				},
				"logo": {
					"title": "Logo",
					"effect": "Sits on top of every clip."
				},
				"captions": {
					"title": "Caption style",
					"effect": "How spoken words look and move."
				},
				"fonts": {
					"title": "Fonts",
					"effect": "The typeface for captions and headers."
				},
				"outro": {
					"title": "Outro",
					"effect": "A closing video on the end of every clip."
				}
			}
		}
	},
	"fonts": {
		"meta": {
			"title": "Font Library - Videotto"
		},
		"hydrateFallback": "Loading Font Library...",
		"title": "Font Library",
		"subtitle": "Upload and manage your custom fonts",
		"loginRequired": "Please log in to manage your fonts.",
		"upload": {
			"title": "Upload New Font",
			"supportedFormats": "Supported formats: WOFF2, WOFF, TTF, OTF (max 50MB)",
			"success": "Font uploaded successfully!"
		},
		"empty": {
			"title": "No fonts yet",
			"description": "Upload your first custom font to get started."
		}
	},
	"autoreply": {
		"pageTitle": "Auto-Reply",
		"pageSubtitle": "Auto-reply to Instagram comments with a DM",
		"loadingTriggers": "Loading triggers...",
		"toast": {
			"loadTriggersFailed": "Failed to load triggers",
			"connected": "Successfully connected {platform}!",
			"disconnected": "Disconnected {platform}",
			"disconnectFailed": "Failed to disconnect {platform}",
			"triggerDeleted": "Trigger deleted",
			"deleteFailed": "Failed to delete trigger",
			"updateFailed": "Failed to update trigger",
			"connectInstagramFirst": "Connect an Instagram account first"
		},
		"oauthErrors": {
			"notConfigured": "OAuth is not configured for this platform",
			"unauthorized": "Please log in to connect your account",
			"invalidState": "Session expired. Please try again.",
			"oauthFailed": "Failed to connect. Please try again.",
			"tokenExchangeFailed": "Failed to authenticate. Please try again.",
			"failedToGetAccount": "Failed to fetch Instagram account details.",
			"failedToConnect": "Failed to connect account"
		},
		"emptyState": {
			"title": "No triggers yet",
			"titleWithTriggers": "Create another trigger",
			"description": "Create a trigger to auto-reply to comments on your Instagram posts with a DM.",
			"descriptionWithTriggers": "Set up auto-replies on another post.",
			"createButton": "Create trigger",
			"createButtonWithTriggers": "+ New trigger",
			"clickHint": "Click anywhere in this box"
		},
		"howItWorks": {
			"title": "How it works",
			"step1": "1. Post a reel or photo on Instagram with a call-to-action (e.g. \"Comment EDITOR to get the link\").",
			"step2": "2. Create a trigger here by choosing one of your Instagram posts and setting a keyword.",
			"step3": "3. When someone comments with your keyword, they automatically get a public reply and a DM with your link.",
			"contactNote": "Running into trouble? <anchor>Contact us</anchor> and we'll take a look."
		},
		"createForm": {
			"defaultCreatorName": "creator",
			"title": "New Trigger",
			"cancelButton": "Cancel",
			"step1Label": "Step 1: Comment trigger",
			"whenSomeoneComments": "When someone comments on",
			"loadingOlderPosts": "Loading older posts...",
			"specificPostOption": "A specific post or reel",
			"selectedCount": "{count} selected",
			"mediaLoadError": "Could not load posts. Your Instagram token may have expired - try reconnecting from the panel on the right.",
			"noMediaFound": "No Instagram posts found for this account.",
			"collapseButton": "Collapse",
			"showAllButton": "Show All",
			"anyPostOption": "Any post or reel, including future uploads",
			"keywordLabel": "Keyword",
			"keywordPlaceholder": "AI",
			"keywordHint": "Case-insensitive. Matches if the comment contains this word anywhere.",
			"publicReplyTemplatesLabel": "Public Reply Templates",
			"templatesHintBefore": "One is picked at random. Use ",
			"templatesHintUsernamePlaceholder": "{username}",
			"templatesHintAfter": " to mention the commenter.",
			"step2Label": "Step 2: DM flow",
			"step2Description": "The user receives a DM with a button. When they tap it, the link is sent.",
			"openingDmTitle": "Opening DM with Customisable Button",
			"messageLabel": "Message",
			"ctaMessagePlaceholder": "Hey there! Reply to this message and I'll send you the link!",
			"openingMessagesHint": "Three variants. One is picked at random for each DM, which keeps the opening message from looking automated.",
			"linksNotAllowed": "Links are not allowed in this message.",
			"blueButtonTextLabel": "Blue Button Text",
			"blueButtonTextHint": "Quick reply button below the message. Max 20 characters.",
			"step3Label": "Step 3: After they tap the button",
			"linkMessageLabel": "Link Message",
			"linkMessageHint": "A unique short link is appended automatically and cannot be edited. Each fan gets their own, so you can see which DMs convert — it redirects to your referral link.",
			"linkButtonTextLabel": "Link Button Text",
			"linkButtonTextHint": "Label on the button that opens your link. Max 20 characters.",
			"selectPostFirstTitle": "Select at least one Instagram post first",
			"fillKeywordTitle": "Fill in the keyword",
			"submitButton": {
				"creating": "Creating...",
				"createAllPosts": "Create Trigger (All Posts)",
				"createMultiple": "Create {count} Triggers",
				"createSingle": "Create Trigger"
			},
			"errors": {
				"loadPostsFailed": "Failed to load Instagram posts",
				"loadOlderPostsFailed": "Failed to load older posts",
				"choosePost": "Choose at least one Instagram post",
				"linksNotAllowedCta": "Links are not allowed in the CTA message",
				"linksNotAllowedLink": "Links are not allowed in the link message",
				"createFailed": "Failed to create trigger",
				"customLinkInvalid": "Enter a valid link starting with http:// or https://.",
				"openingMessageEmpty": "Fill in all three opening messages"
			},
			"toast": {
				"createdWithSkipped": "{count, plural, one {# trigger} other {# triggers}} created, {skipped} skipped",
				"created": "{count, plural, one {# trigger} other {# triggers}} created"
			},
			"linkModeCoupon": "Coupon code link",
			"linkModeCouponHint": "Tracked and discounted. Signups attribute to you.",
			"linkModeCouponNone": "No coupon code yet — ask us to set one up. Custom links still work.",
			"couponPickerLabel": "Code for this post",
			"linkModeCustom": "Custom link",
			"linkModeCustomHint": "Send any URL. Not tracked.",
			"customLinkLabel": "Your link",
			"customLinkPlaceholder": "https://example.com/my-page",
			"customLinkWarning": "Custom links are sent as typed and are not tracked — no clicks, no signups attributed. A link that already contains your referral code still attributes.",
			"linkMessageHintCustom": "Your custom link is appended automatically. Edit it above.",
			"linkModeNotion": "Assigned link",
			"linkModeNotionHint": "Send a link we set up for you. Not tracked.",
			"linkModeNotionNone": "No link assigned yet — ask us to set one up. Coupon and custom links still work.",
			"notionPickerLabel": "Link for this post",
			"linkMessageHintNotion": "Your assigned link is appended automatically. Pick it above."
		},
		"preview": {
			"commentsTab": "Comments",
			"now": "Now",
			"reply": "Reply",
			"addCommentPlaceholder": "Add a comment...",
			"scrollHint": "Scroll to switch between comment / DM preview"
		},
		"triggerCard": {
			"allPosts": "All posts",
			"reconnectButton": "Reconnect",
			"pauseButton": "Pause",
			"enableButton": "Enable",
			"deleteButton": "Delete",
			"createdLabel": "Created",
			"repliesLabel": "Replies:",
			"dedupeNote": "Users commenting multiple times will only receive one public reply and DM.",
			"insights": {
				"reach": "Reach",
				"likes": "Likes",
				"comments": "Comments",
				"shares": "Shares",
				"saved": "Saved"
			}
		},
		"triggerStatus": {
			"paused": "Paused",
			"pausedDetail": "This trigger is disabled and will not send replies.",
			"active": "Active",
			"activeDetail": "This trigger is enabled and ready to reply.",
			"needsAttention": "Needs attention",
			"needsAttentionDetail": "This trigger cannot currently reply or send DMs."
		},
		"meta": {
			"title": "Auto-Reply - Videotto"
		}
	},
	"analytics": {
		"meta": {
			"title": "Channel Analytics - Videotto"
		},
		"title": "Channel analytics",
		"refreshing": "Refreshing",
		"subtitle": "How your Reels and Shorts are performing. Updated automatically once per hour.",
		"toast": {
			"connected": "Connected {platform}"
		},
		"firstSync": {
			"emptyTitle": "Nothing to show yet",
			"emptyDescription": "Connect Instagram or YouTube above and we'll pull in your latest Reels and Shorts.",
			"fetchingTitle": "Fetching your latest posts",
			"fetchingDescription": "This usually takes about 30 seconds. You can leave this page, we'll keep working in the background."
		},
		"trendChart": {
			"title": "Growth trend",
			"dailyMetricSubtitle": "Daily {metric} · last {days} days",
			"platformTablistAria": "Trend platform",
			"chartAria": "Daily {metric} on {platform}, last {days} days",
			"settlingFootnote": "The last 2–3 days settle as {platform} finalizes its numbers.",
			"empty": {
				"title": "Your growth trend is building.",
				"description": "Daily numbers appear here once your connected channels have a few days of analytics."
			},
			"metricReach": "reach",
			"metricViews": "views"
		},
		"channelStrip": {
			"relativeTime": {
				"justNow": "just now",
				"minutesAgo": "{minutes}m ago",
				"hoursAgo": "{hours}h ago",
				"daysAgo": "{days}d ago"
			},
			"errors": {
				"reconnectRequired": "Reconnect - token expired",
				"scopeMigrationRequired": "Reconnect to enable Shorts analytics",
				"insufficientFollowers": "Needs at least 100 followers (you have {count})",
				"personalAccountUnsupported": "Switch to a Business or Creator account",
				"noYoutubeChannel": "No YouTube channel on this Google account",
				"quotaExceeded": "Daily refresh limit reached",
				"rateLimited": "{name} is rate-limited - retrying",
				"refreshFailed": "Refresh failed"
			},
			"toasts": {
				"disconnected": "Disconnected {name}",
				"disconnectFailed": "Failed to disconnect {name}"
			},
			"updating": "Updating",
			"updatedAgo": "Updated {time}",
			"accountLinked": "Account linked",
			"notConnected": "Not connected",
			"disconnectDialog": {
				"title": "Disconnect {name}?",
				"withAccountName": "will be disconnected. Analytics for this channel will stop updating, and scheduled posts using this account will fail until you reconnect.",
				"withoutAccountName": "This account will be disconnected. Analytics will stop updating until you reconnect."
			},
			"cancelButton": "Cancel",
			"disconnectingButton": "Disconnecting…",
			"disconnectButton": "Disconnect",
			"connectButton": "Connect",
			"reconnectButton": "Reconnect",
			"disconnectAria": "Disconnect {name}"
		},
		"dateRangePicker": {
			"label": "Date range",
			"last7Days": "Last 7 days",
			"last28Days": "Last 28 days"
		},
		"platformFilter": {
			"label": "Filter by platform",
			"allPlatforms": "All platforms",
			"instagram": "Instagram",
			"youtube": "YouTube"
		},
		"postsTable": {
			"relative": {
				"todayAt": "Today at {time}",
				"yesterdayAt": "Yesterday at {time}",
				"daysAgo": "{days}d ago",
				"weeksAgo": "{weeks}w ago",
				"monthsAgo": "{months}mo ago",
				"yearsAgo": "{years}y ago"
			},
			"title": "Recent posts",
			"sortedByMostRecent": "Sorted by most recent",
			"sortedByLongestWatchTime": "Sorted by longest watch time",
			"sortedByTop": "Sorted by top {sortKey}",
			"postCount": "{count, plural, one {# post} other {# posts}}",
			"columns": {
				"post": "Post",
				"views": "Views",
				"likes": "Likes",
				"avgWatch": "Avg watch"
			},
			"openPostAria": "Open {caption} on {platform}",
			"postFallback": "post",
			"thumbnailAlt": "Post thumbnail",
			"noCaption": "(no caption)",
			"publishedViaVideotto": "Published via Videotto",
			"publishedViaVideottoBadge": "Videotto",
			"emptyState": {
				"noAccountsTitle": "No accounts connected yet",
				"noAccountsDescription": "Connect Instagram or YouTube to start seeing how your Reels and Shorts perform.",
				"connectAccountsButton": "Connect accounts",
				"waitingTitle": "Your Reels and Shorts will appear here",
				"waitingDescription": "We'll fetch them automatically, usually within 30 seconds. You can leave this page and come back."
			}
		},
		"summaryCards": {
			"views": "Views",
			"likes": "Likes",
			"comments": "Comments",
			"posts": "Posts",
			"sectionAria": "Performance summary across your recent posts",
			"loadingAria": "Loading",
			"acrossRecentPosts": "Across recent posts"
		}
	},
	"affiliate": {
		"title": "Affiliate",
		"previewBadge": "Preview data",
		"loadFailed": "We could not load your numbers just now. Nothing is lost, so try again in a moment.",
		"questions": "Questions about the creator program?",
		"getInTouch": "Get in touch",
		"windowAria": "Time window",
		"windowScope": "Clicks and signups follow this range. Paid users and volume are all time.",
		"allTime": "All time",
		"windows": {
			"7d": "7d",
			"30d": "30d",
			"90d": "90d",
			"all": "All"
		},
		"live": {
			"updated": "Updated {time} ago",
			"justNow": "Updated just now",
			"refresh": "Refresh",
			"refreshAria": "Refresh your numbers now"
		},
		"hero": {
			"signups": "Signups",
			"paidUsers": "Paid users",
			"volume": "Volume",
			"vsPrevious": "vs previous",
			"stillPaying": "{count, plural, one {# person you brought is on a plan right now, trials included} other {# people you brought are on a plan right now, trials included}}.",
			"volumeExplainer": "Volume is the first payment from each person you brought, at the price they actually paid.",
			"legendArrivals": "Signups",
			"legendSales": "Sales",
			"chartAria": "Daily signups, with a bar on every day that produced a sale"
		},
		"curve": {
			"tipSignups": "{count, plural, one {# signup} other {# signups}}",
			"tipSales": "{count, plural, one {# sale} other {# sales}}",
			"today": "Today"
		},
		"funnel": {
			"title": "Conversion",
			"clicks": "Clicks",
			"signups": "Signups",
			"sales": "Sales",
			"dropToSignup": "of clicks became signups",
			"dropToSale": "of signups bought a plan"
		},
		"codes": {
			"title": "Codes",
			"scope": "Volume and sales are all time. Clicks and signups follow the range above.",
			"colClicks": "clicks",
			"colSignups": "signups",
			"colSales": "sales",
			"colPerClick": "per click",
			"perClickScope": "Volume is all time and clicks follow the range, so value per click only lines up on the All view.",
			"percentOff": "{percent}% off",
			"discountCode": "Discount",
			"trackingOnly": "Tracking only, with no discount attached",
			"noLabel": "Unlabelled placement",
			"ended": "ended",
			"empty": "No codes assigned yet. Your codes appear here once the team sets them up.",
			"linkLabel": "Link",
			"copyLink": "Copy link",
			"copiedShort": "Copied!",
			"copyAria": "Copy {label}",
			"copied": "{label} copied",
			"copyFailed": "Could not copy",
			"tabsAria": "Placement type",
			"notion": {
				"title": "Assigned links",
				"empty": "No links assigned yet. They appear here once the team sets them up.",
				"linkLabel": "Assigned link"
			}
		},
		"activity": {
			"title": "Activity",
			"someone": "Someone",
			"saleLine": "started",
			"saleLineWith": "with",
			"signupLine": "signed up with",
			"aPlan": "a plan",
			"amountTitle": "Their first payment, after any discount"
		},
		"empty": {
			"title": "Nothing has come through your codes yet",
			"body": "Nothing has been attributed to you so far, so the zeros below are real rather than an error. Share a code and this page fills in as people arrive.",
			"rule1": "A click stays credited to you for {days} days."
		}
	},
	"fontCard": {
		"confirmDelete": "Are you sure you want to delete \"{name}\"?",
		"deleteFailed": "Failed to delete font. Please try again.",
		"deleting": "Deleting...",
		"deleteButton": "Delete Font",
		"weightsStyles": "Weights: {weights} | Styles: {styles}",
		"format": "Format: {format}",
		"size": "Size: {size}",
		"uploaded": "Uploaded: {date}"
	},
	"apiKeysManager": {
		"fetchError": "Failed to load API keys",
		"nameRequired": "Please enter a name for your API key",
		"createFailed": "Failed to create key",
		"createSuccess": "API key created",
		"revokeConfirm": "Are you sure you want to revoke this API key? This cannot be undone.",
		"revokeFailed": "Failed to revoke key",
		"revokeSuccess": "API key revoked",
		"copiedToClipboard": "Copied to clipboard",
		"loading": "Loading API keys...",
		"newKeyWarning": "API key created! Copy it now - it won't be shown again.",
		"copy": "Copy",
		"done": "Done",
		"createdOn": "Created {date}",
		"lastUsedSuffix": " • Last used {date}",
		"revoking": "Revoking...",
		"revoke": "Revoke",
		"emptyState": "No API keys yet. Create one to get started.",
		"namePlaceholder": "Key name (e.g., My Integration)",
		"creating": "Creating...",
		"create": "Create",
		"cancel": "Cancel",
		"createButton": "Create API Key",
		"maxKeysReached": "Maximum 5 API keys allowed. Revoke an existing key to create a new one.",
		"docsLink": "See the <anchor>API documentation</anchor> to learn how to use your API keys."
	},
	"fontUpload": {
		"uploadFont": "Upload Font",
		"mustBeLoggedIn": "You must be logged in to upload fonts",
		"invalidFileType": "Invalid font file type. Please upload .woff2, .woff, .ttf, or .otf files.",
		"fileTooLarge": "Font file is too large. Maximum size is 50MB.",
		"failedToGetUploadUrl": "Failed to get upload URL",
		"failedToUploadToStorage": "Failed to upload font to storage",
		"failedToSaveMetadata": "Failed to save font metadata",
		"failedToUploadFont": "Failed to upload font",
		"uploading": "Uploading..."
	},
	"autoReplyWaitlistGate": {
		"joinError": "Could not join the waitlist. Please try again.",
		"questionsPrefix": "Questions about Auto-Reply?",
		"contactUs": "Contact us",
		"headlineLine1": "Auto-Reply is almost",
		"headlineLine2": "ready for you",
		"subtitle": "Turn every comment into a DM, automatically. We're opening it up to creators in waves. Join the list to claim your spot.",
		"features": {
			"autoDm": "Auto-DM anyone who comments your keyword",
			"publicReplyPrefix": "Public reply",
			"publicReplySuffix": "private DM in one go",
			"runsAlways": "Set it once - runs 24/7 on every post"
		},
		"joiningButton": "Joining…",
		"joinWaitlistButton": "Join the waitlist",
		"noSpam": "No spam, just one email when you're in",
		"joinedTitle": "You're on the list",
		"joinedDescription": "We'll email you the moment Auto-Reply opens up, you'll be among the first creators in.",
		"earlyAccessSecured": "Early access secured"
	},
	"googleDriveConnection": {
		"title": "Google Drive",
		"errors": {
			"generic": "Failed to disconnect",
			"disconnectFailed": "Failed to disconnect Google Drive"
		},
		"disconnectedToast": "Google Drive disconnected",
		"checkingConnection": "Checking connection…",
		"connected": "Connected",
		"notConnected": "Not connected",
		"disconnectingButton": "Disconnecting…",
		"disconnectButton": "Disconnect",
		"connectButton": "Connect"
	},
	"connectedAiApps": {
		"title": "Connected AI apps",
		"description": "Let the AI app you already use — Claude, Claude Code or ChatGPT — edit your Otto videos with your own subscription, over the Model Context Protocol.",
		"loading": "Loading…",
		"serverUrlLabel": "Server URL",
		"copyButton": "Copy",
		"copied": "Server URL copied",
		"howToConnect": "How to connect",
		"claudeTitle": "Claude (claude.ai, Claude Desktop)",
		"claudeSteps": "Settings → Connectors → Add custom connector → paste the server URL → Add. Sign in when the browser opens.",
		"claudeCodeTitle": "Claude Code",
		"claudeCodeSteps": "Run the command below, then type /mcp in a session to sign in.",
		"chatgptTitle": "ChatGPT",
		"chatgptSteps": "Settings → Apps & Connectors → Developer mode → Create → paste the server URL, choose OAuth, then sign in.",
		"connectedTitle": "Connected apps",
		"noApps": "No apps connected yet. Connect one from the app itself and it will appear here.",
		"activeNow": "Active now",
		"lastUsed": "Last used {when}",
		"neverUsed": "Not used yet",
		"lastEdit": "last edit: {tool}",
		"disconnectButton": "Disconnect",
		"disconnectingButton": "Disconnecting…",
		"disconnectedToast": "{app} disconnected",
		"errors": {
			"load": "Could not load your connected apps.",
			"disconnectFailed": "Could not disconnect that app.",
			"copyFailed": "Could not copy the URL."
		}
	},
	"dangerZone": {
		"title": "Delete account",
		"description": "Permanently delete your Videotto account and everything in it. Your subscription is cancelled straight away; the data is erased after 30 days.",
		"descriptionPrepaid": "Permanently delete your Videotto account and everything in it. Your plan is prepaid and never renews, so there is no subscription to cancel; the data is erased after 30 days.",
		"descriptionNone": "Permanently delete your Videotto account and everything in it. You have no subscription, so there is nothing to cancel; the data is erased after 30 days.",
		"openButton": "Delete my account",
		"whatHappensTitle": "What happens",
		"whatHappens": {
			"billing": "Your subscription is cancelled immediately and you are not billed again.",
			"billingPrepaid": "Your plan is prepaid and never renews on its own, so there is nothing to cancel and you will not be charged again.",
			"billingNone": "You have no subscription, so there is nothing to cancel and you will not be charged.",
			"tokens": "Your connected Instagram, TikTok, YouTube and LinkedIn accounts are disconnected, and your API keys stop working right away.",
			"grace": "For 30 days you can still sign in and press Cancel deletion to get it back. Until you do, you can look around but can't make, export or buy anything. Your subscription does not come back with it; you would need to subscribe again.",
			"gracePrepaid": "For 30 days you can still sign in and press Cancel deletion to get it back. Until you do, you can look around but can't make, export or buy anything. Any prepaid time still left on your plan comes back with it.",
			"graceNone": "For 30 days you can still sign in and press Cancel deletion to get it back. Until you do, you can look around but can't make, export or buy anything.",
			"media": "After 30 days every video, clip, project, brand kit, font and upload is permanently erased. This cannot be undone."
		},
		"whatWeKeepTitle": "What we keep",
		"whatWeKeep": {
			"invoices": "Invoices and payment records, which we are required to retain for tax and accounting.",
			"receipt": "A record that the deletion happened, holding your user ID and a one-way hash of your email — no personal data."
		},
		"confirmEmailLabel": "Type {email} to confirm",
		"passwordLabel": "Your password",
		"reasonLabel": "Anything you want to tell us? (optional)",
		"confirmButton": "Delete my account",
		"submitting": "Working…",
		"backButton": "Keep my account",
		"genericError": "Something went wrong. Please try again or contact support.",
		"pendingTitle": "Your account is scheduled for deletion",
		"pendingBody": "Everything in your account will be permanently erased on {date}. Until then you can still get it back, but your subscription has already been cancelled and will not be restored.",
		"pendingBodyPrepaid": "Everything in your account will be permanently erased on {date}. Until then you can still get it back, along with any prepaid time left on your plan.",
		"pendingBodyNone": "Everything in your account will be permanently erased on {date}. Until then you can still get it back with Cancel deletion.",
		"cancelButton": "Cancel deletion"
	}
}
