
export default {
  'app_title': '[[brand]]',
  'projects': 'Projects',
  'create_project': 'Create Project',
  'new_project': 'New Project',
  'project_name': 'Project Name',
  'project_title': 'Project Title',
  'content_mode': 'Content Mode',
  'narration': 'Narration',
  'standard': 'Standard',
  'generate_overview': 'Generate Overview',
  'source_text': 'Source Text',
  'source_file': 'Source File',
  'project_list': 'Projects List',
  'all_projects': 'All Projects',
  'search_projects': 'Search projects...',
  'recent_projects': 'Recent Projects',
  'import_project': 'Import Project',
  'import_success': 'Import Successful',
  'import_failed': 'Import Failed',
  'export_diagnostics': 'Export Diagnostics',
  'project_title_required': 'Project title cannot be empty',
  'style_upload_failed_hint': 'Style reference image upload failed, you can upload it later in project settings',
  'create_project_failed': 'Failed to create project: {{message}}',
  'project_id_auto_gen_hint': 'The system will automatically generate an internal project ID used for URLs and storage',
  'narration_visuals': 'Narration Mode',
  'drama_animation': 'Drama Mode',
  'content_mode_narration_desc': 'Narration-driven — a single voiceover guides the visuals across the episode. Best for storytelling, documentary, or explainer shorts.',
  'content_mode_drama_desc': 'Content-driven — character dialogue and plot propel the visuals. Best for drama episodes and fiction adaptations.',
  'optional': 'Optional',
  'creating': 'Creating...',
  'rebirth_empress_example': 'e.g., The Rebirth of the Mighty Empress',
  'characters': 'Characters',
  'episodes': 'Episodes',
  'episodes_scripted': 'episodes scripted',
  'episodes_in_production': 'episodes in production',
  'episodes_completed': 'episodes completed',
  'progress': 'Progress',
  'style_not_set': 'Style not set',
  'style_custom': 'Custom style',
  'project_style_section_title': 'Project style',
  'style_save': 'Save style',
  'style_saving': 'Saving…',
  'style_clear': 'Remove style',
  'style_cleared_hint': 'Save to remove the current style',
  'importing': 'Importing...',
  'import_zip': 'Import ZIP',
  'loading_projects': 'Loading projects list...',
  'no_projects': 'No projects yet',
  'start_creating_hint': 'Click "Create Project" or "Import ZIP" to start creating',
  'duplicate_project_id': 'Duplicate Project ID Detected',
  'overwrite_existing': 'Overwrite Existing Project',
  'auto_rename_import': 'Auto Rename and Import',
  'overwrite_hint': 'Replace existing project data with the imported package content',
  'rename_hint': 'Keep the existing project and automatically generate a new ID for the imported one',
  'id_intended_hint': 'The project ID intended for use in the import package',
  'already_exists_conflict_hint': 'already exists. You can overwrite the existing project or auto-rename it to continue importing.',
  'project_overview': 'Project Overview',
  'source_files': 'Source Files',
  'upload_source_files': 'Upload source files',
  'no_files_yet': 'No files yet',
  'delete_file': 'Delete file',
  'lorebook': 'Lorebook',
  'no_episodes_yet': 'No episodes yet',
  'preprocessing': 'Preprocessing',
  'confirm_delete_file': 'Are you sure you want to delete "{{name}}"?',
  'agents': 'Agents',
  'providers': 'Providers',
  'models': 'Models',
  'usage': 'Usage',
  'api_keys': 'API Keys',
  'about': 'About',
  'system_config_title': 'System configuration and API access management',
  'about_loading': 'Loading version info…',
  'about_current_version': 'Current Version',
  'about_check_update': 'Check for Updates',
  'about_checking_update': 'Checking for Updates…',
  'about_latest_version': 'Latest version: {{version}}',
  'about_update_available': 'A newer version is available',
  'about_up_to_date': 'You are on the latest version',
  'about_open_release': 'Open GitHub Release',
  'about_release_notes': 'Release Notes',
  'about_release_notes_empty': 'No release notes available.',
  'about_load_failed': 'Failed to load version info',
  'about_published_at': 'Published: {{date}}',
  'about_checked_at': 'Last checked: {{date}}',
  'diagnostics_section_title': 'Diagnostic logs',
  'diagnostics_section_desc': 'Bundle the last 7 days of logs and system info (API keys masked) for bug reports.',
  'diagnostics_download': 'Download diagnostic logs',
  'diagnostics_downloading': 'Packaging…',
  'diagnostics_download_failed': 'Download failed: {{error}}',
  'config_issues': 'Configuration Issues',
  'config_issues_hint': 'The following issues were found in the current configuration and may affect functionality:',
  'arcreel_agent': '[[brand]] Agent',
  'agent_sdk_desc': 'Powered by Claude Agent SDK, driving conversational AI assistants and automated workflows',
  'claude_code_compat_hint': 'Configuration is compatible with Claude Code environment variables and Coding Plan APIs.',
  'api_access': 'API Access',
  'anthropic_creds_desc': 'Set Anthropic API access credentials.',
  'anthropic_api_key': 'Anthropic API Key',
  'detect_model_hint': 'After setting the API key, the system will automatically detect model availability.',
  'enter_api_key': 'Enter API key...',
  'current_label': 'Current: ',
  'encrypted': 'Encrypted',
  'clear': 'Clear',
  'api_base_url': 'API Base URL',
  'optional_default_hint': 'Optional, defaults to official Anthropic URL.',
  'api_base_example': 'e.g., https://api.anthropic.com',
  'model_routing': 'Model Routing',
  'model_routing_desc': 'Configure models for different levels of agent task complexity.',
  'hide_advanced_routing': 'Hide advanced routing',
  'show_advanced_routing': 'Show advanced routing',
  'haiku_model': 'Haiku Model',
  'haiku_desc': 'Lightweight tasks (classification, extraction, simple Q&A)',
  'sonnet_model': 'Sonnet Model',
  'sonnet_desc': 'Balanced tasks (writing, orchestration, reasoning)',
  'opus_model': 'Opus Model',
  'opus_desc': 'Complex tasks (long-form creative, deep analysis)',
  'subagent_model': 'Sub-agent Model',
  'subagent_desc': 'Model used when sub-agents execute in parallel',
  'advanced_session_settings': 'Advanced Session Settings',
  'session_control_desc': 'Control resource usage and session lifecycle for running agents.',
  'session_cleanup_delay': 'Session Cleanup Delay',
  'cleanup_delay_desc': 'Seconds of inactivity before auto-cleanup (default 300)',
  'max_concurrent_sessions': 'Max Concurrent Sessions',
  'max_sessions_desc': 'Max number of agents allowed to run simultaneously',
  'agent_config_saved': '[[brand]] Agent configuration saved',
  'field_cleared': 'cleared',
  'api_key_mgmt': 'API Key Management',
  'api_key_usage_desc': 'Used to access [[brand]] projects from external tools (e.g. OpenClaw 🦞).',
  'create_api_key': 'Create API Key',
  'name': 'Name',
  'key_prefix': 'Prefix',
  'created_at': 'Created At',
  'expires_at': 'Expires At',
  'last_used': 'Last Used',
  'actions': 'Actions',
  'permanent': 'Permanent',
  'expired': 'Expired',
  'no_api_keys': 'No API keys yet',
  'create_one_now': 'Create one now',
  'new_api_key': 'New API Key',
  'key_name_hint': 'Give the key a name for identification (e.g. OpenClaw)',
  'enter_key_name': 'Enter key name...',
  'expiration_days': 'Expiration (days)',
  'zero_permanent_hint': '0 means permanent',
  'key_created': 'API Key Created',
  'save_key_now_hint': 'Make sure to copy and save this key securely now. For security reasons, you will not be able to see it again.',
  'key_deleted_success': 'Deleted',
  'confirm_delete_key': 'Are you sure you want to delete the key "{{name}}"? This action cannot be undone and all integrations using this key will stop working.',
  'welcome_to_project': 'Welcome to {{title}}!',
  'welcome_idle_desc': 'Please drag or upload your novel source files (.txt/.md), AI will parse the lore for you.',
  'welcome_has_sources_desc': 'Source files are ready. You can continue adding files or click the button below to start AI analysis.',
  'uploading_file': 'Uploading "{{name}}"...',
  'analyzing_content_desc': 'AI is analyzing the content, extracting characters, scenes, props, and world setting...',
  'analysis_complete_loading': 'Analysis complete! Loading project overview...',
  'drop_files_here': 'Drag and drop files here',
  'click_to_select_files': 'or click to select files (supports .txt / .md)',
  'start_ai_analysis': 'Start AI Analysis',
  'ai_analyzing': 'AI Analyzing...',
  'extracting_metadata_desc': 'Extracting synopsis, genre, theme, and world settings',
  'analysis_complete': 'Analysis complete',
  'thinking_process_label': 'Thinking',
  'task_in_progress_default': 'In progress',
  'agent_handoff_headline': 'Ready to roll',
  'agent_handoff_subtitle': 'Chat with the agent to start producing your video.',
  'agent_handoff_dismiss': 'Got it',
  'what_happens_next': 'What happens next?',
  'ai_will_analyze_desc': 'AI will analyze your novel and extract characters, scenes, props, and world settings',
  'overview_gen_desc': 'A project overview will be generated, then you can start creating scripts and storyboards',
  'project_overview_regenerated': 'Project overview regenerated',
  'project_sync_failed': 'Failed to sync project changes: {{message}}',
  'synopsis': 'Synopsis',
  'genre': 'Genre',
  'theme': 'Theme',
  'world_setting': 'World Setting',
  'estimated_cost': 'Estimated Cost',
  'regenerate_overview': 'Regenerate Overview',
  'regenerating': 'Regenerating...',
  'total': 'Total',
  'per_episode': 'Per Episode',
  'no_description': 'No description yet',
  'character_design': 'Character Design',
  'scene_design': 'Scene Design',
  'prop_design': 'Prop Design',
  'reference_image': 'Reference Image',
  'click_to_generate': 'Pending',
  'cancel_pending': 'Cancel Pending',
  'replace': 'Replace',
  'change': 'Change',
  'unsaved_reference': 'Unsaved Reference',
  'saved_reference': 'Saved Reference',
  'upload_reference': 'Upload Reference',
  'description': 'Description',
  'character_desc_placeholder': 'Enter character description...',
  'scene_desc_placeholder': 'Enter scene description...',
  'prop_desc_placeholder': 'Enter prop description...',
  'voice_style': 'Voice Style',
  'voice_style_example': 'e.g., Gentle but authoritative',
  'generate_design': 'Generate Design',
  'regenerate_design': 'Regenerate Design',
  'characters_count': 'Characters ({{count}})',
  'scenes': 'Scenes',
  'props': 'Props',
  'no_characters_hint': 'No characters yet, click the button below to add.',
  'no_characters_hint_clickable': 'No characters yet, click to add',
  'no_scenes_hint_clickable': 'No scenes yet, click to add',
  'no_props_hint_clickable': 'No props yet, click to add',
  'add_character': 'Add Character',
  'add_scene': 'Add Scene',
  'add_prop': 'Add Prop',
  'model_selection': 'Model Selection',
  'model_selection_desc': 'Set global default generation models, can be overridden per project.',
  'default_video_model': 'Default Video Model',
  'auto_select': 'Auto-select',
  'no_video_providers_hint': 'No video providers available, please configure API keys in "Providers" first.',
  'generate_audio': 'Generate Audio',
  'audio_support_hint': '(Supported by some providers only)',
  'default_image_model': 'Default Image Model',
  'image_model_t2i': 'Text-to-Image (T2I)',
  'image_model_i2i': 'Image-to-Image (I2I)',
  'no_image_providers_hint': 'No image providers available, please configure API keys in "Providers" first.',
  'text_models': 'Text Models',
  'text_models_desc': 'Configure text models by task type, leave empty for auto-selection.',
  'script_generation': 'Script Generation',
  'overview_generation': 'Overview Generation',
  'style_analysis': 'Style Analysis',
  'no_text_providers_hint': 'No text providers available, please configure API keys in "Providers" first.',
  'media_config_saved': 'Media model configuration saved',
  'usage_stats': 'Usage Stats',
  'usage_stats_desc': 'Total system Token consumption and generation time (only includes data recorded by this system).',
  'text_generation': 'Text Generation',
  'input_tokens': 'Input Tokens (Prompt)',
  'output_tokens': 'Output Tokens (Completion)',
  'image_generation': 'Image Generation',
  'images_generated': 'Images Generated',
  'video_generation': 'Video Generation',
  'generation_duration': 'Generation Duration (seconds)',
  'api_calls': 'API Calls',
  'total_api_calls': 'Total API calls',
  'no_usage_data': 'No usage data yet',

  // GlobalHeader
  'mode_badge_drama': 'Drama 16:9',
  'mode_badge_narration': 'Narration 9:16',
  'jianying_export_started': 'Jianying draft export started. Please extract the downloaded ZIP into your Jianying drafts directory.',
  'jianying_export_failed': 'Jianying draft export failed: {{message}}',
  'project_zip_download_started_with_diagnostics': 'Project ZIP download started, export contains {{count}} diagnostics',
  'project_zip_download_started': 'Project ZIP download started',
  'export_failed': 'Export failed: {{message}}',
  'open_notification_center': 'Open notification center',
  'notification_tooltip': 'Session notifications: {{count}} items',
  'cost_tooltip': 'Total project cost: {{cost}}',
  'task_status_tooltip': 'Task status: {{running}} running, {{queued}} queued',
  'toggle_options': 'Toggle options',
  'toggle_task_panel': 'Toggle task panel',
  'export_project_zip': 'Export current project ZIP',
  'exporting_zip': 'Exporting...',
  'export_zip': 'Export',
  'config_incomplete': 'Configuration incomplete',
  'export_diagnostics_title': 'Export Diagnostics',
  'export_diagnostics_description': 'Export pre-check complete and ZIP generated. The following issues were detected in the export package.',
  'diagnostics_blocking': 'Blocking Issues',
  'diagnostics_auto_fixed': 'Auto-fixed',
  'diagnostics_warnings': 'Warnings',
  'workflow_phases': 'Workflow phases',
  'phase_setup': 'Setup',
  'phase_worldbuilding': 'Worldbuilding',
  'phase_scripting': 'Scripting',
  'phase_production': 'Production',
  'phase_completed': 'Completed',
  'episode_status_label_draft': 'Draft',
  'episode_status_label_scripted': 'Scripted',
  'episode_status_label_in_production': 'In production',
  'episode_status_label_completed': 'Completed',
  'episode_status_label_missing': 'Missing',

  // CreateProjectModal
  'aspect_ratio': 'Aspect Ratio',
  'portrait_9_16': 'Portrait 9:16',
  'landscape_16_9': 'Landscape 16:9',
  'default_duration': 'Default Duration',
  'default_duration_desc': 'Let AI decide duration based on content, or specify a fixed duration',
  'auto': 'Auto',

  // ExportScopeDialog
  'export_scope_title': 'Select Export Scope',
  'current_version_only': 'Current Version Only',
  'recommended': 'Recommended',
  'small_size_hint': 'No version history, smaller size',
  'all_data': 'All Data',
  'full_history_hint': 'Includes full version history',
  'export_jianying_draft': 'Export to Jianying Draft',
  'generate_jianying_zip_hint': 'Generate a draft ZIP importable by Jianying',
  'select_episode': 'Select Episode',
  'episode_with_title': 'Episode {{episode}} — {{title}}',
  'jianying_version': 'Jianying Version',
  'jianying_v6_plus': 'Jianying 6.0 and above (Recommended)',
  'jianying_v5_x': 'Jianying 5.x',
  'draft_path': 'Draft Directory Path',
  'draft_path_placeholder': 'Jianying draft directory path',
  'draft_path_default_mac': '/Users/<YourUsername>/Movies/JianyingPro/User Data/Projects/com.lveditor.draft',
  'draft_path_default_windows': String.raw`C:\Users\<YourUsername>\AppData\Local\JianyingPro\User Data\Projects\com.lveditor.draft`,
  'draft_path_hint': 'Please enter the full path to the Jianying draft directory. Go to Jianying -> Settings -> Draft Location to find it.',
  'exporting': 'Exporting...',
  'export_draft': 'Export Draft',

  // TaskHud
  'generating_status': 'Generating...',
  'queued_status': 'Queued',
  'completed_status': 'Completed',
  'failed_status': 'Failed',
  'running_count': '{{count}} Running',
  'no_tasks': 'No tasks',
  'queued_label': 'Queued',
  'running_label': 'Running',
  'completed_label': 'Completed',
  'failed_label': 'Failed',
  'image_channel': 'Image Channel',
  'video_channel': 'Video Channel',
  'cancelled_status': 'Cancelled',
  'cancelled_label': 'Cancelled',
  'cancel_task': 'Cancel task',
  'cancel_this_task': 'Cancel this task',
  'cancel_btn': 'Cancel',
  'cascade_label': 'cascaded',
  'cancel_all': 'Cancel All',
  'cancel_all_queued_aria': 'Cancel all queued tasks',
  'cancel_confirm_aria': 'Cancel confirmation',
  'cancel_cascade_msg': 'Cancelling this task will also cancel {{count}} dependent tasks',
  'cancel_single_confirm': 'Cancel this task?',
  'cancel_all_confirm': 'Cancel all {{count}} queued tasks?',
  'cancelling': 'Cancelling...',
  'confirm_cancel': 'Confirm Cancel',
  'go_back': 'Back',

  // AgentCopilot
  'new_session': 'New Session',
  'switch_session': 'Switch Session',
  'no_session': 'No Session',
  'confirm_delete_session': 'Are you sure you want to delete this session? This action cannot be undone.',
  'delete_session': 'Delete Session',
  'answer_above_hint': 'Please answer the question above',
  'generating_stop_hint': 'Assistant is generating, click to stop',
  'input_placeholder': 'Type a message, type / to see available skills',
  'image_too_large_hint': 'Image "{{name}}" exceeds 5MB and was skipped',
  'collapse_panel': 'Collapse assistant panel',
  'thinking': 'Running',
  'start_chat_hint': 'Type a message below to start chatting',
  'quick_skill_hint': 'Type / to quickly invoke skills',
  'enlarge_image': 'Click to enlarge image',
  'remove_image': 'Remove image',
  'assistant_input': 'Assistant Input',
  'max_images_hint': 'Maximum {{count}} images',
  'attach_image': 'Attach image',
  'stop_session': 'Stop Session',
  'send_message': 'Send Message',

  // StudioCanvasRouter & Toasts
  'update_prompt_failed': 'Failed to update Prompt: {{message}}',
  'storyboard_task_submitted_toast': 'Storyboard generation task for "{{id}}" submitted',
  'generate_storyboard_failed': 'Failed to generate storyboard: {{message}}',
  'video_task_submitted_toast': 'Video generation task for "{{id}}" submitted',
  'generate_video_failed': 'Failed to generate video: {{message}}',
  'character_updated_toast': 'Character "{{name}}" updated',
  'update_character_failed': 'Failed to update character: {{message}}',
  'character_task_submitted_toast': 'Character generation task for "{{name}}" submitted',
  'submit_failed': 'Failed to submit: {{message}}',
  'character_added_toast': 'Character "{{name}}" added',
  'add_failed': 'Failed to add: {{message}}',
  'update_scene_failed': 'Failed to update scene: {{message}}',
  'generate_scene_failed': 'Failed to generate scene design: {{message}}',
  'scene_task_submitted_toast': 'Scene generation task for "{{name}}" submitted',
  'scene_added_toast': 'Scene "{{name}}" added',
  'update_prop_failed': 'Failed to update prop: {{message}}',
  'generate_prop_failed': 'Failed to generate prop design: {{message}}',
  'prop_task_submitted_toast': 'Prop generation task for "{{name}}" submitted',
  'prop_added_toast': 'Prop "{{name}}" added',
  'from_library_button_label': 'Choose from Library',
  'add_to_library_button_label': 'Add to Library',
  'loading_placeholder': 'Loading...',

  // AddCharacterForm & AddSceneInline & AddPropInline
  'name_label': 'Name',
  'name_placeholder': 'Character Name',
  'desc_label': 'Description',
  'char_desc_placeholder': 'Description of character appearance, personality, background, etc.',
  'voice_style_label': 'Voice Style',
  'reference_image_optional': 'Reference Image (Optional)',
  'reference_selected': 'Reference Selected',
  'upload_ref_image': 'Upload reference image',
  'consistency_hint': 'Used to maintain character consistency in subsequent designs',
  'cancel': 'Cancel',
  'adding': 'Adding...',
  'add': 'Add',

  // OverviewCanvas cost & style section
  'project_total_cost': 'Project Total Cost',
  'estimate': 'Est.',
  'storyboard': 'Storyboard',
  'video': 'Video',
  'actual': 'Actual',
  'actual_characters': 'Chars',
  'actual_scenes': 'Scenes',
  'actual_props': 'Props',
  'regenerate_failed': 'Regeneration failed: {{message}}',
  'upload_failed': 'Upload failed: {{message}}',
  'delete_failed': 'Delete failed: {{message}}',
  'update_failed': 'Update failed: {{message}}',

  // ApiKeysTab
  'create_failed': 'Creation failed: {{message}}',
  'save_key_warning': 'Make sure to copy and save this key securely now.',
  'key_not_viewable_again': 'For security reasons, you will not be able to see it again.',
  'load_failed': 'Failed to load: {{message}}',

  // AgentConfigTab
  'api_credentials': 'API Credentials',
  'anthropic_key_required_desc': 'Anthropic API Key is required for the agent to function',
  'env_anthropic_api_key': 'Maps to environment variable ANTHROPIC_API_KEY',
  'clear_saved_anthropic_key': 'Clear saved Anthropic API Key',
  'clear_saved': 'Clear saved',
  'env_anthropic_base_url': 'Maps to ANTHROPIC_BASE_URL. Leave empty for official URL.',
  'clear_saved_base_url': 'Clear saved Anthropic Base URL',
  'model_config': 'Model Configuration',
  'model_config_desc': 'Specify Claude models for the agent. Leave empty to use Claude Agent SDK defaults.',
  'default_model': 'Default Model',
  'env_anthropic_model': 'Maps to ANTHROPIC_MODEL, overrides default model',
  'clear_saved_model': 'Clear saved model configuration',
  'advanced_model_routing': 'Advanced Model Routing',
  'model_routing_hint': 'Claude Agent SDK supports routing to different models by capability tier. Leave empty to use the default model above.',
  'clear_saved_field': 'Clear saved {{label}}',
  'clear_field_input': 'Clear {{label}} input',
  'advanced_settings': 'Advanced Settings',
  'session_cleanup_delay_label': 'Session Cleanup Delay (seconds)',
  'session_cleanup_delay_desc': 'Wait this long after session ends before releasing resources. Sessions auto-resume on next conversation.',
  'max_concurrent_sessions_label': 'Max Concurrent Sessions',
  'max_concurrent_sessions_desc': 'Maximum active agent sessions. Excess sessions auto-release the least recently used ones (cleaned sessions are persisted and resume on next conversation).',
  'clear_failed': 'Failed to clear: {{message}}',
  'clear_input': 'Clear input',
  'hide_key': 'Hide key',
  'show_key': 'Show key',
  'clear_base_url_input': 'Clear Base URL input',
  'clear_model_input': 'Clear model configuration input',

  // WelcomeCanvas
  'analysis_failed': 'Analysis failed: {{message}}',
  'uploaded_source_files': 'Uploaded Source Files',
  'add_more_files': 'Add more files',
  'drop_more_files_here': 'Or drag and drop more files here',
  'uploading': 'Uploading...',

  // SourceFilesPage
  'source_files_drop_hint': 'Drag your novel text here, or click to choose a file',
  'source_files_drop_inline_hint': 'Drop more files to add',
  'source_open': 'Open',

  // TaskHud / Notifications / Usage v3
  'task_hud_title': 'Task Radar',
  'workspace_notifications_title': 'Workspace Notifications',
  'cost_details_eyebrow': 'Usage & Spend',

  // MediaModelSection
  'save_failed': 'Failed to save: {{message}}',

  // UsageStatsSection
  'spend_ledger': 'Spend Ledger',
  'last_7_days': 'Last 7 days',
  'last_30_days': 'Last 30 days',
  'all': 'All',
  'usage_stats_by_provider': 'View API call statistics by provider',
  'filter_by_provider': 'Filter by provider',
  'all_providers': 'All providers',
  'no_data': 'No data yet',
  'total_calls': 'Total Calls',
  'calls': 'Calls',
  'success_count': 'Success',
  'success_rate': 'Success Rate',
  'type': 'Type',
  'duration': 'Duration',

  // import diagnostics
  'import_auto_fixed': 'Project "{{title}}" imported ({{count}} issue(s) auto-fixed)',
  'import_success_with_diagnostics': 'Import completed with diagnostics — review the details below',
  'import_diagnostics': 'Import Diagnostics',
  'import_failure_diagnostics': 'Import Failure Diagnostics',
  'import_failure_with_diagnostics': 'Import did not complete. Blocking and warning items are listed below.',
  'blocking_issues': 'Blocking Issues',
  'auto_fixed_issues': 'Auto-fixed Issues',
  // config-status-store
  'agent_api_key_not_configured': '[[brand]] Agent API Key (Anthropic) not configured',
  'video_provider_not_configured': 'No provider configured for video generation',
  'image_provider_not_configured': 'No provider configured for image generation',
  'text_provider_not_configured': 'No provider configured for text generation',

  // OverviewCanvas / shared aria labels
  'import_project_file_aria': 'Import project ZIP file',
  'import_credential_file_aria': 'Import JSON credential file',
  'upload_asset_file_aria': 'Upload asset file',
  'upload_attachment_aria': 'Upload attachment image',
  'upload_script_file_aria': 'Upload script file',
  'upload_character_ref_aria': 'Upload character reference image',
  'loading_project_data': 'Loading project data...',
  'narration_visuals_mode': 'Narration Mode',
  'drama_animation_mode': 'Drama Mode',
  'project_overview_title': 'Project Overview',
  'regen_overview_title': 'Regenerate overview',
  'regenerating_short': 'Generating...',
  'regen_short': 'Regenerate',
  'genre_prefix': 'Genre: ',
  'theme_prefix': 'Theme: ',
  'calculating_cost': 'Calculating cost...',
  'cost_estimate_failed': 'Cost estimation failed: {{message}}',
  'episodes_title': 'Episodes',
  'no_episodes_ai_hint': 'No episodes yet. Use the AI assistant to generate scripts.',
  'segments_and_status': '{{count}} segments · {{status}}',

  // ProjectSettingsPage
  'project_settings': 'Project Settings',
  'back_to_project': 'Back to project',
  'model_config_project_desc': 'Select generation models for this project individually; leave empty to follow global defaults',
  'video_model': 'Video Model',
  'current_global_hint': 'Current global: {{value}}',
  'aspect_ratio_label': 'Aspect Ratio',
  'aspect_ratio_change_warning': 'Existing storyboards/videos remain at original ratio; consider regenerating',
  'generation_mode': 'Generation Mode',
  'grid_generation': 'Grid Generation',
  'mode_storyboard': 'Image-to-Video',
  'mode_grid': 'Grid-to-Video',
  'mode_reference_video': 'Reference-to-Video',
  'mode_storyboard_desc': 'Generate storyboard frames first, then per-frame video. Best for fine control.',
  'mode_grid_desc': 'Batch grid images per paragraph. Consistent style for high-volume output.',
  'mode_reference_video_desc': 'Skip storyboards; use character/scene/prop reference images for multi-shot videos.',
  'reference_tab_dirty_aria': 'Unsaved changes',
  'reference_video_status_pending': 'Video not generated',
  'reference_video_status_running': 'Video generating',
  'reference_video_status_ready': 'Video generated',
  'reference_video_status_failed': 'Video generation failed',
  'reference_canvas_empty': 'No units yet',
  'reference_unit_list_title': 'Video Units',
  'reference_unit_new': 'New Unit',
  'reference_preview_empty': 'Select a unit to preview',
  'reference_preview_generate': 'Generate video',
  'reference_preview_generating': 'Generating…',
  'reference_meta_unit': 'Unit',
  'reference_meta_duration': 'Duration',
  'reference_meta_shots': 'Shots',
  'reference_meta_references': 'References',
  'reference_units_count': '{{count}} units',
  'reference_preview_video_aria': 'Preview video for unit {{id}}',
  // Reference video unit UI status labels — derived from task queue state.
  'reference_status_pending': 'Pending',
  'reference_status_running': 'Running',
  'reference_status_ready': 'Ready',
  'reference_status_failed': 'Failed',
  'reference_generate_queued': 'Queued for generation',
  'reference_generate_deduped': 'Already in the queue',
  'reference_generate_request_failed': 'Generation request failed: {{error}}; please try again.',
  'reference_generation_task_failed': 'Unit {{unitId}} generation failed: {{reason}}; please try again.',
  'storyboard_task_failed': 'Storyboard "{{id}}" generation failed: {{reason}}',
  'video_task_failed': 'Video "{{id}}" generation failed: {{reason}}',
  'character_task_failed': 'Character "{{id}}" generation failed: {{reason}}',
  'scene_task_failed': 'Scene "{{id}}" generation failed: {{reason}}',
  'prop_task_failed': 'Prop "{{id}}" generation failed: {{reason}}',
  'grid_task_failed': 'Grid generation failed: {{reason}}',
  'episode_mode_switcher_label': 'Episode generation mode',
  'episode_mode_inherit_from_project': 'Inherit from project',
  'episode_mode_switch_keep_data': "Switching mode won't remove existing units / scenes — you can switch back anytime.",
  'episode_mode_switch_to_reference': 'Switched to reference-to-video. Existing storyboard/grid data is preserved and will reappear when you switch back.',
  'episode_mode_switch_from_reference': 'Switched back to storyboard/grid. Reference-mode video_units are preserved for later.',
  // ========== PR5 reference-video editor ==========
  'reference_editor_placeholder': 'Type a prompt. Use "Shot 1 (3s): ..." markers and @mentions for characters/scenes/props.',
  'reference_editor_aria_name': 'Unit prompt',
  'reference_editor_unknown_mentions_label': 'Unregistered mentions',
  'reference_editor_unknown_mention': 'Unregistered: @{{name}} (not found in characters/scenes/props)',
  'reference_picker_title': 'Insert reference',
  'reference_picker_empty': 'No matches',
  'reference_picker_group_character': 'Characters',
  'reference_picker_group_scene': 'Scenes',
  'reference_picker_group_prop': 'Props',
  'reference_picker_tab_all': 'All',
  'reference_picker_tab_character': 'Characters',
  'reference_picker_tab_scene': 'Scenes',
  'reference_picker_tab_prop': 'Props',
  'segment_refs_edit_button': 'Edit references',
  'segment_refs_edit_title': 'Edit references',
  'segment_refs_close': 'Close',
  'segment_refs_save': 'Save',
  'segment_refs_cancel': 'Cancel',
  'segment_refs_changes_pending': 'Unsaved changes',
  'segment_refs_no_changes': 'No changes',
  'segment_refs_stale_hint': 'Reference no longer exists — click to remove',
  'segment_refs_search_empty': 'No matches',
  'segment_refs_badge_character': 'Character',
  'segment_refs_badge_scene': 'Scene',
  'segment_refs_badge_prop': 'Prop',
  'segment_refs_search_placeholder': 'Search…',
  'segment_refs_empty_characters': 'No characters yet',
  'segment_refs_empty_clues': 'No scenes or props yet',
  'segment_refs_manage_link': 'Manage references',
  'segment_refs_stale_badge': '{{count}} stale',
  'references_empty_full': 'No characters / scenes / props referenced yet',
  'references_add_cta': 'Add references',
  'references_badge_character': 'Cast',
  'references_badge_scene': 'Scene',
  'references_badge_prop': 'Props',
  'reference_panel_title': 'References (drag to reorder)',
  'reference_panel_empty': 'No references yet — click + or @mention a name in the prompt.',
  'reference_panel_add': 'Add reference',
  'reference_panel_remove_aria': 'Remove reference @{{name}}',
  'reference_panel_drag_aria': 'Reorder @{{name}}',
  'reference_panel_zoom_aria': 'View larger thumbnail for @{{name}}',
  'reference_panel_sr_instructions': 'Press Space to pick up the item; use arrow keys to move; press Space again to drop; Esc to cancel.',
  'reference_panel_announce_pick_up': 'Picked up {{name}} at position {{index}}.',
  'reference_panel_announce_move': '{{name}} moved to position {{index}}.',
  'reference_panel_announce_drop': 'Dropped {{name}} at position {{index}}.',
  'reference_panel_announce_cancel': 'Canceled drag for {{name}}.',
  'reference_editor_unit_meta_one': '{{duration}}s · {{count}} shot',
  'reference_editor_unit_meta_other': '{{duration}}s · {{count}} shots',
  'default_duration_label': 'Default Duration',
  'default_duration_project_desc': 'Default video duration for new storyboards; "Auto" lets AI decide based on content',
  'duration_selection': 'Duration selection',
  'auto_label': 'Auto',
  'image_model': 'Image Model',
  'generate_audio_label': 'Generate Audio',
  'audio_settings_sr_label': 'Audio generation settings',
  'follow_global_default': 'Follow global default',
  'enabled_label': 'Enabled',
  'disabled_label': 'Disabled',
  'text_model_override_desc': 'Override by task type; leave empty to follow global default',
  'loading_config': 'Loading configuration...',
  'saved': 'Saved',
  'unsaved_changes_confirm': 'You have unsaved changes. Are you sure you want to leave?',
  'unsaved_changes_hint': 'You have unsaved changes',

  // ProviderSection
  'status_ready': 'Ready',
  'status_error': 'Error',
  'status_unconfigured': 'Unconfigured',
  'loading_providers': 'Loading providers...',
  'provider_list': 'Provider list',
  'preset_providers': 'Preset Providers',
  'select_provider': 'Please select a provider',

  // ProviderDetail
  'status_connected': 'Connected',
  'media_type_video': 'Video',
  'media_type_image': 'Image',
  'media_type_text': 'Text',
  'advanced_config': 'Advanced Configuration',
  'enter_key_placeholder': 'Enter key',
  'clear_key': 'Clear key',
  'clear_label': 'Clear',
  'confirm_clear': 'Confirm Clear',
  'key_set_hint': 'Already set (leave empty to keep existing value)',
  'save_provider': 'Save',

  // CustomProviderSection
  'custom_providers': 'Custom Providers',
  'add_custom_provider': 'Add Custom Provider',

  // CustomProviderForm
  'edit_custom_provider': 'Edit Custom Provider',
  'add_custom_provider_title': 'Add Custom Provider',
  'cp_name_label': 'Name',
  'cp_name_placeholder': 'e.g., My NewAPI...',
  'base_url': 'Base URL',
  'api_key_label': 'API Key',
  'keep_existing_key_hint': 'Leave empty to keep existing key',
  'enter_api_key_placeholder': 'Enter API Key',
  'preview_url': 'Preview: ',
  'discover_models': 'Discover Models',
  'discover_models_success': 'Found {{count}} models',
  'discover_no_models': 'No models found',
  'discover_no_base': 'Select a preset or enter a Base URL first',
  'discover_api_key_required': 'Enter an API Key first to discover models',
  'discovering_models': 'Discovering...',
  'import_from_provider': 'Import from provider',
  'import_no_providers': 'No custom providers to import',
  'import_provider_success': 'Imported credentials from {{name}}',
  'model_list': 'Model List',
  'select_all': 'Select All',
  'deselect_all': 'Deselect All',
  'search_models': 'Search models...',
  'enable_model': 'Enable model',
  'model_id_label': 'Model ID',
  'media_type_label': 'Media Type',
  'default_label': 'Default',
  'delete_model': 'Delete model',
  'currency_label': 'Currency',
  'input_price': 'Input price',
  'output_price': 'Output price',
  'price_per_second': '/sec',
  'price_per_image': '/image',
  'price_per_m_input': '/M input',
  'price_per_m_output': '/M output',
  'resolution_label': 'Resolution',
  'resolution_default_placeholder': 'Default (unset)',
  'resolution_help_custom': 'Select a common token from the dropdown, or enter the raw value expected by the API',
  'supported_durations_label': 'Supported durations',
  'supported_durations_placeholder': 'e.g. 4, 8, 12 or 3-15 (leave blank to auto-infer)',
  'supported_durations_help': 'Comma-separated values or a range (e.g. 3-15). Leave blank to let the server infer from model id.',
  'supported_durations_invalid': 'Invalid format: {{message}}',
  'supported_durations_err_empty_after_split': 'Input contains only separators — please enter positive integers',
  'supported_durations_err_non_positive': "Segment '{{seg}}' must be a positive integer",
  'supported_durations_err_exceeds_max': "Segment '{{seg}}' exceeds the per-value max of {{max}} seconds",
  'supported_durations_err_range_too_large': "Segment '{{seg}}' range is too large (>{{max_span}})",
  'supported_durations_err_range_inverted': "Segment '{{seg}}': range upper bound must be ≥ lower bound",
  'supported_durations_err_unparseable': "Cannot parse segment '{{seg}}'",
  'supported_durations_summary': 'Supported durations: {{value}}',
  'duration_incompatible_warning': 'Selected {{value}}s not in model-supported [{{supported}}]',
  'duration_seconds_value_text': '{{value}}s',
  'duration_no_options': 'Current model has no configured durations — cannot change',
  'add_model_manually': 'Add model manually',
  'discover_or_add_hint': 'Click "Discover Models" to auto-discover, or',
  'test_connection': 'Test Connection',
  'testing_connection': 'Testing...',
  'connection_test_failed': 'Connection test failed',
  'fetch_models_failed': 'Failed to fetch model list',
  'fill_base_url_first': 'Please fill in Base URL first',
  'fill_api_key_first': 'Please fill in API Key first',
  'base_url_changed_reenter_key': 'Base URL has changed — re-enter API Key to discover models',
  'fill_provider_name': 'Please fill in provider name',
  'fill_base_url': 'Please fill in Base URL',
  'fill_api_key': 'Please fill in API Key',
  'enable_one_model': 'At least one model must be enabled',
  'enabled_model_needs_id': 'Enabled models must have a model_id',

  // CustomProviderDetail
  'discovery_format_label': 'Model Discovery Protocol',
  'discovery_format_help': 'Only used for model discovery and connection testing; does not affect runtime calls',
  'discovery_format_openai': 'OpenAI Compatible',
  'discovery_format_google': 'Google AI Studio',
  'endpoint_label': 'Call Endpoint',
  'endpoint_text_group': 'Text',
  'endpoint_image_group': 'Image',
  'endpoint_video_group': 'Video',
  'endpoint_openai_chat_display': 'OpenAI Chat Completions',
  'endpoint_gemini_generate_display': 'Google Gemini',
  'endpoint_openai_images_display': 'OpenAI Images API',
  'endpoint_openai_images_generations_display': 'OpenAI Images (T2I only)',
  'endpoint_openai_images_edits_display': 'OpenAI Images (I2I only)',
  'endpoint_gemini_image_display': 'Google Gemini Image',
  'endpoint_openai_video_display': 'OpenAI Video (Sora)',
  'endpoint_newapi_video_display': 'NewAPI Unified Video',
  'endpoint_catalog_loading': 'Loading endpoint catalog…',
  // Image Capability
  'image_capability_t2i': 'T2I',
  'image_capability_i2i': 'I2I',
  'image_capability_both': 'T2I · I2I',
  'image_model_t2i_label': 'Text-to-Image Model',
  'image_model_i2i_label': 'Image-to-Image Model',
  'api_key_not_set': 'Not set',
  'model_disabled': 'Disabled',
  'confirm_delete_provider': 'Confirm Delete',

  // UsageDrawer
  'cost_details': 'Cost Details',
  'total_cost': 'Total Cost',
  'image_type_label': 'Image',
  'video_type_label': 'Video',
  'text_type_label': 'Text',
  'failed_type_label': 'Failed',
  'no_call_records': 'No call records yet',
  'input_token_label': 'Input',
  'output_token_label': 'Output',
  'tokens_suffix': 'tokens',
  'records_count': '{{count}} records',

  // WorkspaceNotificationsDrawer
  'notifications_count': '{{count}} notifications',
  'unread_count': 'Unread {{count}}',
  'close_notification_panel': 'Close notification panel',
  'no_notifications': 'No notifications',
  'notifications_hint': 'Project refreshes, generation completions, and navigable changes will appear here',
  'read_status': 'Read',
  'new_notification': 'New',
  'view_location': 'View & Locate',
  'notification_only': 'Notification only',
  'remove_label': 'Remove',
  'auto_mark_read_hint': 'Opening the panel automatically marks notifications as read',
  'session_records': 'Session records',
  'just_now': 'Just now',
  'minutes_ago': '{{count}} min ago',

  // SourceFileViewer
  'confirm_delete_source_file': 'Are you sure you want to delete "{{filename}}"? This action cannot be undone.',
  'loading_file': 'Loading file...',
  'cannot_load_file': 'Cannot load file "{{filename}}"',

  // TimelineCanvas
  'select_episode_hint': 'Please select an episode from the sidebar',
  'segment_count': '{{count}} segments',
  'scene_count_label': '{{count}} scenes',
  'cost_estimate_short': 'Est.',
  'cost_actual_short': 'Actual',
  'cost_storyboard_short': 'Storyboard',
  'cost_video_short': 'Video',
  'cost_total_short': 'Total',
  'preprocessing_tab': 'Preprocessing',
  'timeline_tab': 'Script Timeline',
  'generate_all_grids': 'Generate All Grids',
  'submitting': 'Submitting...',

  'no_original_text': '(No original text yet)',
  'duration_selector_aria': 'Duration selection',

  // PreprocessingView
  'preprocessing_saved': 'Preprocessing content saved',
  'loading_preprocessing': 'Loading preprocessing content...',
  'no_preprocessing_content': 'No preprocessing content',
  'segment_split_complete': 'Segment split complete',
  'script_normalized_complete': 'Script normalization complete',
  'reference_units_split_complete': 'Reference units split complete ({{count}} units)',
  'reference_units_split_complete_label': 'Reference units split complete',
  'reference_preproc_back': 'Back to editor',
  'reference_preproc_page_title': 'Preprocessing · E{{episode}}',
  'reference_preproc_status_loading': 'Loading…',
  'reference_preproc_status_error': 'Split failed',
  'reference_preproc_status_empty': 'Not split yet',
  'reference_tab_editor': 'Script',
  'reference_tab_preview': 'Video',
  'reference_tab_aria': 'Reference unit panel tabs',

  // ArcReel Workbench v3 — Reference Video
  'reference_main_tab_aria': 'Workspace main tabs',
  'grid_canvas_tab_aria': 'Grid workbench main tabs',
  'skill_content_label': 'Skill content',
  'skill_content_expand': '▶ Expand',
  'skill_content_collapse': '▼ Collapse',
  'list_source_files_failed': 'Failed to load source files: {{message}}',
  'source_unsupported_extension': 'Unsupported file type: {{filename}}',
  'upload_aborted_project_changed': 'Project changed; canceled upload of {{filename}}',
  'open_source_file_aria_label': 'Open source file {{filename}}',
  'delete_source_file_aria_label': 'Delete source file {{filename}}',
  'no_episode_search_results': 'No matching episodes',
  'episode_collapsed_button_label': 'E{{episode}} · {{title}}',
  'reference_tab_units': 'Video units',
  'reference_tab_preprocess': 'Splitting preprocess',
  'reference_batch_generate': 'Batch generate videos',
  'reference_batch_nothing_to_do': 'All units are already generated or in flight',
  'reference_episode_header_units_one': '{{count}} unit',
  'reference_episode_header_units_other': '{{count}} units',
  'reference_episode_header_ready': 'Ready',
  'reference_episode_header_estimated': 'Estimated',
  'reference_episode_header_actual': 'Spent',
  'reference_strip_label': 'References',
  'reference_strip_order_hint': 'Order = [IMG-N]',
  'reference_strip_image_token': 'IMG-{{n}}',
  'reference_strip_add': 'Add reference',
  'reference_strip_empty': 'No references yet — click + on the right or use @ in the prompt to add automatically',
  'reference_unit_search_placeholder': 'Search units / prompts…',
  'reference_unit_search_empty': 'No matching units',
  'reference_unit_dirty_hint': 'Unsaved',
  'reference_unit_shots_count_one': '{{count}} shot',
  'reference_unit_shots_count_other': '{{count}} shots',
  'reference_unit_rail_expand': 'Expand list',
  'reference_unit_prev': 'Previous unit',
  'reference_unit_next': 'Next unit',
  'reference_preview_label': 'Video preview',
  'reference_preview_metadata': 'Metadata',
  'reference_preview_in_flight': 'Generating video…',
  'reference_preview_in_flight_meta': '{{refs}} refs · {{duration}}s',
  'reference_preview_failed_title': 'Generation failed',
  'reference_preview_failed_unknown': 'Unknown error',
  'reference_preview_empty_unit': 'Not yet generated',
  'reference_preview_regenerate': 'Regenerate video',
  'reference_preview_retry': 'Retry generation',
  'reference_meta_status': 'Status',
  'reference_meta_cost': 'Cost',
  'reference_meta_cost_spent': 'spent',
  'reference_unsaved': 'Unsaved changes',
  'reference_synced': 'Synced',

  // Source file normalization toasts
  'source_normalized_toast': '"{{filename}}" normalized (source encoding: {{encoding}})',
  'source_normalized_toast_with_chapters': '"{{filename}}" normalized ({{chapters}} chapters; source encoding: {{encoding}})',
  'source_normalized_toast_native': '"{{filename}}" normalized',
  'source_normalized_toast_native_with_chapters': '"{{filename}}" normalized ({{chapters}} chapters)',
  'source_upload_conflict_toast': 'Source file "{{filename}}" already exists (suggested rename: "{{suggested}}"; retry from the main panel)',

  // Grid preview
  'grid_scene_count': '{{count}} scenes',
  'grid_batch_count': '{{count}} grids',
  'generating_grid': 'Generating...',
  'generate_grid_btn': 'Generate Grid',
  'insufficient_scenes_for_grid': 'Not enough scenes for grid generation',

  // GridPreviewPanel
  'grid_status_pending': 'Pending',
  'grid_status_generating': 'Generating',
  'grid_status_splitting': 'Splitting',
  'grid_status_completed': 'Completed',
  'grid_status_failed': 'Failed',
  'grid_preview_title': 'Grid Preview',
  'grid_not_generated': 'Not generated',
  'grid_batch_unit': '{{count}} batches',
  'grid_no_grids_yet': 'No grids generated yet',
  'grid_generate_instruction': 'Click the "Generate Grid" button above to start',
  'grid_loading_data': 'Loading grid data...',
  'grid_load_failed': 'Load failed',
  'grid_regenerate_failed': 'Regeneration failed',
  'grid_regenerating': 'Submitting...',
  'grid_regenerate_btn': 'Regenerate',
  'grid_composite_image_alt': 'Grid composite image',
  'grid_cell_info': '{{count}} cells · {{size}}',
  'grid_no_image': 'No image',
  'grid_reference_images': 'Reference Images',

  // StudioCanvasRouter
  'grid_generation_failed': 'Grid generation failed: {{message}}',

  // CredentialList
  'credential_mgmt': 'Key Management',
  'add_credential': 'Add Provider',
  'no_credentials': 'No keys yet',
  'add_first_credential': 'Add the first key',
  'active_label': 'In use',
  'currently_active': 'Currently in use',
  'activate_credential': 'Activate {{name}}',
  'test_credential': 'Test {{name}} connection',
  'edit_credential': 'Edit {{name}}',
  'delete_credential': 'Delete {{name}}',
  'available_models': 'Available models: ',
  'credential_name': 'Name',
  'credential_name_placeholder': 'e.g., Personal account...',
  'api_key_keep_hint': 'API Key (leave empty to keep existing)',
  'keep_existing_placeholder': 'Leave empty to keep existing...',
  'base_url_optional': 'Base URL (optional)',
  'default_url_placeholder': 'Defaults to official URL...',
  'credential_file': 'Credential File',
  'select_json_file': 'Select JSON file...',
  'select_credential_file': 'Please select a credential file',
  'enter_api_key_required': 'Please enter API Key',

  // ProviderModelSelect
  'select_model_placeholder': 'Select model...',
  'select_model_aria': 'Select model',
  'search_model_placeholder': 'Search models or providers...',
  'search_model_aria': 'Search models or providers',
  'no_models_match': 'No matching models',

  // ImagePromptEditor / VideoPromptEditor / DialogueListEditor
  'composition_params': 'Composition',
  'shot_label': 'Shot',
  'lighting_label': 'Lighting',
  'lighting_placeholder': 'Lighting description...',
  'ambiance_label': 'Ambiance',
  'ambiance_placeholder': 'Ambiance description...',
  'camera_motion_section': 'Camera / Audio / Dialogue',
  'camera_motion_label': 'Camera Motion',
  // Shot type enum values
  'shot_type_extreme_close_up': 'Extreme Close-up',
  'shot_type_close_up': 'Close-up',
  'shot_type_medium_close_up': 'Medium Close-up',
  'shot_type_medium_shot': 'Medium Shot',
  'shot_type_medium_long_shot': 'Medium Long Shot',
  'shot_type_long_shot': 'Long Shot',
  'shot_type_extreme_long_shot': 'Extreme Long Shot',
  'shot_type_over_the_shoulder': 'Over-the-shoulder',
  'shot_type_point_of_view': 'Point-of-view',
  // Camera motion enum values
  'camera_motion_static': 'Static',
  'camera_motion_pan_left': 'Pan Left',
  'camera_motion_pan_right': 'Pan Right',
  'camera_motion_tilt_up': 'Tilt Up',
  'camera_motion_tilt_down': 'Tilt Down',
  'camera_motion_zoom_in': 'Zoom In',
  'camera_motion_zoom_out': 'Zoom Out',
  'camera_motion_tracking_shot': 'Tracking Shot',
  'ambiance_audio_label': 'Ambiance Audio',
  'ambiance_audio_placeholder': 'Ambiance audio description...',
  'speaker_placeholder': 'Speaker',
  'line_placeholder': 'Line',
  'add_dialogue': 'Add Dialogue',
  'dialogue_remove': 'Remove dialogue',
  'image_prompt_placeholder': 'Storyboard description...',
  'video_prompt_placeholder': 'Video action description...',

  // VersionTimeMachine
  'version_mgmt': 'Versions',
  'switched_to_version': 'Switched to v{{version}}',
  'switch_version_failed': 'Failed to switch version: {{message}}',
  'no_history': 'No history versions yet',
  'history_hint': 'After generating or restoring, history versions will appear here.',
  'history_versions': 'History Versions',
  'current_version': 'Current v{{version}}',
  'version_click_hint': 'Click a version number to preview; non-current versions can be switched to.',
  'current_version_badge': 'Current',
  'switching_version': 'Switching...',
  'switch_to_version': 'Switch to this version',
  'version_preview_alt': 'Version v{{version}} preview',
  'version_no_notes': 'No additional notes recorded for this version.',

  // ProjectCard - more actions
  'more_actions': 'More Actions',
  'delete_project': 'Delete Project',
  'confirm_delete_project': 'Are you sure you want to delete project "{{title}}"? This action cannot be undone.',
  'deleting_project': 'Deleting...',

  // SystemConfigPage - language
  'language_setting': 'Language',

  // ---- Workbench v3 ----
  'project_switcher_current': 'Current project',
  'project_switcher_active_tag': 'ACTIVE',
  'project_switcher_new': 'New project…',
  'project_switcher_settings': 'Project settings…',
  'episodes_section_title': 'Episodes',
  'episode_search_placeholder': 'Search episode by name or number…',
  'add_episode': 'Add',
  'add_episode_unavailable': 'Not yet available',
  'sidebar_collapse': 'Collapse',
  'sidebar_expand': 'Expand',
  'episode_status_done': 'Done',
  'episode_status_active': 'In production',
  'episode_status_draft': 'Draft',
  'episode_status_idea': 'Idea',
  'episode_card_progress_label': 'Progress',
  'episode_workspace_no_episode': "Episode hasn't been started yet. Begin from the script, or let the agent draft for you.",
  'episode_workspace_start_cta': 'Start E{{episode}}',
  'episode_header_episode_chip': 'EP · {{number}}',
  'episode_header_segment_count': '{{count}} clips · ~{{duration}}s',
  'episode_header_progress_inline': 'In production · {{percent}}%',
  'episode_header_cost_estimated': 'Estimated',
  'episode_header_cost_spent': 'Spent',
  'episode_header_cost_remaining': 'Remaining',
  'tab_preprocessing': 'Preprocessing',
  'tab_timeline': 'Shots',
  'tab_grid_preview': 'Grids',
  'grid_preview_summary': '{{batches}} batches · {{cells}} cells · {{percent}}% ready',
  'grid_preview_batch_card_title': 'Batch #{{index}} · {{cellCount}} cells · {{rows}}×{{cols}}',
  'grid_preview_batch_generate': 'Generate grid',
  'grid_preview_empty_episode': 'No shots in this episode — split the script in Preprocessing first',
  'batch_generate_storyboards': 'Batch generate storyboards',
  'batch_generate_videos': 'Batch generate videos',
  'shot_search_placeholder': 'Search shots…',
  'shots_collapsed_label': 'SHOTS · {{count}}',
  'shots_section_title': 'Shots',
  'shot_list_collapse': 'Collapse',
  'shot_list_expand': 'Expand shot list',
  'shot_status_ready': 'Done',
  'shot_status_storyboard': 'Storyboard ready',
  'shot_status_pending': 'Pending',
  'shot_detail_prev': 'Previous',
  'shot_detail_next': 'Next',
  'shot_detail_count': '{{current}} / {{total}}',
  'task_hud_subtitle': 'Queue · Worker Status',
  'eyebrow_export_scope': 'Export · Scope',
  'eyebrow_segment_refs': 'References · Scope',
  'eyebrow_library': 'Library · {{type}}',
  'context_clear': 'Clear context',
  'context_label_character': 'Character',
  'context_label_scene': 'Scene',
  'context_label_prop': 'Prop',
  'context_label_segment': 'Segment',
  // ToolCallWithResult
  'tool_call_input_label': 'Input',
  'tool_call_skill_content_label': 'Skill content',
  'tool_call_result_label': 'Result',
  'tool_call_error_label': 'Failed',
  'tool_call_todo_summary': 'Todo list {{completed}}/{{total}} complete',
  'tool_call_todo_updated': 'Todo list updated',
  // MCP tool display names (single source of truth: ARCREEL_MCP_TOOL_IDS in
  // server/agent_runtime/sdk_tools/__init__.py; tests/test_frontend_mcp_tool_i18n.py
  // enforces all locales stay in sync — adding a backend tool without wiring zh/en/vi fails CI)
  'tool_name_list_pending_assets': 'List pending assets',
  'tool_name_generate_assets': 'Generate assets',
  'tool_name_generate_storyboards': 'Generate storyboards',
  'tool_name_generate_grid': 'Generate grid',
  'tool_name_generate_video_episode': 'Generate video (episode)',
  'tool_name_generate_video_scene': 'Generate video (scene)',
  'tool_name_generate_video_all': 'Generate video (all)',
  'tool_name_generate_video_selected': 'Generate video (selected)',
  'tool_name_generate_episode_script': 'Generate script',
  'tool_name_normalize_drama_script': 'Normalize drama script',
  'tool_name_get_video_capabilities': 'Query video model capabilities',
  // Skill display names (single source of truth: user-invocable SKILL.md files
  // under agent_runtime_profile/.claude/skills/; tests/test_frontend_skill_i18n.py enforces parity)
  'skill_name_manga_workflow': 'Video workflow',
  'skill_name_generate_storyboard': 'Generate storyboard',
  'skill_name_generate_grid': 'Generate grid',
  'skill_name_generate_video': 'Generate video',
  'skill_name_generate_assets': 'Generate assets',
  'skill_name_compose_video': 'Compose video',
  // PendingQuestionWizard
  'pending_question_wizard_label': 'Your input needed',
  'pending_question_wizard_step_question': 'Question {{number}}',
  'pending_question_wizard_multi_select': 'Multi-select',
  'pending_question_wizard_single_select': 'Single-select',
  'pending_question_wizard_select_option': 'Select an option',
  'pending_question_wizard_other_label': 'Other',
  'pending_question_wizard_other_placeholder': 'Type your answer',
  'pending_question_wizard_prev': '← Previous',
  'pending_question_wizard_next': 'Next →',
  'pending_question_wizard_submitting': 'Submitting…',
  'pending_question_wizard_submit': 'Submit →',
  'open_assistant_panel': 'Open assistant panel',
  'resize_assistant_panel': 'Resize assistant panel (double-click to reset)',
  'progress_aria_label': '{{label}} progress',
  'shot_detail_save': 'Save',
  'shot_detail_saving': 'Saving…',
  'shot_detail_cancel': 'Discard',
  'shot_detail_unsaved': 'Unsaved',
  'shot_detail_save_first': 'Save or discard current edits first',
  'shot_notes_button': 'Notes',
  'shot_notes_placeholder': 'Notes for {{id}}: references, revisions, todos…',
  'shot_notes_close': 'Close notes',
  'shot_notes_title': 'NOTES',
  'detail_section_dialogue': 'DIALOGUE',
  'detail_section_novel': 'ORIGINAL TEXT',
  'detail_section_prompts': 'PROMPTS',
  'detail_dialogue_empty': '(no dialogue yet)',
  'detail_dialogue_add': '+ Add dialogue',
  'detail_image_prompt_title': 'Image Prompt · Storyboard',
  'detail_video_prompt_title': 'Video Prompt · Clip',
  'detail_image_prompt_placeholder': 'Describe the frame: setting, characters, actions, composition…',
  'detail_video_prompt_placeholder': 'Describe the motion from the storyboard…',
  'detail_collapsible_composition': 'composition',
  'detail_collapsible_video_options': 'camera / audio / dialogue',
  'detail_field_chars_count': '{{count}} chars',
  'detail_tab_left': 'Script / Dialogue',
  'detail_tab_mid': 'Prompts',
  'detail_tab_right': 'Storyboard / Video',
  'detail_drawer_left_label': 'Script / Dialogue / Notes',
  'media_storyboard_title': 'Storyboard',
  'media_video_title': 'Video',
  'media_versions_label': 'Versions',
  'media_not_generated': 'Not generated yet',
  'media_no_prompt_yet': "This shot doesn't have prompts yet.",
  'media_smart_generate_prompt': 'Smart generate prompts',
  'media_generate_storyboard': 'Generate storyboard',
  'media_regenerate_storyboard': 'Regenerate storyboard',
  'media_generate_video': 'Generate video',
  'media_regenerate_video': 'Regenerate video',
  'media_generate_video_disabled_hint': 'Generate the storyboard first',
  'workspace_nav_overview': 'Overview',
  'workspace_nav_source': 'Source files',
  'workspace_nav_characters': 'Characters',
  'workspace_nav_scenes': 'Scenes',
  'workspace_nav_props': 'Props',

  // ---- Projects lobby · Darkroom ----
  'lobby_brand_subtitle': 'Studio',
  'lobby_search_placeholder': 'Search projects',
  'lobby_search_kbd': '⌘K',
  'lobby_hero_eyebrow': 'Studio',
  'lobby_hero_greeting_morning': 'Good morning, director.',
  'lobby_hero_greeting_afternoon': 'Good afternoon, director.',
  'lobby_hero_greeting_evening': 'Good evening, director.',
  'lobby_hero_greeting_late': 'Burning the midnight oil, director.',
  'lobby_hero_subtitle_active': '{{count}} reels in production.',
  'lobby_hero_subtitle_quiet': "Haven't started today.",
  'lobby_hero_subtitle_idle': 'Awaiting your first reel.',
  'lobby_hero_summary': '{{completed}} episodes wrapped, {{inProduction}} still in production.',
  'lobby_hero_summary_idle': 'Create a project to start your first reel.',
  'lobby_stat_total': 'TOTAL',
  'lobby_stat_production': 'PROD',
  'lobby_stat_completed': 'DONE',
  'lobby_stat_drafts': 'DRAFT',
  'lobby_filter_all': 'All',
  'lobby_filter_count_suffix': '',
  'lobby_sort_recent': 'Sorted · Recent',
  'lobby_now_editing_eyebrow': 'Pick up where you left off · NOW EDITING',
  'lobby_continue_editing_chip': 'CONTINUE EDITING',
  'lobby_library_eyebrow': 'All projects · LIBRARY',
  'lobby_library_count': '{{count}} projects',
  'lobby_open_workspace': 'Open editor',
  'lobby_open_workspace_completed': 'Review final cut',
  'lobby_now_editing_phase_label': 'Phase',
  'lobby_now_editing_progress_label': 'Progress',
  'lobby_now_editing_episodes_label': 'Episodes',
  'lobby_now_editing_episodes_value': '{{completed}}/{{total}} episodes',
  'lobby_card_stat_cast': 'CAST',
  'lobby_card_stat_scene': 'SCENE',
  'lobby_card_stat_prop': 'PROP',
  'lobby_card_stat_episode': 'EP',
  'lobby_no_filter_match': 'No matching projects',
  'lobby_no_filter_match_hint': 'Try clearing filters or a different keyword.',
  'lobby_clear_filters': 'Clear filters',
  'lobby_new_project_kicker': 'START · NEW REEL',
  'lobby_new_project_title': 'New project',
  'lobby_card_actions': 'Project actions',
  'openclaw': 'OpenClaw',
  'openclaw_title': 'OpenClaw integration guide',
  'openclaw_subtitle': 'Connect [[brand]] to your OpenClaw AI agent',
  'openclaw_prompt_label': 'Prompt',
  'openclaw_skill_url_label': 'Skill doc URL:',
  'openclaw_steps_label': 'Steps',
  'openclaw_step_01_title': 'Send the prompt above to your OpenClaw',
  'openclaw_step_01_desc': 'Copy the prompt and paste it into OpenClaw.',
  'openclaw_step_02_title': 'OpenClaw learns from the Skill doc',
  'openclaw_step_02_desc': 'OpenClaw automatically reads the [[brand]] Skill doc and discovers every available tool and API.',
  'openclaw_step_03_title': 'OpenClaw drives [[brand]] to create videos',
  'openclaw_step_03_desc': 'Describe what you want; OpenClaw will call [[brand]] to manage projects, generate scripts, and produce videos.',
  'openclaw_system_prompt': 'Read {{skillUrl}} and then follow the skill to learn how to create videos with [[brand]]',
  'openclaw_get_api_token': 'Get API token',
  'agent_credentials': 'Agent Providers',
  'claude_compat_providers': 'Claude providers',
  'unified_providers_coming_soon': 'Unified providers (coming soon)',
  'custom_config': 'Custom',
  'cred_list_empty': 'No providers yet. Click "Add Provider" to begin.',
  'cred_activate_label': 'Set active',
  'cred_edit_label': 'Edit',
  'cred_delete_label': 'Delete',
  'cred_test_label': 'Test',
  'cred_testing': 'Testing…',
  'raw_error': 'Raw Error',
  'is_active': 'ACTIVE',
  'cred_delete_active_blocked': 'Cannot delete the active credential. Activate another first.',
  'cred_delete_confirm_title': 'Delete credential',
  'cred_delete_confirm': 'Delete this credential? This cannot be undone.',
  'edit_credential_title': 'Edit credential',
  'preset_locked_in_edit': 'Provider cannot be changed in edit mode',
  'api_key_unchanged_hint': 'Leave empty to keep unchanged',
  'cred_activated_toast': 'Switched to {{name}}. New sessions will use it; running sessions keep the old credential.',
  'display_name': 'Display name',
  'get_api_key': 'Get API Key',
  'test_running': 'Testing…',
  'test_ok': 'Connected',
  'test_warn': 'Callable, but discovery endpoint failed',
  'test_fail': 'Cannot connect',
  'apply_fix': 'Apply fix',
  'apply_fix_hint': 'Suggested:',
  'derived_messages_root': 'Messages endpoint',
  'derived_discovery_root': 'Discovery endpoint',
  'diagnosis_missing_anthropic_suffix': 'Detected missing anthropic suffix; auto-discovered the correct endpoint.',
  'diagnosis_openai_compat_only': 'This endpoint speaks OpenAI-compat protocol — Claude SDK cannot use it. Check the plan.',
  'diagnosis_auth_failed': 'API key is invalid or expired.',
  'diagnosis_model_not_found': 'Model not found. Discover available models first.',
  'diagnosis_rate_limited': 'Rate limited. Try again later.',
  'diagnosis_network': 'Network unreachable. Check URL and firewall.',
  'diagnosis_unknown': 'Unknown error. See raw response.',
};
