{
  "chat": {
    "title": "AI Assistant",
    "tabAssistant": "Chat",
    "tabGenerate": "3D Model Generate",
    "sessionsTooltip": "Chat sessions",
    "sessionsLocked": "Chat sessions (locked while responding)",
    "placeholder": "Describe what you want to build or fix...",
    "send": "Send",
    "stop": "Stop",
    "newChat": "+ New Chat",
    "discordLink": "Need help? Join our Discord",
    "thinking": "ParallaxPro AI is thinking...",
    "sessionIdCopied": "Copied!",
    "sessionIdTooltip": "Click to copy session ID",
    "changesApplied": "Changes applied",
    "revertBefore": "Revert to before",
    "revertHere": "Revert to here",
    "templateBanner": "A template was just loaded — your previous project files were replaced.",
    "templateRestore": "Restore my previous project",
    "createScratch": "Create from scratch instead of using this template (20-30 min)",
    "createScratchRecommended": "Usually gives better results than templates",
    "fixerHint": "This can take up to 10 minutes — feel free to leave the page open, but do not close this page.",
    "continue": "Continue",
    "rawFilesTitle": "Raw Session Dialogue",
    "rawFilesEmpty": "No files yet in this session.",
    "buildingPlan": "Building Plan",
    "todoPaused": "Paused",
    "tabSoundEffects": "Sound Effects"
  },
  "feedback": {
    "titleCreate": "Thanks for trying the builder!",
    "titleFix": "Thanks for using the AI assistant!",
    "thankYou": "Your feedback is incredibly valuable and directly helps us improve the product for everyone. We really appreciate you taking a moment to share your experience!",
    "promptLabelCreate": "You asked the builder for:",
    "promptLabelFix": "You asked the agent to:",
    "rateLabel": "Did it work?",
    "worked": "It worked",
    "notWorked": "It did not work",
    "notesLabel": "Anything broken or could be better?",
    "notesPlaceholder": "What worked? What's off? What would you change?",
    "restoreNote": "Don't want to keep this build? You can restore your project to how it was before.",
    "restoreButton": "Restore project to before this build",
    "restoring": "Restoring…",
    "dismiss": "Dismiss",
    "dismissTooltip": "Dismiss this feedback form. It won't come back for this change.",
    "submit": "Submit feedback",
    "submitting": "Submitting…",
    "noPrompt": "(no prompt on record)"
  },
  "signup": {
    "createGame": "To build a game from scratch instead of using this template, I need you to sign up first.",
    "fixGame": "To run a fix on your game, I need you to sign up first.",
    "budget": "You've used up your free anonymous budget — sign up to keep going.",
    "default": "I need you to sign up first.",
    "button": "Sign up free"
  },
  "toolbar": {
    "backToProjects": "Back to Projects",
    "untitled": "Untitled Project",
    "renameTooltip": "Click to rename",
    "save": "Save (Ctrl+S)",
    "undo": "Undo (Ctrl+Z)",
    "redo": "Redo (Ctrl+Y / Ctrl+Shift+Z)",
    "translate": "Translate (1)",
    "rotate": "Rotate (2)",
    "scale": "Scale (3)",
    "cameraMode": "Toggle Orbit / Fly (4)",
    "gizmoSpace": "Toggle Global / Local (5)",
    "play": "Play",
    "stop": "Stop",
    "loading": "Loading...",
    "publish": "Publish",
    "feedback": "Feedback",
    "settings": "Settings",
    "multiplayer": "Multiplayer",
    "multiplayerTooltip": "Multiplayer room link",
    "shareLink": "Share this link to invite players:",
    "copyLink": "Copy Link",
    "copied": "Copied!",
    "previewClient": "+ Client",
    "previewClientTooltip": "Open another window of this project to test multiplayer locally",
    "aiAssistant": "AI Assistant",
    "teamChat": "Team Chat",
    "teamChatPlaceholder": "Type a message...",
    "unsavedConfirm": "You have unsaved changes. Leave without saving?",
    "moveLabel": "Move",
    "rotateLabel": "Rotate",
    "scaleLabel": "Scale",
    "orbitLabel": "Orbit",
    "flyLabel": "Fly",
    "globalLabel": "Global",
    "localLabel": "Local",
    "flyMode": "Fly mode (4)",
    "orbitMode": "Orbit mode (4)",
    "localSpace": "Local space (5)",
    "globalSpace": "Global space (5)",
    "playCtrlP": "Play (Ctrl+P)",
    "loadingAssets": "Loading assets",
    "projectSaved": "Project saved",
    "projectRenamed": "Project renamed",
    "renameFailed": "Rename failed",
    "renameProject": "Rename Project",
    "projectNamePlaceholder": "Project name",
    "playerConnected": "{count} player connected",
    "playersConnected": "{count} players connected",
    "joined": "joined",
    "left": "left",
    "you": "You",
    "startedMultiplayer": "started a multiplayer session"
  },
  "settings": {
    "chatAgent": "Chat Agent",
    "editingAgent": "Editing Agent",
    "graphicsQuality": "Graphics Quality",
    "cloudSync": "Cloud Sync",
    "cloudSignIn": "Sign in",
    "cloudSigningIn": "Signing in…",
    "cloudSynced": "This project syncs to parallaxpro.ai on every save.",
    "cloudHint": "Sync this project to parallaxpro.ai so you can pick up where you left off from any computer.",
    "cloudPromote": "Promote to Cloud",
    "cloudPromoting": "Syncing…",
    "cloudSignedOutHint": "Sign in to parallaxpro.ai to enable cloud sync for this project.",
    "cloudSignedOutCloudHint": "This is a cloud project but you're signed out — saves aren't reaching parallaxpro.ai. Sign in to resume syncing.",
    "cloudSyncedCheck": "✓ This project syncs to parallaxpro.ai on every save.",
    "cloudProjectSynced": "Project synced to parallaxpro.ai.",
    "signedInToast": "Signed in to parallaxpro.ai.",
    "cancel": "Cancel",
    "save": "Save",
    "chatAgentHint": "Recommended: LLM API — faster (<1s vs 10-20s per message, because the CLI is relaunched on every turn), cheaper, and produces cleaner output. CLI agents are a convenience when you don't have an API key, but they run in agent mode rather than chat mode and may perform very poorly — occasionally emitting tool calls instead of chat replies.",
    "editingAgentHint": "Agent spawned when the AI decides to edit your project files.",
    "qualityLow": "Low",
    "qualityMedium": "Medium",
    "qualityHigh": "High",
    "qualityLowHint": "Basic rendering, no shadows",
    "qualityMediumHint": "Shadows, FXAA anti-aliasing, HBAO",
    "qualityHighHint": "Shadows, MSAA anti-aliasing, HBAO, screen-space reflections, bloom"
  },
  "editor": {
    "systemUpdated": "System updated — try refreshing",
    "connectionLost": "Connection lost — editing disabled until reconnection",
    "reconnecting": "Connection lost. Reconnecting...",
    "reconnected": "Reconnected",
    "reconnectFailed": "Unable to reconnect. Please check your connection and refresh the page.",
    "disconnectOverlay": "Editing disabled while reconnecting...",
    "disconnectRefresh": "Connection lost. Please refresh the page to continue editing."
  },
  "projectList": {
    "newProject": "+ New Project",
    "exit": "Exit",
    "backToLanding": "Back to landing page",
    "searchPlaceholder": "Search projects...",
    "tabAll": "All",
    "tabLocal": "Local Projects",
    "tabCloud": "Cloud Projects",
    "emptyDefault": "No projects yet. Create your first game!",
    "emptySearch": "No projects match your search.",
    "emptyCloud": "No cloud projects yet. Publishing or promoting a project will put it here.",
    "cloudSignIn": "Sign in to parallaxpro.ai to access your cloud projects.",
    "cloudSignInButton": "Sign in",
    "selectAll": "Select All",
    "deleteSelected": "Delete Selected",
    "prev": "‹ Prev",
    "next": "Next ›",
    "draft": "Draft",
    "published": "PUBLISHED",
    "deprecated": "DEPRECATED",
    "buildFailed": "BUILD FAILED",
    "justBuilt": "✓ JUST BUILT",
    "stopBuild": "Stop",
    "stopTooltip": "Stop this build (the run is killed and the project unlocks)",
    "anonBanner": "You're browsing anonymously — your projects live only in this browser. Sign up (free) to save them across devices and unlock more features.",
    "anonSignup": "Sign up",
    "anonLogin": "Log in",
    "restartNotice": "We may restart the servers at any time as we iterate and flush out issues — apologies for the bumps! Your projects are always saved, but a long-running AI build could be killed mid-way and you'll need to retry it.",
    "newProjectModal": "New Project",
    "generateFromPrompt": "Generate from prompt",
    "generateHint": "Describe your game idea and AI will build it for you.",
    "generatePlaceholder": "e.g. A 3D platformer with double-jump and coin collection...",
    "buildFromTemplate": "Build from template",
    "templateHint": "Start with a ready-made game template you can customize.",
    "templateSearch": "Search templates...",
    "login": "Login",
    "loginTooltip": "Sign in to parallaxpro.ai so you can publish this project",
    "logout": "Log out",
    "generate": "Generate",
    "or": "or",
    "noTemplatesMatch": "No templates match your search",
    "loadingTemplates": "Loading...",
    "statusAll": "All",
    "statusPublished": "Published",
    "statusDraft": "Draft",
    "untitled": "Untitled",
    "moreActions": "More actions",
    "open": "Open",
    "rename": "Rename",
    "duplicate": "Duplicate",
    "changeThumbnail": "Change Thumbnail",
    "setThumbnail": "Set Thumbnail",
    "removeThumbnail": "Remove Thumbnail",
    "viewPublishedGame": "View Published Game",
    "updatePublish": "Update Publish",
    "unpublish": "Unpublish",
    "delete": "Delete",
    "clickToOpen": "Click the card to open",
    "renameProject": "Rename Project",
    "newNamePlaceholder": "New name",
    "deleteProject": "Delete project",
    "deleteCloudProject": "Delete cloud project",
    "deleteLocalCopy": "Delete local copy",
    "stopBuildConfirmTitle": "Stop this build?",
    "stopBuildConfirmMsg": "The run will be stopped and all progress from this attempt is discarded. The project will unlock — you can start again with a different prompt.",
    "unpublishGame": "Unpublish Game",
    "cloudCopyDeleted": "Cloud copy deleted",
    "keepAsLocalOnly": "Keep as local-only",
    "deleteLocalToo": "Delete local too"
  },
  "share": {
    "title": "Share Project",
    "addPeople": "Add people",
    "emailPlaceholder": "Email or username",
    "editor": "Editor",
    "viewer": "Viewer",
    "share": "Share",
    "peopleWithAccess": "People with access",
    "owner": "Owner",
    "removeAccess": "Remove access",
    "notSharedYet": "Not shared with anyone yet.",
    "couldNotLoad": "Could not load shares.",
    "enterEmailOrUsername": "Enter an email or username.",
    "invitationSent": "Invitation email sent to {email}",
    "sharedWith": "Shared with {email}",
    "done": "Done"
  },
  "feedbackModal": {
    "title": "Send Feedback",
    "whatFeedback": "What feedback do you have?",
    "placeholder": "Describe the issue, suggestion, or feedback...",
    "screenshotsLabel": "Screenshots (optional, max 5 images, 5MB each)",
    "addImage": "+ Add Image",
    "exceedsLimit": "{name} exceeds 5MB limit.",
    "enterFeedback": "Please enter your feedback.",
    "sendFailed": "Failed to send feedback.",
    "sent": "Feedback sent! Thank you.",
    "cancel": "Cancel",
    "send": "Send"
  },
  "assets": {
    "title": "Assets & Finite State Machines & Performance",
    "projectFiles": "Project Files",
    "assetLibrary": "Asset Library",
    "fsm": "FSM",
    "performance": "Performance",
    "scenes": "Scenes",
    "untitledScene": "Untitled Scene",
    "usedAssets": "Used Assets",
    "searchAssets": "Search assets...",
    "allTypes": "All Types",
    "assetLibraryBreadcrumb": "Asset Library",
    "noItemsFound": "No items found",
    "noAssetsFound": "No assets found",
    "prevPage": "‹ Prev",
    "nextPage": "Next ›"
  },
  "hierarchy": {
    "title": "Hierarchy",
    "addEntity": "Add Entity",
    "searchEntities": "Search entities...",
    "noSceneLoaded": "No scene loaded",
    "newScene": "New Scene",
    "emptyEntity": "Empty Entity",
    "rename": "Rename",
    "deleteScene": "Delete Scene",
    "createChild": "Create Child",
    "deleteLocked": "Delete (locked)",
    "show": "Show",
    "hide": "Hide"
  },
  "properties": {
    "title": "Properties",
    "noSelection": "No entity selected",
    "entitiesSelected": "{count} entities selected",
    "active": "Active",
    "enabled": "Enabled",
    "addComponent": "Add Component",
    "addComponentToAll": "Add Component to All",
    "removeComponent": "Remove Component",
    "removeFromEntities": "Remove from {count} entities",
    "reset": "Reset",
    "copyValues": "Copy Values",
    "pasteValues": "Paste Values",
    "addTag": "Add Tag",
    "enterTagName": "Enter tag name:",
    "scriptProperties": "Properties",
    "viewFSMs": "View FSMs",
    "viewFSMsTooltip": "Switch to FSM tab and show this entity's state machines",
    "sculptTerrain": "Sculpt Terrain",
    "stopSculpting": "Stop Sculpting",
    "brush": "Brush",
    "raise": "Raise",
    "lower": "Lower",
    "smooth": "Smooth",
    "flatten": "Flatten",
    "radius": "Radius",
    "strength": "Strength"
  },
  "publish": {
    "title": "Publish Game",
    "manage": "Manage Published Game",
    "gameName": "Game Name",
    "gameNamePlaceholder": "My Awesome Game",
    "urlSlug": "URL Slug",
    "urlSlugPlaceholder": "my-awesome-game",
    "version": "Version",
    "changelogLabel": "Changelog (optional)",
    "changelogPlaceholder": "What's in this version...",
    "visibility": "Visibility",
    "visibilityPublic": "Public",
    "visibilityUnlisted": "Unlisted",
    "thumbnail": "Thumbnail (optional)",
    "noImage": "No image",
    "upload": "Upload",
    "change": "Change",
    "cancel": "Cancel",
    "publish": "Publish",
    "gameNameRequired": "Game name is required.",
    "slugInvalid": "Slug must be 3-64 chars, lowercase alphanumeric and hyphens.",
    "versionInvalid": "Enter a valid version (e.g., 1.0.0).",
    "publishNewVersion": "Publish New Version",
    "changelogOptional": "Changelog (optional)",
    "versionRequired": "Enter a valid version.",
    "setLive": "Set Live",
    "checkout": "Checkout",
    "revertConfirm": "Revert project to v{version}? Your current editor state will be replaced.",
    "unpublishGame": "Unpublish Game",
    "unpublishConfirm": "Unpublish this game? It will no longer be accessible to players.",
    "successTitle": "Published!",
    "successMessage": "Version {version} is now live!",
    "done": "Done",
    "close": "Close",
    "mismatchTitle": "Engine version not supported",
    "gotIt": "Got it",
    "saving": "Saving…",
    "saved": "Saved"
  },
  "profiler": {
    "title": "Performance",
    "engineNotRunning": "Engine not running",
    "copyStats": "Copy stats",
    "copied": "Copied!",
    "copyFailed": "Copy failed",
    "smoothness": "Smoothness (last 2 seconds)",
    "smoothnessHint": "Lower and flatter is better. The red line marks a smooth 60 fps.",
    "frameBudget": "Where your frame time goes",
    "frameBudgetHint": "Grouped view of what the engine is spending time on each frame.",
    "onScreen": "What's on screen",
    "drawCalls": "Draw calls",
    "triangles": "Triangles",
    "entities": "Entities",
    "showDetails": "Show details",
    "cpuPhases": "CPU phases (per tickOneFrame)",
    "cpuPhasesHint": "Each phase timed separately — bar shows share of total tick time.",
    "renderPasses": "Render passes (CPU submit, ms)",
    "renderPassesHint": "Approximate per-pass cost — CPU time spent assembling and submitting commands. Not true GPU time.",
    "renderer": "Renderer (last frame)",
    "meshesDrawn": "Meshes drawn",
    "scripts": "Scripts",
    "meshesTotal": "Meshes total",
    "scriptCost": "Per-script cost (this frame)",
    "scriptCostHint": "Sum of onUpdate / onFixedUpdate / onLateUpdate time across all entities sharing the same script.",
    "jsHeap": "JS heap (MB)",
    "jsHeapHint": "Chrome-only — useful for spotting leaks.",
    "noDataYet": "No data yet.",
    "noRenderPasses": "No render passes measured.",
    "noScriptsActive": "No scripts active (press Play to see timings).",
    "labelSmooth": "Smooth",
    "labelOK": "OK",
    "labelChoppy": "Choppy",
    "labelLaggy": "Laggy",
    "scripts_budget": "Scripts",
    "physics_budget": "Physics",
    "animation_budget": "Animation",
    "rendering_budget": "Rendering",
    "other_budget": "Other"
  },
  "modal": {
    "cancel": "Cancel",
    "ok": "OK",
    "confirm": "Confirm"
  },
  "modelGen": {
    "health": {
      "checking": "checking…",
      "unavailable": "GPU service unavailable",
      "offline": "Offline — no worker available",
      "onlineSingular": "Online · {count} worker available",
      "onlinePlural": "Online · {count} workers available",
      "queuedSuffix": " · {count} queued"
    },
    "notice": {
      "searchFirstBold": "Search Community first.",
      "searchFirstBody": "Browse existing 3D models in the Community library below before generating — it's instant and saves GPU time.",
      "publicBold": "We may make your generations public.",
      "publicBody": "Once reviewed and recommended, your prompt and the resulting model are visible to other users. Don't include personal info or copyrighted work."
    },
    "mode": {
      "fromText": "From Text",
      "fromImage": "From Image"
    },
    "text": {
      "label": "Describe a 3D model:",
      "placeholder": "e.g. \"wooden barrel\", \"low-poly tree\", \"anime sword\"",
      "previewBtn": "Preview Image",
      "needPrompt": "Enter a prompt first.",
      "tooShort": "Prompt must be at least {min} characters.",
      "generating": "Generating preview…",
      "previewFailed": "preview failed"
    },
    "image": {
      "label": "Upload an image of the subject:",
      "dropPrimary": "Click to choose or drag an image",
      "dropHint": "PNG, JPG, or WEBP — up to 8MB",
      "tooLarge": "Image must be under 8MB.",
      "uploading": "Uploading…",
      "uploadFailed": "upload failed",
      "labelInputLabel": "Label this image (used to make it searchable):",
      "labelInputPlaceholder": "e.g. \"red apple\", \"medieval helmet\""
    },
    "preview": {
      "labelText": "Preview — confirm to generate the 3D model from this image:",
      "labelImage": "Preview — confirm to generate:",
      "refinePrompt": "Refine prompt",
      "chooseDifferent": "Choose different file",
      "confirm": "Confirm & Generate 3D"
    },
    "submit": {
      "submitting": "Submitting…",
      "submitFailed": "submit failed",
      "cacheHit": "✓ Found a matching shared model — added to library."
    },
    "active": {
      "header": "In flight",
      "uploadedImage": "(uploaded image)",
      "stageQueued": "queued",
      "stageStarting": "starting",
      "stageFetching": "fetching image",
      "stageGenerating": "generating",
      "stageUploading": "uploading",
      "stageOrienting": "orienting",
      "failedLabel": "Failed",
      "failedUnknown": "unknown error",
      "dismissFailed": "Dismiss"
    },
    "library": {
      "scopeMine": "My Generations",
      "scopeCommunity": "Community",
      "refresh": "Refresh library",
      "search": "Search generations…",
      "empty": "No generations yet.",
      "emptyMatches": "No matches.",
      "emptyCommunity": "No community generations yet.",
      "notAvailable": "3D model generation isn't available on this backend."
    },
    "errorPrefix": "Error: {message}"
  },
  "soundFx": {
    "header": "Sound Effects",
    "usageTooltip": "Daily upload count. Resets at midnight UTC.",
    "daily": "Daily: {today}/{limit}",
    "notice": {
      "privateBold": "Unlisted, not private.",
      "privateBody": "Only you can use these clips in chat or in your games — but the audio files themselves are not auth-gated.",
      "extract": "Anyone with the URL (a friend you shared it with, anyone who gets the link, or anyone who plays a game you publish that uses the clip) can download and reuse the audio.",
      "tokenHint": "URLs use long random tokens so they're hard to guess, but treat anything you upload here as effectively public — don't upload audio you wouldn't want extracted."
    },
    "mode": {
      "upload": "Upload",
      "record": "Record"
    },
    "upload": {
      "dropPrimary": "Drop audio file or click to browse",
      "dropHint": "≤10s · wav, mp3, ogg, flac · max 2 MB",
      "reading": "Reading file…",
      "parseFailed": "Could not parse audio file. Try a different format.",
      "tooLarge": "File too large ({mb} MB > 2 MB).",
      "tooLong": "Clip too long ({s}s > {max}s)."
    },
    "record": {
      "btnStart": "Record",
      "btnStop": "Stop",
      "hint": "Recording auto-stops at 10s. Click again to stop early.",
      "micDenied": "Microphone access denied: {reason}",
      "recorderUnavailable": "Recorder unavailable: {reason}",
      "encoding": "Encoding…",
      "encodeFailed": "Encoding failed: {reason}",
      "noAudio": "No audio captured."
    },
    "staged": {
      "headerUpload": "Selected clip",
      "headerRecording": "Recorded clip",
      "labelPlaceholder": "Label (e.g. \"explosion\", \"jump\", \"ouch\")",
      "cancel": "Cancel",
      "save": "Save",
      "needLabel": "Please enter a label.",
      "labelTooLong": "Label too long (max {max})."
    },
    "library": {
      "header": "My clips",
      "refresh": "Refresh",
      "empty": "Upload or record to add your first clip.",
      "loading": "Loading…",
      "couldNotLoad": "Could not load: {reason}",
      "deleteConfirm": "Delete \"{label}\"?",
      "deleteFailed": "Delete failed: {reason}",
      "addToChatTooltip": "Add this clip as a hint for the AI Assistant",
      "deleteTooltip": "Delete"
    },
    "save": {
      "uploading": "Uploading…",
      "saved": "Saved.",
      "failed": "Save failed: {reason}"
    }
  }
}
