import type { TranslationMessages } from '../types';

export const enUsMessages: TranslationMessages = {
  'app.loading': 'Loading ...',
  'assistant.displayName': 'K.G.Studio Musician Assistant',
  'assistant.welcomeFallback': 'Welcome to K.G.Studio Musician Assistant.',
  'chatbox.todo.title': 'Task Checklist',
  'chatbox.todo.ariaLabel': 'Agent task checklist',
  'chatbox.todo.count': '{completed}/{total} completed',
  'chatbox.todo.active': 'Working on: {task}',
  'mainContent.createTrack': 'Create track',
  'mainContent.showGlobalTracks': 'Show global tracks',
  'status.chordGuideCandidate': 'Chord Guide Candidate: {name} - {notes} - {note}',
  'settings.sidebar.title': 'Settings',
  'settings.sidebar.close': 'Close Settings',
  'settings.sidebar.general': 'General',
  'settings.sidebar.audioIo': 'Audio I/O',
  'settings.sidebar.behavior': 'Behavior',
  'settings.sidebar.templates': 'Templates',
  'settings.sidebar.chordGuide': 'Chord Guide',
  'settings.general.title': 'General',
  'settings.general.language.label': 'Language',
  'settings.general.language.help': 'Auto uses your system language.',
  'settings.general.language.auto': 'Auto',
  'settings.general.language.en_us': 'English',
  'settings.general.language.fr_fr': 'Français',
  'settings.general.language.zh_cn': '简体中文',
  'settings.general.language.zh_hk': '繁體中文',
  'settings.yes': 'Yes',
  'settings.no': 'No',
  'settings.restoreDefault': 'Restore default',
  'settings.deleteCachedModel': 'Delete Cached Model',
  'settings.deleting': 'Deleting...',
  'settings.general.llmProvider.section': 'LLM Provider',
  'settings.general.llmProvider.label': 'LLM Provider',
  'settings.general.llmProvider.local': 'Local LLM (Browser)',
  'settings.general.llmProvider.openai': 'OpenAI',
  'settings.general.llmProvider.claudeOpenRouter': 'Claude (via OpenRouter)',
  'settings.general.llmProvider.openaiCompatible': 'OpenAI Compatible (e.g. OpenRouter, Ollama)',
  'settings.general.persistKeys.label': 'Persist API Keys on Non-Localhost',
  'settings.general.persistKeys.help': 'When enabled, API keys will be saved to browser storage even on non-localhost environments. Warning: This may increase security vulnerability to XSS attacks.',
  'settings.general.localRuntime.cachedStatus': 'Cached Model Status',
  'settings.general.localRuntime.cacheChecking': 'Checking local model cache...',
  'settings.general.localRuntime.cacheDownloaded': 'Downloaded in browser cache.',
  'settings.general.localRuntime.cacheMissing': 'Not downloaded yet.',
  'settings.general.localRuntime.contextLength': 'Context Length',
  'settings.general.localRuntime.contextHelp': 'Larger context lengths require more VRAM and may also reduce performance as conversations become longer.',
  'settings.general.localRuntime.downloadUrl': 'Download URL',
  'settings.general.localRuntime.downloadHelp': 'Changing this URL may break downloads or point to an incompatible model file.',
  'settings.general.localRuntime.autoDownload': 'The local model downloads automatically the next time you chat with `Local LLM (Browser)`.',
  'settings.general.uvr5.section': 'UVR5 Web Runtime',
  'settings.general.uvr5.downloadUrl': 'UVR-MDX-NET-Inst_HQ_3 Download URL',
  'settings.general.htdemucs.downloadUrl': 'htdemucs_4s Download URL',
  'settings.general.modelUrl.help': 'Changing this URL may break downloads or point to an incompatible model file.',
  'settings.general.openai.section': 'OpenAI',
  'settings.general.openai.key': 'Key',
  'settings.general.openai.keyPlaceholder': 'Enter your OpenAI API key',
  'settings.general.openai.model': 'Model',
  'settings.general.openai.flexMode': 'Flex Mode',
  'settings.general.openai.flexHelp': 'Flex Mode uses OpenAI\'s flexible service tier. Pros: potential cost savings and higher throughput during busy periods. Cons: variable latency and possible queueing/deprioritization. Applies only to the OpenAI provider; no effect for OpenAI Compatible servers.',
  'settings.general.keys.persisted': 'Keys are persisted locally (the IndexedDB in your browser).',
  'settings.general.keys.sessionOnly': 'For security, keys are not persisted on non-local hosts and are kept in-memory for this session.',
  'settings.general.claudeOpenRouter.section': 'Anthropic Claude (via OpenRouter)',
  'settings.general.claudeOpenRouter.keyPlaceholder': 'Enter your Claude API key',
  'settings.general.baseUrl': 'Base URL',
  'settings.general.claudeOpenRouter.baseUrlHelp': 'This is the base URL for the OpenRouter API. Please do not change this unless you know what you are doing.',
  'settings.general.openaiCompatible.section': 'OpenAI Compatible Server',
  'settings.general.openaiCompatible.keyPlaceholder': 'Enter your API key',
  'settings.general.openaiCompatible.baseUrlPlaceholder': 'e.g. https://openrouter.ai/api/v1',
  'settings.general.openaiCompatible.baseUrlHelp': 'Quick presets:',
  'settings.general.openaiCompatible.modelPlaceholder': 'e.g. qwen3:30b',
  'settings.general.soundfont.section': 'Soundfont Settings',
  'settings.general.soundfont.managed': 'Soundfont configuration is managed by the server (kgone-server.json). Settings are read-only.',
  'settings.general.soundfont.baseUrl': 'Base URL',
  'settings.general.soundfont.baseUrlHelp': 'Changing this URL to an incompatible soundfont source may cause some instruments to sound wrong or not play.',
  'settings.general.kgone.section': 'K.G.One Settings',
  'settings.general.kgone.managed': 'K.G.One configuration is managed by the server (kgone-server.json). Settings are read-only.',
  'settings.general.kgone.enabled': 'Enable K.G.One Integration',
  'settings.general.kgone.disabled': 'Disabled',
  'settings.general.kgone.enabledOption': 'Enabled',
  'settings.general.kgone.serverBaseUrl': 'Server Base URL',
  'settings.general.kgone.serverBaseUrlHelp': 'Base URL of a running K.G.One Music Studio server. Used for full-song generation, clip generation, and stem separation.',
  'settings.audioIo.title': 'Audio I/O',
  'settings.audioIo.deviceRouting': 'Device Routing',
  'settings.audioIo.refresh': 'Refresh Device List',
  'settings.audioIo.refreshing': 'Refreshing…',
  'settings.audioIo.description': 'Choose the devices KGStudio should use for recording and playback. Input changes apply to the next recording session. Output changes require a page refresh.',
  'settings.audioIo.inputDevice': 'Audio Input Device',
  'settings.audioIo.outputDevice': 'Audio Output Device',
  'settings.audioIo.inputHelp': 'Changes apply to the next audio recording. If the selected device is removed, KGStudio will fall back to System Default.',
  'settings.audioIo.outputHelp': 'Output-device changes require a page refresh. Browser support for non-default output routing is limited, so KGStudio will continue on System Default when unsupported.',
  'settings.audioIo.outputSinkUnsupported': 'This browser does not expose reliable live Web Audio sink switching. Non-default output selection is best-effort and may remain on System Default.',
  'settings.audioIo.chooseOutputDevice': 'Choose Output Device…',
  'settings.audioIo.previousSelectedInput': 'Previously Selected Input (permission required to verify)',
  'settings.audioIo.previousSelectedOutput': 'Previously Selected Output (permission required to verify)',
  'settings.audioIo.status.inputUnavailable': 'Previously selected audio input device is unavailable; using System Default.',
  'settings.audioIo.status.outputUnavailable': 'Previously selected audio output device is unavailable; using System Default.',
  'settings.audioIo.status.refreshed': 'Audio device list refreshed.',
  'settings.audioIo.status.readFailed': 'Unable to read audio devices from the browser.',
  'settings.audioIo.status.inputDefaultNextSession': 'Audio input will use System Default on the next recording session.',
  'settings.audioIo.status.inputChangedNextSession': 'Audio input will change on the next recording session.',
  'settings.audioIo.status.outputDefaultAfterRefresh': 'Audio output will use System Default after refresh.',
  'settings.audioIo.status.outputSavedRefreshRequired': 'Audio output device saved. Refresh the page to apply it.',
  'settings.audioIo.status.outputPromptUnsupported': 'This browser does not support prompting for audio output devices.',
  'settings.audioIo.status.outputSelectedRefreshRequired': 'Output device selected. Refresh the page to apply it.',
  'settings.audioIo.status.outputSelectionDenied': 'The browser did not allow selecting a non-default output device.',
  'settings.behavior.title': 'Behavior',
  'settings.behavior.editor': 'Editor',
  'settings.behavior.playheadUpdateFrequency': 'Playhead Update Frequency (fps)',
  'settings.behavior.playheadUpdateFrequencyHelp': 'Update frequency for the playhead animation during playback. Higher values (60 fps) provide smoother animation but use more CPU. Lower values (10 fps) are more efficient. Changes apply immediately without restart.',
  'settings.behavior.spectrogramHeightResolution': 'Spectrogram Height Resolution',
  'settings.behavior.spectrogramHeightResolutionHelp': 'Controls vertical spectrogram detail across the visible pitch range. Higher values sharpen pitch contours but use more CPU and memory while computing the spectrogram.',
  'settings.behavior.chatBox': 'Chat Box',
  'settings.behavior.openAtStartup': 'Open at Start Up',
  'settings.behavior.audio': 'Audio',
  'settings.behavior.lookaheadTime': 'Lookahead Time (ms)',
  'settings.behavior.lookaheadTimeHelp': 'Audio scheduling lookahead time (0-500ms). Lower values (10-20ms) reduce MIDI input latency but may cause audio glitches on slower systems. Higher values (100ms+) are better for playback stability. Changes apply immediately without restart.',
  'settings.behavior.playbackDelay': 'Playback Delay (ms)',
  'settings.behavior.playbackDelayHelp': 'Playback will start with a short delay after pressing the start button (0-500ms). Increasing this value might help stabilize playback, especially for the first few ticks if the lookahead value is too low. Changes apply immediately without restart.',
  'settings.behavior.midiAutomationInterpolation': 'MIDI Automation Interpolation',
  'settings.behavior.midiAutomationInterpolation.low': 'Low-end (20 ms)',
  'settings.behavior.midiAutomationInterpolation.balanced': 'Balanced (10 ms)',
  'settings.behavior.midiAutomationInterpolation.high': 'High quality (5 ms)',
  'settings.behavior.midiAutomationInterpolationHelp': 'Controls how densely MIDI automation are baked for playback and bounce. Smaller intervals sound smoother but schedule more events.',
  'settings.behavior.midiInputLatency': 'MIDI Input Latency (ms)',
  'settings.behavior.midiInputLatencyHelp': 'Timing correction for MIDI recording (0-500ms). If recorded notes appear slightly late compared to where you intended to play them, increase this value to match your MIDI device\'s input latency. Each note\'s position is shifted back by this amount when committed.',
  'settings.behavior.bounceStartsFromBeat1': 'Bounce Starts From Beat 1',
  'settings.behavior.bounceStartsFromBeat1Help': 'Yes includes leading silence from the start of the song up to the first rendered region when bouncing WAV/MP3. No trims that leading silence and starts bounce at the first rendered note or audio region.',
  'settings.behavior.captureAudioForScreenSharing': 'Capture Audio for Screen Sharing',
  'settings.behavior.captureAudioForScreenSharingHelp': 'Restart KGStudio (refresh the page) to take effect. Enable this option when KGStudio\'s audio cannot be captured during screen sharing in video calls (e.g., Zoom, Teams). This creates an additional audio stream that screen capture applications can detect.',
  'settings.behavior.captureAudioForScreenSharingWarning': 'It is important to make sure when screen sharing in Zoom, the "Share Sound" option is enabled.',
  'settings.behavior.validation.lookahead.invalidNumber': 'Lookahead time must be a valid number',
  'settings.behavior.validation.lookahead.range': 'Lookahead time must be between 0 and 0.5 seconds (0-500ms)',
  'settings.behavior.validation.playbackDelay.invalidNumber': 'Playback delay must be a valid number',
  'settings.behavior.validation.playbackDelay.range': 'Playback delay must be between 0 and 0.5 seconds (0-500ms)',
  'settings.behavior.validation.recordingOffset.invalidNumber': 'MIDI input latency must be a valid number',
  'settings.behavior.validation.recordingOffset.range': 'MIDI input latency must be between 0 and 0.5 seconds (0-500ms)',
  'settings.templates.title': 'Templates',
  'settings.templates.customInstructions': 'Custom Instructions',
  'settings.templates.placeholder': 'Please input your custom instructions for the K.G.Studio Musician Assistant',
  'settings.chordGuide.title': 'Chord Guide',
  'settings.chordGuide.resetToDefault': 'Reset to Default',
  'settings.chordGuide.group.major': 'Major Candidate Chords',
  'settings.chordGuide.group.minor': 'Minor Candidate Chords',
  'settings.chordGuide.help.major': 'Enter chords relative to C major. The app will transpose them automatically for other major key signatures.',
  'settings.chordGuide.help.minor': 'Enter chords relative to A minor. The app will transpose them automatically for other minor key signatures.',
  'settings.chordGuide.functionsAria': '{group} functions',
  'settings.chordGuide.addTitle': 'Add {group} chord',
  'settings.chordGuide.deleteSelectedRows': 'Delete selected rows',
  'settings.chordGuide.table.chord': 'Chord',
  'settings.chordGuide.table.notes': 'Notes',
  'settings.chordGuide.table.source': 'Source',
  'settings.chordGuide.table.note': 'Note',
  'settings.chordGuide.loadError': 'Failed to load chord guide settings.',
  'settings.chordGuide.invalidChordSymbol': 'Please enter a valid chord symbol. Example: Bm7b5',
  'settings.chordGuide.unsupportedChordSymbol': 'Unable to derive notes for this chord. Please use a supported chord symbol.',
  'dialog.title.notice': 'Notice',
  'dialog.title.timeSignature': 'Time Signature',
  'dialog.title.tempoDetection': 'Tempo Detection',
  'dialog.title.applyTempo': 'Apply Tempo',
  'dialog.title.chordDetection': 'Chord Detection',
  'dialog.title.input': 'Input',
  'dialog.title.confirm': 'Confirm',
  'dialog.close': 'Close dialog',
  'dialog.cancel': 'Cancel',
  'dialog.ok': 'OK',
  'dialog.experimentalFeature': 'Experimental Feature',
  'dialog.recommendedSource': 'Recommended Source Material',
  'dialog.chordHint.audio': 'Chord analysis is still experimental. Harmonic content, arrangement density, and transient-heavy material can affect accuracy. For more reliable results, start with the default settings, then refine sensitivity and stability until the detected harmony best matches the musical phrasing.',
  'dialog.chordHint.midi': 'Chord analysis is still experimental. Voicing density, overlaps, and ornamental notes can influence the result. For more reliable chord labels, begin with the default settings, then adjust note suppression and harmonic focus to match the musical role of the passage.',
  'dialog.chordHint.tempo': 'Tempo analysis is still experimental. Rubato phrasing, sparse transients, and layered percussion can reduce accuracy. Start with the default BPM range, then narrow the analysis window to the most plausible tempo span for the material if the first pass is not musically convincing.',
  'dialog.sourceHint.kgone': 'For the most dependable chord labels, analyze a stem with vocals and percussion reduced or removed. If K.G.One Music Studio server integration is available, run Separator with the "Vocal, Drums, Bass, Guitar, Piano, and Others" model and use the Piano or Others stem for analysis.',
  'dialog.sourceHint.local': 'For the most dependable chord labels, analyze a stem with vocals and percussion reduced or removed. If you are using the local separator, choose the "Vocal, Drums, Bass, and Others" model and use the Others stem for analysis.',
  'dialog.label.sensitivity': 'Sensitivity',
  'dialog.label.stability': 'Stability',
  'dialog.label.noChordThreshold': 'No-Chord Threshold',
  'dialog.label.enableSevenths': 'Chord Detail: Enable sevenths',
  'dialog.label.shortNotes': 'Short Notes',
  'dialog.option.suppressionLow': 'Low suppression',
  'dialog.option.suppressionMedium': 'Medium suppression',
  'dialog.option.suppressionHigh': 'High suppression',
  'dialog.label.harmonicFocus': 'Harmonic Focus',
  'dialog.option.harmonicBalanced': 'Balanced',
  'dialog.option.harmonicSustained': 'Favor sustained notes',
  'dialog.label.minimumBpm': 'Minimum BPM',
  'dialog.label.maximumBpm': 'Maximum BPM',
  'dialog.label.autoAlignRegionToBeat': 'Auto-align region to beat',
  'dialog.message.chordDetection': 'Tune audio chord detection settings before processing.',
  'dialog.message.tempoDetection': 'Tune audio tempo detection settings before processing.',
  'dialog.message.tempoApply': 'Detected tempo: {bpm} BPM. Choose how to apply it.\n\nUpdate Current Tempo changes the active tempo at this clip location. Insert Tempo Change adds a new tempo region at the nearest bar before the clip starts.',
  'dialog.action.updateCurrentTempo': 'Update Current Tempo',
  'dialog.action.insertTempoChange': 'Insert Tempo Change',
  'eventList.title': 'Event List',
  'eventList.scopeTabs': 'Event list scopes',
  'eventList.scope.region': 'Region',
  'eventList.scope.track': 'Track',
  'eventList.scope.global': 'Global',
  'eventList.deleteVisibleSelectedRows': 'Delete visible selected rows',
  'eventList.table.position': 'Position',
  'eventList.table.status': 'Status',
  'eventList.table.num': 'Num',
  'eventList.table.val': 'Val',
  'eventList.table.lengthInfo': 'Length/Info',
  'eventList.region.filters': 'Region event filters',
  'eventList.region.filter.notes': 'Notes',
  'eventList.region.filter.pitchBends': 'Pitch Bends',
  'eventList.region.filter.controller': 'Controller',
  'eventList.region.empty': 'Please select a MIDI region, or open one in the Piano Roll, to view its event list.',
  'eventList.region.add.label': 'Add',
  'eventList.region.add.noteTitle': 'Add note at playhead',
  'eventList.region.add.pitchBendTitle': 'Add pitch bend at playhead',
  'eventList.region.add.controllerTitle': 'Add controller event at playhead',
  'eventList.region.addType.note': 'Note',
  'eventList.region.addType.pitchBend': 'Pitch Bend',
  'eventList.region.addType.controller': 'Controller',
  'eventList.region.status.note': 'Note',
  'eventList.region.status.pitchBend': 'Pitch Bend',
  'eventList.region.status.controller': 'Controller',
  'eventList.track.filters': 'Track list modes',
  'eventList.track.filter.regions': 'Regions',
  'eventList.track.filter.volume': 'Volume',
  'eventList.track.filter.pan': 'Pan',
  'eventList.track.empty': 'Please select a track to view regions and track automation.',
  'eventList.track.add.label': 'Add',
  'eventList.track.add.midiRegionTitle': 'Add MIDI region at playhead',
  'eventList.track.add.volumeTitle': 'Add volume automation point at playhead',
  'eventList.track.add.panTitle': 'Add pan automation point at playhead',
  'eventList.track.addType.midiRegion': 'MIDI Region',
  'eventList.track.status.audio': 'Audio',
  'eventList.track.status.midi': 'MIDI',
  'eventList.track.status.volume': 'Volume',
  'eventList.track.status.pan': 'Pan',
  'eventList.global.filters': 'Global event filters',
  'eventList.global.filter.marker': 'Marker',
  'eventList.global.filter.tempo': 'Tempo',
  'eventList.global.filter.keySignature': 'Key Sig.',
  'eventList.global.filter.chord': 'Chord',
  'eventList.global.add.label': 'Add',
  'eventList.global.add.markerTitle': 'Add marker region at playhead',
  'eventList.global.add.tempoTitle': 'Add tempo region at playhead',
  'eventList.global.add.keySignatureTitle': 'Add key signature region at playhead',
  'eventList.global.add.chordTitle': 'Add chord region at playhead',
  'eventList.global.addType.marker': 'Marker',
  'eventList.global.addType.tempo': 'Tempo',
  'eventList.global.addType.keySignature': 'Key Signature',
  'eventList.global.addType.chord': 'Chord',
  'eventList.global.status.marker': 'Marker',
  'eventList.global.status.tempo': 'Tempo',
  'eventList.global.status.keySignature': 'Key Signature',
  'eventList.global.status.chord': 'Chord',
  'eventList.global.validation.marker': 'Please enter a marker label. Expected a non-empty text label. Example: Intro',
  'eventList.global.validation.tempo': 'Please enter a BPM value using digits only. Expected a whole number between {min} and {max}. Example: 128',
  'eventList.global.validation.keySignature': 'Please enter one exact key signature name. Expected a canonical value such as "C major" or "F# minor". Example: F# minor',
  'eventList.global.validation.chord': 'Please enter a valid chord symbol. Expected a chord representation the app can parse. Example: Bm7b5',
  'eventList.global.validation.position': 'Please enter a position at or after the start of the project. Expected a non-negative location. Example: 1 1 0',
  'eventList.global.validation.length': 'Please enter a positive length. Expected a duration greater than zero. Example: 4 0',
  'globalTracks.label': 'Global tracks',
  'globalTracks.marker': 'Marker',
  'globalTracks.tempo': 'Tempo',
  'globalTracks.signature': 'Key Signature',
  'globalTracks.chord': 'Chord',
  'globalTracks.addItem': 'Add {label} global track item',
  'pianoRoll.power.linear': 'Linear',
  'pianoRoll.power.sqrtDefault': '√ (default)',
  'pianoRoll.power.mild': 'Mild',
  'pianoRoll.power.strong': 'Strong',
  'pianoRoll.chordGuide.off': 'Chord guide off',
  'pianoRoll.chordGuide.tonic': 'Chord guide tonic',
  'pianoRoll.chordGuide.subdominant': 'Chord guide subdominant',
  'pianoRoll.chordGuide.dominant': 'Chord guide dominant',
  'pianoRoll.spectrogramView': 'Spectrogram View',
  'pianoRoll.sheetMusicView': 'Sheet Music View',
  'pianoRoll.pointerTool': 'Pointer Tool',
  'pianoRoll.pencilTool': 'Pencil Tool',
  'pianoRoll.toggleAutomationLane': 'Toggle automation lane',
  'pianoRoll.automation': 'Automation',
  'pianoRoll.automationLane': '{label} automation lane',
  'pianoRoll.automationType.pitchBend': 'Pitch Bend',
  'pianoRoll.automationType.cc1': 'CC1',
  'pianoRoll.automationType.cc2': 'CC2',
  'pianoRoll.automationType.cc7': 'CC7',
  'pianoRoll.automationType.cc11': 'CC11',
  'pianoRoll.automationType.cc64': 'CC64',
  'pianoRoll.mode': 'Mode',
  'pianoRoll.modeOption.ionian': 'Ionian',
  'pianoRoll.modeOption.dorian': 'Dorian',
  'pianoRoll.modeOption.phrygian': 'Phrygian',
  'pianoRoll.modeOption.lydian': 'Lydian',
  'pianoRoll.modeOption.mixolydian': 'Mixolydian',
  'pianoRoll.modeOption.aeolian': 'Aeolian',
  'pianoRoll.modeOption.locrian': 'Locrian',
  'pianoRoll.modeOption.harmonic_minor': 'Harmonic Minor',
  'pianoRoll.modeOption.melodic_minor': 'Melodic Minor',
  'pianoRoll.modeOption.phrygian_dominant': 'Phrygian Dominant',
  'pianoRoll.modeOption.harmonic_major': 'Harmonic Major',
  'pianoRoll.chordGuide': 'Chord guide',
  'pianoRoll.sheetQuantization': 'Sheet Quant.',
  'pianoRoll.snap': 'Snap',
  'pianoRoll.snap.none': 'NO SNAP',
  'pianoRoll.quantizePositionCompact': 'Qua. Pos.',
  'pianoRoll.quantizeLengthCompact': 'Qua. Len.',
  'pianoRoll.floor': 'Floor',
  'pianoRoll.curve': 'Curve',
  'pianoRoll.zoom': 'Zoom',
  'pianoRoll.moreOptions': 'More options',
  'pianoRoll.quantize.1/1': '1/1',
  'pianoRoll.quantize.1/2': '1/2',
  'pianoRoll.quantize.1/3': '1/3',
  'pianoRoll.quantize.1/4': '1/4',
  'pianoRoll.quantize.1/6': '1/6',
  'pianoRoll.quantize.1/8': '1/8',
  'pianoRoll.quantize.1/12': '1/12',
  'pianoRoll.quantize.1/16': '1/16',
  'pianoRoll.quantize.1/24': '1/24',
  'pianoRoll.quantize.1/32': '1/32',
  'pianoRoll.showActiveRegionOnly': 'Show Active Region Only',
  'pianoRoll.showEntireTrack': 'Show Entire Track',
  'pianoRoll.detectChords': 'Detect chords...',
  'pianoRoll.detectingChords': 'Detecting chords...',
  'pianoRoll.detectTempo': 'Detect tempo...',
  'pianoRoll.detectingTempo': 'Detecting tempo...',
  'percussion.short.35': 'Ac.Bass',
  'percussion.short.36': 'BassDrum',
  'percussion.short.37': 'SideStick',
  'percussion.short.38': 'Ac.Snare',
  'percussion.short.39': 'HandClap',
  'percussion.short.40': 'ElecSnare',
  'percussion.short.41': 'LowFloor',
  'percussion.short.42': 'ClosedHH',
  'percussion.short.43': 'HighFloor',
  'percussion.short.44': 'PedalHH',
  'percussion.short.45': 'LowTom',
  'percussion.short.46': 'OpenHH',
  'percussion.short.47': 'LowMidTom',
  'percussion.short.48': 'HiMidTom',
  'percussion.short.49': 'Crash1',
  'percussion.short.50': 'HighTom',
  'percussion.short.51': 'Ride1',
  'percussion.short.52': 'Chinese',
  'percussion.short.53': 'RideBell',
  'percussion.short.54': 'Tambourine',
  'percussion.short.55': 'Splash',
  'percussion.short.56': 'Cowbell',
  'percussion.short.57': 'Crash2',
  'percussion.short.58': 'Vibraslap',
  'percussion.short.59': 'Ride2',
  'percussion.short.60': 'HiBongo',
  'percussion.short.61': 'LowBongo',
  'percussion.short.62': 'MuteHiCon',
  'percussion.short.63': 'OpenHiCon',
  'percussion.short.64': 'LowConga',
  'percussion.short.65': 'HighTimba',
  'percussion.short.66': 'LowTimba',
  'percussion.short.67': 'HighAgo',
  'percussion.short.68': 'LowAgo',
  'percussion.short.69': 'Cabasa',
  'percussion.short.70': 'Maracas',
  'percussion.short.71': 'ShortWhis',
  'percussion.short.72': 'LongWhis',
  'percussion.short.73': 'ShortGui',
  'percussion.short.74': 'LongGui',
  'percussion.short.75': 'Claves',
  'percussion.short.76': 'HiWood',
  'percussion.short.77': 'LowWood',
  'percussion.short.78': 'MuteCuica',
  'percussion.short.79': 'OpenCuica',
  'percussion.short.80': 'MuteTri',
  'percussion.short.81': 'OpenTri',
  'percussion.full.35': 'Acoustic Bass Drum',
  'percussion.full.36': 'Bass Drum 1',
  'percussion.full.37': 'Side Stick',
  'percussion.full.38': 'Acoustic Snare',
  'percussion.full.39': 'Hand Clap',
  'percussion.full.40': 'Electric Snare',
  'percussion.full.41': 'Low Floor Tom',
  'percussion.full.42': 'Closed Hi Hat',
  'percussion.full.43': 'High Floor Tom',
  'percussion.full.44': 'Pedal Hi-Hat',
  'percussion.full.45': 'Low Tom',
  'percussion.full.46': 'Open Hi-Hat',
  'percussion.full.47': 'Low-Mid Tom',
  'percussion.full.48': 'Hi Mid Tom',
  'percussion.full.49': 'Crash Cymbal 1',
  'percussion.full.50': 'High Tom',
  'percussion.full.51': 'Ride Cymbal 1',
  'percussion.full.52': 'Chinese Cymbal',
  'percussion.full.53': 'Ride Bell',
  'percussion.full.54': 'Tambourine',
  'percussion.full.55': 'Splash Cymbal',
  'percussion.full.56': 'Cowbell',
  'percussion.full.57': 'Crash Cymbal 2',
  'percussion.full.58': 'Vibraslap',
  'percussion.full.59': 'Ride Cymbal 2',
  'percussion.full.60': 'Hi Bongo',
  'percussion.full.61': 'Low Bongo',
  'percussion.full.62': 'Mute Hi Conga',
  'percussion.full.63': 'Open Hi Conga',
  'percussion.full.64': 'Low Conga',
  'percussion.full.65': 'High Timbale',
  'percussion.full.66': 'Low Timbale',
  'percussion.full.67': 'High Agogo',
  'percussion.full.68': 'Low Agogo',
  'percussion.full.69': 'Cabasa',
  'percussion.full.70': 'Maracas',
  'percussion.full.71': 'Short Whistle',
  'percussion.full.72': 'Long Whistle',
  'percussion.full.73': 'Short Guiro',
  'percussion.full.74': 'Long Guiro',
  'percussion.full.75': 'Claves',
  'percussion.full.76': 'Hi Wood Block',
  'percussion.full.77': 'Low Wood Block',
  'percussion.full.78': 'Mute Cuica',
  'percussion.full.79': 'Open Cuica',
  'percussion.full.80': 'Mute Triangle',
  'percussion.full.81': 'Open Triangle',
  'toolbar.export.kgstudio': 'Export to KGStudio file',
  'toolbar.export.midi': 'Export to MIDI file',
  'toolbar.export.wav': 'Export to WAV',
  'toolbar.export.mp3': 'Export to MP3',
  'toolbar.projectName.prompt': 'Enter project name:',
  'toolbar.projectName.invalid': 'Invalid project name. Only letters, numbers, spaces, hyphens, underscores, periods, and parentheses are allowed.',
  'toolbar.projectName.reserved': '"{name}" is a reserved project name. Please choose a different name.',
  'toolbar.projectName.overwrite': 'Project "{name}" already exists. Do you want to overwrite it?',
  'toolbar.projectName.renameOrCopy': 'Would you like to rename this project, or save it as a new copy?',
  'toolbar.projectName.saveAsCopy': 'Save as Copy',
  'toolbar.projectName.rename': 'Rename',
  'toolbar.save.error': 'An error occurred while saving: {error}',
  'toolbar.load.error': 'An error occurred while loading the project: {error}',
  'toolbar.newProject.confirm': 'Are you sure you want to create a new project? Any unsaved changes will be lost.',
  'toolbar.project.notFound': 'Project "{name}" not found.',
  'toolbar.openProject.confirm': 'Open this project? Any unsaved changes in the current project will be lost.',
  'toolbar.status.loadFailed': 'Failed to load project: {error}',
  'toolbar.status.newProjectCreated': 'New project "{name}" created',
  'toolbar.status.projectLoaded': '{description} loaded successfully',
  'toolbar.status.projectExportedKgstudio': 'Project "{name}" exported as KGStudio file',
  'toolbar.status.exportProjectError': 'Error exporting project: {error}',
  'toolbar.export.failedProject': 'Failed to export project: {error}',
  'toolbar.status.projectExportedMidi': 'Project "{name}" exported as MIDI file',
  'toolbar.status.exportMidiError': 'Error exporting MIDI: {error}',
  'toolbar.export.failedMidi': 'Failed to export project as MIDI: {error}',
  'toolbar.status.projectExportedWav': 'Project "{name}" exported as WAV file',
  'toolbar.status.exportWavError': 'Error exporting WAV: {error}',
  'toolbar.export.failedWav': 'Failed to export project as WAV: {error}',
  'toolbar.status.projectExportedMp3': 'Project "{name}" exported as MP3 file',
  'toolbar.status.exportMp3Error': 'Error exporting MP3: {error}',
  'toolbar.export.failedMp3': 'Failed to export project as MP3: {error}',
  'toolbar.status.importFailed': 'Failed to import file: {error}',
  'toolbar.import.failedProjectFile': 'Failed to import project file: {error}',
  'toolbar.import.corruptedKgstudio': 'The .kgstudio file is corrupted or invalid: {error}',
  'toolbar.status.importingMidi': 'Importing MIDI file "{name}"...',
  'toolbar.status.failedImportMidi': 'Failed to import MIDI file: {error}',
  'toolbar.status.playbackFailedStart': 'Playback failed to start',
  'toolbar.status.recordingStoppedCommitted': 'Recording stopped - notes committed',
  'toolbar.status.failedStopPlayback': 'Failed to stop playback',
  'toolbar.maxBars.prompt': 'Enter new max bars (>= {min}):',
  'toolbar.input.invalidNumber': 'Invalid input. Please enter a valid number.',
  'toolbar.maxBars.invalid': 'Invalid value. Please enter a number >= {min}.',
  'toolbar.status.maxBarsChanged': 'Max bars changed to {value}',
  'toolbar.bpm.prompt': 'Enter new BPM ({min}-{max}):',
  'toolbar.bpm.invalid': 'Invalid BPM. Please enter a value between {min} and {max}.',
  'toolbar.status.bpmChanged': 'BPM changed to {value}',
  'toolbar.timeSignature.prompt': 'Set the time signature:',
  'toolbar.status.timeSignatureChanged': 'Time signature changed to {value}',
  'toolbar.status.keySignatureChanged': 'Key signature changed to {value}',
  'toolbar.status.copied': 'Items copied to clipboard',
  'toolbar.status.copyNone': 'No items selected to copy',
  'toolbar.status.pasted': 'Items pasted from clipboard',
  'toolbar.status.pasteFailed': 'Cannot paste - no valid clipboard content or context',
  'toolbar.status.deleted': 'Selected regions deleted',
  'toolbar.status.deleteNone': 'No regions selected for deletion',
  'toolbar.undo.none': 'Nothing to undo',
  'toolbar.redo.none': 'Nothing to redo',
  'toolbar.status.undid': 'Undid: {description}',
  'toolbar.status.redid': 'Redid: {description}',
  'toolbar.action': 'action',
  'toolbar.status.chatToggled': 'Chat toggled',
  'toolbar.status.settingsToggled': 'Settings toggled',
  'toolbar.pianoRoll.selectMidiRegion': 'Please select a MIDI region to open the Piano Roll.',
  'toolbar.status.recordingStopped': 'Recording stopped',
  'toolbar.status.audioRecordingStarted': 'Audio recording started...',
  'toolbar.recording.openMidiRegion': 'Please open a MIDI region in the Piano Roll before starting recording.',
  'toolbar.recording.selectMidiRegion': 'Please select a MIDI region before starting recording.',
  'toolbar.recording.noMidiDevice': 'No MIDI device detected. Please connect a MIDI keyboard and try again.',
  'toolbar.status.recordingStarted': 'Recording started...',
  'toolbar.button.new': 'New',
  'toolbar.button.load': 'Load',
  'toolbar.button.save': 'Save',
  'toolbar.button.export': 'Export',
  'toolbar.button.import': 'Import',
  'toolbar.button.settings': 'Settings',
  'toolbar.button.undo': 'Undo',
  'toolbar.button.redo': 'Redo',
  'toolbar.button.select': 'Select',
  'toolbar.button.pencil': 'Pencil',
  'toolbar.button.splitRegion': 'Split Region at Playhead',
  'toolbar.button.mergeRegions': 'Merge Selected MIDI Regions',
  'toolbar.button.snapToGrid': 'Snap to Grid',
  'toolbar.button.copy': 'Copy',
  'toolbar.button.paste': 'Paste',
  'toolbar.button.delete': 'Delete',
  'toolbar.button.backToBeginning': 'Back to beginning',
  'toolbar.button.play': 'Play',
  'toolbar.button.pause': 'Pause',
  'toolbar.button.stopRecording': 'Stop Recording',
  'toolbar.button.record': 'Record',
  'toolbar.button.loop': 'Loop',
  'toolbar.button.metronome': 'Metronome',
  'toolbar.button.piano': 'Piano',
  'toolbar.button.kgone': 'K.G.One Music Generator',
  'toolbar.button.chat': 'Chat',
  'toolbar.button.eventList': 'Event List Editor',
  'track.controls.automationButton': 'Track automation',
  'track.controls.automationDropdown': 'Automation',
  'track.controls.automation.volume': 'Volume',
  'track.controls.automation.pan': 'Pan',
  'track.controls.settingsDropdown': 'Settings',
  'track.controls.settings.deleteTrack': 'Delete Track',
  'toolbar.keySignatureChooser': 'Choose key signature, current {value}',
  'toolbar.export.label': 'Export',
  'toolbar.importProject.title': 'Import Project',
  'toolbar.importProject.description': 'Drag and drop your project file here',
  'toolbar.openingProject': 'Opening project...',
  'fileImport.invalidType': 'Invalid file type. Please select a file with one of these extensions: {extensions}',
  'fileImport.close': 'Close import modal',
  'fileImport.supportedFormats': 'Supported formats: {formats}',
  'fileImport.or': 'or',
  'fileImport.browse': 'Browse Files',
  'instrument.group.PIANO_AND_KEYBOARDS': 'Piano and Keyboards',
  'instrument.group.GUITAR': 'Guitar',
  'instrument.group.BASS': 'Bass',
  'instrument.group.STRINGS': 'Strings',
  'instrument.group.BRASS': 'Brass',
  'instrument.group.WOODWIND': 'Woodwind',
  'instrument.group.PERCUSSION_KIT': 'Percussion Kit',
  'instrument.group.SYNTH': 'Synthesizer',
  'instrument.name.acoustic_grand_piano': 'Acoustic Grand Piano',
  'instrument.name.bright_acoustic_piano': 'Bright Acoustic Piano',
  'instrument.name.electric_grand_piano': 'Electric Grand Piano',
  'instrument.name.electric_piano_1': 'Electric Piano 1',
  'instrument.name.electric_piano_2': 'Electric Piano 2',
  'instrument.name.drawbar_organ': 'Drawbar Organ',
  'instrument.name.clavinet': 'Clavinet',
  'instrument.name.harpsichord': 'Harpsichord',
  'instrument.name.accordion': 'Accordion',
  'instrument.name.acoustic_guitar_nylon': 'Acoustic Guitar (nylon)',
  'instrument.name.acoustic_guitar_steel': 'Acoustic Guitar (steel)',
  'instrument.name.electric_guitar_clean': 'Electric Guitar (clean)',
  'instrument.name.overdriven_guitar': 'Electric Guitar (overdrive)',
  'instrument.name.distortion_guitar': 'Electric Guitar (distortion)',
  'instrument.name.acoustic_bass': 'Acoustic Bass',
  'instrument.name.electric_bass_finger': 'Electric Bass (finger)',
  'instrument.name.electric_bass_pick': 'Electric Bass (picked)',
  'instrument.name.slap_bass_1': 'Slap Bass',
  'instrument.name.synth_bass_1': 'Synth Bass 1',
  'instrument.name.violin': 'Violin',
  'instrument.name.viola': 'Viola',
  'instrument.name.cello': 'Cello',
  'instrument.name.contrabass': 'Contrabass',
  'instrument.name.string_ensemble_1': 'String Ensemble',
  'instrument.name.string_ensemble_2': 'String Ensemble 2',
  'instrument.name.pizzicato_strings': 'Pizzicato Strings',
  'instrument.name.tremolo_strings': 'Tremolo Strings',
  'instrument.name.orchestral_harp': 'Orchestral Harp',
  'instrument.name.trumpet': 'Trumpet',
  'instrument.name.trombone': 'Trombone',
  'instrument.name.tuba': 'Tuba',
  'instrument.name.french_horn': 'French Horn',
  'instrument.name.brass_section': 'Brass Section',
  'instrument.name.soprano_sax': 'Soprano Sax',
  'instrument.name.alto_sax': 'Alto Sax',
  'instrument.name.tenor_sax': 'Tenor Sax',
  'instrument.name.baritone_sax': 'Baritone Sax',
  'instrument.name.oboe': 'Oboe',
  'instrument.name.english_horn': 'English Horn',
  'instrument.name.bassoon': 'Bassoon',
  'instrument.name.clarinet': 'Clarinet',
  'instrument.name.piccolo': 'Piccolo',
  'instrument.name.flute': 'Flute',
  'instrument.name.shakuhachi': 'Shakuhachi',
  'instrument.name.harmonica': 'Harmonica',
  'instrument.name.standard': 'Standard Drum Kit',
  'instrument.name.orchestra_kit': 'Orchestra Drum Kit',
  'instrument.name.marimba': 'Marimba',
  'instrument.name.timpani': 'Timpani',
  'instrument.name.taiko_drum': 'Taiko Drum',
  'instrument.name.woodblock': 'Woodblock',
  'instrument.name.lead_1_square': 'Lead 1 (square)',
  'instrument.name.lead_2_sawtooth': 'Lead 2 (sawtooth)',
  'instrument.name.pad_1_new_age': 'Pad 1 (new age)',
  'instrument.name.pad_2_warm': 'Pad 2 (warm)',
  'instrument.name.pad_3_polysynth': 'Pad 3 (polysynth)',
  'instrument.name.pad_4_choir': 'Pad 4 (choir)',
  'instrument.name.pad_5_bowed': 'Pad 5 (bowed glass)',
  'instrument.name.pad_6_metallic': 'Pad 6 (metallic)',
  'instrument.name.pad_7_halo': 'Pad 7 (halo)',
  'instrument.name.pad_8_sweep': 'Pad 8 (sweep)',
  'instrument.name.fx_1_rain': 'FX 1 (rain)',
  'instrument.name.fx_2_soundtrack': 'FX 2 (soundtrack)',
  'instrument.name.fx_3_crystal': 'FX 3 (crystal)',
  'instrument.name.fx_4_atmosphere': 'FX 4 (atmosphere)',
  'instrument.name.fx_5_brightness': 'FX 5 (brightness)',
  'instrument.name.fx_6_goblins': 'FX 6 (goblins)',
  'instrument.name.fx_7_echoes': 'FX 7 (echoes)',
  'instrument.name.fx_8_scifi': 'FX 8 (sci-fi)',
  // ─── K.G.One / Music Generator Panel ─────────────────────────────────────────
  'kgone.panel.title.server': 'K.G.One Music Generator',
  'kgone.panel.title.local': 'Music Generator',
  'kgone.tab.fullSong': 'Full Song',
  'kgone.tab.remix': 'Remix',
  'kgone.tab.repaint': 'Repaint',
  'kgone.tab.separator': 'Separator',
  'kgone.tab.requiresServer': 'Requires K.G.One Music Studio server integration',
  // Shared across tabs
  'kgone.shared.advancedSettings': 'Advanced Settings',
  'kgone.shared.caption': 'Caption',
  'kgone.shared.lyrics': 'Lyrics',
  'kgone.shared.lyricsPlaceholder': '[Verse 1]\nYour lyrics here...\n\n[Chorus]\n...',
  'kgone.shared.instrumental': 'Instrumental (no vocals)',
  'kgone.shared.inferenceSteps': 'Inference Steps',
  'kgone.shared.guidanceScale': 'Guidance Scale',
  'kgone.shared.useRandomSeed': 'Use Random Seed',
  'kgone.shared.seed': 'Seed',
  'kgone.shared.thinking': 'Thinking (CoT metadata generation)',
  'kgone.shared.selectedRegion': 'Selected Region',
  'kgone.shared.track': 'Track',
  'kgone.shared.poweredBy': 'Powered by ',
  'kgone.shared.btn.loadingModel': 'Loading model...',
  'kgone.shared.btn.generating': 'Generating...',
  'kgone.shared.btn.processing': 'Processing...',
  'kgone.shared.btn.downloading': 'Downloading...',
  'kgone.shared.btn.preparingUpload': 'Preparing upload...',
  'kgone.shared.btn.importing': 'Importing...',
  'kgone.shared.hint.loadingModel': 'Loading model — this can take 60+ seconds, please wait...',
  'kgone.shared.hint.submitting': 'Submitting generation request...',
  'kgone.shared.hint.downloadingAudio': 'Downloading audio...',
  // Clip tab
  'kgone.clip.field.prompt': 'Prompt',
  'kgone.clip.field.promptPlaceholder': 'e.g. Gritty, Acid, Bassline, 303, Synth Lead, FM, Sub, Upper Mids, High Phaser, High Reverb, Pitch Bend, 8 Bars, 140 BPM, E minor',
  'kgone.clip.field.promptHint': 'Describe the clip with comma-separated tags: instrument family, sub-type, timbre, FX, bars, BPM, key.',
  'kgone.clip.field.negativePrompt': 'Negative Prompt',
  'kgone.clip.field.negativePromptPlaceholder': 'e.g. distortion, noise',
  'kgone.clip.field.bars': 'Bars',
  'kgone.clip.field.bars4': '4 Bars',
  'kgone.clip.field.bars8': '8 Bars',
  'kgone.clip.field.note': 'Note',
  'kgone.clip.field.scale': 'Scale',
  'kgone.clip.field.scaleMajor': 'Major',
  'kgone.clip.field.scaleMinor': 'Minor',
  'kgone.clip.field.bpm': 'BPM',
  'kgone.clip.field.steps': 'Steps',
  'kgone.clip.field.cfgScale': 'CFG Scale',
  'kgone.clip.field.seedLabel': 'Seed (-1 = random)',
  'kgone.clip.field.samplerType': 'Sampler Type',
  'kgone.clip.field.sigmaMin': 'Sigma Min',
  'kgone.clip.field.sigmaMax': 'Sigma Max',
  'kgone.clip.field.cfgRescale': 'CFG Rescale',
  'kgone.clip.hint.generating': 'Generating clip...',
  'kgone.clip.hint.drag': 'Drag the player above to a track to import the clip. Drop onto an <strong>audio track</strong> to import as a WAV region (recommended), or onto a <strong>MIDI track</strong> to import as a MIDI region. Note: MIDI is transcribed from the audio and may not be perfectly accurate.',
  'kgone.clip.btn.generate': 'Generate Clip',
  'kgone.clip.poweredBy': 'Foundation-1',
  // Full Song tab
  'kgone.fullSong.field.captionPlaceholder': 'e.g. Genre: Eurodance, 90s dance-pop, upbeat electronic. Style: Catchy, energetic... Tempo: ~130 BPM. Instrumentation: driving kick drum, eurodance bassline...',
  'kgone.fullSong.field.captionHint': 'Describe the song style, mood, tempo, instrumentation, and structure in natural language.',
  'kgone.fullSong.field.lyricsHint': 'Use [Intro], [Verse], [Chorus], [Bridge] tags to mark sections.',
  'kgone.fullSong.hint.generating': 'Generating...',
  'kgone.fullSong.hint.generatingProgress': 'Generating... {pct}% — {stage}',
  'kgone.fullSong.hint.generatingProgressNoStage': 'Generating... {pct}%',
  'kgone.fullSong.hint.drag': 'Drag the player above to an <strong>audio track</strong> to import the song. Dropping onto a MIDI track is not supported for full song generation.',
  'kgone.fullSong.btn.generate': 'Generate Song',
  'kgone.fullSong.poweredBy': 'ACE-Step 1.5',
  // Remix tab
  'kgone.remix.field.captionPlaceholder': 'e.g. Genre: Jazz, Style: Smooth and mellow, Instrumentation: piano, upright bass, brushed drums...',
  'kgone.remix.field.captionHint': 'Describe the target style, mood, and instrumentation for the remix.',
  'kgone.remix.field.lyricsHint': 'Leave empty to keep the original lyrics, or provide new ones. Use [Verse], [Chorus], [Bridge] tags.',
  'kgone.remix.field.coverStrength': 'Cover Strength',
  'kgone.remix.field.coverStrengthHint': '0 = creative, 1 = faithful to source structure',
  'kgone.remix.field.noiseStrength': 'Noise Strength',
  'kgone.remix.field.noiseStrengthHint': '0 = pure style transfer, 0.1–0.25 recommended',
  'kgone.remix.hint.submitting': 'Submitting remix request...',
  'kgone.remix.hint.generating': 'Generating remix...',
  'kgone.remix.hint.generatingProgress': 'Generating remix... {pct}% — {stage}',
  'kgone.remix.hint.generatingProgressNoStage': 'Generating remix... {pct}%',
  'kgone.remix.hint.drag': 'Drag the player above to an <strong>audio track</strong> to import the remix.',
  'kgone.remix.hint.noRegion': 'Select an audio region on the timeline to remix it. Only audio regions are supported — MIDI regions cannot be remixed.',
  'kgone.remix.btn.generate': 'Generate Remix',
  'kgone.remix.btn.processingRemix': 'Processing remix...',
  'kgone.remix.btn.importAligned': 'Import Aligned to Source',
  'kgone.remix.poweredBy': 'ACE-Step 1.5',
  // Repaint tab
  'kgone.repaint.field.repaintRange': 'Repaint Range',
  'kgone.repaint.field.loopModeOff': 'Loop mode is off. Enable the loop button on the toolbar and set a loop range to define the repaint window.',
  'kgone.repaint.field.start': 'Start',
  'kgone.repaint.field.end': 'End',
  'kgone.repaint.field.untilEnd': 'until end of audio',
  'kgone.repaint.field.captionPlaceholder': 'e.g. Genre: Jazz, Style: Smooth and mellow, Instrumentation: piano, upright bass, brushed drums...',
  'kgone.repaint.field.captionHint': 'Describe the target style and instrumentation for the repainted section.',
  'kgone.repaint.field.lyricsHint': 'Leave empty to keep the original lyrics, or provide new ones for the repainted section.',
  'kgone.repaint.field.repaintStrength': 'Repaint Strength',
  'kgone.repaint.field.repaintStrengthHint': '0 = preserve original, 1 = full regeneration',
  'kgone.repaint.hint.submitting': 'Submitting repaint request...',
  'kgone.repaint.hint.generating': 'Generating repaint...',
  'kgone.repaint.hint.generatingProgress': 'Generating repaint... {pct}% — {stage}',
  'kgone.repaint.hint.generatingProgressNoStage': 'Generating repaint... {pct}%',
  'kgone.repaint.hint.drag': 'Drag the player above to an <strong>audio track</strong> to import the repaint.',
  'kgone.repaint.hint.noRegion': 'Select an audio region on the timeline to repaint it. Only audio regions are supported — MIDI regions cannot be repainted.',
  'kgone.repaint.btn.generate': 'Generate Repaint',
  'kgone.repaint.btn.processingRepaint': 'Processing repaint...',
  'kgone.repaint.btn.importAligned': 'Import Aligned to Source',
  'kgone.repaint.poweredBy': 'ACE-Step 1.5',
  // Separator tab
  'kgone.separator.field.separationModel': 'Separation Model',
  'kgone.separator.field.chunkDuration': 'Optional audio chunk duration (seconds)',
  'kgone.separator.field.chunkDurationPlaceholder': 'Leave blank to process the full region',
  'kgone.separator.field.modelOverlap': 'Model overlap',
  'kgone.separator.hint.drag': 'Drag each stem player above to an <strong>audio track</strong> to import it. Dropping onto a MIDI track is not supported for stem separation.',
  'kgone.separator.hint.noRegion.download': 'Download {model}, then select an audio region on the timeline to extract stems from it.',
  'kgone.separator.hint.noRegion.select': 'Select an audio region on the timeline to extract stems from it. Only audio regions are supported — MIDI regions cannot be separated.',
  'kgone.separator.btn.separateStems': 'Separate Stems',
  'kgone.separator.btn.importAllStems': 'Import All Stems to Timeline',
  'kgone.separator.poweredBy': 'UVR5 CLI',
  'kgone.separator.model.vocalInstMedium': 'Vocal and Instrument (Medium Accuracy)',
  'kgone.separator.model.vocalInstHigh': 'Vocal and Instrument (High Accuracy)',
  'kgone.separator.model.6stem': 'Vocal, Drums, Bass, Guitar, Piano, and Others',
  'kgone.separator.model.htdemucs4s': 'Vocal, Drums, Bass, and Others',
  'kgone.separator.btn.server.loadingModel': 'Loading model...',
  'kgone.separator.btn.server.generating': 'Preparing upload...',
  'kgone.separator.btn.server.polling': 'Separating stems...',
  'kgone.separator.btn.server.downloading': 'Downloading...',
  'kgone.separator.btn.local.loadingModel': 'Preparing local model...',
  'kgone.separator.btn.local.generating': 'Preparing audio...',
  'kgone.separator.btn.local.polling': 'Separating locally...',
  'kgone.separator.btn.local.downloading': 'Finalizing...',
  'kgone.separator.local.title': 'Local Separator Mode',
  'kgone.separator.local.description': 'If K.G.One Music Studio is unavailable, Local Separator Mode provides a built-in alternative for extracting stems directly in your browser. Two local models are available: Vocal and Instrument (Medium Accuracy), and Vocal, Drums, Bass, and Others. Download status below reflects the currently selected model. Vocal and Instrument (Medium Accuracy) usually takes longer to process than Vocal, Drums, Bass, and Others, and total processing time will still depend on your hardware. If processing falls back to CPU, the page may become temporarily less responsive while separation is running.',
  'kgone.separator.local.learnMore': 'Learn more about K.G.One Music Studio server integration.',
  'kgone.separator.local.provider': 'Provider: ',
  'kgone.separator.local.model': 'Model: ',
  'kgone.separator.local.downloaded': 'downloaded',
  'kgone.separator.local.notDownloaded': 'not downloaded',
  'kgone.separator.local.checkingCache': 'Checking local model cache...',
  'kgone.separator.local.btn.download': 'Download Selected Model',
  'kgone.separator.local.btn.downloading': 'Downloading Model...',
  'kgone.separator.local.btn.redownload': 'Redownload Model',
  'kgone.separator.local.btn.redownloading': 'Redownloading...',
  'kgone.separator.local.btn.deleteCache': 'Delete Cached Model',
  'kgone.separator.local.btn.deleting': 'Deleting...',
  'kgone.separator.local.progress.downloading': 'Downloading {name}...',
  'kgone.separator.local.progress.downloadingWithSize': 'Downloading {name}... {received} / {total} MB',
  'kgone.separator.local.progress.downloadingMbOnly': 'Downloading {name}... {received} MB',
  'kgone.separator.local.progress.ready': '{name} is ready.',
  'kgone.separator.local.progress.preparingRuntime': 'Preparing ONNX Runtime session...',
  'kgone.separator.local.progress.readingAudio': 'Reading audio file...',
  'kgone.separator.local.progress.running': 'Running browser separation...',
  'kgone.separator.local.progress.complete': 'Separation complete.',

  'openProjectModal.title': 'Open Project',
  'openProjectModal.close': 'Close',
  'openProjectModal.loading': 'Loading projects...',
  'openProjectModal.date.unknown': 'Unknown',
  'openProjectModal.filter.placeholder': 'Filter projects...',
  'openProjectModal.viewToggle.projects': 'Projects',
  'openProjectModal.viewToggle.trash': 'Trash',
  'openProjectModal.trash.hint': 'Deleted projects are automatically removed after 30 days.',
  'openProjectModal.sort.name': 'Name',
  'openProjectModal.sort.created': 'Created',
  'openProjectModal.sort.updated': 'Updated',
  'openProjectModal.empty.trash': 'Trash is empty',
  'openProjectModal.empty.noProjects': 'No saved projects',
  'openProjectModal.empty.noMatch': 'No projects match the filter',
  'openProjectModal.meta.created': 'Created {date}',
  'openProjectModal.meta.updated': 'Updated {date}',
  'openProjectModal.meta.deleted': 'Deleted {date}',
  'openProjectModal.action.open': 'Open',
  'openProjectModal.action.duplicate': 'Duplicate',
  'openProjectModal.action.delete': 'Delete',
  'openProjectModal.action.restore': 'Restore',
  'openProjectModal.action.deletePermanently': 'Delete permanently',
  'openProjectModal.dialog.duplicateName': 'Enter a name for the duplicated project:',
  'openProjectModal.dialog.invalidName': 'Invalid project name. Only letters, numbers, spaces, hyphens, underscores, periods, and parentheses are allowed.',
  'openProjectModal.dialog.duplicateError': 'Failed to duplicate project: {error}',
  'openProjectModal.dialog.deleteError': 'Failed to delete project: {error}',
  'openProjectModal.dialog.restoreError': 'Failed to restore project: {error}',
  'openProjectModal.dialog.confirmPermanentDelete': 'Are you sure you want to permanently delete "{name}"?\n\nThis operation cannot be undone.',
  'openProjectModal.dialog.permanentDeleteError': 'Failed to permanently delete project: {error}',
};
