@motion-studio/cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,29 +1,29 @@
1
- import{s as m,o as y,a as k,b as B,n as v,_ as z,l as E,d as Z,p as Fn,u as Ie,c as pi,e as U,f as Kt,r as re,g as Ln,Z as ae}from"./vendor-IQO2I6nB.js";const Nn={common:{cancel:"Cancel",save:"Save",close:"Close",loading:"Loading…",items:e=>e.count===1?"1 item":`${e.count} items`},errors:{toolUnavailable:"Tool not available in this job",notFound:"Not found",fileNotFoundShort:"File not found",nonLocalOrigin:"Request not allowed: non-local origin",kitUnreadable:"Brand kit unreadable",invalidBridgeAccess:"Invalid bridge access",internalError:"Internal Motion Studio error",unknownTool:e=>`Unknown tool: ${e.tool}`,markerNotFound:"marker not found",exitCode:e=>`code ${e.code}`,timedOut:e=>`timed out after ${e.seconds} s`,formatCatalogFallback:e=>`${e.detail}. Using the default catalog.`,jobCancelled:"The job was cancelled.",invalidProgress:"Invalid progress message (1-300 characters)",invalidPhase:"Invalid analysis phase: use reading, fonts, colors, logos, tone or writing",validateOnlyCreatives:"Validation is only available in creatives",previewFramesLimit:e=>`preview_frames can be called at most ${e.max} times per turn: check the frames you already have, then finish the turn`,previewFramesTimes:e=>`Give from 1 to ${e.max} times, in seconds from the start of the composition`,previewBusy:"Too many previews are being prepared: try again in a moment",previewSessionNotFound:"No such live preview",chromeDownloadFailed:e=>`The Chrome for Testing download did not complete (${e.code}). The details are in the Motion Studio log.`,chromeConsentRequired:"Chrome for Testing is downloaded only after you agree to its size",chromeDownloadUnavailable:"Chrome for Testing cannot be downloaded here",chromeInfoFailed:e=>`Could not read the Chrome for Testing download (${e.code}). The details are in the Motion Studio log.`,chromeSizeChanged:"The Chrome for Testing download changed since you agreed: check its size again",renderEngineAvailable:"A browser to render with is already available",formatNotInTurn:e=>`${e.format} is not one of the formats of this turn: use ${e.list}`,previewUnavailable:"Previews are not available in this Motion Studio: no Chromium to render with",previewOrigin:"This window cannot show a live preview (its origin is not allowed)",compositionNotFound:e=>`v${e.n} has no composition for ${e.format}`,compositionUnusable:e=>`The composition of ${e.format} in v${e.n} has problems: it cannot be previewed`,rootPath:"(root)",turnFailed:"Turn failed",codebaseNotAbsolute:e=>`The linked folder must be an absolute path: ${e.path}`,codebaseDiskRoot:"You can't link the disk root",codebaseHome:"Link a specific folder, not your whole home folder",codebaseOverlap:"A linked folder cannot contain the project or sit inside it",codebaseOverlapNamed:e=>`The linked folder ${e.path} cannot contain the project or the workspace, nor sit inside them`,codebaseUnsafePath:"The folder path contains control characters: rename the folder or choose another one",codebaseGlobChars:e=>`The folder path ${e.path} contains ( ) [ ] { } * ? or \\, which the agent's file rules cannot match safely: rename the folder (or the parent folder that has them). A symbolic link does not help: the folder's real path is checked too`,folderGlobChars:e=>`The path ${e.path} of the workspace or project folder contains ( ) [ ] { } * ? or \\, which the agent's rules protecting Motion Studio's files cannot match safely, so the agent does not run there: rename the folder (or the parent folder that has them), then choose the workspace again`,codebaseSourceMissing:e=>`Folder not found: ${e.path}`,codebaseSourceDuplicate:e=>`This folder is already a brand source: ${e.path}`,codebaseSourceLimit:e=>`At most ${e.max} codebase sources per brand`,codebaseOverlapBrand:"The codebase cannot contain the project or the workspace, nor sit inside them",codebaseNestedBrand:"The codebase is inside another codebase source or contains one: add only one of them",codebaseConfigBrand:"The codebase cannot contain Motion Studio's configuration folder, nor sit inside it",codebaseSensitiveBrand:"The codebase cannot be, contain or sit inside a private folder of your home: keys and credentials, .config, or anything under Library (iCloud Drive included)",pathIsFile:e=>`${e.path} is a file, not a folder`,workspaceNotFound:e=>`Workspace folder not found: ${e.path}`,notWritable:e=>`Cannot write to ${e.path}: check the permissions`,invalidSettings:e=>`Invalid settings: ${e.fields}`,invalidProjectId:e=>`Invalid project id: ${e.slug}`,projectNotFound:e=>`Project ${e.slug} not found`,projectNameRequired:"Enter a project name",invalidProject:e=>`Invalid project: ${e.fields}`,projectIconInvalid:"The project icon must be an image from Assets.",fileNotFound:"file not found",invalidJson:e=>`invalid JSON (${e.detail})`,invalidContent:e=>`invalid content — ${e.detail}`,gitNotFound:"git not found: install it to use Motion Studio",commitNotFound:e=>`Version not found in the repository: ${e.commit}`,gitFailed:e=>`git ${e.command} failed: ${e.detail}`,gitRepoUnsafe:e=>`Motion Studio stopped before running git: the repository has settings it did not create, which could run a command outside the sandbox (${e.detail}). No commit was made. Check the project's .git/config, .gitattributes and .git/info/attributes, remove what you did not add, and try again.`,gitDirNotFolder:`Motion Studio stopped before running git: the project's .git is not a folder (it is a file or a link, for example a "gitdir:" pointer), so git would read a configuration from somewhere else. No commit was made. Replace .git with the project's real repository folder, then try again.`,gitLayoutFile:e=>`Motion Studio stopped before running git: the project has ${e.file}, which makes git load a configuration from another place. Motion Studio never creates it. No commit was made. Delete ${e.file} if you did not add it on purpose, then try again.`,gitConfigOrigin:e=>`Motion Studio stopped before running git: the setting ${e.key} comes from ${e.origin}, not from the project's own .git/config (for example through an include). No commit was made. Remove the include or the file that adds it, then try again.`,gitConfigKeyBlocked:e=>`Motion Studio stopped before running git: the project's .git/config has the setting ${e.key}, which Motion Studio does not allow because it could run a command outside the sandbox (filters, diff drivers, includes, aliases, hooks…). No commit was made. If you did not add it on purpose, remove it with "git config --unset ${e.key}" in the project folder (or delete its section from .git/config), then try again.`,gitConfigValueBlocked:e=>`Motion Studio stopped before running git: the value of ${e.key} in the project's .git/config contains "!", "ext::" or an --upload-pack/--receive-pack option, which could run a command. No commit was made. Set it to a plain address with "git config ${e.key} <value>" (or remove it with "git config --unset ${e.key}"), then try again.`,gitAttributesBlocked:e=>`Motion Studio stopped before running git: ${e.file} sets a filter or a diff/merge driver ("${e.line}"), which could run a command outside the sandbox. No commit was made. Remove that line (built-in diff names such as diff=python are fine), then try again.`,projectQuarantined:e=>`Motion Studio has locked this project: protected files changed in a way Motion Studio did not make (${e.list}). They configure git or the agent and would run outside the sandbox, so no agent and no git runs on the project for now. Put those files back as they were (for example from a backup, or undo the change you made); Motion Studio unlocks the project by itself as soon as they match again. If you made the change yourself, accept it on the project page.`,integrityChangedSince:"The protected files changed since the list was shown: check the updated list before accepting.",integrityRecordUnreadable:"the integrity record in the Motion Studio settings folder could not be read",invalidRequest:"Invalid request",invalidRequestDetail:e=>`Invalid request: ${e.detail}`,outputsFolderNotFound:"Outputs folder not found",useAsLogoNoSvg:"This format has no logo file to use: render it first (an app icon has no SVG)",useAsLogoNotChecked:"This version has no checked logo yet: render the format first",useAsLogoMissing:"The logo file of this version is missing: render the format again",useAsLogoRefused:"The logo file did not pass the SVG safety check, so it cannot be added to the brand",useAsLogoNotIdentity:"This format is not a logo, favicon or app icon",useAsLogoBadVariant:"Choose the primary logo or the icon",versionNotFound:"Version not found",noWorkspace:"No workspace configured: choose a working folder",workspacePathAbsolute:"Enter an absolute path for the workspace",promptRequired:"Write a request for the agent",invalidSessionId:"Invalid session id",textMissing:"Text is missing",imageMustBeReference:"The image must be a project reference",unknownProvider:e=>`Unknown provider: ${e.provider}`,keyFromEnv:"The key comes from an environment variable: change it there",invalidDecision:"Invalid decision",questionNeedsAnswer:"Answer the question with one of its options or your own words",invalidAnswer:"The answer does not fit the question",ruleMissing:"Rule is missing",revealFailed:"Can't show the outputs folder in Finder",invalidKey:"Invalid key: paste the provider key on a single line",keychainUnavailable:e=>`The system keychain is not available: ${e.detail}`,invalidPath:e=>`Invalid path: ${e.file}`,reservedFile:e=>`Reserved file: ${e.file}`,fileNotValid:e=>`File not found or invalid: ${e.kind}/${e.file}`,fileInaccessible:e=>`File not accessible: ${e.kind}/${e.file}`,fileOutsideFolder:e=>`File outside the folder: ${e.kind}/${e.file}`,folderInvalid:e=>`Invalid ${e.kind} folder: it is a link or lies outside the project`,assetsMetaInvalid:"Invalid asset metadata",referencesMetaInvalid:"Invalid reference metadata",assetNotFound:e=>`Asset ${e.file} not found`,assetReferenceInUse:e=>`${e.file} is already used by a creative or the brand: it stays in Assets`,referenceNotFound:e=>`Reference ${e.file} not found`,assetRenameInvalid:"Choose a new file name without folders",assetRenameExists:e=>`A file named ${e.file} already exists`,assetRenameKind:e=>`The new name ${e.file} would change the file type`,assetRenameFailed:"The asset could not be renamed; nothing was changed",waveformUnavailable:"The waveform of this file is not available",fileTooLarge:e=>`File too large: ${e.name}`,uploadTooLarge:"Too many files or files too large in one upload",noFileReceived:"No file received",invalidCreativeId:e=>`Invalid creative id: ${e.slug}`,invalidBrief:e=>`Invalid brief: ${e.detail}`,creativeNotFound:e=>`Creative ${e.slug} not found`,invalidCreative:e=>`Invalid creative: ${e.detail}`,formatsReorderRemoveOnly:"A partial save can only reorder or remove formats the brief already has",waitBeforeBrief:"Wait for the current generation to finish before editing the brief",variantRunning:e=>`Variant ${e.letter} is working: stop it before discarding it`,variantLastActive:e=>`Variant ${e.letter} is the last active variant: keep at least one`,creativeBusyTurn:"An agent request of this creative is running or queued: wait for it to end, or stop it",creativeBusyQueued:"This creative has requests waiting in its queue: remove them first",creativeBusyRender:"A render of this creative is running or queued: wait for it to end",creativeGroupAll:e=>`This is variant A of a group of ${e.count} variants: archive or delete the whole group`,trashUnavailable:e=>`Can't move the creative to the Trash: ${e.detail}`,trashOtherVolume:"the project is on a different disk than the Trash",trashUnsupported:"Motion Studio cannot use the Trash of this system",variantUnknown:e=>`This creative has no variant ${e.letter}`,variantAddFanout:e=>`This request was sent to several variants: variant ${e.letter} adds the new variants. Do not add one here`,variantAddFirstGeneration:"A variant's first generation does not add variants: the user can ask for one in a message",variantNoGroup:"This creative has no variants",variantOrphan:"The group of this variant cannot be found: it opens as a single creative",variantDiscarded:e=>`Variant ${e.letter} is discarded: restore it first`,variantPickInvalid:e=>`Invalid selection: ${e.detail}`,variantPickNotMember:e=>`${e.slug} is not an active variant of this group`,variantPickNoFormat:e=>`Version ${e.n} has no ${e.format}`,variantBaseInvalid:e=>`Cannot start from that version: ${e.detail}`,variantBaseChanged:e=>`The files of ${e.format} in version ${e.n} changed since they were saved`,variantFolderExists:e=>`A folder named ${e.slug} already exists`,variantDirections:"One direction per new variant at most, each up to 140 characters",variantDiscardedTurn:"Restore the variant to work on it",variantBusyFormats:e=>`Variant ${e.letter} is working: a request for some formats only cannot wait in its queue. Send it to that variant when it is done`,variantDirectionsFailed:"The agent did not propose valid directions for the variants: type them yourself or try again",generationRunning:"A generation is already running for this creative",waitBeforeRestart:"Wait for the current generation to finish before restarting from a version",versionNNotFound:e=>`Version ${e.n} not found`,versionNotRestorable:e=>`Version ${e.n} cannot be restored (commit or session is missing)`,formatNotInBrief:e=>`The format ${e.format} is not in the brief`,waitBeforeLinks:"Wait for the current generation to finish before linking or unlinking formats",formatsNotInBrief:"None of the requested formats is in the brief",linkSelf:"A format cannot follow itself",linkChain:e=>`${e.follower} cannot follow ${e.primary}: a format that follows another cannot have followers, and a format with followers cannot follow another`,linkIncompatible:e=>`${e.follower} cannot follow ${e.primary}: ${e.reason}`,followReason:{kind:"one is a video and the other an image",size:"their sizes are different",extension:"it does not accept every file type the main format can have",duration:"the main format is longer than its maximum duration",safeZone:"its safe area is smaller than the main format’s",self:"it is the same format",chain:"links cannot form a chain",unknown:"the format is not in the brief or the catalog",fileSize:"the main format’s file is larger than its maximum file size"},hashesPending:"Still reading the files of this format: try again in a few seconds",pickFollower:e=>`${e.format} follows ${e.primary}: it uses the ★ of ${e.primary}`,pickNoFile:e=>`Version ${e.n} has no file for ${e.format}`,pickFileMissing:e=>`The ${e.format} file of version ${e.n} is missing on disk or cannot be used (a link)`,approvalNotFound:"Approval request not found or already handled",invalidRule:"Invalid permission rule",tooManyPermissions:"Too many saved permissions: revoke some in the project settings",invalidPermission:"Invalid permission",permissionNotFound:"Permission not found",invalidBrandKit:e=>`Invalid brand kit: ${e.detail}`,resultingBrandKitInvalid:e=>`The resulting brand kit is invalid: ${e.detail}`,guidelinesTooLong:"Guidelines too long (maximum 200,000 characters)",invalidSourceUrl:"Invalid source: invalid URL",privateSourceUrl:"Local or private addresses are not allowed as a source",invalidSource:e=>`Invalid source: ${e.detail}`,sourceExists:"This source is already added",sourceNotFound:e=>`Source ${e.id} not found`,invalidProposalId:e=>`Invalid proposal id: ${e.id}`,proposalNotFound:e=>`Proposal ${e.id} not found`,proposalInvalid:e=>`Invalid proposal: ${e.detail}`,proposalNotObject:"Invalid proposal: brand-kit.json does not contain a JSON object",proposalKitFile:e=>`Invalid proposal: brand-kit.json ${e.reason}`,proposalBadJson:e=>`Invalid proposal: invalid JSON (${e.detail})`,proposalMissing:"missing",proposedGuidelinesTooLong:"Proposed guidelines too long",proposalClosed:"The proposal was already applied or discarded",analysisRunning:"A brand analysis or an asset description is already running for this project",addSourceFirst:"Add at least one website, image or codebase to analyze",noUsableCodebase:"None of the sources can be analyzed: the codebase folders are missing or not usable",noAssetsToDescribe:"No assets to describe",skipNotRegular:"not a regular file",skipTooLarge:"file too large",skipUnreadable:"unreadable",skipLinked:"linked file not allowed",skipOutside:"outside the project",claudeCommandInvalidJson:e=>`MOTION_STUDIO_CLAUDE_COMMAND is not valid JSON (${e.detail}): use a JSON array of strings`,claudeCommandNotArray:"MOTION_STUDIO_CLAUDE_COMMAND must be a JSON array of strings",claudeCommandEmpty:"claudeCommand is empty",alreadyRunning:e=>`Motion Studio is already running (port ${e.port})`,bootBusy:"Another Motion Studio is starting with the same configuration: try again shortly",formatCatalogInvalid:e=>`Invalid format catalog: ${e.detail}`,formatCatalogUnreadable:e=>`The format catalog cannot be read, so it was not changed: ${e.detail}`,customFormatNotFound:e=>`There is no custom format "${e.id}"`,customFormatNotCustom:e=>`"${e.id}" is not a custom format: only custom formats are changed or deleted here`,customFormatNameTaken:e=>`A custom format is already called "${e.name}": choose another name`,customFormatInUse:e=>`${e.count===1?"A creative uses":`${e.count} creatives use`} this format: its type and size stay as they are (create a new format for another size)`,customFormatMaybeInUse:e=>`${e.count===1?"A creative cannot be read and might use":`${e.count} creatives cannot be read and might use`} this format: its type and size stay as they are`,customFormatDurationShort:e=>`A creative uses this format for ${e.sec} s: its maximum length cannot go below that`,formatUnavailable:e=>`The format "${e.id}" is no longer available: take it out of the brief`,invalidLanguage:"Choose a language from the list.",settingsNotWritable:e=>`Motion Studio cannot write the settings file (${e.path}). Check that the file and its folder are writable and not locked (Finder: Get Info, Locked), then save again.`,briefSessionGone:"This brief session is over (started over or turned into a creative elsewhere). Reload the page.",briefQueueFull:e=>`At most ${e.max} messages can wait for the agent: wait for it to finish, or stop it.`,briefSessionUnreadable:"The brief session of this project cannot be read: start over to discard it.",briefHandedOff:"This brief session was moved into a creative, but not completely: open the creative, or discard the session.",briefSessionBusy:"The agent is still working on the brief: wait for it to finish, or stop it.",briefUnknownFormat:e=>`${e.id} is not a format of the catalog: use an id from list_formats.`,briefIdentityFormat:e=>`${e.id} is an identity format: the brief agent cannot pick identity formats.`,briefFormatGap:e=>`${e.id}: the copies of a format go from its id up, none left out: ${e.missing} is missing.`,briefAssetOutside:e=>`${e.path} is not among the assets attached to this session.`,briefCodebaseOutside:e=>`${e.path} is not among the folders linked to this session.`,briefFillLimit:e=>`fill_brief can be called at most ${e.max} times in a turn.`,briefBadField:e=>`fill_brief: ${e.field}: ${e.detail}`,briefSourceSize:e=>`${e.path}: its size is not known (only a video or an image in the project’s Assets whose size was read can give a format).`,briefSourceKind:e=>`${e.path} is not a video or an image (an SVG or another file has no size of its own to use as a format).`,briefSourceSmall:e=>`${e.path} is too small for a format (a side under 16 px).`,briefSourceNoName:e=>`No free name was found for the format of ${e.path}: rename one of the custom formats called “Original …” and try again.`,briefAssetNotFound:e=>`${e.path} is not a file in the project’s Assets.`,analysisEdited:"This analysis was edited by hand: confirm to overwrite it with a new analysis.",analysisNotVideo:"Only videos in the project’s Assets can be analysed.",analysisBadWrite:e=>`write_video_analysis: ${e.detail}`,analysisNoWrite:"The agent ended without writing the analysis (write_video_analysis was not called).",analysisChanged:"The video changed during the analysis: it will be analysed again.",analysisWriteLimit:"write_video_analysis can be called at most 5 times in a run.",analysisGone:"The video is no longer in Assets.",analysisNothingWaits:"This creative is not waiting for a video analysis.",whisperNotFound:"No Whisper was found: install one, or point to it in Settings → Video transcription.",whisperProbeFailed:e=>`This Whisper did not work on a test second of audio: ${e.detail}`,whisperModelMissing:"The Whisper model is not installed.",transcriptionFailed:e=>`The transcription failed: ${e.reason}`,downloadSizeChanged:"The download size is not the one shown: open the choice again.",downloadBusy:"Another Whisper model is being downloaded: wait for it to finish.",downloadHashMismatch:"The downloaded file is not the expected one (sha256 check failed): it was deleted.",transcriptionNoKey:e=>`There is no saved ${e.provider} key: add it in Settings → Services.`,transcriptionNothingAsks:"This video is not waiting for a transcription choice.",transcriptionRecheckTimeout:"The search for Whispers did not answer in time: try again.",subtitlesRunning:"The subtitles of this creative are already being made.",subtitlesNoSet:"There are no subtitles to retime: make them first.",subtitlesNoVideo:"The latest version has no video format: there is nothing to subtitle.",noFfmpegSubtitles:"Subtitles need ffmpeg, which was not found on this Mac.",subtitlesTranscriptionOff:"Video transcription is switched off: turn it on in Settings → Video transcription to make subtitles.",subtitlesConflict:"The subtitles were changed elsewhere: reload them.",subtitlesTooLarge:e=>`The subtitles are over ${e.maxMB} MB.`,subtitlesOncePerTurn:"The subtitles were already asked for in this turn: they start when it ends.",subtitlesNoLang:e=>`This creative has no subtitles in ${e.lang}.`,subtitlesUnknownCue:e=>`No subtitle line has these ids: ${e.ids}. Nothing was changed.`,subtitlesCueChanged:e=>`These subtitle lines changed since you read them: ${e.ids}. Nothing was changed: read them again.`,subtitlesNoSource:"There are no subtitles made from the speech to translate: make them first.",subtitlesSameLang:e=>`The subtitles are already in ${e.lang}.`,subtitlesLangSpoken:e=>`The subtitles in ${e.lang} come from the video's own speech: they are not translated.`,subtitlesTranslating:e=>`The subtitles in ${e.lang} are already being translated.`,subtitlesNoCues:e=>`The subtitles have no line with these ids: ${e.ids}.`,subtitlesNoIds:"Name at least one subtitle line to translate again.",subtitlesNothingToTranslate:e=>`Every line in ${e.lang} is one you corrected: there is nothing to translate.`,subtitlesLangExists:e=>`This creative already has subtitles in ${e.lang}.`,subtitlesNothingStale:e=>`No line in ${e.lang} needs translating again.`,subtitlesNothingStaleCorrected:e=>`The lines to translate again in ${e.lang} are ones you corrected: pick them to translate them again.`,subtitlesFollowsSource:"A translation has the timing of the subtitles it comes from: check the timing of those.",subtitlesSourceSet:"These subtitles come from the video's speech and other languages are translated from them: delete those translations first.",subtitlesSourceChanged:"The subtitles it was translating from are gone (deleted, or made again in another language): nothing was written.",subtitlesLangTranslated:e=>`The subtitles in ${e.lang} are a translation: to make them from the video's speech, delete them first.`,subtitlesOtherSpeech:e=>`The subtitles from the video's speech are in ${e.other} and other languages are translated from them: to make them again in ${e.lang}, delete those translations first. To add a language, use “+ Language”, which translates them.`,subtitlesVoiceGone:e=>`The ${e.lang} video no longer has its own translated voice: its subtitles are not made again from speech. Delete them and add ${e.lang} again with “+ Language”, which translates them.`,subtitlesTranslateBad:e=>`submit_subtitle_translation: ${e.detail}`,subtitlesTranslateLimit:"submit_subtitle_translation can be called at most 5 times in a run.",transcriptionNoBundled:"This app has no Whisper of its own: install one or point to it in Settings → Video transcription."},videoAnalysis:{waiting:e=>`Analysing the video (${e.files})…`,skip:"Skip",skipped:e=>`Analysis skipped: the agent uses the video as it is (${e.files}).`,failed:e=>`The analysis of ${e.file} failed: ${e.reason}`,states:{none:"Not analysed",queued:"Queued",running:"In progress",waiting:"Waiting",ready:"Ready",stale:"Out of date",error:"Error"},commit:e=>`Video analysis: ${e.file}`,editedCommit:e=>`Video analysis edited: ${e.file}`,movedCommit:e=>`Video analysis moved: ${e.from} → ${e.to}`,section:"Analysis",analyze:"Analyse",reanalyze:"Analyse again",edit:"Edit",stop:"Stop",answer:"Choose…",overwriteTitle:"The analysis was edited: overwrite it?",overwriteText:"A new analysis replaces the text you edited by hand.",overwrite:"Overwrite",summary:"Summary",timeline:"Scenes",moments:"Usable moments",transcript:"Transcript",tags:"Tags",onScreenText:"On-screen text",seek:e=>`Go to ${e.time}`,automatic:"Automatic transcript: names may be wrong.",noTranscript:{skipped:"Transcription skipped.",noSpeech:"Nobody speaks in the video.",noAudio:"The video has no audio.",empty:"No speech recognised."},edited:"Edited by hand",raw:"The text was rewritten by hand: shown as it is.",hints:{none:"The video is analysed when it enters a brief, or now with Analyse.",queued:"Starts as soon as the project's other analyses finish.",checkingAudio:"Checking the audio for speech first.",running:"The agent is looking at the video's frames…",stale:"The video changed after the analysis.",staleEdited:"The video changed after your edit: Analyse again to update it.",long:"This is a long video: choose how to analyse it.",transcription:"A choice about transcribing the speech is needed."},editLabel:"Analysis text",editHint:"The file's header stays the one the app wrote.",actionFailed:e=>`Failed: ${e.detail}`,analyzedMark:"Analysed",longTitle:e=>`Long video: ${e.file}`,longText:e=>`The video lasts ${e.minutes} minutes: analysing all of it uses many tokens.`,longFull:"Analyse everything",longReduced:"Analyse at reduced density",longEstimate:e=>`${e.frames} frames · about ${e.tokens} tokens`,longReducedNote:"One frame per scene, at most one every 30 seconds.",skipFailed:e=>`Could not skip the wait: ${e.detail}`},transcription:{title:"Video transcription",why:"With a transcription the agent knows what is said and when: it can quote it or sync the texts to it.",leavesMac:"The audio leaves the Mac.",pythonCache:"This Whisper downloads its models into its own folder on first use.",dialogTitle:e=>`Transcribe the speech of ${e.file}?`,subtitlesTitle:e=>`Subtitles of ${e.title}: transcribe the speech?`,subtitlesWhy:"Subtitles are made from the video's speech: it has to be transcribed first.",methods:{ask:"Ask every time",whisper:"Whisper on the Mac",openai:"OpenAI",elevenlabs:"ElevenLabs",never:"Never"},method:"Method",model:"Whisper model",models:{small:"Small","large-v3-turbo":"Large v3 Turbo"},withOpenai:e=>`Transcribe with OpenAI · ~${e.cost}`,withElevenlabs:e=>`Transcribe with ElevenLabs · ~${e.cost}`,continueWithout:"Continue without transcription",remember:"Remember the choice",install:e=>`Install · ${e.size}`,remove:"Remove",installed:"Installed",notInstalled:"Not installed",downloading:e=>`Downloading… ${e.percent}%`,useInstalled:"Use an installed Whisper",choose:"Choose…",program:"Program",modelFile:"Model file (ggml)",test:"Test",found:e=>`Whisper found: ${e.engine}, ${e.version}, ${e.model}, Metal/GPU ${e.gpu}`,gpu:{yes:"yes",no:"no",unknown:"unknown"},versionUnknown:"version unknown",choicesLabel:"How to transcribe the speech",installing:"Installing Whisper…",installFailed:e=>`The installation failed: ${e.detail}`,choiceFailed:e=>`The choice failed: ${e.detail}`,chosen:"Choice sent: the analysis goes on.",free:"Free, stays on the Mac.",sub:"When a video with speech enters a brief, the app transcribes it with the chosen method. Applies to every project.",methodSub:'With "Ask every time" the app asks for each video with speech.',modelSub:"Small is fast and light; Large v3 Turbo is more accurate and heavier.",installedSize:e=>`Installed · ${e.size}`,perMinute:e=>`about ${e.cost} per minute`,noKey:"Needs a key saved in Settings → Paid services.",paidNote:"Paid: the audio leaves the Mac.",inUse:e=>`In use: ${e.engine} · ${e.source}`,noneInUse:"No Whisper ready: install a model or point to a Whisper already installed.",sources:{settings:"set by you",bundled:"bundled with the app",detected:"found on the Mac"},detected:"Found on this Mac",noneDetected:"No Whisper on the PATH nor in the Homebrew folders.",useThis:"Use this",stopUsing:"Stop using it",engine:"Engine",programPlaceholder:"/opt/homebrew/bin/whisper-cli",modelFilePlaceholder:"Optional: a ggml-*.bin file you already have",testAndSave:"Test and save",testing:"Testing…",problem:e=>`It did not work: ${e.detail}`,saved:"Saved",saveFailed:e=>`Not saved: ${e.detail}`,removeFailed:e=>`Not removed: ${e.detail}`,loadFailed:e=>`Could not read the transcription settings: ${e.detail}`,pickFailed:e=>`Could not open the file chooser: ${e.detail}`,searching:"Looking for Whispers on the Mac…",searchAgain:"Search again",needsModel:"Works with a model downloaded by the app.",downloadsOwn:"Downloads its own model on first use.",custom:"Set by you",whyTitle:"What it is for",whisperTitle:"Transcribe with Whisper",recommended:"Recommended",freeLocal:"Free · the audio stays on the Mac",modelOnce:e=>`${e.model} model, ${e.size} once`,modelReady:e=>`${e.model} model`,ownModel:"downloads its own model on first use",paidHeading:"Paid",getWhisper:"This app has no Whisper of its own: install one with one of these commands in Terminal, then press Check again.",stepBrew:"whisper.cpp with Homebrew",stepPip:"or Whisper for Python",copy:"Copy",copied:"Copied",copyCommand:e=>`Copy ${e.command}`,copiedStatus:"Command copied.",copyFallback:e=>`It could not be copied: the command is selected, press ${e.keys}.`,recheck:"Check again",rechecking:"Checking…",stillNone:"Still no Whisper found on this Mac.",recheckFailed:e=>`The check failed: ${e.detail}`,pickInstalled:"Installed somewhere else? Point to it in Settings"},subtitles:{commit:e=>`Subtitles: ${e.title} (${e.lang})`,commitDeleted:e=>`Subtitles deleted: ${e.title} (${e.lang})`,ready:e=>`Subtitles ready (${e.lang}).`,readyOtherLang:e=>`Subtitles ready in ${e.lang}: it is the language spoken in the video, not the brief's (${e.brief}).`,noSpeech:"No speech in the video: no subtitles.",transcriptionOff:"video transcription is switched off (Settings → Video transcription).",transcriptionUnavailable:"the transcription was not made: the chosen method is not available or did not work. Check Settings → Video transcription.",transcriptionTimeout:"the transcription check did not answer in time: try again.",unsupportedUnknown:"No subtitles: the language spoken in the video could not be recognised.",unsupported:e=>`No subtitles: the language spoken in the video (${e.detected}) is not supported.`,failed:e=>`The subtitles could not be made: ${e.reason}`,notStarted:e=>`The subtitles did not start: ${e.reason}`,cancelledNoTranscription:"Subtitles cancelled: you chose to continue without a transcription.",setUnreadable:e=>`the file ${e.file} cannot be read as subtitles and may hold your corrections: fix or move it, then make the subtitles again.`,translated:e=>`Subtitles translated into ${e.lang}.`,translateFailed:e=>`The subtitles could not be translated into ${e.lang}: ${e.reason}`,translateMissing:e=>e.count===1?"the translation left out 1 line":`the translation left out ${e.count} lines`,translatedStale:e=>e.count===1?`Subtitles translated into ${e.lang}. 1 line no longer matches its source line (it changed meanwhile, or you corrected it): check it.`:`Subtitles translated into ${e.lang}. ${e.count} lines no longer match their source line (they changed meanwhile, or you corrected them): check them.`,translateNothing:e=>`Nothing to translate into ${e.lang}: every line is one you corrected.`,notStartedTurn:"The subtitles did not start: the turn did not finish. Ask for them again.",styleStarted:"Subtitles ready: the agent is drawing them into the video.",styleWaiting:"Subtitles ready: the agent will draw them into the video as soon as the current work ends.",styleVersionRequest:"Subtitles drawn into the video",styleAfterStop:"the work before did not finish. Ask the agent to draw them.",styleAskLater:"Subtitles ready: ask the agent to draw them into the video when you carry on.",styleNotStarted:e=>`The subtitles were not drawn into the video: ${e.reason}`,readyTitle:"Subtitles ready",download:e=>`Download ${e.ext}`,downloadFailed:e=>`Download failed: ${e.detail}`,openEditor:"Open the editor",editorTitle:"Subtitles",backToCreative:"Back to the creative",backToEditor:"Back to the editor",savedElsewhere:"Changed elsewhere: reloaded, your corrections are kept",saveState:"Save status",saving:"Saving…",saved:"Saved",saveFailed:"Not saved",notSaved:"the latest edits are not saved, the file would miss them. Try again once they are saved",retry:"Try again",undo:"Undo",redo:"Redo",loading:"Loading the subtitles…",loadFailed:e=>`The subtitles did not load: ${e.detail}`,noSets:"This creative has no subtitles yet: ask the agent for them in the chat.",noPreview:"The preview of this version is not available: the lines can still be edited.",play:"Play",pause:"Pause",lines:"Lines",listLabel:"Subtitle lines",addLine:"+ Line",noRoom:"There is no room for a new line here: move the video to a point without subtitles.",findReplace:"Find and replace",find:"Find",replaceWith:"Replace with",matchCase:"Match case",replaceAll:"Replace all",matches:e=>e.count===1?"1 line":`${e.count} lines`,row:e=>`Line ${e.n}`,start:e=>`Start of line ${e.n}`,end:e=>`End of line ${e.n}`,text:e=>`Text of line ${e.n}`,timeHint:"Write the time as mm:ss.mmm",split:"Split at the cursor",merge:"Merge with the next",remove:"Delete the line",timeline:"Timeline",timelineHint:e=>`Drag a line or its edges to change its times; ${e.mod} + scroll to zoom`,waveformLoading:"Loading the waveform…",timingChanged:"The video changed: check the timing",translationTimingChanged:"This translation is no longer timed as the subtitles it comes from: retime those, or translate again.",timingAligned:"The timing matches the video again.",retime:"Redo the timing",retimed:e=>`Subtitle timing redone (${e.lang}).`,retimeStarted:"Redoing the timing: the lines you corrected keep their text.",retimeFailed:e=>`The timing did not start again: ${e.detail}`,timingChecked:"Timing checked",timingCheckedHint:"The timing is fine as it is: the notice goes until the video changes again.",timingCheckedFailed:e=>`The timing was not marked as checked: ${e.detail}`,redoMenu:"Redo the transcription…",redoTitle:"Redo the transcription",redoLanguage:"Spoken language",redoAuto:"Detect it automatically",redoHint:"The lines you corrected stay as they are.",redoOtherLanguage:"The video's speech has one set of subtitles: another language makes it again in that one (when no language is translated from it). To add a language, use “+ Language”.",redoStart:"Redo the transcription",redoStarted:"Transcription started: the subtitles update when it is ready.",redoFailed:e=>`The transcription did not start: ${e.detail}`,languages:"Subtitle languages",addLanguage:"+ Language",addLanguageTitle:"Add a language",addFromBrief:"The brief's languages",addOthers:"Other languages",addHint:"It is translated from the speech lines, corrections included; a language the video already has with its own voice is transcribed from that.",addFailed:e=>`The language was not added: ${e.detail}`,notSavedSwitch:"Your changes are not saved: try again before switching language.",pendingLanguage:e=>`Preparing the subtitles in ${e.lang}…`,pendingFailed:e=>`The subtitles in ${e.lang} were not made: ${e.detail}`,noLanguage:e=>`This creative has no subtitles in ${e.lang}: add them with “+ Language”.`,sourceText:"Original text",staleMark:"Original text changed",staleHint:"The line this translation comes from changed: “Translate again” translates it again.",goneMark:"Original line removed",goneHint:"The line this translation came from is gone: keep it or delete it.",retranslate:"Translate again",retranslateAll:"Translate all again",missingTranslation:"Translation missing",missingTranslationHint:"These lines of the original have no line in this language yet: “Translate all again” translates them.",retranslateAllHint:"Translates again the lines whose original text changed and translates the missing ones; the ones you corrected stay as they are (use “Translate again” on the line).",retranslateStarted:"Translating again: the lines update when it is ready.",retranslateFailed:e=>`The translation did not start again: ${e.detail}`,retranslateDropped:e=>e.count===1?"Removed 1 line whose original text is gone.":`Removed ${e.count} lines whose original text is gone.`,deleteLanguage:e=>`Delete the subtitles in ${e.lang}`,deleteConfirm:e=>`The subtitles in ${e.lang} have ${e.count===1?"1 line you corrected":`${e.count} lines you corrected`}: deleting them loses the corrections.`,deleteYes:"Delete",deleteNo:"Cancel",deleteFailed:e=>`The subtitles were not deleted: ${e.detail}`,translateInto:e=>`Translate into ${e.language}`,translateIntoFailed:e=>`The translation did not start: ${e.detail}`,warnings:{tooLong:"Too long",tooFast:"Too fast",tooShort:"Too short",tooLongOnScreen:"On screen too long",overlap:"Overlaps",placeholder:"To write"},warningHints:{tooLong:e=>`It does not fit in ${e.lines} lines: shorten or split it.`,tooFast:e=>`More than ${e.cps} characters a second: too fast to read. Shorten the text or lengthen the line.`,tooShort:e=>`On screen for less than ${e.seconds} second: lengthen it.`,tooLongOnScreen:e=>`On screen for more than ${e.seconds} seconds: split it.`,overlap:"It ends after the next line starts.",placeholder:"It still has the placeholder text “…”: write the line or delete it, or it ends up in the files."}},briefSession:{filled:e=>`Filled in the brief: ${e.parts}`,parts:{texts:"texts",length:"length",assets:e=>e.count===1?"1 asset":`${e.count} assets`,codebases:e=>e.count===1?"1 codebase":`${e.count} codebases`,formats:e=>e.count===1?"1 format":`${e.count} formats`,variants:e=>e.count===1?"1 variant":`${e.count} variants`},keptYours:e=>` · kept yours: ${e.fields}`,sourceFormatName:e=>`Original ${e.width}×${e.height}`,sourceFormatAdded:e=>`Added “${e.name}” to your custom formats`,nothingWritten:"Nothing changed in the brief",reclaimed:e=>`The agent rewrote ${e.fields} at your request`,fieldNames:{goal:"What you want to make",message:"Key message",durationSec:"Video length",assets:"Assets to use",linkedCodebases:"Codebases",notes:"Notes for the agent",formats:"Formats",variants:"Variants"},creativeStarts:e=>`${e.title} · ${e.formats}. The brief session stays above.`,memoryUnavailable:"The brief session’s memory is no longer available: the agent starts again from its summary."},brand:{droppedKeepFailed:e=>`${e.name}: the current version was not kept (too many entries, maximum ${e.limit})`,droppedNotList:e=>`${e.label}: invalid list`,droppedDuplicateId:e=>`${e.name}: duplicate id`,droppedTooMany:e=>`${e.name}: too many entries (maximum ${e.limit})`,droppedPrefix:e=>`Dropped entries: ${e.list}`,droppedMore:e=>`and ${e.count} more`,droppedOutsideAssets:e=>`${e.label} (${e.file} is outside assets/)`,droppedNotFound:e=>`${e.label} (${e.file} not found)`,droppedNotRegistered:e=>`${e.file} (not registered)`,ignoredGuidelines:e=>`guidelines.md (ignored: ${e.reason})`,ignoredSummary:e=>`summary.md (ignored: ${e.reason})`,ignoredAssetList:e=>`the proposal's assets.json (ignored: ${e.reason})`,ignoredDescriptions:e=>`Descriptions file ignored: ${e.reason}`,assetRemovedWhileDescribing:e=>`${e.file} was deleted during the description: skipped`,commitAnalysis:e=>`Brand analysis ${e.id}`,commitAnalysisAssets:e=>`Assets of brand analysis ${e.id} (failed)`,commitDescribe:"Asset description",commitApply:e=>`Apply proposal ${e.id}`,commitDiscard:e=>`Discard proposal ${e.id}`,siteFontsSummary:e=>`Site fonts: ${e.count===1?"1 note":`${e.count} notes`}: ${e.list}${e.more?" · …":""}`,siteBlocked:e=>`${e.url} not read (address not allowed)`,siteUnreachable:e=>`${e.url} not reachable`,siteStatus:e=>`${e.url} answered ${e.status}`,siteTooLarge:e=>`${e.url} is larger than ${e.mb} MB: only the start was read`,siteOffSite:e=>`${e.url} not read (stylesheet on another site)`,siteScheme:e=>`${e.url} ignored (only http and https addresses)`,siteTooManySheets:e=>`more than ${e.max} stylesheets: the others were not read`,siteImportDepth:e=>`${e.url} not read (imports nested deeper than ${e.max} levels)`,siteImportCycle:e=>`${e.url} imports itself in a loop: read once`,siteTooManyFaces:e=>`more than ${e.max} @font-face rules: the others were ignored`,siteTimeout:e=>`stopped at the time limit (${e.seconds} s): partial result`,siteFontUrlsIgnored:e=>e.count===1?"1 font address ignored (only http and https)":`${e.count} font addresses ignored (only http and https)`},doctor:{supportedVersion:"Supported version",nodeTooOld:"Node.js 22 or later is required",nodeFix:"Install Node.js 22+ from https://nodejs.org",installed:"Installed",gitMissing:"Git not found",gitFix:"Install Git from https://git-scm.com",ffmpegRecommended:"Recommended for video editing and conversions",ffmpegFix:"Install FFmpeg from https://ffmpeg.org (macOS: brew install ffmpeg)",ffmpegArch:e=>e.translated?`${e.arch} under Rosetta: slower renders`:e.arch,ffmpegUniversal:"universal",ffmpegWrongArch:"FFmpeg was found but is built for Intel: it cannot start on this Mac. Install the Apple Silicon version, e.g. with Homebrew in /opt/homebrew",ffmpegRosetta:"Installed: an Intel build running under Rosetta on Apple Silicon. Renders work, more slowly; an arm64 build (Homebrew in /opt/homebrew) is faster",claudeMissing:"Claude Code not found",broken:"Installed but not responding correctly",brokenDetail:e=>`Installed but not responding correctly: ${e.detail}`,claudeAuthLabel:"Claude sign-in",installClaudeFirst:"Install Claude Code first",claudeMustRespond:"Claude Code must respond correctly first",authenticated:"Signed in",notAuthenticated:"Claude Code is not signed in",sandboxLabel:"Agent sandbox",sandboxAvailable:"Available: the agent works isolated in the project folder",sandboxFix:"Without the sandbox, Motion Studio uses stricter permissions; see the README",shellPathLabel:"Login shell PATH",shellPathLoaded:"PATH loaded from the login shell",shellPathFallback:e=>`Fallback PATH: ${e.reason}`,unknownReason:"unknown reason",workspacePathLabel:"Workspace folder path",workspaceSettingsLabel:"Workspace settings",workspacePathGlob:"The path contains [ ] * or ?: the sandbox protects Motion Studio's records less well (macOS) or not at all (Linux)",workspacePathFix:"Move the workspace to a folder whose path has none of these characters, then choose it again",folderGlobChars:e=>`The path ${e.path} contains ( ) [ ] { } * ? or \\: the agent's rules protecting Motion Studio's files cannot match it safely, so every agent run there is refused (browsing and exporting still work)`,folderGlobFix:"Rename the folder that has these characters (for a project folder that is a link: rename its target, then link it again), then choose the workspace again",updatesLabel:"Automatic updates",updatesOff:"Not active in this version",denyPathsLabel:"Home and config folder paths",denyPathsGlob:e=>e.count===1?`The path ${e.paths} contains ( ) [ ] { } * ? or \\: the agent's deny rules for it (tokens, secret files) may not apply`:`The paths ${e.paths} contain ( ) [ ] { } * ? or \\: the agent's deny rules for them (tokens, secret files) may not apply`,shellPathFix:"If programs are missing, start Motion Studio from the terminal or check your shell startup files",sandboxAvailableReason:"Available",sandboxExecMissing:"sandbox-exec not found: the macOS sandbox is not available",sandboxLinuxMissing:e=>`${e.tools} missing: install bubblewrap and socat to isolate the agent`,sandboxAnd:"and",sandboxWindows:"Claude Code's sandbox is not available on Windows",sandboxUnsupported:e=>`The sandbox is not supported on ${e.platform}`,sandboxOff:"Isolation is turned off in Settings",liveMessagesLabel:"Live messages",liveMessagesQueued:"queued only (not verified for this Claude Code version)",liveMessagesSupported:"on (verified for this Claude Code version)",liveMessagesOff:"queued only (turned off in the workspace settings)",interruptLabel:"Interrupt",interruptStopResume:"stop and resume",interruptSupported:"on (verified for this Claude Code version)",interruptOff:"stop and resume (turned off in the workspace settings)"},approvals:{briefReadOnly:"The brief agent only reads the linked folders and the project: nothing else can be approved.",videoAnalysisReadOnly:"The video analysis only looks at the extracted frames: nothing else can be approved.",subtitlesTranslateOnly:"The subtitle translation only hands over the translated lines: nothing else can be approved.",runCommand:"Run a command",editOutside:"Edit a file outside the project",readOutside:"Read a file outside the project",openPage:"Open a web page",useTool:e=>`Use the ${e.tool} tool`,editsIn:e=>`Edits in ${e.dir}`,readsIn:e=>`Reads in ${e.dir}`,commandsLabel:e=>`"${e.command}" commands`,pagesOf:e=>`Pages of ${e.host}`,providerNoConfirm:e=>`Use of ${e.provider} without confirmation`,toolLabel:e=>`Tool ${e.tool}`,generateImage:"Generate an image with gpt-image-2",imageDetail:e=>`${e.width}×${e.height}${e.refs?`, ${e.refs===1?"1 reference":`${e.refs} references`}`:""}: ${e.prompt}`,generateVoice:e=>`Generate a voice with ${e.provider}`,readOnlyTurn:"A translation turn only reads files and submits translations: Motion Studio writes them",coordinatorReadOnly:"The agent you talk to only reads the project and asks you: the work on files is done by the variants' turns",directionsTurnOnly:"A directions turn only proposes the directions of the variants: it uses no other tool",brandCodebaseToolDenied:"A brand analysis of a codebase does not run commands or search file contents: open the files by name with Read",moreCalls:e=>`…and ${e.count} more`,generateVoices:e=>`Generate ${e.count===1?"a translated voice":`${e.count} translated voices`} with ${e.provider}`,voicesBatchDetail:e=>`${e.count===1?"1 call":`${e.count} calls`}, ${e.chars} characters in all: ${e.list}`,variantBatchTitle:e=>`Paid services for ${e.count} variants`,variantBatchDetail:e=>`Estimated calls (no price known): ${e.providers}. Per variant: ${e.variants}. No variant starts before you answer. Decline starts the variants without paid services (no paid call will be made in this run); to cancel the generation altogether, stop the job.`,variantBatchItem:e=>`Variant ${e.letter} · ${e.service} (${e.provider})`,serviceNames:{images:"Images",voice:"Voice",music:"Music",sfx:"Sound effects"},generateSfx:e=>`Generate a sound effect with ${e.provider}`,generateMusic:e=>`Generate music with ${e.provider}`,audioDetail:e=>`${e.provider}, ${e.seconds===null?"duration chosen by the service":`${e.seconds} s`}: ${e.prompt}`,denied:"The user denied this action.",expired:"No answer within 10 minutes: action denied.",protectedPath:"Motion Studio's configuration folder is off limits to the agent (it holds access tokens): request denied without asking the user.",invalidRequest:"Invalid request.",unknownTool:"unknown",providerNotApproved:"The user did not approve the use of the provider",questionTitle:"The agent asks you a question",questionSkipped:"The user chose not to answer. Go on with your best judgment and say what you assumed.",questionExpired:"No answer within 10 minutes. Go on with your best judgment and say what you assumed."},validation:{manifestMissing:e=>`manifest.json is missing in ${e.dir}`,manifestInvalid:e=>`Invalid manifest.json: ${e.detail}`,unknownPreset:e=>`Unknown preset: ${e.id} (not in the format catalog)`,missingFormat:e=>`Missing format ${e.label} (${e.id})`,fileNotFound:e=>`File not found for ${e.id}: ${e.file}`,badExtension:e=>`${e.file}: extension .${e.ext} not allowed for ${e.id} (allowed: ${e.allowed})`,tooLarge:e=>`${e.file}: ${e.size} MB, maximum ${e.max} MB`,notReadable:e=>`${e.file}: cannot be read as media`,badResolution:e=>`${e.file}: resolution ${e.width}×${e.height}, expected ${e.expectedWidth}×${e.expectedHeight}`,notAVideo:e=>`${e.file}: does not look like a video`,durationOverMax:e=>`${e.file}: duration ${e.duration}s exceeds the maximum of ${e.max}s`,durationOffTarget:e=>`${e.file}: duration ${e.duration}s, about ${e.target}s requested`,reservedName:e=>`${e.file}: this name belongs to ${e.format}, which Motion Studio delivers itself in this version; rename your file`,compositionMissing:e=>`Missing composition for ${e.label} (${e.id}): write ${e.dir}/composition.json`,compositionProblem:e=>`${e.dir}: ${e.text}`},outputs:{largeFile:e=>`Large file: ${e.sizeMB} MB at ${e.mbps} Mbps (about ${e.targetMbps} Mbps is plenty for ${e.channel})`,keptUnchanged:e=>`${e.format} was not part of this request: the agent’s file was discarded and the previous one kept unchanged`,followerReplaced:e=>`${e.format}: the agent’s file was discarded; Motion Studio copied the ${e.primary} instead`},composition:{jsonEmpty:"composition.json is empty: write the composition as UTF-8 JSON",jsonNotUtf8:"composition.json is not valid UTF-8: save it as UTF-8 (not UTF-16 or Latin-1)",jsonSyntax:e=>`composition.json is not valid JSON (${e.detail}): fix the syntax`,jsonTooLarge:e=>`composition.json is ${e.sizeMB} MB, over the ${e.maxMB} MB limit: move long content into html layers or assets`,limit:e=>`${e.path}: more than ${e.max} items, the maximum: simplify the composition`,moreProblems:"More problems were not listed: fix these and validate again",unknownField:e=>`${e.path}: unknown field "${e.field}": remove it or check its name in the schema`,missingField:e=>`${e.path}: required field missing: add it`,wrongType:e=>`${e.path}: expected ${e.expected}: fix the value type`,badValue:e=>`${e.path}: value not allowed; use one of: ${e.allowed}`,tooSmall:e=>`${e.path}: must be at least ${e.min}`,notAbove:e=>`${e.path}: must be more than ${e.min}`,tooBig:e=>`${e.path}: must be at most ${e.max}`,tooLong:e=>`${e.path}: longer than ${e.max} characters: shorten it`,invalid:e=>`${e.path}: invalid value: check it against the schema`,badId:e=>`${e.path}: invalid id: use lowercase letters, digits and hyphens (at most 64), starting with a letter or digit`,badColor:e=>`${e.path}: invalid colour: use hex #rrggbb (or #rgb, #rgba, #rrggbbaa)`,badPath:e=>`${e.path}: invalid path: use a relative path under assets/ or layers/, without "..", "\\", ":", "%", "?", "#" or a scheme`,badFontFamily:e=>`${e.path}: invalid font family: use one family name declared in fonts[], without quotes or fallbacks`,badEase:e=>`${e.path}: invalid easing: use a CSS easing such as linear, ease-out or cubic-bezier(.2,.8,.2,1)`,badParamKey:e=>`${e.path}: invalid param name: use letters, digits and _ (at most 64), not starting with a digit`,badAnimation:e=>`${e.path}: invalid animation: use {preset, duration}, {prop, from, to, duration} or {prop, keyframes, duration}`,scriptNeedsVoice:e=>`${e.path}: a script belongs to a voice clip: set role "voice" or remove the script`,duplicateId:e=>`The id "${e.id}" is used more than once: give every scene, track and clip its own id`,sceneStart:e=>`Scene ${e.scene} starts at ${e.start}s: the first scene must start at 0`,sceneGap:e=>`Gap between scene ${e.previous} (ends at ${e.from}s) and scene ${e.scene} (starts at ${e.to}s): make the scenes contiguous`,sceneOverlap:e=>`Scene ${e.scene} starts at ${e.to}s, before scene ${e.previous} ends (${e.from}s): scenes must not overlap; list them in time order`,scenesEnd:e=>`The scenes end at ${e.end}s but the composition lasts ${e.duration}s: the last scene must end exactly at the duration`,fontWeightUndeclared:e=>`Clip ${e.clip}: ${e.family} does not declare weight ${e.weight} (it declares ${e.declared}): the text is drawn with a synthesised or neighbouring weight; declare the weight in fonts[] or use a declared one`,stillScenes:"A still (duration 0) ignores scenes: you can empty scenes[]",stillAnimations:e=>`Clip ${e.clip}: a still shows only t = 0, so its animations are ignored: you can remove them`,stillAudio:e=>`Track ${e.track}: a still has no sound, so its audio clips are ignored: you can remove them`,clipStill:e=>`Clip ${e.clip}: in a still every clip starts at 0`,clipZero:e=>`Clip ${e.clip} lasts 0 seconds: give it a positive duration or remove it`,clipOutside:e=>`Clip ${e.clip} runs from ${e.start}s to ${e.end}s, outside the composition (0 to ${e.duration}s): move or shorten it`,clipOutsideScene:e=>`Clip ${e.clip} is outside its scene ${e.scene} (${e.start}s to ${e.end}s): move it inside the scene or change its scene`,unknownScene:e=>`Clip ${e.clip} refers to scene ${e.scene}, which does not exist: use a scene id from scenes[]`,trackKind:e=>`Clip ${e.clip} (${e.type}) cannot be on track ${e.track} (${e.kind}): audio clips go on audio tracks, subtitles clips on the subtitles track, all others on visual, video or text tracks`,subtitlesTwice:()=>"A composition has at most one subtitles track: remove the extra ones",subtitlesSpan:e=>`Track ${e.track}: a subtitles track holds exactly one subtitles clip, from 0 to ${e.duration}s, with no scene`,subtitlesOnStill:()=>"A still has no time to draw subtitles in: remove the subtitles track",animationOutside:e=>`Clip ${e.clip}: an animation ends at ${e.end}s, after the clip (${e.duration}s long); animation times are relative to the clip start`,keyframesOrder:e=>`Clip ${e.clip}: keyframe times must go up from 0 to 1`,animationValue:e=>`Clip ${e.clip}: wrong values for the ${e.prop} animation: "color" takes hex colours, every other prop takes numbers`,fontMissing:e=>`Text clip ${e.clip} has no font and fonts[] is empty: put a font file under assets/, declare it in fonts[] and set fontFamily`,unknownFont:e=>`Clip ${e.clip} uses the font "${e.family}", which is not in fonts[]: put the font file under assets/ and declare it in fonts[]`,fontNotAsset:e=>`Font ${e.family}: ${e.src} must be a font file (.ttf, .otf, .woff, .woff2) under assets/`,layerNotHtml:e=>`Clip ${e.clip}: ${e.src} must be an .html file under layers/`,mediaNotAsset:e=>`Clip ${e.clip}: ${e.src} must be a file under assets/`,assetMissing:e=>`${e.path} is not in the composition folder: add the file or fix the path`,assetsTooLarge:e=>`The composition folder is ${e.sizeMB} MB, over the ${e.maxMB} MB limit: compress, shorten or remove media`,sizeMismatch:e=>`Size ${e.width}×${e.height}, but ${e.format} is ${e.expectedWidth}×${e.expectedHeight}: set width and height to the format size`,durationOverMax:e=>`Duration ${e.duration}s exceeds the maximum of ${e.max}s for ${e.format}: shorten the composition`,stillForVideo:e=>`${e.format} is a video: the duration must be more than 0`,durationForImage:e=>`${e.format} is an image: set the duration to 0 (a still), not ${e.duration}s`,layerNetwork:e=>`${e.file}, line ${e.line}: ${e.api} is not allowed, html layers have no network: put files under assets/ and reference them with relative paths`,layerWorker:e=>`${e.file}, line ${e.line}: ${e.api} is not allowed in html layers: run the code in the layer itself`,layerAudio:e=>`${e.file}, line ${e.line}: ${e.api} is not allowed in html layers: put sound on an audio track of the composition`,layerAutoplay:e=>`${e.file}, line ${e.line}: media must not play on its own (${e.api}) in html layers: use a video or audio clip of the composition`,jsonMissing:"composition.json is missing or cannot be read safely: write the composition as a regular file in the composition folder",folderUnreadable:e=>`The composition folder cannot be read safely (${e.path}): remove links, hard links and special files, and keep it within the limits`,ambiguousNames:e=>`Two files of the composition folder have the same name once Unicode-normalised (${e.path}): rename one of them`,durationOffBrief:e=>`The composition lasts ${e.duration}s, but about ${e.target}s were requested: adjust the duration and the scenes`,vectorShape:e=>`Logo, favicon and app icon are vector compositions: ${e.reason}`,logoDarkMissing:'The logo has no negative version for dark backgrounds: add a second svg clip with "id": "dark", "hidden": true, full frame, "fit": "contain", and its own file (e.g. assets/logo-dark.svg): the same design with colours for a dark background',svgRefused:e=>`${e.file} was refused by the SVG check: ${e.reason}`,svgText:e=>`${e.file} has text: convert it to paths, or it will look different where the font is not installed`,svgRefusedSummary:e=>`${e.file} did not pass the SVG safety check (${e.count} ${e.count===1?"reason":"reasons"})`,svgRefusedDetails:"Details"},editor:{locked:e=>`Clip ${e.clip} is locked: unlock it to edit it`,unknownClip:e=>`There is no clip ${e.clip}`,unknownTrack:e=>`There is no track ${e.track}`,unknownScene:e=>`There is no scene ${e.scene}`,unknownParam:e=>`Clip ${e.clip} has no parameter ${e.key}`,badProp:e=>`Clip ${e.clip}: ${e.key} cannot be edited here`,badValue:e=>`Clip ${e.clip}: the value of ${e.key} is not valid`,badParam:e=>`Clip ${e.clip}: the value for ${e.key} does not fit the parameter`,badAsset:e=>`${e.path} is not a file of this composition under assets/`,badFont:e=>`${e.family}: a font must be a .ttf, .otf, .woff or .woff2 file under assets/`,fontExists:e=>`The font ${e.family} is already in this composition`,wrongType:e=>`This change does not apply to a ${e.type} clip (${e.clip})`,stillTiming:"A still image has no timeline: times, scenes and animations do not apply",customAnimation:e=>`Clip ${e.clip} has a custom animation in its ${e.slot} slot: ask the agent to change it`,badOrder:"The new scene order must list every scene once",sceneOrderBlocked:e=>`Scenes cannot be reordered: clip ${e.clip} is not inside a single scene`,readOnly:"Edits are not available here: this view is read-only",invalid:e=>`The change would make the composition invalid (${e.path})`,badOp:"This edit is not supported",badWeight:e=>`Clip ${e.clip}: ${e.family} has no weight ${e.weight} (it has ${e.declared})`,itemText:e=>`${e.name} text`,itemStyle:e=>`${e.name} style`,itemLayout:e=>`${e.name} position`,itemTiming:e=>`${e.name} timing`,itemMedia:e=>`${e.name} media`,itemFlags:e=>`${e.name} visibility`,itemSceneDuration:e=>`scene ${e.n} duration`,itemSceneOrder:"scene order",itemAnimation:e=>`${e.name} animation`,itemParam:e=>`${e.name} ${e.key}`,itemFont:e=>`font ${e.family}`,itemSvg:e=>{const t=[...e.colors>0?[e.colors===1?"1 colour changed":`${e.colors} colours changed`]:[],...e.texts>0?[e.texts===1?"1 text":`${e.texts} texts`]:[],...e.hidden>0?[e.hidden===1?"1 element shown or hidden":`${e.hidden} elements shown or hidden`]:[]];return t.length>0?`${e.name}: ${t.join(", ")}`:`${e.name} SVG content`},summary:e=>`Direct edits: ${e.items}${e.more>0?` and ${e.more} more`:""}`,stageNoSession:"This preview has ended: open the editor again",stagingBusy:"A file is still being prepared for this draft: save again when it is ready.",stageTimeout:e=>`Preparing ${e.file} took too long (more than ${e.minutes} min): try a shorter or smaller video.`,stageNotRegistered:e=>`${e.file} is not an asset in the project’s Assets`,stageUnreadable:e=>`${e.file} cannot be read safely: it must be a regular file inside the project assets folder`,stageUnsupported:e=>`${e.file} cannot be used in a composition: use an image, SVG, video, audio or font file`,stageNotMedia:e=>`${e.file} is not a readable media file`,stageTooLarge:e=>`${e.file} is larger than ${e.maxMB} MB`,stageTooMany:e=>`At most ${e.max} files can be added to one draft: save it as a new version first`,stageUnknownBrandFont:"This font is not in the brand kit",stageBrandFontNoFile:e=>`${e.family} has no font file in the brand kit`,stagedCollision:e=>`${e.path} already exists in this composition with other content: add the file again`,stageSvgBadBase:e=>`${e.file} is not an SVG of this composition: reopen the editor`,summaryNone:"Direct edits",busy:"The agent or a render is working on this creative: save the draft when it has finished",unchanged:e=>`Nothing changed: ${e.format} is the same as in v${e.n}, so no new version was saved.`,baseChanged:e=>`${e.format} changed in v${e.n} while you were editing: reopen the editor on the latest version (your draft is kept until you discard it)`,carryFailed:e=>`${e.format} in v${e.n} is no longer the composition recorded for it: ask the agent to make it again before saving`,saveInvalid:e=>`The draft cannot be saved: ${e.text}`,srcUnavailable:e=>`Clip ${e.clip}: ${e.path} is neither a file of this version nor a file added to this draft`,fontUnavailable:e=>`Font ${e.family}: ${e.path} is neither a file of this version nor a file added to this draft`,htmlChanged:e=>`Clip ${e.clip}: its HTML layer can only be changed by the agent`,htmlNew:e=>`Clip ${e.clip}: HTML clips can only be added by the agent`,layersChanged:"The HTML layer files can only be changed by the agent"},render:{jobLabel:e=>`Render · ${e.title} v${e.n}`,exportJobLabel:e=>`Render for export · ${e.title} v${e.n} (${e.detail})`,qualityNames:{standard:"Standard",high:"High",max:"Max"},fpsName:e=>`${e.fps} fps`,exportSubtitlesDrawn:e=>`subtitles ${e.lang}`,exportNoSubtitles:"without subtitles",notV2:e=>`v${e.n} has no compositions to render: its media files are the result`,formatsNotInVersion:e=>`Formats not in this version: ${e.list}`,noRenderer:"Rendering is not available in this Motion Studio",noBrowser:"No Chromium to render with: install Google Chrome, or download Chrome for Testing from the System check",compositionChanged:e=>`${e.format}: the composition changed after the version was saved, so it was not rendered`,compositionProblems:e=>`${e.format}: the composition has problems: ${e.list}`,formatFailed:e=>`${e.format}: ${e.reason}`,someFailed:e=>`Render failed: ${e.list}`,mediaNotNormalised:e=>`${e.format}: ${e.src} could not be prepared for rendering; it is used as is, and some of its frames may be off by one`,hdrApproximate:e=>`${e.format}: ${e.src} is an HDR source; its colours are approximate in the render and the preview`,frameWarnings:e=>`${e.format}: ${e.count} video frames were drawn from a source whose timing could not be verified`,outputProblems:e=>`${e.format}: the render has problems: ${e.list}. Render it again, or fix the composition`,identitySvgRefused:e=>`${e.format}: the SVG was refused, nothing was rasterised: ${e.list}`,identityOpaqueWhite:e=>`${e.format}: the composition background is transparent and the brand has no primary colour, so the icons that cannot be transparent are on white`,identitySafeZone:e=>`${e.file}: ${e.pct}% of the drawing is outside the safe zone and may be cut by the mask`,identitySvgText:e=>`${e.file}: the SVG has text; convert it to paths, or it will look different where the font is not installed`,identitySetFailed:e=>`${e.format}: the file set could not be made: ${e.reason}`},export:{jobLabel:e=>`Export · ${e.title}`,invalidProfile:"Choose a resolution and a quality that Export offers",profileWithLanguages:"With other languages the videos are exported at the format size and High quality: choose those, or export the other languages apart",absoluteDestination:"Choose a destination folder (absolute path)",outsideWorkspace:"Choose a folder outside the Motion Studio workspace",destinationIsFile:"The destination is a file, not a folder",cannotWrite:e=>`Cannot write to ${e.path}`,interrupted:e=>`Export interrupted: ${e.reason}. Files already copied: ${e.count} in ${e.path}`,nothingToExport:e=>`No outputs to export for v${e.n}`,invalidFormats:"Choose at least one format to export",formatsNotInVersion:e=>`Formats not available in this version: ${e.list}`,diskFull:"disk space is full",permissionDenied:"permission denied",quotaExceeded:"space quota exceeded",nameTooLong:"file name too long",writeError:"write error",invalidPicks:"Choose at least one format to export, each with a version number",pickFollower:e=>`${e.format} follows ${e.primary}: it is exported with the ${e.primary}'s starred version, it cannot be picked on its own`,pickNoFile:e=>`v${e.n} has no ${e.format} file to export`,filesMissing:e=>`These files are missing or cannot be read safely, nothing was exported: ${e.list}`,nameCollision:e=>`Two formats would get the same file name (${e.list}): add {format} to the name pattern`,nameEmpty:"The name pattern gives an empty file name",followMismatch:e=>`${e.format} follows ${e.primary}: it cannot be exported from v${e.n} while the ${e.primary} is exported from v${e.p}`,invalidDestination:"Choose a destination folder",invalidDate:"Invalid export date (YYYY-MM-DD)",invalidPattern:"The name pattern is not valid (at most 200 characters)",subtitlesMissing:e=>`There are no subtitles in ${e.lang} to export`,subtitlesPair:e=>`The ${e.lang} subtitles follow the voice of the ${e.video} video: they go with that video only (export it, or choose another language)`,subtitlesStill:e=>`${e.format}: a still has no subtitles, it was exported without them`,subtitlesNoTrack:e=>`${e.format}: the video has no subtitles track, so the subtitles in ${e.lang} were not drawn into it (ask the agent to add them)`,subtitlesNoSoft:e=>`${e.format}: this file cannot hold subtitle tracks, so they were left out`,subtitlesSoftStore:e=>`${e.format}: an App Store preview takes no subtitle tracks, so they were left out`,renderFailed:e=>`These formats could not be rendered, nothing was exported: ${e.list}`,renderProblems:e=>`${e.item} (rendered with problems: ${e.list})`,renderProblemsOnly:e=>`Nothing was exported: ${e.list}`,groupSkipped:e=>`${e.format} (Variant ${e.variant} v${e.n}): ${e.reason}`,groupReason:{missing:"the file is missing or cannot be read safely",notRendered:"it has no current render",problems:"the render has problems",noTranslation:e=>`no current translation in ${e.locale}`,renderFailed:e=>`the render failed: ${e.reason}`,renderProblems:e=>`rendered now with problems: ${e.list}`}},jobs:{regenerateRequest:"Regenerate all formats from the updated brief.",pinsOnlyRequest:"Apply the pinned comments.",attachmentsOnlyRequest:"Use the attached files.",queuedFilesGone:"A queued request was removed: it had only attached files, and they are no longer in Assets.",addFormatsRequest:e=>`Add the formats ${e.formats}, reusing the existing sources in work/ and the same style as version ${e.n}.`,renderCommandWas:e=>`The render command of version ${e.n} was: ${e.command}.`,regenerateFormatsRequest:e=>`Regenerate ${e.formats} from the updated brief.`,addedFollowers:e=>`Added ${e.formats} using the ${e.primary} (v${e.n})`,noAgentNeeded:"no agent needed",layerWarnings:e=>`Advisory checks of the html layers: ${e.list}`,strayRemoved:e=>`The agent wrote files that Motion Studio makes itself; they were removed: ${e.list}`,followerUnlinked:e=>`${e.follower} can no longer follow ${e.primary} (${e.reason}): it is unlinked, even if this turn is cancelled, and gets a dedicated version in this turn.`,copyFailed:e=>`${e.format}: Motion Studio could not put its file in this version`,carriedChanged:e=>`${e.format}: the file of v${e.n} is not the one recorded for that version, so it could not be kept unchanged`,copyChangedAfter:e=>`${e.format}: the file changed after Motion Studio copied it`,copyUnverified:e=>`${e.format}: the file Motion Studio copied could not be verified (it cannot be read as a regular file)`,earlierOutputsChanged:e=>`Warning: files of earlier versions changed during this turn (${e.list}). Their recorded history is unchanged; check them before exporting.`,convertingLegacy:"Converting to the editable format · costs more tokens this once",earlierLinksDetached:e=>`Warning: files of earlier versions had a second name on disk (a hard link) that this turn could have written through (${e.list}). Motion Studio detached them before the agent started, so earlier versions stay read-only.`,workspacePathGlob:"Warning: the workspace folder path contains [ ] * or ?. On macOS the sandbox cannot stop the agent from moving the folders that hold Motion Studio's records and moving them back, so Motion Studio checks them after each run; on Linux the sandbox does not protect them at all. Move the workspace to a folder whose path has none of these characters.",protectedFilesTampered:e=>`Error: during this run, files Motion Studio never changes itself were changed, added or removed (${e.list}). These configure git or the agent and run outside the sandbox. The turn was stopped before saving, and the project is locked (no agent, no git) until those files are back as they were before the run (it then unlocks by itself), or until you accept the change on the project page if you made it yourself.`,protectedFilesChangedBetweenRuns:e=>`Error: since the last agent run, files Motion Studio never changes itself were changed, added or removed (${e.list}), for example by a process left running. These configure git or the agent and run outside the sandbox, so the agent was not started and the project is locked (no agent, no git) until those files are back as they were (it then unlocks by itself), or until you accept the change on the project page if you made it yourself.`,integrityCheckFailed:"Error: Motion Studio could not check the protected files of the project after this run. The turn was stopped before saving, and the project is locked (no agent, no git) until the files can be checked and match how they were before the run.",recordFoldersMoved:e=>`Notice: after this run there is an unexpected file or folder in the folders that hold Motion Studio's records (${e.list}). Check what it is; the chat history and the versions of the creatives there are most likely fine.`,logHistoryRewritten:e=>`Warning: during this run, earlier lines of ${e.list} were changed or removed. That history is no longer what Motion Studio recorded.`,workspaceSettingsReverted:"Warning: the workspace settings (.studio/settings.json) changed while the agent ran without the sandbox. Motion Studio put them back as they were. If you made that change yourself, make it again now from the settings.",workspaceSettingsNotReverted:"Warning: the workspace settings (.studio/settings.json) changed while the agent ran without the sandbox, and Motion Studio could not put them back. Until you save the settings again, Motion Studio keeps using the settings as they were before (sandbox, confirmations and opt-ins).",settingsHoldBroken:"Motion Studio could not keep its protected copy of the workspace settings, so an agent may have changed them unseen. Agents without the sandbox are refused until you check the settings and save them in the app.",settingsAdjusted:"Motion Studio made some workspace settings stricter after an agent without the sandbox changed them. Check them in the settings and save to confirm.",settingsHeldFields:e=>`Fields affected: ${e.fields}.`,settingsHoldStuck:e=>`Motion Studio cannot remove its old record at ${e.path}: if it is locked, clear the “Locked” checkbox in Finder’s Get Info first, then remove that item yourself and save the settings again.`,protectedLinksDetached:e=>`Warning: Motion Studio's own records had a second name on disk (a hard link), so they could be changed without Motion Studio knowing (${e.list}). Motion Studio detached them and kept their content as it was, which may already have been changed.`,followerNotDelivered:e=>`${e.follower} was not delivered: it cannot follow ${e.primary} (${e.reason}). It is no longer linked, so the next turn makes a dedicated version.`,versionFolderUnsafe:e=>`The folder outputs/v${e.n} is not a folder of the creative (a link?): the version cannot be saved`,updateProjectCommit:"Project updated",brandKitCommit:"Brand kit updated",guidelinesCommit:"Guidelines updated",addGoogleFontCommit:e=>`Add Google Fonts font ${e.family}`,addSourceCommit:"Add brand source",removeSourceCommit:"Remove brand source",syncSourcesCommit:"Align brand sources with references",uploadAssetsCommit:e=>`Upload ${e.count===1?"1 asset":`${e.count} assets`}`,registerAssetsCommit:"Register assets",deleteAssetCommit:e=>`Delete asset ${e.file}`,saveReferenceCommit:e=>`Save ${e.file} in Assets`,referenceOnlyCommit:e=>`${e.file}: only for its creative`,deleteReferencesCommit:e=>`Delete ${e.count===1?"1 creative reference":`${e.count} creative references`}`,uploadReferencesCommit:e=>`Upload ${e.count===1?"1 reference":`${e.count} references`}`,deleteReferenceCommit:e=>`Delete reference ${e.file}`,createProjectCommit:e=>`Create project ${e.name}`,updateAssetCommit:e=>`Update asset ${e.file}`,renameAssetRecoveredCommit:"Finish an interrupted asset rename",renameAssetCommit:e=>`Rename asset ${e.from} to ${e.to}`,updateReferenceCommit:e=>`Update reference ${e.file}`,turnLabel:e=>`Turn · ${e.name}`,briefLabel:e=>`${e.name} · brief with the agent`,videoAnalysisLabel:e=>`Video analysis · ${e.file}`,subtitlesLabel:e=>`Subtitles · ${e.title}`,subtitlesTranslateLabel:e=>`Subtitles · ${e.title} · ${e.lang}`,creativeLabel:e=>`Creative · ${e.title}`,localizeLabel:e=>`Translation · ${e.title}`,localizeStarted:e=>`Translating v${e.n} into ${e.locales}`,localizeNothingToDo:e=>`v${e.n}: every translation asked for is already up to date`,localizeChecking:e=>`${e.count===1?"1 translation problem":`${e.count} translation problems`} to fix: attempt ${e.attempt} of ${e.max}`,localizeDone:e=>`Translations of v${e.n} saved: ${e.list}`,localizeOpenProblems:e=>`${e.count===1?"1 translation problem is":`${e.count} translation problems are`} still open: see the Languages panel`,localizeCommit:e=>`${e.title}: v${e.n} translations`,localizeVersionChanged:e=>`Warning: project files changed during the translation turn (${e.list}). A translation turn only reads: check these changes if nobody else made them.`,voicesNotGenerated:e=>`Translated voices not generated (${e.reason}): ${e.locales} keep the original voice`,brandAnalysisLabel:"Brand analysis",assetDescriptionLabel:"Asset description",assetGenerationLabel:e=>`Generate · ${e.kind}`,conflict:"The same work is already queued or running. Try again when it ends.",briefUpdatedCommit:e=>`${e.title}: brief updated`,variantsAddedCommit:e=>`${e.title}: variants ${e.letters}`,variantRequestWillStop:"This request will be stopped as soon as it starts (it could not be removed from the queue)",variantsRolledBackCommit:e=>`${e.title}: adding variants rolled back`,groupChatMergedCommit:e=>`${e.title}: the variants' chats merged into one`,variantGroupCommit:e=>`${e.title}: variants`,creativeArchivedCommit:e=>`${e.title}: archived`,creativeUnarchivedCommit:e=>`${e.title}: restored from the archive`,creativeDeletedCommit:e=>`${e.title}: moved to the Trash`,variantSeedRequest:e=>`Started from variant ${e.letter}, version ${e.n}`,variantBriefDeferred:"The brief changed while this variant was working: the new brief applies from its next request",groupLabel:e=>`${e.title} · agent`,groupFailed:e=>`The agent could not answer: ${e.text}`,groupReportFailed:e=>`The variants' work is done, but the agent could not write its reply: ${e.text}`,groupHelperNotStarted:e=>`Variant ${e.letter} did not start: ${e.error}`,groupInterruptedQueued:"The agent's turn was interrupted when Motion Studio closed before it started: the message is back at the top of the queue (Run next starts it).",groupInterrupted:"The agent's turn was interrupted when Motion Studio closed. Send the message again to go on.",variantDirectionsLabel:e=>`Variant directions · ${e.title}`,variantDirectionsDone:e=>`Directions proposed by the agent: ${e.list}`,variantDirectionsRetry:e=>`The proposed directions were not valid: asking again (attempt ${e.attempt} of ${e.max})`,restartCommit:e=>`${e.title}: restart from v${e.n}`,stateCommit:e=>`${e.title}: state`,versionStateCommit:e=>`${e.title}: v${e.n} · state`,noOutputChanged:e=>`No video or image changed: no new version, v${e.n} stays the latest.${e.brief?" The brief is updated.":""}`,noOutputChangedCommit:e=>`${e.title}: no new version (v${e.n} unchanged)`,removedUnsaved:e=>`Removed ${e.count===1?"1 file":`${e.count} files`} not saved in a version`,restartedFrom:e=>`Restarted from version ${e.n}: the next message works on that base.`,codebaseNotRepo:e=>`Codebase ${e.path} cannot be checked (not a git repository): changes would go unnoticed`,codebaseCheckFailed:e=>`Codebase ${e.path}: change check failed, changes would go unnoticed`,codebaseChanged:e=>`Warning: codebase ${e.path} was modified during the turn. Review the changes.`,checkingOutputs:e=>`Output check: ${e.count===1?"1 problem":`${e.count} problems`}. Asking for a fix (attempt ${e.attempt} of ${e.max}).`,requestFromBrief:"Generation from the brief",lateCancel:e=>`The cancellation arrived when the work was almost done: version v${e.n} was saved.`,lateCancelKept:e=>`The cancellation arrived when the work was almost done: no new version, v${e.n} stays the latest.`,generationFailed:e=>`Generation failed: ${e.text}`,cancelledNote:"Generation cancelled.",brandKitUnreadable:e=>`Brand kit unreadable: ${e.detail}`,guidelinesUnreadable:e=>`Guidelines unreadable: ${e.detail}`,assetListUnreadable:e=>`Asset list unreadable: ${e.detail}`,referenceListUnreadable:e=>`Reference list unreadable: ${e.detail}`,codebaseIgnored:e=>`Codebase ignored (${e.path}): ${e.reason}`,codebaseMissing:e=>`Codebase not found, ignored in this turn: ${e.path}`,codebaseSecretScanTruncated:"The codebase is very large: secret files past the first 50,000 entries are excluded by name patterns only",brandCodebaseSkipped:e=>`Codebase left out of the analysis (${e.path}): ${e.reason}`,brandCodebaseNotCheckable:e=>`Codebase ${e.path} cannot be checked (not a git repository): a change by the analysis would go unnoticed`,brandCodebaseCheckFailed:e=>`Codebase ${e.path}: the change check failed, a change by the analysis would go unnoticed`,brandCodebaseChanged:e=>`The analysis changed the codebase ${e.path}: the proposal was discarded. Review the changes in that folder.`,brandCodebaseChangedFiles:e=>`Files changed in ${e.path}: ${e.list}`,brandCodebaseCheckFailedAfter:e=>`The check of the codebase ${e.path} after the analysis failed: the proposal was discarded, since a change could not be ruled out.`,brandCodebaseCheckFailedBefore:e=>`The codebase ${e.path} could not be checked before the analysis but can be now: the check failed and the proposal was discarded, since a change could not be ruled out.`,brandCodebaseChangedUnknown:e=>`Files changed in ${e.path}: git could not tell which ones`,brandSecretsToolRulesOnly:"No sandbox: the agent runs no commands in this analysis, and secret files in the codebase are excluded by its file-tool rules only, not by the operating system",interruptedError:"The job was interrupted (app closed during generation).",interruptedNote:"Job interrupted: Motion Studio was closed during generation. Send a message to resume."},live:{tooLong:e=>`The message is too long: at most ${e.max} characters.`,tooManyLive:e=>`At most ${e.max} messages per turn: queue it for after, or wait for the turn to end.`,queueFull:e=>`At most ${e.max} requests can wait in the queue: remove one or wait for the next to start.`,emptyMessage:"Write a message or add a pin.",notQueued:"This request is no longer queued (it started or was removed).",queueChanged:"The queue changed meanwhile: reload it and try again.",queueEmpty:"There is no queued request.",queuedAfterFinish:"Arrived after the agent finished: queued as the next request.",redirectUnsupported:"This job cannot be redirected: only Stop is available.",notRunning:"The job is not running any more.",consoleLiveOff:"Messages during a console turn need live input, which is off: send it when the turn ends.",consoleTurnOver:"The console turn has already finished: send it as a new message.",wordsNotDelivered:"Your message did not reach the agent.",stoppedSessionUnavailable:"The stopped turn's session is no longer available: continuing from the last version's session.",queuedPinsVersionGone:e=>`The pinned comments of this request were placed on version ${e.n}, which no longer exists: they go to the agent as text, without frames.`},formats:{"instagram-post-1x1":"Post 1:1","instagram-post-4x5":"Post 4:5","instagram-reel-9x16":"Story/Reel 9:16","instagram-image-1x1":"Image 1:1","instagram-image-4x5":"Image 4:5","tiktok-9x16":"Video 9:16","youtube-16x9":"Video 16:9","youtube-4k-16x9":"Video 4K 16:9","youtube-shorts-9x16":"Shorts 9:16","youtube-thumbnail":"Thumbnail","facebook-feed-1x1":"Feed 1:1","facebook-feed-4x5":"Feed 4:5","facebook-story-9x16":"Story 9:16","facebook-cover":"Cover","linkedin-1x1":"Post 1:1","linkedin-4x5":"Post 4:5","linkedin-16x9":"Video 16:9","linkedin-banner":"Banner","x-16x9":"Video 16:9","x-1x1":"Post 1:1","pinterest-2x3":"Pin 2:3","web-hero-16x9":"Hero 16:9","web-banner-300x250":"Banner 300×250","web-banner-728x90":"Banner 728×90","web-banner-160x600":"Banner 160×600","og-image-1200x630":"Social preview (Open Graph)","identity-logo":"Logo","identity-favicon":"Website favicon","identity-app-icon":"App icon","appstore-iphone-69":'Screenshot iPhone 6.9"',"appstore-iphone-65":'Screenshot iPhone 6.5"',"appstore-ipad-13":'Screenshot iPad 13"',"appstore-preview":"App Preview","appstore-icon":"Icon","playstore-feature":"Feature graphic","playstore-phone-9x16":"Phone screenshot 9:16","playstore-tablet":"Tablet screenshot","playstore-icon":"Icon","playstore-promo-16x9":"Promo video 16:9"},channels:{instagram:"Instagram",tikTok:"TikTok",youTube:"YouTube",facebook:"Facebook",linkedIn:"LinkedIn",x:"X",pinterest:"Pinterest",web:"Web",appStore:"App Store",playStore:"Play Store",identity:"Identity",custom:"Custom"},variants:{rtlUnsupported:"Right-to-left languages are not supported yet: the layout would have to be mirrored, and only text and voice change in a translation",duplicatedRequest:e=>`Duplicated ${e.label}`,duplicateBusy:"The agent or a render is working on this creative: duplicate the format when it has finished",instancesFull:e=>`${e.format} already has ${e.max} copies: remove one before duplicating it again`,formatNotInVersion:e=>`${e.format} is not in v${e.n}: open a version that has it to duplicate it`,localeUnsupported:e=>`"${e.tag}" is not one of the supported languages`,localeRtl:e=>`"${e.tag}": right-to-left languages are not supported yet: the layout would have to be mirrored, and only text and voice change in a translation`,localeNotInBrief:e=>`${e.tag} is not one of this creative's languages: add it in the brief first`,instanceUnknown:e=>`${e.format} is not a format of v${e.n}`,localizationNotFound:e=>`No ${e.locale} translation of ${e.format} in v${e.n}`,localizationBusy:"The agent is working on this creative: edit the translation when it has finished",localizationInvalid:e=>`The translation cannot be saved: ${e.detail}`,localizationMismatch:e=>`"${e.entry}" is not a translatable text of this format`,localizationUnusable:e=>`The ${e.locale} translation of ${e.format} no longer fits its composition`,textOverflow:e=>`The translation of "${e.clip}" does not fit its box, even at ${e.fit}% size`,fallbackFontUnavailable:e=>`Fallback font unavailable: ${e.family} could not be downloaded, so some characters may show in a system font`,tooManyFonts:"The translation needs more font files than a composition may have",voiceFileInvalid:e=>`The translated voice of "${e.clip}" is not a file of this version`,renderNeedsForce:e=>`These translations have open problems or outdated texts: ${e.list}. Render anyway to go on`,localizationMissing:e=>`No translation to render for: ${e.list}`,localeStale:e=>`${e.count} outdated`,textOverflowMeasured:e=>`The translation of "${e.clip}" overflows its box in the render, at ${e.fit}% size`,sourceLayoutOverflow:e=>`The original text of "${e.clip}" already overflows here (its box, the frame or the safe zone): fix it in the original`,sourceTextOverflow:e=>`The original text of "${e.clip}" overflows its box in the render: it shows untranslated or outdated, so it is the original's to fix`,renderCheckFailed:e=>`${e.file} was rendered but could not be checked`,assetChanged:e=>`${e.file} changed since Motion Studio made or attached it for this translation: translate again (or restore the file) before rendering`,staleEntry:e=>`The original text of "${e.clip}" changed after it was translated: it shows in the original language until translated again`,notTranslated:e=>`"${e.clip}" is not translated yet`,voiceTooLong:e=>`The translated voice of "${e.clip}" lasts ${e.voice.toFixed(1)} s, longer than its clip (${e.clipSec.toFixed(1)} s): it needs a shorter script`,voiceDurationUnknown:e=>`The length of the translated voice of "${e.clip}" could not be measured`,voiceFailed:e=>`The translated voice of "${e.clip}" could not be generated: ${e.reason}`,voiceNoScript:e=>`Can't translate the voice of "${e.clip}" (${e.format}): it has no known script, so it keeps the original voice`,voiceFallbackReason:{off:"the voice service is off for this creative",noKey:"no key for the voice service",missingPermission:"the key lacks the text-to-speech permission",declined:"the confirmation was declined",failed:"the generation failed"},localizeNoCompositions:e=>`v${e.n} has no compositions to translate`,submitNotInTurn:e=>`${e.locale} · ${e.format} is not asked in this turn`,voiceNotTranslatable:e=>`"${e.clip}" is not a voice clip with a known script`,voicesNotInTurn:e=>`Voices are not translated for ${e.locale} in this turn: leave voiceScripts empty`,fitWithoutText:e=>`The fit of "${e.clip}" needs its translated text`,storePack:{title:"App store pack",appStore:"App Store",googlePlay:"Google Play",goal:e=>`App Store and Google Play screenshots for ${e.app}`,notStorePack:"This creative is not an App store pack",foreignFormat:e=>`Not formats of this store pack: ${e.list}`,collision:e=>`There is no room for more instances of ${e.list} (20 at most): remove a format of that kind and try again`,badInstances:"The store pack instances do not match its formats",second:"A creative has one store pack: change or remove it with the storePack field, not the whole brief",useEntry:"The store pack is set with the storePack field (the Store pack entry), not with the whole brief",lastFormats:"The store pack is the last format of the creative: add another format before removing it",screenNotImage:e=>`${e.file} is not an image in the project’s Assets`,check:{notImage:"not a PNG or JPEG file",unreadable:"the file could not be read",wrongSize:e=>`${e.width}×${e.height} instead of ${e.expectedWidth}×${e.expectedHeight}`,hasAlpha:"it has an alpha channel (transparency), which the store refuses",notVideo:"not a readable video",codec:e=>`video codec ${e.codec}: the store needs H.264`,fps:e=>`${Math.round(e.fps*100)/100} fps: the App Store needs ${e.expected}`,duration:e=>`lasts ${e.seconds.toFixed(1)} s: App Store previews last ${e.min} to ${e.max} s`,noAudio:"no audio track: the App Store needs one",tooLarge:e=>`${e.sizeMB} MB: the limit is ${e.maxMB} MB`,noTranslation:e=>`no ${e.locale} translation`,renderFailed:e=>`the render failed: ${e.reason}`,renderProblems:e=>`the render has problems: ${e.list}`,copyFailed:e=>`could not be copied: ${e.reason}`,notRendered:"not rendered",notInVersion:e=>`not in version ${e.n}`,notInGroup:"no variant has this format",tooFewScreenshots:e=>`${e.count} screenshot${e.count===1?"":"s"}: the store needs at least ${e.min}`,tooManyScreenshots:e=>`screenshot ${e.count}: the store accepts at most ${e.max}`},readme:{title:e=>`${e.app}: App Store and Google Play pack`,made:e=>`Made by Motion Studio on ${e.date} from version ${e.version}.`,madeGroup:e=>`Made by Motion Studio on ${e.date} from the final selection of the variant group.`,limits:e=>`Store limits (checked on ${e.date} against the public Apple and Google pages):`,appStoreShots:e=>`App Store screenshots: PNG or JPEG without transparency, ${e.min} to ${e.max} per device size (${e.sizes}).`,appStorePreview:e=>`App Store app preview: H.264, exactly ${e.fps} fps (Apple accepts up to ${e.fps}; Motion Studio renders and checks ${e.fps}), ${e.min} to ${e.max} seconds, with an audio track (AAC), up to ${e.maxMB} MB, up to ${e.perDevice} per device size.`,playShots:e=>`Google Play screenshots: PNG without transparency or JPEG, ${e.min} to ${e.max} per device type, sides from ${e.minSide} to ${e.maxSide} px (${e.sizes}).`,playFeature:e=>`Google Play feature graphic: ${e.size}, PNG without transparency or JPEG.`,sources:"Sources:",order:"Upload order:",orderAppStore:"App Store Connect: for each language, upload the screenshots of each device folder in file name order (01, 02, …): the first ones are shown first.",orderPreview:'App Store Connect: upload preview.mp4 as the app preview of the iPhone 6.9" display.',orderPlay:"Google Play Console: for each language, upload the phone and tablet screenshots in file name order, then feature-graphic.png.",playVideoTitle:"Google Play video:",playVideo:"Google Play does not take a video file: upload promo-video.mp4 to YouTube (public or unlisted, ads off) and paste its YouTube link in the store listing. Only the first 30 seconds play automatically.",notInPackTitle:"Not part of the pack (store formats picked by hand, not exported):",failedTitle:"Files not exported:"}}},pairing:{openFromLink:"Open Motion Studio from the link shown in the terminal"},keyChecks:{refused:"The service refused the request: press Test again or check the key and its permissions",timeout:e=>`No answer within ${e.seconds} s`,network:"The service could not be reached",status:e=>`The service answered ${e.status}`,rateLimited:"Too many requests: try again later"},providers:{unreachable:e=>`${e.provider} is unreachable: ${e.detail}`,invalidKey:e=>`The ${e.provider} key is invalid or lacks permission`,rateLimited:e=>`Rate limit reached for ${e.provider}: try again later`,responded:e=>`${e.provider} responded ${e.status}: ${e.detail}`,fileTooLarge:e=>`File too large from ${e.provider}`,invalidResponse:e=>`Invalid response from ${e.provider}`,blockedAddress:"Address not allowed for download",tooManyRedirects:"Too many redirects",unsplashNoVideo:"Unsplash does not offer video: use Pexels",invalidStockId:"Invalid stock id",noPexelsVideo:"No downloadable video file on Pexels",photoBy:e=>`Photo by ${e.author} on ${e.provider}`,videoBy:e=>`Video by ${e.author} on ${e.provider}`,invalidFontName:"Invalid font name",invalidFontWeights:"Invalid font weights",fontNotFound:e=>`Font "${e.family}" not found on Google Fonts`,textTooLong:e=>`Text too long for ${e.provider} (maximum ${e.max} characters)`,invalidVoice:"Invalid voice",noVoice:"No voice available on ElevenLabs",invalidImageSize:"Invalid image size",invalidAssetsFolder:"Invalid assets folder",optionInvalid:e=>`${e.label} is not valid`,optionQuality:"Quality",optionBackground:"Background",optionOrientation:"Orientation",optionProvider:"Provider",configureKey:e=>`Set the ${e.provider} key in the Motion Studio settings`,referencesTooLarge:"References too large",invalidReference:e=>`Invalid reference: ${e.file}`,describeImage:"Describe the image to generate",nearestSize:"Nearest supported size: resize or crop the image if needed",writeText:"Enter the text to read",imageTag:"image",voiceTag:"voice",soundTag:"sound effect",musicTag:"music",audioAttribution:e=>`AI-generated (${e.provider})`,promptRequired:"Describe the sound to generate",promptTooLong:e=>`Description too long (maximum ${e.max} characters)`,durationOutOfRange:e=>`Duration out of range (${e.min} to ${e.max} seconds)`,voiceAttribution:e=>`AI-generated voice (${e.provider})`,searchWhat:"Say what to search for",fontsAttribution:"Google Fonts · OFL / Apache 2.0",fontsLicense:"Google Fonts: OFL or Apache 2.0 license, commercial use allowed",invalidDestination:"Invalid destination: use assets/brand/<name> for images and logos or assets/fonts/<name> for fonts (png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf)",invalidUrl:"Invalid URL: give a full http(s) address",siteFontsLimit:e=>`inspect_site_fonts can be used at most ${e.max} times per analysis`,codebaseImport:{outside:e=>"the source is not inside one of the analysis codebases (or its real path leaves it)",secret:e=>"the source is a secret file (or inside a secret folder): it is never opened",notFile:e=>"the source is not a regular file (or it changed while it was read)",tooBig:e=>`the file is larger than ${e.max} MB`,extension:e=>"only png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf files are copied, with the same extension at the destination",dest:e=>"invalid destination: use assets/brand/<name> for images and logos or assets/fonts/<name> for fonts",limit:e=>`import_codebase_file can be used at most ${e.max} times per analysis`,missing:e=>"the source file does not exist"},accessDenied:e=>`${e.host} denied access to the file (${e.status})`,unknownAuthor:"unknown author",unrestorableEdit:e=>`The agent tried to edit ${e.file} directly: the change cannot be undone`,revertedEdit:e=>`The agent tried to edit ${e.file} directly: the change was undone`,turnEnded:e=>`Turn ended with result ${e.subtype}`,claudeExited:e=>`claude exited with code ${e.code} without a result`,claudeNotFound:e=>`Command claude not found (${e.bin}). Install Claude Code or check the Doctor.`,claudeCannotStart:e=>`Cannot start claude: ${e.detail}`,projectFolderMissing:e=>`Project folder not found: ${e.path}`,serviceOff:{images:"Images are turned off in this creative's brief: tell the user they are off and that they can change this with the Services button",voice:"Voice is turned off in this creative's brief: tell the user it is off and that they can change this with the Services button",music:"Music is turned off in this creative's brief: tell the user it is off and that they can change this with the Services button",sfx:"Sound effects are turned off in this creative's brief: tell the user they are off and that they can change this with the Services button"},serviceFor:{images:"images",voice:"voice",music:"music",sfx:"sound effects"},serviceStockOnly:"This creative uses stock images only: use stock_search and stock_download instead of generate_image",serviceNoKey:e=>`This creative's brief chooses ${e.provider} for ${e.service}, but the ${e.provider} key is not set: add it in the Motion Studio settings, or the user can change the service with the Services button`,serviceOverridden:e=>`This creative's brief chooses ${e.provider} for ${e.service}: used instead of ${e.requested}`,serviceMissingPermission:e=>`The ${e.provider} key cannot be used for ${e.service}: ${e.permission?`it lacks the permission ${e.permission}. Tell the user to fix the key in the Motion Studio settings (then test it again)`:`${e.provider} refused the key or the request without naming a permission (it can also be a region, organization or firewall restriction at the provider). Tell the user to check this with ${e.provider} and in the Motion Studio settings (then test the key again)`}, or to change the service with the Services button`,serviceVoicesUnused:"This creative's brief chooses OpenAI for voice: ElevenLabs voices cannot be used, so there is nothing to list",voiceDropped:e=>`The voice ${e.voice} belongs to ${e.owner} and this voice-over uses ${e.provider}: it was not used, the ${e.brand?`brand's ${e.provider} voice`:`${e.provider} default voice`} was used instead`,voiceWrongProvider:e=>`The voice ${e.voice} is not a ${e.provider} voice: choose one of the ${e.provider} voices`},issues:{id:"invalid id (lowercase letters, digits and hyphens)",manualRef:"manual sources must have ref: null",websiteRefRequired:"website sources need an http(s) address as ref",websiteRefInvalid:"website sources must have an http(s) address as ref",imageRefRequired:"image sources need a relative path as ref",imageRefInvalid:"image sources must have a relative path as ref",weights:"invalid weights (whole numbers from 100 to 900)",nameRequired:"name is required",nameTooLong:"name too long (maximum 60 characters)",hex:"invalid hex (use #RRGGBB)",role:"invalid role",familyRequired:"family is required",familyTooLong:"family too long (maximum 80 characters)",maxWeights:"at most 9 weights",variant:"invalid variant",background:"invalid background",textRequired:"text is required",textTooLong:"text too long (maximum 2000 characters)",duplicateIds:"duplicate ids",siteSourceUrl:"website sources need an address",siteSourceFile:"website sources must have file: null",imageSourceFile:"image sources need a file",imageSourceUrl:"image sources must have url: null",codebaseRefRequired:"codebase sources need a path relative to the codebase as ref",codebaseRefInvalid:"codebase sources must have a relative path as ref",codebaseSourcePath:"codebase sources need a folder path",codebaseSourcePathInvalid:"the codebase folder must be an absolute path, not a disk root",codebaseSourceUrl:"codebase sources must have url: null",codebaseSourceFile:"codebase sources must have file: null",pathOnlyCodebase:"only codebase sources have a folder path or note",maxCodebaseSources:"at most 5 codebase sources",duplicateSourceIds:"duplicate source ids",relativePath:'invalid path (must be relative, without ".." or "\\")',httpOnly:"only http(s) addresses",duplicateFiles:"duplicate files",fileName:"invalid file name",duplicatePresetIds:"duplicate preset ids",customVideoEven:"a video needs an even number of pixels on each side",customVideoMax:"a video is at most 4096 pixels on each side",domain:"invalid domain (e.g. api.example.com or *.example.com)",fileInvalid:"invalid file",sourceInvalid:"invalid source",duplicateFormats:"the same format twice",noFormats:"at least one format",emptyFill:"at least one field to write",labelNotInFormats:"a label for a format that is not in the brief",briefWithPartial:"a full brief cannot be sent together with formats or labels",badLocales:"invalid languages (no repeats, and the main language is not among the extra ones)",duplicateStores:"the same store twice",storePackIphone:'the App Store needs the iPhone 6.9" screenshots',storePackPhone:"Google Play needs the phone screenshots",storePackScreenshots:"the number of screenshots is outside what the chosen stores accept",badAssetPath:"invalid path (must be a file under assets/)",missingValue:"missing or invalid value"},brandFields:{colors:"color",fonts:"font",logos:"logo",dos:"thing to do",donts:"thing to avoid",tone:"tone of voice",photoStyle:"photo style"},desktop:{menu:{edit:"Edit",undo:"Undo",redo:"Redo",cut:"Cut",copy:"Copy",paste:"Paste",selectAll:"Select All",view:"View",reload:"Reload",fullScreen:"Toggle Full Screen",resetZoom:"Actual Size",zoomIn:"Zoom In",zoomOut:"Zoom Out",window:"Window",minimize:"Minimize",close:"Close",help:"Help",restartToUpdate:"Restart to Update",github:"Motion Studio on GitHub"},attachedGoneMessage:"The Motion Studio this app was connected to has closed.",attachedGoneRestart:"Restart",attachedGoneQuit:"Quit",renderRunningMessage:e=>e.count===1?"A render is still running":`${e.count} renders are still running`,renderRunningDetail:"Quitting stops them: nothing half-done is kept, and you can render again later.",renderRunningQuit:"Stop and quit",renderRunningKeep:"Keep rendering",draftUnsavedMessage:e=>e.count===1?"You have unsaved edits in the editor":`You have unsaved edits in ${e.count} editors`,draftUnsavedDetail:"Quitting discards them. Keep editing to save them as a new version first.",draftUnsavedQuit:"Discard and quit",draftUnsavedKeep:"Keep editing",draftReloadDetail:"Reloading discards them. Keep editing to save them as a new version first.",draftReloadDiscard:"Discard and reload",invalidRequest:"Invalid request",invalidPath:"Invalid path",alreadyRunning:e=>`Motion Studio is already running (port ${e.port})`,updateAvailable:e=>`Motion Studio ${e.version} is available: restart to update`,updateCheckFailed:e=>`Update check failed: ${e.detail}`},cli:{help:`Usage: npx @motion-studio/cli [--port 4317] [--no-open]
1
+ import{s as m,o as y,a as k,b as B,n as v,_ as z,l as E,d as Z,p as Fn,u as Ie,c as pi,e as U,f as Kt,r as re,g as Ln,Z as ae}from"./vendor-IQO2I6nB.js";const Nn={common:{cancel:"Cancel",save:"Save",close:"Close",loading:"Loading…",items:e=>e.count===1?"1 item":`${e.count} items`},errors:{toolUnavailable:"Tool not available in this job",notFound:"Not found",fileNotFoundShort:"File not found",nonLocalOrigin:"Request not allowed: non-local origin",kitUnreadable:"Brand kit unreadable",invalidBridgeAccess:"Invalid bridge access",internalError:"Internal Motion Studio error",unknownTool:e=>`Unknown tool: ${e.tool}`,markerNotFound:"marker not found",exitCode:e=>`code ${e.code}`,timedOut:e=>`timed out after ${e.seconds} s`,formatCatalogFallback:e=>`${e.detail}. Using the default catalog.`,jobCancelled:"The job was cancelled.",invalidProgress:"Invalid progress message (1-300 characters)",invalidPhase:"Invalid analysis phase: use reading, fonts, colors, logos, tone or writing",validateOnlyCreatives:"Validation is only available in creatives",previewFramesLimit:e=>`preview_frames can be called at most ${e.max} times per turn: check the frames you already have, then finish the turn`,previewFramesTimes:e=>`Give from 1 to ${e.max} times, in seconds from the start of the composition`,previewBusy:"Too many previews are being prepared: try again in a moment",previewSessionNotFound:"No such live preview",chromeDownloadFailed:e=>`The Chrome for Testing download did not complete (${e.code}). The details are in the Motion Studio log.`,chromeConsentRequired:"Chrome for Testing is downloaded only after you agree to its size",chromeDownloadUnavailable:"Chrome for Testing cannot be downloaded here",setupConsentRequired:"Confirm first: nothing is installed without your OK",setupNotLoopback:"Motion Studio is open to the network here: for safety it installs nothing. Install by hand, or start Motion Studio only on this computer",setupBusy:"Already running",setupUnavailable:"Not available on this computer: install it by hand",chromeInfoFailed:e=>`Could not read the Chrome for Testing download (${e.code}). The details are in the Motion Studio log.`,chromeSizeChanged:"The Chrome for Testing download changed since you agreed: check its size again",renderEngineAvailable:"A browser to render with is already available",formatNotInTurn:e=>`${e.format} is not one of the formats of this turn: use ${e.list}`,previewUnavailable:"Previews are not available in this Motion Studio: no Chromium to render with",previewOrigin:"This window cannot show a live preview (its origin is not allowed)",compositionNotFound:e=>`v${e.n} has no composition for ${e.format}`,compositionUnusable:e=>`The composition of ${e.format} in v${e.n} has problems: it cannot be previewed`,rootPath:"(root)",turnFailed:"Turn failed",codebaseNotAbsolute:e=>`The linked folder must be an absolute path: ${e.path}`,codebaseDiskRoot:"You can't link the disk root",codebaseHome:"Link a specific folder, not your whole home folder",codebaseOverlap:"A linked folder cannot contain the project or sit inside it",codebaseOverlapNamed:e=>`The linked folder ${e.path} cannot contain the project or the workspace, nor sit inside them`,codebaseUnsafePath:"The folder path contains control characters: rename the folder or choose another one",codebaseGlobChars:e=>`The folder path ${e.path} contains ( ) [ ] { } * ? or \\, which the agent's file rules cannot match safely: rename the folder (or the parent folder that has them). A symbolic link does not help: the folder's real path is checked too`,folderGlobChars:e=>`The path ${e.path} of the workspace or project folder contains ( ) [ ] { } * ? or \\, which the agent's rules protecting Motion Studio's files cannot match safely, so the agent does not run there: rename the folder (or the parent folder that has them), then choose the workspace again`,codebaseSourceMissing:e=>`Folder not found: ${e.path}`,codebaseSourceDuplicate:e=>`This folder is already a brand source: ${e.path}`,codebaseSourceLimit:e=>`At most ${e.max} codebase sources per brand`,codebaseOverlapBrand:"The codebase cannot contain the project or the workspace, nor sit inside them",codebaseNestedBrand:"The codebase is inside another codebase source or contains one: add only one of them",codebaseConfigBrand:"The codebase cannot contain Motion Studio's configuration folder, nor sit inside it",codebaseSensitiveBrand:"The codebase cannot be, contain or sit inside a private folder of your home: keys and credentials, .config, or anything under Library (iCloud Drive included)",pathIsFile:e=>`${e.path} is a file, not a folder`,workspaceNotFound:e=>`Workspace folder not found: ${e.path}`,notWritable:e=>`Cannot write to ${e.path}: check the permissions`,invalidSettings:e=>`Invalid settings: ${e.fields}`,invalidProjectId:e=>`Invalid project id: ${e.slug}`,projectNotFound:e=>`Project ${e.slug} not found`,projectNameRequired:"Enter a project name",invalidProject:e=>`Invalid project: ${e.fields}`,projectIconInvalid:"The project icon must be an image from Assets.",fileNotFound:"file not found",invalidJson:e=>`invalid JSON (${e.detail})`,invalidContent:e=>`invalid content — ${e.detail}`,gitNotFound:"git not found: install it to use Motion Studio",commitNotFound:e=>`Version not found in the repository: ${e.commit}`,gitFailed:e=>`git ${e.command} failed: ${e.detail}`,gitRepoUnsafe:e=>`Motion Studio stopped before running git: the repository has settings it did not create, which could run a command outside the sandbox (${e.detail}). No commit was made. Check the project's .git/config, .gitattributes and .git/info/attributes, remove what you did not add, and try again.`,gitDirNotFolder:`Motion Studio stopped before running git: the project's .git is not a folder (it is a file or a link, for example a "gitdir:" pointer), so git would read a configuration from somewhere else. No commit was made. Replace .git with the project's real repository folder, then try again.`,gitLayoutFile:e=>`Motion Studio stopped before running git: the project has ${e.file}, which makes git load a configuration from another place. Motion Studio never creates it. No commit was made. Delete ${e.file} if you did not add it on purpose, then try again.`,gitConfigOrigin:e=>`Motion Studio stopped before running git: the setting ${e.key} comes from ${e.origin}, not from the project's own .git/config (for example through an include). No commit was made. Remove the include or the file that adds it, then try again.`,gitConfigKeyBlocked:e=>`Motion Studio stopped before running git: the project's .git/config has the setting ${e.key}, which Motion Studio does not allow because it could run a command outside the sandbox (filters, diff drivers, includes, aliases, hooks…). No commit was made. If you did not add it on purpose, remove it with "git config --unset ${e.key}" in the project folder (or delete its section from .git/config), then try again.`,gitConfigValueBlocked:e=>`Motion Studio stopped before running git: the value of ${e.key} in the project's .git/config contains "!", "ext::" or an --upload-pack/--receive-pack option, which could run a command. No commit was made. Set it to a plain address with "git config ${e.key} <value>" (or remove it with "git config --unset ${e.key}"), then try again.`,gitAttributesBlocked:e=>`Motion Studio stopped before running git: ${e.file} sets a filter or a diff/merge driver ("${e.line}"), which could run a command outside the sandbox. No commit was made. Remove that line (built-in diff names such as diff=python are fine), then try again.`,projectQuarantined:e=>`Motion Studio has locked this project: protected files changed in a way Motion Studio did not make (${e.list}). They configure git or the agent and would run outside the sandbox, so no agent and no git runs on the project for now. Put those files back as they were (for example from a backup, or undo the change you made); Motion Studio unlocks the project by itself as soon as they match again. If you made the change yourself, accept it on the project page.`,integrityChangedSince:"The protected files changed since the list was shown: check the updated list before accepting.",integrityRecordUnreadable:"the integrity record in the Motion Studio settings folder could not be read",invalidRequest:"Invalid request",invalidRequestDetail:e=>`Invalid request: ${e.detail}`,outputsFolderNotFound:"Outputs folder not found",useAsLogoNoSvg:"This format has no logo file to use: render it first (an app icon has no SVG)",useAsLogoNotChecked:"This version has no checked logo yet: render the format first",useAsLogoMissing:"The logo file of this version is missing: render the format again",useAsLogoRefused:"The logo file did not pass the SVG safety check, so it cannot be added to the brand",useAsLogoNotIdentity:"This format is not a logo, favicon or app icon",useAsLogoBadVariant:"Choose the primary logo or the icon",versionNotFound:"Version not found",noWorkspace:"No workspace configured: choose a working folder",workspacePathAbsolute:"Enter an absolute path for the workspace",promptRequired:"Write a request for the agent",invalidSessionId:"Invalid session id",textMissing:"Text is missing",imageMustBeReference:"The image must be a project reference",unknownProvider:e=>`Unknown provider: ${e.provider}`,keyFromEnv:"The key comes from an environment variable: change it there",invalidDecision:"Invalid decision",questionNeedsAnswer:"Answer the question with one of its options or your own words",invalidAnswer:"The answer does not fit the question",ruleMissing:"Rule is missing",revealFailed:"Can't show the outputs folder in Finder",invalidKey:"Invalid key: paste the provider key on a single line",keychainUnavailable:e=>`The system keychain is not available: ${e.detail}`,invalidPath:e=>`Invalid path: ${e.file}`,reservedFile:e=>`Reserved file: ${e.file}`,fileNotValid:e=>`File not found or invalid: ${e.kind}/${e.file}`,fileInaccessible:e=>`File not accessible: ${e.kind}/${e.file}`,fileOutsideFolder:e=>`File outside the folder: ${e.kind}/${e.file}`,folderInvalid:e=>`Invalid ${e.kind} folder: it is a link or lies outside the project`,assetsMetaInvalid:"Invalid asset metadata",referencesMetaInvalid:"Invalid reference metadata",assetNotFound:e=>`Asset ${e.file} not found`,assetReferenceInUse:e=>`${e.file} is already used by a creative or the brand: it stays in Assets`,referenceNotFound:e=>`Reference ${e.file} not found`,assetRenameInvalid:"Choose a new file name without folders",assetRenameExists:e=>`A file named ${e.file} already exists`,assetRenameKind:e=>`The new name ${e.file} would change the file type`,assetRenameFailed:"The asset could not be renamed; nothing was changed",waveformUnavailable:"The waveform of this file is not available",fileTooLarge:e=>`File too large: ${e.name}`,uploadTooLarge:"Too many files or files too large in one upload",noFileReceived:"No file received",invalidCreativeId:e=>`Invalid creative id: ${e.slug}`,invalidBrief:e=>`Invalid brief: ${e.detail}`,creativeNotFound:e=>`Creative ${e.slug} not found`,invalidCreative:e=>`Invalid creative: ${e.detail}`,formatsReorderRemoveOnly:"A partial save can only reorder or remove formats the brief already has",waitBeforeBrief:"Wait for the current generation to finish before editing the brief",variantRunning:e=>`Variant ${e.letter} is working: stop it before discarding it`,variantLastActive:e=>`Variant ${e.letter} is the last active variant: keep at least one`,creativeBusyTurn:"An agent request of this creative is running or queued: wait for it to end, or stop it",creativeBusyQueued:"This creative has requests waiting in its queue: remove them first",creativeBusyRender:"A render of this creative is running or queued: wait for it to end",creativeGroupAll:e=>`This is variant A of a group of ${e.count} variants: archive or delete the whole group`,trashUnavailable:e=>`Can't move the creative to the Trash: ${e.detail}`,trashOtherVolume:"the project is on a different disk than the Trash",trashUnsupported:"Motion Studio cannot use the Trash of this system",variantUnknown:e=>`This creative has no variant ${e.letter}`,variantAddFanout:e=>`This request was sent to several variants: variant ${e.letter} adds the new variants. Do not add one here`,variantAddFirstGeneration:"A variant's first generation does not add variants: the user can ask for one in a message",variantNoGroup:"This creative has no variants",variantOrphan:"The group of this variant cannot be found: it opens as a single creative",variantDiscarded:e=>`Variant ${e.letter} is discarded: restore it first`,variantPickInvalid:e=>`Invalid selection: ${e.detail}`,variantPickNotMember:e=>`${e.slug} is not an active variant of this group`,variantPickNoFormat:e=>`Version ${e.n} has no ${e.format}`,variantBaseInvalid:e=>`Cannot start from that version: ${e.detail}`,variantBaseChanged:e=>`The files of ${e.format} in version ${e.n} changed since they were saved`,variantFolderExists:e=>`A folder named ${e.slug} already exists`,variantDirections:"One direction per new variant at most, each up to 140 characters",variantDiscardedTurn:"Restore the variant to work on it",variantBusyFormats:e=>`Variant ${e.letter} is working: a request for some formats only cannot wait in its queue. Send it to that variant when it is done`,variantDirectionsFailed:"The agent did not propose valid directions for the variants: type them yourself or try again",generationRunning:"A generation is already running for this creative",waitBeforeRestart:"Wait for the current generation to finish before restarting from a version",versionNNotFound:e=>`Version ${e.n} not found`,versionNotRestorable:e=>`Version ${e.n} cannot be restored (commit or session is missing)`,formatNotInBrief:e=>`The format ${e.format} is not in the brief`,waitBeforeLinks:"Wait for the current generation to finish before linking or unlinking formats",formatsNotInBrief:"None of the requested formats is in the brief",linkSelf:"A format cannot follow itself",linkChain:e=>`${e.follower} cannot follow ${e.primary}: a format that follows another cannot have followers, and a format with followers cannot follow another`,linkIncompatible:e=>`${e.follower} cannot follow ${e.primary}: ${e.reason}`,followReason:{kind:"one is a video and the other an image",size:"their sizes are different",extension:"it does not accept every file type the main format can have",duration:"the main format is longer than its maximum duration",safeZone:"its safe area is smaller than the main format’s",self:"it is the same format",chain:"links cannot form a chain",unknown:"the format is not in the brief or the catalog",fileSize:"the main format’s file is larger than its maximum file size"},hashesPending:"Still reading the files of this format: try again in a few seconds",pickFollower:e=>`${e.format} follows ${e.primary}: it uses the ★ of ${e.primary}`,pickNoFile:e=>`Version ${e.n} has no file for ${e.format}`,pickFileMissing:e=>`The ${e.format} file of version ${e.n} is missing on disk or cannot be used (a link)`,approvalNotFound:"Approval request not found or already handled",invalidRule:"Invalid permission rule",tooManyPermissions:"Too many saved permissions: revoke some in the project settings",invalidPermission:"Invalid permission",permissionNotFound:"Permission not found",invalidBrandKit:e=>`Invalid brand kit: ${e.detail}`,resultingBrandKitInvalid:e=>`The resulting brand kit is invalid: ${e.detail}`,guidelinesTooLong:"Guidelines too long (maximum 200,000 characters)",invalidSourceUrl:"Invalid source: invalid URL",privateSourceUrl:"Local or private addresses are not allowed as a source",invalidSource:e=>`Invalid source: ${e.detail}`,sourceExists:"This source is already added",sourceNotFound:e=>`Source ${e.id} not found`,invalidProposalId:e=>`Invalid proposal id: ${e.id}`,proposalNotFound:e=>`Proposal ${e.id} not found`,proposalInvalid:e=>`Invalid proposal: ${e.detail}`,proposalNotObject:"Invalid proposal: brand-kit.json does not contain a JSON object",proposalKitFile:e=>`Invalid proposal: brand-kit.json ${e.reason}`,proposalBadJson:e=>`Invalid proposal: invalid JSON (${e.detail})`,proposalMissing:"missing",proposedGuidelinesTooLong:"Proposed guidelines too long",proposalClosed:"The proposal was already applied or discarded",analysisRunning:"A brand analysis or an asset description is already running for this project",addSourceFirst:"Add at least one website, image or codebase to analyze",noUsableCodebase:"None of the sources can be analyzed: the codebase folders are missing or not usable",noAssetsToDescribe:"No assets to describe",skipNotRegular:"not a regular file",skipTooLarge:"file too large",skipUnreadable:"unreadable",skipLinked:"linked file not allowed",skipOutside:"outside the project",claudeCommandInvalidJson:e=>`MOTION_STUDIO_CLAUDE_COMMAND is not valid JSON (${e.detail}): use a JSON array of strings`,claudeCommandNotArray:"MOTION_STUDIO_CLAUDE_COMMAND must be a JSON array of strings",claudeCommandEmpty:"claudeCommand is empty",alreadyRunning:e=>`Motion Studio is already running (port ${e.port})`,bootBusy:"Another Motion Studio is starting with the same configuration: try again shortly",formatCatalogInvalid:e=>`Invalid format catalog: ${e.detail}`,formatCatalogUnreadable:e=>`The format catalog cannot be read, so it was not changed: ${e.detail}`,customFormatNotFound:e=>`There is no custom format "${e.id}"`,customFormatNotCustom:e=>`"${e.id}" is not a custom format: only custom formats are changed or deleted here`,customFormatNameTaken:e=>`A custom format is already called "${e.name}": choose another name`,customFormatInUse:e=>`${e.count===1?"A creative uses":`${e.count} creatives use`} this format: its type and size stay as they are (create a new format for another size)`,customFormatMaybeInUse:e=>`${e.count===1?"A creative cannot be read and might use":`${e.count} creatives cannot be read and might use`} this format: its type and size stay as they are`,customFormatDurationShort:e=>`A creative uses this format for ${e.sec} s: its maximum length cannot go below that`,formatUnavailable:e=>`The format "${e.id}" is no longer available: take it out of the brief`,invalidLanguage:"Choose a language from the list.",settingsNotWritable:e=>`Motion Studio cannot write the settings file (${e.path}). Check that the file and its folder are writable and not locked (Finder: Get Info, Locked), then save again.`,briefSessionGone:"This brief session is over (started over or turned into a creative elsewhere). Reload the page.",briefQueueFull:e=>`At most ${e.max} messages can wait for the agent: wait for it to finish, or stop it.`,briefSessionUnreadable:"The brief session of this project cannot be read: start over to discard it.",briefHandedOff:"This brief session was moved into a creative, but not completely: open the creative, or discard the session.",briefSessionBusy:"The agent is still working on the brief: wait for it to finish, or stop it.",briefUnknownFormat:e=>`${e.id} is not a format of the catalog: use an id from list_formats.`,briefIdentityFormat:e=>`${e.id} is an identity format: the brief agent cannot pick identity formats.`,briefFormatGap:e=>`${e.id}: the copies of a format go from its id up, none left out: ${e.missing} is missing.`,briefAssetOutside:e=>`${e.path} is not among the assets attached to this session.`,briefCodebaseOutside:e=>`${e.path} is not among the folders linked to this session.`,briefFillLimit:e=>`fill_brief can be called at most ${e.max} times in a turn.`,briefBadField:e=>`fill_brief: ${e.field}: ${e.detail}`,briefSourceSize:e=>`${e.path}: its size is not known (only a video or an image in the project’s Assets whose size was read can give a format).`,briefSourceKind:e=>`${e.path} is not a video or an image (an SVG or another file has no size of its own to use as a format).`,briefSourceSmall:e=>`${e.path} is too small for a format (a side under 16 px).`,briefSourceNoName:e=>`No free name was found for the format of ${e.path}: rename one of the custom formats called “Original …” and try again.`,briefAssetNotFound:e=>`${e.path} is not a file in the project’s Assets.`,analysisEdited:"This analysis was edited by hand: confirm to overwrite it with a new analysis.",analysisNotVideo:"Only videos in the project’s Assets can be analysed.",analysisBadWrite:e=>`write_video_analysis: ${e.detail}`,analysisNoWrite:"The agent ended without writing the analysis (write_video_analysis was not called).",analysisChanged:"The video changed during the analysis: it will be analysed again.",analysisWriteLimit:"write_video_analysis can be called at most 5 times in a run.",analysisGone:"The video is no longer in Assets.",analysisNothingWaits:"This creative is not waiting for a video analysis.",whisperNotFound:"No Whisper was found: install one, or point to it in Settings → Video transcription.",whisperProbeFailed:e=>`This Whisper did not work on a test second of audio: ${e.detail}`,whisperModelMissing:"The Whisper model is not installed.",transcriptionFailed:e=>`The transcription failed: ${e.reason}`,downloadSizeChanged:"The download size is not the one shown: open the choice again.",downloadBusy:"Another Whisper model is being downloaded: wait for it to finish.",downloadHashMismatch:"The downloaded file is not the expected one (sha256 check failed): it was deleted.",transcriptionNoKey:e=>`There is no saved ${e.provider} key: add it in Settings → Services.`,transcriptionNothingAsks:"This video is not waiting for a transcription choice.",transcriptionRecheckTimeout:"The search for Whispers did not answer in time: try again.",subtitlesRunning:"The subtitles of this creative are already being made.",subtitlesNoSet:"There are no subtitles to retime: make them first.",subtitlesNoVideo:"The latest version has no video format: there is nothing to subtitle.",noFfmpegSubtitles:"Subtitles need ffmpeg, which was not found on this Mac.",subtitlesTranscriptionOff:"Video transcription is switched off: turn it on in Settings → Video transcription to make subtitles.",subtitlesConflict:"The subtitles were changed elsewhere: reload them.",subtitlesTooLarge:e=>`The subtitles are over ${e.maxMB} MB.`,subtitlesOncePerTurn:"The subtitles were already asked for in this turn: they start when it ends.",subtitlesNoLang:e=>`This creative has no subtitles in ${e.lang}.`,subtitlesUnknownCue:e=>`No subtitle line has these ids: ${e.ids}. Nothing was changed.`,subtitlesCueChanged:e=>`These subtitle lines changed since you read them: ${e.ids}. Nothing was changed: read them again.`,subtitlesNoSource:"There are no subtitles made from the speech to translate: make them first.",subtitlesSameLang:e=>`The subtitles are already in ${e.lang}.`,subtitlesLangSpoken:e=>`The subtitles in ${e.lang} come from the video's own speech: they are not translated.`,subtitlesTranslating:e=>`The subtitles in ${e.lang} are already being translated.`,subtitlesNoCues:e=>`The subtitles have no line with these ids: ${e.ids}.`,subtitlesNoIds:"Name at least one subtitle line to translate again.",subtitlesNothingToTranslate:e=>`Every line in ${e.lang} is one you corrected: there is nothing to translate.`,subtitlesLangExists:e=>`This creative already has subtitles in ${e.lang}.`,subtitlesNothingStale:e=>`No line in ${e.lang} needs translating again.`,subtitlesNothingStaleCorrected:e=>`The lines to translate again in ${e.lang} are ones you corrected: pick them to translate them again.`,subtitlesFollowsSource:"A translation has the timing of the subtitles it comes from: check the timing of those.",subtitlesSourceSet:"These subtitles come from the video's speech and other languages are translated from them: delete those translations first.",subtitlesSourceChanged:"The subtitles it was translating from are gone (deleted, or made again in another language): nothing was written.",subtitlesLangTranslated:e=>`The subtitles in ${e.lang} are a translation: to make them from the video's speech, delete them first.`,subtitlesOtherSpeech:e=>`The subtitles from the video's speech are in ${e.other} and other languages are translated from them: to make them again in ${e.lang}, delete those translations first. To add a language, use “+ Language”, which translates them.`,subtitlesVoiceGone:e=>`The ${e.lang} video no longer has its own translated voice: its subtitles are not made again from speech. Delete them and add ${e.lang} again with “+ Language”, which translates them.`,subtitlesTranslateBad:e=>`submit_subtitle_translation: ${e.detail}`,subtitlesTranslateLimit:"submit_subtitle_translation can be called at most 5 times in a run.",transcriptionNoBundled:"This app has no Whisper of its own: install one or point to it in Settings → Video transcription."},videoAnalysis:{waiting:e=>`Analysing the video (${e.files})…`,skip:"Skip",skipped:e=>`Analysis skipped: the agent uses the video as it is (${e.files}).`,failed:e=>`The analysis of ${e.file} failed: ${e.reason}`,states:{none:"Not analysed",queued:"Queued",running:"In progress",waiting:"Waiting",ready:"Ready",stale:"Out of date",error:"Error"},commit:e=>`Video analysis: ${e.file}`,editedCommit:e=>`Video analysis edited: ${e.file}`,movedCommit:e=>`Video analysis moved: ${e.from} → ${e.to}`,section:"Analysis",analyze:"Analyse",reanalyze:"Analyse again",edit:"Edit",stop:"Stop",answer:"Choose…",overwriteTitle:"The analysis was edited: overwrite it?",overwriteText:"A new analysis replaces the text you edited by hand.",overwrite:"Overwrite",summary:"Summary",timeline:"Scenes",moments:"Usable moments",transcript:"Transcript",tags:"Tags",onScreenText:"On-screen text",seek:e=>`Go to ${e.time}`,automatic:"Automatic transcript: names may be wrong.",noTranscript:{skipped:"Transcription skipped.",noSpeech:"Nobody speaks in the video.",noAudio:"The video has no audio.",empty:"No speech recognised."},edited:"Edited by hand",raw:"The text was rewritten by hand: shown as it is.",hints:{none:"The video is analysed when it enters a brief, or now with Analyse.",queued:"Starts as soon as the project's other analyses finish.",checkingAudio:"Checking the audio for speech first.",running:"The agent is looking at the video's frames…",stale:"The video changed after the analysis.",staleEdited:"The video changed after your edit: Analyse again to update it.",long:"This is a long video: choose how to analyse it.",transcription:"A choice about transcribing the speech is needed."},editLabel:"Analysis text",editHint:"The file's header stays the one the app wrote.",actionFailed:e=>`Failed: ${e.detail}`,analyzedMark:"Analysed",longTitle:e=>`Long video: ${e.file}`,longText:e=>`The video lasts ${e.minutes} minutes: analysing all of it uses many tokens.`,longFull:"Analyse everything",longReduced:"Analyse at reduced density",longEstimate:e=>`${e.frames} frames · about ${e.tokens} tokens`,longReducedNote:"One frame per scene, at most one every 30 seconds.",skipFailed:e=>`Could not skip the wait: ${e.detail}`},transcription:{title:"Video transcription",why:"With a transcription the agent knows what is said and when: it can quote it or sync the texts to it.",leavesMac:"The audio leaves the Mac.",pythonCache:"This Whisper downloads its models into its own folder on first use.",dialogTitle:e=>`Transcribe the speech of ${e.file}?`,subtitlesTitle:e=>`Subtitles of ${e.title}: transcribe the speech?`,subtitlesWhy:"Subtitles are made from the video's speech: it has to be transcribed first.",methods:{ask:"Ask every time",whisper:"Whisper on the Mac",openai:"OpenAI",elevenlabs:"ElevenLabs",never:"Never"},method:"Method",model:"Whisper model",models:{small:"Small","large-v3-turbo":"Large v3 Turbo"},withOpenai:e=>`Transcribe with OpenAI · ~${e.cost}`,withElevenlabs:e=>`Transcribe with ElevenLabs · ~${e.cost}`,continueWithout:"Continue without transcription",remember:"Remember the choice",install:e=>`Install · ${e.size}`,remove:"Remove",installed:"Installed",notInstalled:"Not installed",downloading:e=>`Downloading… ${e.percent}%`,useInstalled:"Use an installed Whisper",choose:"Choose…",program:"Program",modelFile:"Model file (ggml)",test:"Test",found:e=>`Whisper found: ${e.engine}, ${e.version}, ${e.model}, Metal/GPU ${e.gpu}`,gpu:{yes:"yes",no:"no",unknown:"unknown"},versionUnknown:"version unknown",choicesLabel:"How to transcribe the speech",installing:"Installing Whisper…",installFailed:e=>`The installation failed: ${e.detail}`,choiceFailed:e=>`The choice failed: ${e.detail}`,chosen:"Choice sent: the analysis goes on.",free:"Free, stays on the Mac.",sub:"When a video with speech enters a brief, the app transcribes it with the chosen method. Applies to every project.",methodSub:'With "Ask every time" the app asks for each video with speech.',modelSub:"Small is fast and light; Large v3 Turbo is more accurate and heavier.",installedSize:e=>`Installed · ${e.size}`,perMinute:e=>`about ${e.cost} per minute`,noKey:"Needs a key saved in Settings → Paid services.",paidNote:"Paid: the audio leaves the Mac.",inUse:e=>`In use: ${e.engine} · ${e.source}`,noneInUse:"No Whisper ready: install a model or point to a Whisper already installed.",sources:{settings:"set by you",bundled:"bundled with the app",detected:"found on the Mac"},detected:"Found on this Mac",noneDetected:"No Whisper on the PATH nor in the Homebrew folders.",useThis:"Use this",stopUsing:"Stop using it",engine:"Engine",programPlaceholder:"/opt/homebrew/bin/whisper-cli",modelFilePlaceholder:"Optional: a ggml-*.bin file you already have",testAndSave:"Test and save",testing:"Testing…",problem:e=>`It did not work: ${e.detail}`,saved:"Saved",saveFailed:e=>`Not saved: ${e.detail}`,removeFailed:e=>`Not removed: ${e.detail}`,loadFailed:e=>`Could not read the transcription settings: ${e.detail}`,pickFailed:e=>`Could not open the file chooser: ${e.detail}`,searching:"Looking for Whispers on the Mac…",searchAgain:"Search again",needsModel:"Works with a model downloaded by the app.",downloadsOwn:"Downloads its own model on first use.",custom:"Set by you",whyTitle:"What it is for",whisperTitle:"Transcribe with Whisper",recommended:"Recommended",freeLocal:"Free · the audio stays on the Mac",modelOnce:e=>`${e.model} model, ${e.size} once`,modelReady:e=>`${e.model} model`,ownModel:"downloads its own model on first use",paidHeading:"Paid",getWhisper:"This app has no Whisper of its own: install one with one of these commands in Terminal, then press Check again.",stepBrew:"whisper.cpp with Homebrew",stepPip:"or Whisper for Python",copy:"Copy",copied:"Copied",copyCommand:e=>`Copy ${e.command}`,copiedStatus:"Command copied.",copyFallback:e=>`It could not be copied: the command is selected, press ${e.keys}.`,recheck:"Check again",rechecking:"Checking…",stillNone:"Still no Whisper found on this Mac.",recheckFailed:e=>`The check failed: ${e.detail}`,pickInstalled:"Installed somewhere else? Point to it in Settings"},subtitles:{commit:e=>`Subtitles: ${e.title} (${e.lang})`,commitDeleted:e=>`Subtitles deleted: ${e.title} (${e.lang})`,ready:e=>`Subtitles ready (${e.lang}).`,readyOtherLang:e=>`Subtitles ready in ${e.lang}: it is the language spoken in the video, not the brief's (${e.brief}).`,noSpeech:"No speech in the video: no subtitles.",transcriptionOff:"video transcription is switched off (Settings → Video transcription).",transcriptionUnavailable:"the transcription was not made: the chosen method is not available or did not work. Check Settings → Video transcription.",transcriptionTimeout:"the transcription check did not answer in time: try again.",unsupportedUnknown:"No subtitles: the language spoken in the video could not be recognised.",unsupported:e=>`No subtitles: the language spoken in the video (${e.detected}) is not supported.`,failed:e=>`The subtitles could not be made: ${e.reason}`,notStarted:e=>`The subtitles did not start: ${e.reason}`,cancelledNoTranscription:"Subtitles cancelled: you chose to continue without a transcription.",setUnreadable:e=>`the file ${e.file} cannot be read as subtitles and may hold your corrections: fix or move it, then make the subtitles again.`,translated:e=>`Subtitles translated into ${e.lang}.`,translateFailed:e=>`The subtitles could not be translated into ${e.lang}: ${e.reason}`,translateMissing:e=>e.count===1?"the translation left out 1 line":`the translation left out ${e.count} lines`,translatedStale:e=>e.count===1?`Subtitles translated into ${e.lang}. 1 line no longer matches its source line (it changed meanwhile, or you corrected it): check it.`:`Subtitles translated into ${e.lang}. ${e.count} lines no longer match their source line (they changed meanwhile, or you corrected them): check them.`,translateNothing:e=>`Nothing to translate into ${e.lang}: every line is one you corrected.`,notStartedTurn:"The subtitles did not start: the turn did not finish. Ask for them again.",styleStarted:"Subtitles ready: the agent is drawing them into the video.",styleWaiting:"Subtitles ready: the agent will draw them into the video as soon as the current work ends.",styleVersionRequest:"Subtitles drawn into the video",styleAfterStop:"the work before did not finish. Ask the agent to draw them.",styleAskLater:"Subtitles ready: ask the agent to draw them into the video when you carry on.",styleNotStarted:e=>`The subtitles were not drawn into the video: ${e.reason}`,readyTitle:"Subtitles ready",download:e=>`Download ${e.ext}`,downloadFailed:e=>`Download failed: ${e.detail}`,openEditor:"Open the editor",editorTitle:"Subtitles",backToCreative:"Back to the creative",backToEditor:"Back to the editor",savedElsewhere:"Changed elsewhere: reloaded, your corrections are kept",saveState:"Save status",saving:"Saving…",saved:"Saved",saveFailed:"Not saved",notSaved:"the latest edits are not saved, the file would miss them. Try again once they are saved",retry:"Try again",undo:"Undo",redo:"Redo",loading:"Loading the subtitles…",loadFailed:e=>`The subtitles did not load: ${e.detail}`,noSets:"This creative has no subtitles yet: ask the agent for them in the chat.",noPreview:"The preview of this version is not available: the lines can still be edited.",play:"Play",pause:"Pause",lines:"Lines",listLabel:"Subtitle lines",addLine:"+ Line",noRoom:"There is no room for a new line here: move the video to a point without subtitles.",findReplace:"Find and replace",find:"Find",replaceWith:"Replace with",matchCase:"Match case",replaceAll:"Replace all",matches:e=>e.count===1?"1 line":`${e.count} lines`,row:e=>`Line ${e.n}`,start:e=>`Start of line ${e.n}`,end:e=>`End of line ${e.n}`,text:e=>`Text of line ${e.n}`,timeHint:"Write the time as mm:ss.mmm",split:"Split at the cursor",merge:"Merge with the next",remove:"Delete the line",timeline:"Timeline",timelineHint:e=>`Drag a line or its edges to change its times; ${e.mod} + scroll to zoom`,waveformLoading:"Loading the waveform…",timingChanged:"The video changed: check the timing",translationTimingChanged:"This translation is no longer timed as the subtitles it comes from: retime those, or translate again.",timingAligned:"The timing matches the video again.",retime:"Redo the timing",retimed:e=>`Subtitle timing redone (${e.lang}).`,retimeStarted:"Redoing the timing: the lines you corrected keep their text.",retimeFailed:e=>`The timing did not start again: ${e.detail}`,timingChecked:"Timing checked",timingCheckedHint:"The timing is fine as it is: the notice goes until the video changes again.",timingCheckedFailed:e=>`The timing was not marked as checked: ${e.detail}`,redoMenu:"Redo the transcription…",redoTitle:"Redo the transcription",redoLanguage:"Spoken language",redoAuto:"Detect it automatically",redoHint:"The lines you corrected stay as they are.",redoOtherLanguage:"The video's speech has one set of subtitles: another language makes it again in that one (when no language is translated from it). To add a language, use “+ Language”.",redoStart:"Redo the transcription",redoStarted:"Transcription started: the subtitles update when it is ready.",redoFailed:e=>`The transcription did not start: ${e.detail}`,languages:"Subtitle languages",addLanguage:"+ Language",addLanguageTitle:"Add a language",addFromBrief:"The brief's languages",addOthers:"Other languages",addHint:"It is translated from the speech lines, corrections included; a language the video already has with its own voice is transcribed from that.",addFailed:e=>`The language was not added: ${e.detail}`,notSavedSwitch:"Your changes are not saved: try again before switching language.",pendingLanguage:e=>`Preparing the subtitles in ${e.lang}…`,pendingFailed:e=>`The subtitles in ${e.lang} were not made: ${e.detail}`,noLanguage:e=>`This creative has no subtitles in ${e.lang}: add them with “+ Language”.`,sourceText:"Original text",staleMark:"Original text changed",staleHint:"The line this translation comes from changed: “Translate again” translates it again.",goneMark:"Original line removed",goneHint:"The line this translation came from is gone: keep it or delete it.",retranslate:"Translate again",retranslateAll:"Translate all again",missingTranslation:"Translation missing",missingTranslationHint:"These lines of the original have no line in this language yet: “Translate all again” translates them.",retranslateAllHint:"Translates again the lines whose original text changed and translates the missing ones; the ones you corrected stay as they are (use “Translate again” on the line).",retranslateStarted:"Translating again: the lines update when it is ready.",retranslateFailed:e=>`The translation did not start again: ${e.detail}`,retranslateDropped:e=>e.count===1?"Removed 1 line whose original text is gone.":`Removed ${e.count} lines whose original text is gone.`,deleteLanguage:e=>`Delete the subtitles in ${e.lang}`,deleteConfirm:e=>`The subtitles in ${e.lang} have ${e.count===1?"1 line you corrected":`${e.count} lines you corrected`}: deleting them loses the corrections.`,deleteYes:"Delete",deleteNo:"Cancel",deleteFailed:e=>`The subtitles were not deleted: ${e.detail}`,translateInto:e=>`Translate into ${e.language}`,translateIntoFailed:e=>`The translation did not start: ${e.detail}`,warnings:{tooLong:"Too long",tooFast:"Too fast",tooShort:"Too short",tooLongOnScreen:"On screen too long",overlap:"Overlaps",placeholder:"To write"},warningHints:{tooLong:e=>`It does not fit in ${e.lines} lines: shorten or split it.`,tooFast:e=>`More than ${e.cps} characters a second: too fast to read. Shorten the text or lengthen the line.`,tooShort:e=>`On screen for less than ${e.seconds} second: lengthen it.`,tooLongOnScreen:e=>`On screen for more than ${e.seconds} seconds: split it.`,overlap:"It ends after the next line starts.",placeholder:"It still has the placeholder text “…”: write the line or delete it, or it ends up in the files."}},briefSession:{filled:e=>`Filled in the brief: ${e.parts}`,parts:{texts:"texts",length:"length",assets:e=>e.count===1?"1 asset":`${e.count} assets`,codebases:e=>e.count===1?"1 codebase":`${e.count} codebases`,formats:e=>e.count===1?"1 format":`${e.count} formats`,variants:e=>e.count===1?"1 variant":`${e.count} variants`},keptYours:e=>` · kept yours: ${e.fields}`,sourceFormatName:e=>`Original ${e.width}×${e.height}`,sourceFormatAdded:e=>`Added “${e.name}” to your custom formats`,nothingWritten:"Nothing changed in the brief",reclaimed:e=>`The agent rewrote ${e.fields} at your request`,fieldNames:{goal:"What you want to make",message:"Key message",durationSec:"Video length",assets:"Assets to use",linkedCodebases:"Codebases",notes:"Notes for the agent",formats:"Formats",variants:"Variants"},creativeStarts:e=>`${e.title} · ${e.formats}. The brief session stays above.`,memoryUnavailable:"The brief session’s memory is no longer available: the agent starts again from its summary."},brand:{droppedKeepFailed:e=>`${e.name}: the current version was not kept (too many entries, maximum ${e.limit})`,droppedNotList:e=>`${e.label}: invalid list`,droppedDuplicateId:e=>`${e.name}: duplicate id`,droppedTooMany:e=>`${e.name}: too many entries (maximum ${e.limit})`,droppedPrefix:e=>`Dropped entries: ${e.list}`,droppedMore:e=>`and ${e.count} more`,droppedOutsideAssets:e=>`${e.label} (${e.file} is outside assets/)`,droppedNotFound:e=>`${e.label} (${e.file} not found)`,droppedNotRegistered:e=>`${e.file} (not registered)`,ignoredGuidelines:e=>`guidelines.md (ignored: ${e.reason})`,ignoredSummary:e=>`summary.md (ignored: ${e.reason})`,ignoredAssetList:e=>`the proposal's assets.json (ignored: ${e.reason})`,ignoredDescriptions:e=>`Descriptions file ignored: ${e.reason}`,assetRemovedWhileDescribing:e=>`${e.file} was deleted during the description: skipped`,commitAnalysis:e=>`Brand analysis ${e.id}`,commitAnalysisAssets:e=>`Assets of brand analysis ${e.id} (failed)`,commitDescribe:"Asset description",commitApply:e=>`Apply proposal ${e.id}`,commitDiscard:e=>`Discard proposal ${e.id}`,siteFontsSummary:e=>`Site fonts: ${e.count===1?"1 note":`${e.count} notes`}: ${e.list}${e.more?" · …":""}`,siteBlocked:e=>`${e.url} not read (address not allowed)`,siteUnreachable:e=>`${e.url} not reachable`,siteStatus:e=>`${e.url} answered ${e.status}`,siteTooLarge:e=>`${e.url} is larger than ${e.mb} MB: only the start was read`,siteOffSite:e=>`${e.url} not read (stylesheet on another site)`,siteScheme:e=>`${e.url} ignored (only http and https addresses)`,siteTooManySheets:e=>`more than ${e.max} stylesheets: the others were not read`,siteImportDepth:e=>`${e.url} not read (imports nested deeper than ${e.max} levels)`,siteImportCycle:e=>`${e.url} imports itself in a loop: read once`,siteTooManyFaces:e=>`more than ${e.max} @font-face rules: the others were ignored`,siteTimeout:e=>`stopped at the time limit (${e.seconds} s): partial result`,siteFontUrlsIgnored:e=>e.count===1?"1 font address ignored (only http and https)":`${e.count} font addresses ignored (only http and https)`},doctor:{supportedVersion:"Supported version",nodeTooOld:"Node.js 22 or later is required",nodeFix:"Install Node.js 22+ from https://nodejs.org",installed:"Installed",gitMissing:"Git not found",gitFix:{windows:"Download Git for Windows from https://git-scm.com/downloads/win, open it and click Next on every screen (the suggested options are fine). Then press Check again.",mac:"Open Terminal, type xcode-select --install and press Enter, then confirm the install that appears. Then press Check again.",linux:"Install Git with your system's package manager (for example: sudo apt install git), then press Check again."},ffmpegRecommended:"Needed to export videos; images work without it.",ffmpegFix:{windows:"Open PowerShell (click Start, type PowerShell, press Enter), type winget install Gyan.FFmpeg and press Enter. When it finishes, press Check again.",mac:"With Homebrew: open Terminal and type brew install ffmpeg. Without Homebrew: download ffmpeg and ffprobe from https://ffmpeg.martin-riedl.de and put them in /usr/local/bin. Then press Check again.",linux:"Install FFmpeg with your system's package manager (for example: sudo apt install ffmpeg), then press Check again."},ffmpegArch:e=>e.translated?`${e.arch} under Rosetta: slower renders`:e.arch,ffmpegUniversal:"universal",ffmpegWrongArch:"FFmpeg was found but is built for Intel: it cannot start on this Mac. Install the Apple Silicon version, e.g. with Homebrew in /opt/homebrew",ffmpegRosetta:"Installed: an Intel build running under Rosetta on Apple Silicon. Renders work, more slowly; an arm64 build (Homebrew in /opt/homebrew) is faster",claudeMissing:"Claude Code not found",broken:"Installed but not responding correctly",brokenDetail:e=>`Installed but not responding correctly: ${e.detail}`,claudeAuthLabel:"Claude sign-in",installClaudeFirst:"Install Claude Code first",claudeMustRespond:"Claude Code must respond correctly first",authenticated:"Signed in",notAuthenticated:"Claude Code is not signed in",sandboxLabel:"Agent sandbox",sandboxAvailable:"Available: the agent works isolated in the project folder",sandboxFix:"Without the sandbox, Motion Studio uses stricter permissions; see the README",shellPathLabel:"Login shell PATH",shellPathLoaded:"PATH loaded from the login shell",shellPathFallback:e=>`Fallback PATH: ${e.reason}`,shellPathFallbackPlain:"Programs are looked up in the usual folders (the login shell could not be read)",freePlan:"You are signed in with the free Claude plan, which does not include Claude Code. Upgrade to Pro or Max (or sign in with a Team, Enterprise or Console account), then sign in again.",workspacePathLabel:"Workspace folder path",workspaceSettingsLabel:"Workspace settings",workspacePathGlob:"The path contains [ ] * or ?: the sandbox protects Motion Studio's records less well (macOS) or not at all (Linux)",workspacePathFix:"Move the workspace to a folder whose path has none of these characters, then choose it again",folderGlobChars:e=>`The path ${e.path} contains ( ) [ ] { } * ? or \\: the agent's rules protecting Motion Studio's files cannot match it safely, so every agent run there is refused (browsing and exporting still work)`,folderGlobFix:"Rename the folder that has these characters (for a project folder that is a link: rename its target, then link it again), then choose the workspace again",updatesLabel:"Automatic updates",updatesOff:"Not active in this version",denyPathsLabel:"Home and config folder paths",denyPathsGlob:e=>e.count===1?`The path ${e.paths} contains ( ) [ ] { } * ? or \\: the agent's deny rules for it (tokens, secret files) may not apply`:`The paths ${e.paths} contain ( ) [ ] { } * ? or \\: the agent's deny rules for them (tokens, secret files) may not apply`,shellPathFix:"If programs are missing, start Motion Studio from the terminal or check your shell startup files",sandboxAvailableReason:"Available",sandboxExecMissing:"sandbox-exec not found: the macOS sandbox is not available",sandboxLinuxMissing:e=>`${e.tools} missing: install bubblewrap and socat to isolate the agent`,sandboxAnd:"and",sandboxWindows:"Claude Code's sandbox is not available on Windows",sandboxUnsupported:e=>`The sandbox is not supported on ${e.platform}`,sandboxOff:"Isolation is turned off in Settings",liveMessagesLabel:"Live messages",liveMessagesQueued:"queued only (not verified for this Claude Code version)",liveMessagesSupported:"on (verified for this Claude Code version)",liveMessagesOff:"queued only (turned off in the workspace settings)",interruptLabel:"Interrupt",interruptStopResume:"stop and resume",interruptSupported:"on (verified for this Claude Code version)",interruptOff:"stop and resume (turned off in the workspace settings)"},approvals:{briefReadOnly:"The brief agent only reads the linked folders and the project: nothing else can be approved.",videoAnalysisReadOnly:"The video analysis only looks at the extracted frames: nothing else can be approved.",subtitlesTranslateOnly:"The subtitle translation only hands over the translated lines: nothing else can be approved.",runCommand:"Run a command",editOutside:"Edit a file outside the project",readOutside:"Read a file outside the project",openPage:"Open a web page",useTool:e=>`Use the ${e.tool} tool`,editsIn:e=>`Edits in ${e.dir}`,readsIn:e=>`Reads in ${e.dir}`,commandsLabel:e=>`"${e.command}" commands`,pagesOf:e=>`Pages of ${e.host}`,providerNoConfirm:e=>`Use of ${e.provider} without confirmation`,toolLabel:e=>`Tool ${e.tool}`,generateImage:"Generate an image with gpt-image-2",imageDetail:e=>`${e.width}×${e.height}${e.refs?`, ${e.refs===1?"1 reference":`${e.refs} references`}`:""}: ${e.prompt}`,generateVoice:e=>`Generate a voice with ${e.provider}`,readOnlyTurn:"A translation turn only reads files and submits translations: Motion Studio writes them",coordinatorReadOnly:"The agent you talk to only reads the project and asks you: the work on files is done by the variants' turns",directionsTurnOnly:"A directions turn only proposes the directions of the variants: it uses no other tool",brandCodebaseToolDenied:"A brand analysis of a codebase does not run commands or search file contents: open the files by name with Read",moreCalls:e=>`…and ${e.count} more`,generateVoices:e=>`Generate ${e.count===1?"a translated voice":`${e.count} translated voices`} with ${e.provider}`,voicesBatchDetail:e=>`${e.count===1?"1 call":`${e.count} calls`}, ${e.chars} characters in all: ${e.list}`,variantBatchTitle:e=>`Paid services for ${e.count} variants`,variantBatchDetail:e=>`Estimated calls (no price known): ${e.providers}. Per variant: ${e.variants}. No variant starts before you answer. Decline starts the variants without paid services (no paid call will be made in this run); to cancel the generation altogether, stop the job.`,variantBatchItem:e=>`Variant ${e.letter} · ${e.service} (${e.provider})`,serviceNames:{images:"Images",voice:"Voice",music:"Music",sfx:"Sound effects"},generateSfx:e=>`Generate a sound effect with ${e.provider}`,generateMusic:e=>`Generate music with ${e.provider}`,audioDetail:e=>`${e.provider}, ${e.seconds===null?"duration chosen by the service":`${e.seconds} s`}: ${e.prompt}`,denied:"The user denied this action.",expired:"No answer within 10 minutes: action denied.",protectedPath:"Motion Studio's configuration folder is off limits to the agent (it holds access tokens): request denied without asking the user.",invalidRequest:"Invalid request.",unknownTool:"unknown",providerNotApproved:"The user did not approve the use of the provider",questionTitle:"The agent asks you a question",questionSkipped:"The user chose not to answer. Go on with your best judgment and say what you assumed.",questionExpired:"No answer within 10 minutes. Go on with your best judgment and say what you assumed."},validation:{manifestMissing:e=>`manifest.json is missing in ${e.dir}`,manifestInvalid:e=>`Invalid manifest.json: ${e.detail}`,unknownPreset:e=>`Unknown preset: ${e.id} (not in the format catalog)`,missingFormat:e=>`Missing format ${e.label} (${e.id})`,fileNotFound:e=>`File not found for ${e.id}: ${e.file}`,badExtension:e=>`${e.file}: extension .${e.ext} not allowed for ${e.id} (allowed: ${e.allowed})`,tooLarge:e=>`${e.file}: ${e.size} MB, maximum ${e.max} MB`,notReadable:e=>`${e.file}: cannot be read as media`,badResolution:e=>`${e.file}: resolution ${e.width}×${e.height}, expected ${e.expectedWidth}×${e.expectedHeight}`,notAVideo:e=>`${e.file}: does not look like a video`,durationOverMax:e=>`${e.file}: duration ${e.duration}s exceeds the maximum of ${e.max}s`,durationOffTarget:e=>`${e.file}: duration ${e.duration}s, about ${e.target}s requested`,reservedName:e=>`${e.file}: this name belongs to ${e.format}, which Motion Studio delivers itself in this version; rename your file`,compositionMissing:e=>`Missing composition for ${e.label} (${e.id}): write ${e.dir}/composition.json`,compositionProblem:e=>`${e.dir}: ${e.text}`},outputs:{largeFile:e=>`Large file: ${e.sizeMB} MB at ${e.mbps} Mbps (about ${e.targetMbps} Mbps is plenty for ${e.channel})`,keptUnchanged:e=>`${e.format} was not part of this request: the agent’s file was discarded and the previous one kept unchanged`,followerReplaced:e=>`${e.format}: the agent’s file was discarded; Motion Studio copied the ${e.primary} instead`},composition:{jsonEmpty:"composition.json is empty: write the composition as UTF-8 JSON",jsonNotUtf8:"composition.json is not valid UTF-8: save it as UTF-8 (not UTF-16 or Latin-1)",jsonSyntax:e=>`composition.json is not valid JSON (${e.detail}): fix the syntax`,jsonTooLarge:e=>`composition.json is ${e.sizeMB} MB, over the ${e.maxMB} MB limit: move long content into html layers or assets`,limit:e=>`${e.path}: more than ${e.max} items, the maximum: simplify the composition`,moreProblems:"More problems were not listed: fix these and validate again",unknownField:e=>`${e.path}: unknown field "${e.field}": remove it or check its name in the schema`,missingField:e=>`${e.path}: required field missing: add it`,wrongType:e=>`${e.path}: expected ${e.expected}: fix the value type`,badValue:e=>`${e.path}: value not allowed; use one of: ${e.allowed}`,tooSmall:e=>`${e.path}: must be at least ${e.min}`,notAbove:e=>`${e.path}: must be more than ${e.min}`,tooBig:e=>`${e.path}: must be at most ${e.max}`,tooLong:e=>`${e.path}: longer than ${e.max} characters: shorten it`,invalid:e=>`${e.path}: invalid value: check it against the schema`,badId:e=>`${e.path}: invalid id: use lowercase letters, digits and hyphens (at most 64), starting with a letter or digit`,badColor:e=>`${e.path}: invalid colour: use hex #rrggbb (or #rgb, #rgba, #rrggbbaa)`,badPath:e=>`${e.path}: invalid path: use a relative path under assets/ or layers/, without "..", "\\", ":", "%", "?", "#" or a scheme`,badFontFamily:e=>`${e.path}: invalid font family: use one family name declared in fonts[], without quotes or fallbacks`,badEase:e=>`${e.path}: invalid easing: use a CSS easing such as linear, ease-out or cubic-bezier(.2,.8,.2,1)`,badParamKey:e=>`${e.path}: invalid param name: use letters, digits and _ (at most 64), not starting with a digit`,badAnimation:e=>`${e.path}: invalid animation: use {preset, duration}, {prop, from, to, duration} or {prop, keyframes, duration}`,scriptNeedsVoice:e=>`${e.path}: a script belongs to a voice clip: set role "voice" or remove the script`,duplicateId:e=>`The id "${e.id}" is used more than once: give every scene, track and clip its own id`,sceneStart:e=>`Scene ${e.scene} starts at ${e.start}s: the first scene must start at 0`,sceneGap:e=>`Gap between scene ${e.previous} (ends at ${e.from}s) and scene ${e.scene} (starts at ${e.to}s): make the scenes contiguous`,sceneOverlap:e=>`Scene ${e.scene} starts at ${e.to}s, before scene ${e.previous} ends (${e.from}s): scenes must not overlap; list them in time order`,scenesEnd:e=>`The scenes end at ${e.end}s but the composition lasts ${e.duration}s: the last scene must end exactly at the duration`,fontWeightUndeclared:e=>`Clip ${e.clip}: ${e.family} does not declare weight ${e.weight} (it declares ${e.declared}): the text is drawn with a synthesised or neighbouring weight; declare the weight in fonts[] or use a declared one`,stillScenes:"A still (duration 0) ignores scenes: you can empty scenes[]",stillAnimations:e=>`Clip ${e.clip}: a still shows only t = 0, so its animations are ignored: you can remove them`,stillAudio:e=>`Track ${e.track}: a still has no sound, so its audio clips are ignored: you can remove them`,clipStill:e=>`Clip ${e.clip}: in a still every clip starts at 0`,clipZero:e=>`Clip ${e.clip} lasts 0 seconds: give it a positive duration or remove it`,clipOutside:e=>`Clip ${e.clip} runs from ${e.start}s to ${e.end}s, outside the composition (0 to ${e.duration}s): move or shorten it`,clipOutsideScene:e=>`Clip ${e.clip} is outside its scene ${e.scene} (${e.start}s to ${e.end}s): move it inside the scene or change its scene`,unknownScene:e=>`Clip ${e.clip} refers to scene ${e.scene}, which does not exist: use a scene id from scenes[]`,trackKind:e=>`Clip ${e.clip} (${e.type}) cannot be on track ${e.track} (${e.kind}): audio clips go on audio tracks, subtitles clips on the subtitles track, all others on visual, video or text tracks`,subtitlesTwice:()=>"A composition has at most one subtitles track: remove the extra ones",subtitlesSpan:e=>`Track ${e.track}: a subtitles track holds exactly one subtitles clip, from 0 to ${e.duration}s, with no scene`,subtitlesOnStill:()=>"A still has no time to draw subtitles in: remove the subtitles track",animationOutside:e=>`Clip ${e.clip}: an animation ends at ${e.end}s, after the clip (${e.duration}s long); animation times are relative to the clip start`,keyframesOrder:e=>`Clip ${e.clip}: keyframe times must go up from 0 to 1`,animationValue:e=>`Clip ${e.clip}: wrong values for the ${e.prop} animation: "color" takes hex colours, every other prop takes numbers`,fontMissing:e=>`Text clip ${e.clip} has no font and fonts[] is empty: put a font file under assets/, declare it in fonts[] and set fontFamily`,unknownFont:e=>`Clip ${e.clip} uses the font "${e.family}", which is not in fonts[]: put the font file under assets/ and declare it in fonts[]`,fontNotAsset:e=>`Font ${e.family}: ${e.src} must be a font file (.ttf, .otf, .woff, .woff2) under assets/`,layerNotHtml:e=>`Clip ${e.clip}: ${e.src} must be an .html file under layers/`,mediaNotAsset:e=>`Clip ${e.clip}: ${e.src} must be a file under assets/`,assetMissing:e=>`${e.path} is not in the composition folder: add the file or fix the path`,assetsTooLarge:e=>`The composition folder is ${e.sizeMB} MB, over the ${e.maxMB} MB limit: compress, shorten or remove media`,sizeMismatch:e=>`Size ${e.width}×${e.height}, but ${e.format} is ${e.expectedWidth}×${e.expectedHeight}: set width and height to the format size`,durationOverMax:e=>`Duration ${e.duration}s exceeds the maximum of ${e.max}s for ${e.format}: shorten the composition`,stillForVideo:e=>`${e.format} is a video: the duration must be more than 0`,durationForImage:e=>`${e.format} is an image: set the duration to 0 (a still), not ${e.duration}s`,layerNetwork:e=>`${e.file}, line ${e.line}: ${e.api} is not allowed, html layers have no network: put files under assets/ and reference them with relative paths`,layerWorker:e=>`${e.file}, line ${e.line}: ${e.api} is not allowed in html layers: run the code in the layer itself`,layerAudio:e=>`${e.file}, line ${e.line}: ${e.api} is not allowed in html layers: put sound on an audio track of the composition`,layerAutoplay:e=>`${e.file}, line ${e.line}: media must not play on its own (${e.api}) in html layers: use a video or audio clip of the composition`,jsonMissing:"composition.json is missing or cannot be read safely: write the composition as a regular file in the composition folder",folderUnreadable:e=>`The composition folder cannot be read safely (${e.path}): remove links, hard links and special files, and keep it within the limits`,ambiguousNames:e=>`Two files of the composition folder have the same name once Unicode-normalised (${e.path}): rename one of them`,durationOffBrief:e=>`The composition lasts ${e.duration}s, but about ${e.target}s were requested: adjust the duration and the scenes`,vectorShape:e=>`Logo, favicon and app icon are vector compositions: ${e.reason}`,logoDarkMissing:'The logo has no negative version for dark backgrounds: add a second svg clip with "id": "dark", "hidden": true, full frame, "fit": "contain", and its own file (e.g. assets/logo-dark.svg): the same design with colours for a dark background',svgRefused:e=>`${e.file} was refused by the SVG check: ${e.reason}`,svgText:e=>`${e.file} has text: convert it to paths, or it will look different where the font is not installed`,svgRefusedSummary:e=>`${e.file} did not pass the SVG safety check (${e.count} ${e.count===1?"reason":"reasons"})`,svgRefusedDetails:"Details"},editor:{locked:e=>`Clip ${e.clip} is locked: unlock it to edit it`,unknownClip:e=>`There is no clip ${e.clip}`,unknownTrack:e=>`There is no track ${e.track}`,unknownScene:e=>`There is no scene ${e.scene}`,unknownParam:e=>`Clip ${e.clip} has no parameter ${e.key}`,badProp:e=>`Clip ${e.clip}: ${e.key} cannot be edited here`,badValue:e=>`Clip ${e.clip}: the value of ${e.key} is not valid`,badParam:e=>`Clip ${e.clip}: the value for ${e.key} does not fit the parameter`,badAsset:e=>`${e.path} is not a file of this composition under assets/`,badFont:e=>`${e.family}: a font must be a .ttf, .otf, .woff or .woff2 file under assets/`,fontExists:e=>`The font ${e.family} is already in this composition`,wrongType:e=>`This change does not apply to a ${e.type} clip (${e.clip})`,stillTiming:"A still image has no timeline: times, scenes and animations do not apply",customAnimation:e=>`Clip ${e.clip} has a custom animation in its ${e.slot} slot: ask the agent to change it`,badOrder:"The new scene order must list every scene once",sceneOrderBlocked:e=>`Scenes cannot be reordered: clip ${e.clip} is not inside a single scene`,readOnly:"Edits are not available here: this view is read-only",invalid:e=>`The change would make the composition invalid (${e.path})`,badOp:"This edit is not supported",badWeight:e=>`Clip ${e.clip}: ${e.family} has no weight ${e.weight} (it has ${e.declared})`,itemText:e=>`${e.name} text`,itemStyle:e=>`${e.name} style`,itemLayout:e=>`${e.name} position`,itemTiming:e=>`${e.name} timing`,itemMedia:e=>`${e.name} media`,itemFlags:e=>`${e.name} visibility`,itemSceneDuration:e=>`scene ${e.n} duration`,itemSceneOrder:"scene order",itemAnimation:e=>`${e.name} animation`,itemParam:e=>`${e.name} ${e.key}`,itemFont:e=>`font ${e.family}`,itemSvg:e=>{const t=[...e.colors>0?[e.colors===1?"1 colour changed":`${e.colors} colours changed`]:[],...e.texts>0?[e.texts===1?"1 text":`${e.texts} texts`]:[],...e.hidden>0?[e.hidden===1?"1 element shown or hidden":`${e.hidden} elements shown or hidden`]:[]];return t.length>0?`${e.name}: ${t.join(", ")}`:`${e.name} SVG content`},summary:e=>`Direct edits: ${e.items}${e.more>0?` and ${e.more} more`:""}`,stageNoSession:"This preview has ended: open the editor again",stagingBusy:"A file is still being prepared for this draft: save again when it is ready.",stageTimeout:e=>`Preparing ${e.file} took too long (more than ${e.minutes} min): try a shorter or smaller video.`,stageNotRegistered:e=>`${e.file} is not an asset in the project’s Assets`,stageUnreadable:e=>`${e.file} cannot be read safely: it must be a regular file inside the project assets folder`,stageUnsupported:e=>`${e.file} cannot be used in a composition: use an image, SVG, video, audio or font file`,stageNotMedia:e=>`${e.file} is not a readable media file`,stageTooLarge:e=>`${e.file} is larger than ${e.maxMB} MB`,stageTooMany:e=>`At most ${e.max} files can be added to one draft: save it as a new version first`,stageUnknownBrandFont:"This font is not in the brand kit",stageBrandFontNoFile:e=>`${e.family} has no font file in the brand kit`,stagedCollision:e=>`${e.path} already exists in this composition with other content: add the file again`,stageSvgBadBase:e=>`${e.file} is not an SVG of this composition: reopen the editor`,summaryNone:"Direct edits",busy:"The agent or a render is working on this creative: save the draft when it has finished",unchanged:e=>`Nothing changed: ${e.format} is the same as in v${e.n}, so no new version was saved.`,baseChanged:e=>`${e.format} changed in v${e.n} while you were editing: reopen the editor on the latest version (your draft is kept until you discard it)`,carryFailed:e=>`${e.format} in v${e.n} is no longer the composition recorded for it: ask the agent to make it again before saving`,saveInvalid:e=>`The draft cannot be saved: ${e.text}`,srcUnavailable:e=>`Clip ${e.clip}: ${e.path} is neither a file of this version nor a file added to this draft`,fontUnavailable:e=>`Font ${e.family}: ${e.path} is neither a file of this version nor a file added to this draft`,htmlChanged:e=>`Clip ${e.clip}: its HTML layer can only be changed by the agent`,htmlNew:e=>`Clip ${e.clip}: HTML clips can only be added by the agent`,layersChanged:"The HTML layer files can only be changed by the agent"},render:{jobLabel:e=>`Render · ${e.title} v${e.n}`,exportJobLabel:e=>`Render for export · ${e.title} v${e.n} (${e.detail})`,qualityNames:{standard:"Standard",high:"High",max:"Max"},fpsName:e=>`${e.fps} fps`,exportSubtitlesDrawn:e=>`subtitles ${e.lang}`,exportNoSubtitles:"without subtitles",notV2:e=>`v${e.n} has no compositions to render: its media files are the result`,formatsNotInVersion:e=>`Formats not in this version: ${e.list}`,noRenderer:"Rendering is not available in this Motion Studio",noBrowser:"No Chromium to render with: install Google Chrome, or download Chrome for Testing from the System check",compositionChanged:e=>`${e.format}: the composition changed after the version was saved, so it was not rendered`,compositionProblems:e=>`${e.format}: the composition has problems: ${e.list}`,formatFailed:e=>`${e.format}: ${e.reason}`,someFailed:e=>`Render failed: ${e.list}`,mediaNotNormalised:e=>`${e.format}: ${e.src} could not be prepared for rendering; it is used as is, and some of its frames may be off by one`,hdrApproximate:e=>`${e.format}: ${e.src} is an HDR source; its colours are approximate in the render and the preview`,frameWarnings:e=>`${e.format}: ${e.count} video frames were drawn from a source whose timing could not be verified`,outputProblems:e=>`${e.format}: the render has problems: ${e.list}. Render it again, or fix the composition`,identitySvgRefused:e=>`${e.format}: the SVG was refused, nothing was rasterised: ${e.list}`,identityOpaqueWhite:e=>`${e.format}: the composition background is transparent and the brand has no primary colour, so the icons that cannot be transparent are on white`,identitySafeZone:e=>`${e.file}: ${e.pct}% of the drawing is outside the safe zone and may be cut by the mask`,identitySvgText:e=>`${e.file}: the SVG has text; convert it to paths, or it will look different where the font is not installed`,identitySetFailed:e=>`${e.format}: the file set could not be made: ${e.reason}`},export:{jobLabel:e=>`Export · ${e.title}`,invalidProfile:"Choose a resolution and a quality that Export offers",profileWithLanguages:"With other languages the videos are exported at the format size and High quality: choose those, or export the other languages apart",absoluteDestination:"Choose a destination folder (absolute path)",outsideWorkspace:"Choose a folder outside the Motion Studio workspace",destinationIsFile:"The destination is a file, not a folder",cannotWrite:e=>`Cannot write to ${e.path}`,interrupted:e=>`Export interrupted: ${e.reason}. Files already copied: ${e.count} in ${e.path}`,nothingToExport:e=>`No outputs to export for v${e.n}`,invalidFormats:"Choose at least one format to export",formatsNotInVersion:e=>`Formats not available in this version: ${e.list}`,diskFull:"disk space is full",permissionDenied:"permission denied",quotaExceeded:"space quota exceeded",nameTooLong:"file name too long",writeError:"write error",invalidPicks:"Choose at least one format to export, each with a version number",pickFollower:e=>`${e.format} follows ${e.primary}: it is exported with the ${e.primary}'s starred version, it cannot be picked on its own`,pickNoFile:e=>`v${e.n} has no ${e.format} file to export`,filesMissing:e=>`These files are missing or cannot be read safely, nothing was exported: ${e.list}`,nameCollision:e=>`Two formats would get the same file name (${e.list}): add {format} to the name pattern`,nameEmpty:"The name pattern gives an empty file name",followMismatch:e=>`${e.format} follows ${e.primary}: it cannot be exported from v${e.n} while the ${e.primary} is exported from v${e.p}`,invalidDestination:"Choose a destination folder",invalidDate:"Invalid export date (YYYY-MM-DD)",invalidPattern:"The name pattern is not valid (at most 200 characters)",subtitlesMissing:e=>`There are no subtitles in ${e.lang} to export`,subtitlesPair:e=>`The ${e.lang} subtitles follow the voice of the ${e.video} video: they go with that video only (export it, or choose another language)`,subtitlesStill:e=>`${e.format}: a still has no subtitles, it was exported without them`,subtitlesNoTrack:e=>`${e.format}: the video has no subtitles track, so the subtitles in ${e.lang} were not drawn into it (ask the agent to add them)`,subtitlesNoSoft:e=>`${e.format}: this file cannot hold subtitle tracks, so they were left out`,subtitlesSoftStore:e=>`${e.format}: an App Store preview takes no subtitle tracks, so they were left out`,renderFailed:e=>`These formats could not be rendered, nothing was exported: ${e.list}`,renderProblems:e=>`${e.item} (rendered with problems: ${e.list})`,renderProblemsOnly:e=>`Nothing was exported: ${e.list}`,groupSkipped:e=>`${e.format} (Variant ${e.variant} v${e.n}): ${e.reason}`,groupReason:{missing:"the file is missing or cannot be read safely",notRendered:"it has no current render",problems:"the render has problems",noTranslation:e=>`no current translation in ${e.locale}`,renderFailed:e=>`the render failed: ${e.reason}`,renderProblems:e=>`rendered now with problems: ${e.list}`}},jobs:{regenerateRequest:"Regenerate all formats from the updated brief.",pinsOnlyRequest:"Apply the pinned comments.",attachmentsOnlyRequest:"Use the attached files.",queuedFilesGone:"A queued request was removed: it had only attached files, and they are no longer in Assets.",addFormatsRequest:e=>`Add the formats ${e.formats}, reusing the existing sources in work/ and the same style as version ${e.n}.`,renderCommandWas:e=>`The render command of version ${e.n} was: ${e.command}.`,regenerateFormatsRequest:e=>`Regenerate ${e.formats} from the updated brief.`,addedFollowers:e=>`Added ${e.formats} using the ${e.primary} (v${e.n})`,noAgentNeeded:"no agent needed",layerWarnings:e=>`Advisory checks of the html layers: ${e.list}`,strayRemoved:e=>`The agent wrote files that Motion Studio makes itself; they were removed: ${e.list}`,followerUnlinked:e=>`${e.follower} can no longer follow ${e.primary} (${e.reason}): it is unlinked, even if this turn is cancelled, and gets a dedicated version in this turn.`,copyFailed:e=>`${e.format}: Motion Studio could not put its file in this version`,carriedChanged:e=>`${e.format}: the file of v${e.n} is not the one recorded for that version, so it could not be kept unchanged`,copyChangedAfter:e=>`${e.format}: the file changed after Motion Studio copied it`,copyUnverified:e=>`${e.format}: the file Motion Studio copied could not be verified (it cannot be read as a regular file)`,earlierOutputsChanged:e=>`Warning: files of earlier versions changed during this turn (${e.list}). Their recorded history is unchanged; check them before exporting.`,convertingLegacy:"Converting to the editable format · costs more tokens this once",earlierLinksDetached:e=>`Warning: files of earlier versions had a second name on disk (a hard link) that this turn could have written through (${e.list}). Motion Studio detached them before the agent started, so earlier versions stay read-only.`,workspacePathGlob:"Warning: the workspace folder path contains [ ] * or ?. On macOS the sandbox cannot stop the agent from moving the folders that hold Motion Studio's records and moving them back, so Motion Studio checks them after each run; on Linux the sandbox does not protect them at all. Move the workspace to a folder whose path has none of these characters.",protectedFilesTampered:e=>`Error: during this run, files Motion Studio never changes itself were changed, added or removed (${e.list}). These configure git or the agent and run outside the sandbox. The turn was stopped before saving, and the project is locked (no agent, no git) until those files are back as they were before the run (it then unlocks by itself), or until you accept the change on the project page if you made it yourself.`,protectedFilesChangedBetweenRuns:e=>`Error: since the last agent run, files Motion Studio never changes itself were changed, added or removed (${e.list}), for example by a process left running. These configure git or the agent and run outside the sandbox, so the agent was not started and the project is locked (no agent, no git) until those files are back as they were (it then unlocks by itself), or until you accept the change on the project page if you made it yourself.`,integrityCheckFailed:"Error: Motion Studio could not check the protected files of the project after this run. The turn was stopped before saving, and the project is locked (no agent, no git) until the files can be checked and match how they were before the run.",recordFoldersMoved:e=>`Notice: after this run there is an unexpected file or folder in the folders that hold Motion Studio's records (${e.list}). Check what it is; the chat history and the versions of the creatives there are most likely fine.`,logHistoryRewritten:e=>`Warning: during this run, earlier lines of ${e.list} were changed or removed. That history is no longer what Motion Studio recorded.`,workspaceSettingsReverted:"Warning: the workspace settings (.studio/settings.json) changed while the agent ran without the sandbox. Motion Studio put them back as they were. If you made that change yourself, make it again now from the settings.",workspaceSettingsNotReverted:"Warning: the workspace settings (.studio/settings.json) changed while the agent ran without the sandbox, and Motion Studio could not put them back. Until you save the settings again, Motion Studio keeps using the settings as they were before (sandbox, confirmations and opt-ins).",settingsHoldBroken:"Motion Studio could not keep its protected copy of the workspace settings, so an agent may have changed them unseen. Agents without the sandbox are refused until you check the settings and save them in the app.",settingsAdjusted:"Motion Studio made some workspace settings stricter after an agent without the sandbox changed them. Check them in the settings and save to confirm.",settingsHeldFields:e=>`Fields affected: ${e.fields}.`,settingsHoldStuck:e=>`Motion Studio cannot remove its old record at ${e.path}: if it is locked, clear the “Locked” checkbox in Finder’s Get Info first, then remove that item yourself and save the settings again.`,protectedLinksDetached:e=>`Warning: Motion Studio's own records had a second name on disk (a hard link), so they could be changed without Motion Studio knowing (${e.list}). Motion Studio detached them and kept their content as it was, which may already have been changed.`,followerNotDelivered:e=>`${e.follower} was not delivered: it cannot follow ${e.primary} (${e.reason}). It is no longer linked, so the next turn makes a dedicated version.`,versionFolderUnsafe:e=>`The folder outputs/v${e.n} is not a folder of the creative (a link?): the version cannot be saved`,updateProjectCommit:"Project updated",brandKitCommit:"Brand kit updated",guidelinesCommit:"Guidelines updated",addGoogleFontCommit:e=>`Add Google Fonts font ${e.family}`,addSourceCommit:"Add brand source",removeSourceCommit:"Remove brand source",syncSourcesCommit:"Align brand sources with references",uploadAssetsCommit:e=>`Upload ${e.count===1?"1 asset":`${e.count} assets`}`,registerAssetsCommit:"Register assets",deleteAssetCommit:e=>`Delete asset ${e.file}`,saveReferenceCommit:e=>`Save ${e.file} in Assets`,referenceOnlyCommit:e=>`${e.file}: only for its creative`,deleteReferencesCommit:e=>`Delete ${e.count===1?"1 creative reference":`${e.count} creative references`}`,uploadReferencesCommit:e=>`Upload ${e.count===1?"1 reference":`${e.count} references`}`,deleteReferenceCommit:e=>`Delete reference ${e.file}`,createProjectCommit:e=>`Create project ${e.name}`,updateAssetCommit:e=>`Update asset ${e.file}`,renameAssetRecoveredCommit:"Finish an interrupted asset rename",renameAssetCommit:e=>`Rename asset ${e.from} to ${e.to}`,updateReferenceCommit:e=>`Update reference ${e.file}`,turnLabel:e=>`Turn · ${e.name}`,briefLabel:e=>`${e.name} · brief with the agent`,videoAnalysisLabel:e=>`Video analysis · ${e.file}`,subtitlesLabel:e=>`Subtitles · ${e.title}`,subtitlesTranslateLabel:e=>`Subtitles · ${e.title} · ${e.lang}`,creativeLabel:e=>`Creative · ${e.title}`,localizeLabel:e=>`Translation · ${e.title}`,localizeStarted:e=>`Translating v${e.n} into ${e.locales}`,localizeNothingToDo:e=>`v${e.n}: every translation asked for is already up to date`,localizeChecking:e=>`${e.count===1?"1 translation problem":`${e.count} translation problems`} to fix: attempt ${e.attempt} of ${e.max}`,localizeDone:e=>`Translations of v${e.n} saved: ${e.list}`,localizeOpenProblems:e=>`${e.count===1?"1 translation problem is":`${e.count} translation problems are`} still open: see the Languages panel`,localizeCommit:e=>`${e.title}: v${e.n} translations`,localizeVersionChanged:e=>`Warning: project files changed during the translation turn (${e.list}). A translation turn only reads: check these changes if nobody else made them.`,voicesNotGenerated:e=>`Translated voices not generated (${e.reason}): ${e.locales} keep the original voice`,brandAnalysisLabel:"Brand analysis",assetDescriptionLabel:"Asset description",assetGenerationLabel:e=>`Generate · ${e.kind}`,conflict:"The same work is already queued or running. Try again when it ends.",briefUpdatedCommit:e=>`${e.title}: brief updated`,variantsAddedCommit:e=>`${e.title}: variants ${e.letters}`,variantRequestWillStop:"This request will be stopped as soon as it starts (it could not be removed from the queue)",variantsRolledBackCommit:e=>`${e.title}: adding variants rolled back`,groupChatMergedCommit:e=>`${e.title}: the variants' chats merged into one`,variantGroupCommit:e=>`${e.title}: variants`,creativeArchivedCommit:e=>`${e.title}: archived`,creativeUnarchivedCommit:e=>`${e.title}: restored from the archive`,creativeDeletedCommit:e=>`${e.title}: moved to the Trash`,variantSeedRequest:e=>`Started from variant ${e.letter}, version ${e.n}`,variantBriefDeferred:"The brief changed while this variant was working: the new brief applies from its next request",groupLabel:e=>`${e.title} · agent`,groupFailed:e=>`The agent could not answer: ${e.text}`,groupReportFailed:e=>`The variants' work is done, but the agent could not write its reply: ${e.text}`,groupHelperNotStarted:e=>`Variant ${e.letter} did not start: ${e.error}`,groupInterruptedQueued:"The agent's turn was interrupted when Motion Studio closed before it started: the message is back at the top of the queue (Run next starts it).",groupInterrupted:"The agent's turn was interrupted when Motion Studio closed. Send the message again to go on.",variantDirectionsLabel:e=>`Variant directions · ${e.title}`,variantDirectionsDone:e=>`Directions proposed by the agent: ${e.list}`,variantDirectionsRetry:e=>`The proposed directions were not valid: asking again (attempt ${e.attempt} of ${e.max})`,restartCommit:e=>`${e.title}: restart from v${e.n}`,stateCommit:e=>`${e.title}: state`,versionStateCommit:e=>`${e.title}: v${e.n} · state`,noOutputChanged:e=>`No video or image changed: no new version, v${e.n} stays the latest.${e.brief?" The brief is updated.":""}`,noOutputChangedCommit:e=>`${e.title}: no new version (v${e.n} unchanged)`,removedUnsaved:e=>`Removed ${e.count===1?"1 file":`${e.count} files`} not saved in a version`,restartedFrom:e=>`Restarted from version ${e.n}: the next message works on that base.`,codebaseNotRepo:e=>`Codebase ${e.path} cannot be checked (not a git repository): changes would go unnoticed`,codebaseCheckFailed:e=>`Codebase ${e.path}: change check failed, changes would go unnoticed`,codebaseChanged:e=>`Warning: codebase ${e.path} was modified during the turn. Review the changes.`,checkingOutputs:e=>`Output check: ${e.count===1?"1 problem":`${e.count} problems`}. Asking for a fix (attempt ${e.attempt} of ${e.max}).`,requestFromBrief:"Generation from the brief",lateCancel:e=>`The cancellation arrived when the work was almost done: version v${e.n} was saved.`,lateCancelKept:e=>`The cancellation arrived when the work was almost done: no new version, v${e.n} stays the latest.`,generationFailed:e=>`Generation failed: ${e.text}`,cancelledNote:"Generation cancelled.",brandKitUnreadable:e=>`Brand kit unreadable: ${e.detail}`,guidelinesUnreadable:e=>`Guidelines unreadable: ${e.detail}`,assetListUnreadable:e=>`Asset list unreadable: ${e.detail}`,referenceListUnreadable:e=>`Reference list unreadable: ${e.detail}`,codebaseIgnored:e=>`Codebase ignored (${e.path}): ${e.reason}`,codebaseMissing:e=>`Codebase not found, ignored in this turn: ${e.path}`,codebaseSecretScanTruncated:"The codebase is very large: secret files past the first 50,000 entries are excluded by name patterns only",brandCodebaseSkipped:e=>`Codebase left out of the analysis (${e.path}): ${e.reason}`,brandCodebaseNotCheckable:e=>`Codebase ${e.path} cannot be checked (not a git repository): a change by the analysis would go unnoticed`,brandCodebaseCheckFailed:e=>`Codebase ${e.path}: the change check failed, a change by the analysis would go unnoticed`,brandCodebaseChanged:e=>`The analysis changed the codebase ${e.path}: the proposal was discarded. Review the changes in that folder.`,brandCodebaseChangedFiles:e=>`Files changed in ${e.path}: ${e.list}`,brandCodebaseCheckFailedAfter:e=>`The check of the codebase ${e.path} after the analysis failed: the proposal was discarded, since a change could not be ruled out.`,brandCodebaseCheckFailedBefore:e=>`The codebase ${e.path} could not be checked before the analysis but can be now: the check failed and the proposal was discarded, since a change could not be ruled out.`,brandCodebaseChangedUnknown:e=>`Files changed in ${e.path}: git could not tell which ones`,brandSecretsToolRulesOnly:"No sandbox: the agent runs no commands in this analysis, and secret files in the codebase are excluded by its file-tool rules only, not by the operating system",interruptedError:"The job was interrupted (app closed during generation).",interruptedNote:"Job interrupted: Motion Studio was closed during generation. Send a message to resume."},live:{tooLong:e=>`The message is too long: at most ${e.max} characters.`,tooManyLive:e=>`At most ${e.max} messages per turn: queue it for after, or wait for the turn to end.`,queueFull:e=>`At most ${e.max} requests can wait in the queue: remove one or wait for the next to start.`,emptyMessage:"Write a message or add a pin.",notQueued:"This request is no longer queued (it started or was removed).",queueChanged:"The queue changed meanwhile: reload it and try again.",queueEmpty:"There is no queued request.",queuedAfterFinish:"Arrived after the agent finished: queued as the next request.",redirectUnsupported:"This job cannot be redirected: only Stop is available.",notRunning:"The job is not running any more.",consoleLiveOff:"Messages during a console turn need live input, which is off: send it when the turn ends.",consoleTurnOver:"The console turn has already finished: send it as a new message.",wordsNotDelivered:"Your message did not reach the agent.",stoppedSessionUnavailable:"The stopped turn's session is no longer available: continuing from the last version's session.",queuedPinsVersionGone:e=>`The pinned comments of this request were placed on version ${e.n}, which no longer exists: they go to the agent as text, without frames.`},formats:{"instagram-post-1x1":"Post 1:1","instagram-post-4x5":"Post 4:5","instagram-reel-9x16":"Story/Reel 9:16","instagram-image-1x1":"Image 1:1","instagram-image-4x5":"Image 4:5","tiktok-9x16":"Video 9:16","youtube-16x9":"Video 16:9","youtube-4k-16x9":"Video 4K 16:9","youtube-shorts-9x16":"Shorts 9:16","youtube-thumbnail":"Thumbnail","facebook-feed-1x1":"Feed 1:1","facebook-feed-4x5":"Feed 4:5","facebook-story-9x16":"Story 9:16","facebook-cover":"Cover","linkedin-1x1":"Post 1:1","linkedin-4x5":"Post 4:5","linkedin-16x9":"Video 16:9","linkedin-banner":"Banner","x-16x9":"Video 16:9","x-1x1":"Post 1:1","pinterest-2x3":"Pin 2:3","web-hero-16x9":"Hero 16:9","web-banner-300x250":"Banner 300×250","web-banner-728x90":"Banner 728×90","web-banner-160x600":"Banner 160×600","og-image-1200x630":"Social preview (Open Graph)","identity-logo":"Logo","identity-favicon":"Website favicon","identity-app-icon":"App icon","appstore-iphone-69":'Screenshot iPhone 6.9"',"appstore-iphone-65":'Screenshot iPhone 6.5"',"appstore-ipad-13":'Screenshot iPad 13"',"appstore-preview":"App Preview","appstore-icon":"Icon","playstore-feature":"Feature graphic","playstore-phone-9x16":"Phone screenshot 9:16","playstore-tablet":"Tablet screenshot","playstore-icon":"Icon","playstore-promo-16x9":"Promo video 16:9"},channels:{instagram:"Instagram",tikTok:"TikTok",youTube:"YouTube",facebook:"Facebook",linkedIn:"LinkedIn",x:"X",pinterest:"Pinterest",web:"Web",appStore:"App Store",playStore:"Play Store",identity:"Identity",custom:"Custom"},variants:{rtlUnsupported:"Right-to-left languages are not supported yet: the layout would have to be mirrored, and only text and voice change in a translation",duplicatedRequest:e=>`Duplicated ${e.label}`,duplicateBusy:"The agent or a render is working on this creative: duplicate the format when it has finished",instancesFull:e=>`${e.format} already has ${e.max} copies: remove one before duplicating it again`,formatNotInVersion:e=>`${e.format} is not in v${e.n}: open a version that has it to duplicate it`,localeUnsupported:e=>`"${e.tag}" is not one of the supported languages`,localeRtl:e=>`"${e.tag}": right-to-left languages are not supported yet: the layout would have to be mirrored, and only text and voice change in a translation`,localeNotInBrief:e=>`${e.tag} is not one of this creative's languages: add it in the brief first`,instanceUnknown:e=>`${e.format} is not a format of v${e.n}`,localizationNotFound:e=>`No ${e.locale} translation of ${e.format} in v${e.n}`,localizationBusy:"The agent is working on this creative: edit the translation when it has finished",localizationInvalid:e=>`The translation cannot be saved: ${e.detail}`,localizationMismatch:e=>`"${e.entry}" is not a translatable text of this format`,localizationUnusable:e=>`The ${e.locale} translation of ${e.format} no longer fits its composition`,textOverflow:e=>`The translation of "${e.clip}" does not fit its box, even at ${e.fit}% size`,fallbackFontUnavailable:e=>`Fallback font unavailable: ${e.family} could not be downloaded, so some characters may show in a system font`,tooManyFonts:"The translation needs more font files than a composition may have",voiceFileInvalid:e=>`The translated voice of "${e.clip}" is not a file of this version`,renderNeedsForce:e=>`These translations have open problems or outdated texts: ${e.list}. Render anyway to go on`,localizationMissing:e=>`No translation to render for: ${e.list}`,localeStale:e=>`${e.count} outdated`,textOverflowMeasured:e=>`The translation of "${e.clip}" overflows its box in the render, at ${e.fit}% size`,sourceLayoutOverflow:e=>`The original text of "${e.clip}" already overflows here (its box, the frame or the safe zone): fix it in the original`,sourceTextOverflow:e=>`The original text of "${e.clip}" overflows its box in the render: it shows untranslated or outdated, so it is the original's to fix`,renderCheckFailed:e=>`${e.file} was rendered but could not be checked`,assetChanged:e=>`${e.file} changed since Motion Studio made or attached it for this translation: translate again (or restore the file) before rendering`,staleEntry:e=>`The original text of "${e.clip}" changed after it was translated: it shows in the original language until translated again`,notTranslated:e=>`"${e.clip}" is not translated yet`,voiceTooLong:e=>`The translated voice of "${e.clip}" lasts ${e.voice.toFixed(1)} s, longer than its clip (${e.clipSec.toFixed(1)} s): it needs a shorter script`,voiceDurationUnknown:e=>`The length of the translated voice of "${e.clip}" could not be measured`,voiceFailed:e=>`The translated voice of "${e.clip}" could not be generated: ${e.reason}`,voiceNoScript:e=>`Can't translate the voice of "${e.clip}" (${e.format}): it has no known script, so it keeps the original voice`,voiceFallbackReason:{off:"the voice service is off for this creative",noKey:"no key for the voice service",missingPermission:"the key lacks the text-to-speech permission",declined:"the confirmation was declined",failed:"the generation failed"},localizeNoCompositions:e=>`v${e.n} has no compositions to translate`,submitNotInTurn:e=>`${e.locale} · ${e.format} is not asked in this turn`,voiceNotTranslatable:e=>`"${e.clip}" is not a voice clip with a known script`,voicesNotInTurn:e=>`Voices are not translated for ${e.locale} in this turn: leave voiceScripts empty`,fitWithoutText:e=>`The fit of "${e.clip}" needs its translated text`,storePack:{title:"App store pack",appStore:"App Store",googlePlay:"Google Play",goal:e=>`App Store and Google Play screenshots for ${e.app}`,notStorePack:"This creative is not an App store pack",foreignFormat:e=>`Not formats of this store pack: ${e.list}`,collision:e=>`There is no room for more instances of ${e.list} (20 at most): remove a format of that kind and try again`,badInstances:"The store pack instances do not match its formats",second:"A creative has one store pack: change or remove it with the storePack field, not the whole brief",useEntry:"The store pack is set with the storePack field (the Store pack entry), not with the whole brief",lastFormats:"The store pack is the last format of the creative: add another format before removing it",screenNotImage:e=>`${e.file} is not an image in the project’s Assets`,check:{notImage:"not a PNG or JPEG file",unreadable:"the file could not be read",wrongSize:e=>`${e.width}×${e.height} instead of ${e.expectedWidth}×${e.expectedHeight}`,hasAlpha:"it has an alpha channel (transparency), which the store refuses",notVideo:"not a readable video",codec:e=>`video codec ${e.codec}: the store needs H.264`,fps:e=>`${Math.round(e.fps*100)/100} fps: the App Store needs ${e.expected}`,duration:e=>`lasts ${e.seconds.toFixed(1)} s: App Store previews last ${e.min} to ${e.max} s`,noAudio:"no audio track: the App Store needs one",tooLarge:e=>`${e.sizeMB} MB: the limit is ${e.maxMB} MB`,noTranslation:e=>`no ${e.locale} translation`,renderFailed:e=>`the render failed: ${e.reason}`,renderProblems:e=>`the render has problems: ${e.list}`,copyFailed:e=>`could not be copied: ${e.reason}`,notRendered:"not rendered",notInVersion:e=>`not in version ${e.n}`,notInGroup:"no variant has this format",tooFewScreenshots:e=>`${e.count} screenshot${e.count===1?"":"s"}: the store needs at least ${e.min}`,tooManyScreenshots:e=>`screenshot ${e.count}: the store accepts at most ${e.max}`},readme:{title:e=>`${e.app}: App Store and Google Play pack`,made:e=>`Made by Motion Studio on ${e.date} from version ${e.version}.`,madeGroup:e=>`Made by Motion Studio on ${e.date} from the final selection of the variant group.`,limits:e=>`Store limits (checked on ${e.date} against the public Apple and Google pages):`,appStoreShots:e=>`App Store screenshots: PNG or JPEG without transparency, ${e.min} to ${e.max} per device size (${e.sizes}).`,appStorePreview:e=>`App Store app preview: H.264, exactly ${e.fps} fps (Apple accepts up to ${e.fps}; Motion Studio renders and checks ${e.fps}), ${e.min} to ${e.max} seconds, with an audio track (AAC), up to ${e.maxMB} MB, up to ${e.perDevice} per device size.`,playShots:e=>`Google Play screenshots: PNG without transparency or JPEG, ${e.min} to ${e.max} per device type, sides from ${e.minSide} to ${e.maxSide} px (${e.sizes}).`,playFeature:e=>`Google Play feature graphic: ${e.size}, PNG without transparency or JPEG.`,sources:"Sources:",order:"Upload order:",orderAppStore:"App Store Connect: for each language, upload the screenshots of each device folder in file name order (01, 02, …): the first ones are shown first.",orderPreview:'App Store Connect: upload preview.mp4 as the app preview of the iPhone 6.9" display.',orderPlay:"Google Play Console: for each language, upload the phone and tablet screenshots in file name order, then feature-graphic.png.",playVideoTitle:"Google Play video:",playVideo:"Google Play does not take a video file: upload promo-video.mp4 to YouTube (public or unlisted, ads off) and paste its YouTube link in the store listing. Only the first 30 seconds play automatically.",notInPackTitle:"Not part of the pack (store formats picked by hand, not exported):",failedTitle:"Files not exported:"}}},pairing:{openFromLink:"Open Motion Studio from the link shown in the terminal"},keyChecks:{refused:"The service refused the request: press Test again or check the key and its permissions",timeout:e=>`No answer within ${e.seconds} s`,network:"The service could not be reached",status:e=>`The service answered ${e.status}`,rateLimited:"Too many requests: try again later"},providers:{unreachable:e=>`${e.provider} is unreachable: ${e.detail}`,invalidKey:e=>`The ${e.provider} key is invalid or lacks permission`,rateLimited:e=>`Rate limit reached for ${e.provider}: try again later`,responded:e=>`${e.provider} responded ${e.status}: ${e.detail}`,fileTooLarge:e=>`File too large from ${e.provider}`,invalidResponse:e=>`Invalid response from ${e.provider}`,blockedAddress:"Address not allowed for download",tooManyRedirects:"Too many redirects",unsplashNoVideo:"Unsplash does not offer video: use Pexels",invalidStockId:"Invalid stock id",noPexelsVideo:"No downloadable video file on Pexels",photoBy:e=>`Photo by ${e.author} on ${e.provider}`,videoBy:e=>`Video by ${e.author} on ${e.provider}`,invalidFontName:"Invalid font name",invalidFontWeights:"Invalid font weights",fontNotFound:e=>`Font "${e.family}" not found on Google Fonts`,textTooLong:e=>`Text too long for ${e.provider} (maximum ${e.max} characters)`,invalidVoice:"Invalid voice",noVoice:"No voice available on ElevenLabs",invalidImageSize:"Invalid image size",invalidAssetsFolder:"Invalid assets folder",optionInvalid:e=>`${e.label} is not valid`,optionQuality:"Quality",optionBackground:"Background",optionOrientation:"Orientation",optionProvider:"Provider",configureKey:e=>`Set the ${e.provider} key in the Motion Studio settings`,referencesTooLarge:"References too large",invalidReference:e=>`Invalid reference: ${e.file}`,describeImage:"Describe the image to generate",nearestSize:"Nearest supported size: resize or crop the image if needed",writeText:"Enter the text to read",imageTag:"image",voiceTag:"voice",soundTag:"sound effect",musicTag:"music",audioAttribution:e=>`AI-generated (${e.provider})`,promptRequired:"Describe the sound to generate",promptTooLong:e=>`Description too long (maximum ${e.max} characters)`,durationOutOfRange:e=>`Duration out of range (${e.min} to ${e.max} seconds)`,voiceAttribution:e=>`AI-generated voice (${e.provider})`,searchWhat:"Say what to search for",fontsAttribution:"Google Fonts · OFL / Apache 2.0",fontsLicense:"Google Fonts: OFL or Apache 2.0 license, commercial use allowed",invalidDestination:"Invalid destination: use assets/brand/<name> for images and logos or assets/fonts/<name> for fonts (png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf)",invalidUrl:"Invalid URL: give a full http(s) address",siteFontsLimit:e=>`inspect_site_fonts can be used at most ${e.max} times per analysis`,codebaseImport:{outside:e=>"the source is not inside one of the analysis codebases (or its real path leaves it)",secret:e=>"the source is a secret file (or inside a secret folder): it is never opened",notFile:e=>"the source is not a regular file (or it changed while it was read)",tooBig:e=>`the file is larger than ${e.max} MB`,extension:e=>"only png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf files are copied, with the same extension at the destination",dest:e=>"invalid destination: use assets/brand/<name> for images and logos or assets/fonts/<name> for fonts",limit:e=>`import_codebase_file can be used at most ${e.max} times per analysis`,missing:e=>"the source file does not exist"},accessDenied:e=>`${e.host} denied access to the file (${e.status})`,unknownAuthor:"unknown author",unrestorableEdit:e=>`The agent tried to edit ${e.file} directly: the change cannot be undone`,revertedEdit:e=>`The agent tried to edit ${e.file} directly: the change was undone`,turnEnded:e=>`Turn ended with result ${e.subtype}`,claudeExited:e=>`claude exited with code ${e.code} without a result`,claudeNotFound:e=>`Command claude not found (${e.bin}). Install Claude Code or check the Doctor.`,claudeCannotStart:e=>`Cannot start claude: ${e.detail}`,projectFolderMissing:e=>`Project folder not found: ${e.path}`,serviceOff:{images:"Images are turned off in this creative's brief: tell the user they are off and that they can change this with the Services button",voice:"Voice is turned off in this creative's brief: tell the user it is off and that they can change this with the Services button",music:"Music is turned off in this creative's brief: tell the user it is off and that they can change this with the Services button",sfx:"Sound effects are turned off in this creative's brief: tell the user they are off and that they can change this with the Services button"},serviceFor:{images:"images",voice:"voice",music:"music",sfx:"sound effects"},serviceStockOnly:"This creative uses stock images only: use stock_search and stock_download instead of generate_image",serviceNoKey:e=>`This creative's brief chooses ${e.provider} for ${e.service}, but the ${e.provider} key is not set: add it in the Motion Studio settings, or the user can change the service with the Services button`,serviceOverridden:e=>`This creative's brief chooses ${e.provider} for ${e.service}: used instead of ${e.requested}`,serviceMissingPermission:e=>`The ${e.provider} key cannot be used for ${e.service}: ${e.permission?`it lacks the permission ${e.permission}. Tell the user to fix the key in the Motion Studio settings (then test it again)`:`${e.provider} refused the key or the request without naming a permission (it can also be a region, organization or firewall restriction at the provider). Tell the user to check this with ${e.provider} and in the Motion Studio settings (then test the key again)`}, or to change the service with the Services button`,serviceVoicesUnused:"This creative's brief chooses OpenAI for voice: ElevenLabs voices cannot be used, so there is nothing to list",voiceDropped:e=>`The voice ${e.voice} belongs to ${e.owner} and this voice-over uses ${e.provider}: it was not used, the ${e.brand?`brand's ${e.provider} voice`:`${e.provider} default voice`} was used instead`,voiceWrongProvider:e=>`The voice ${e.voice} is not a ${e.provider} voice: choose one of the ${e.provider} voices`},issues:{id:"invalid id (lowercase letters, digits and hyphens)",manualRef:"manual sources must have ref: null",websiteRefRequired:"website sources need an http(s) address as ref",websiteRefInvalid:"website sources must have an http(s) address as ref",imageRefRequired:"image sources need a relative path as ref",imageRefInvalid:"image sources must have a relative path as ref",weights:"invalid weights (whole numbers from 100 to 900)",nameRequired:"name is required",nameTooLong:"name too long (maximum 60 characters)",hex:"invalid hex (use #RRGGBB)",role:"invalid role",familyRequired:"family is required",familyTooLong:"family too long (maximum 80 characters)",maxWeights:"at most 9 weights",variant:"invalid variant",background:"invalid background",textRequired:"text is required",textTooLong:"text too long (maximum 2000 characters)",duplicateIds:"duplicate ids",siteSourceUrl:"website sources need an address",siteSourceFile:"website sources must have file: null",imageSourceFile:"image sources need a file",imageSourceUrl:"image sources must have url: null",codebaseRefRequired:"codebase sources need a path relative to the codebase as ref",codebaseRefInvalid:"codebase sources must have a relative path as ref",codebaseSourcePath:"codebase sources need a folder path",codebaseSourcePathInvalid:"the codebase folder must be an absolute path, not a disk root",codebaseSourceUrl:"codebase sources must have url: null",codebaseSourceFile:"codebase sources must have file: null",pathOnlyCodebase:"only codebase sources have a folder path or note",maxCodebaseSources:"at most 5 codebase sources",duplicateSourceIds:"duplicate source ids",relativePath:'invalid path (must be relative, without ".." or "\\")',httpOnly:"only http(s) addresses",duplicateFiles:"duplicate files",fileName:"invalid file name",duplicatePresetIds:"duplicate preset ids",customVideoEven:"a video needs an even number of pixels on each side",customVideoMax:"a video is at most 4096 pixels on each side",domain:"invalid domain (e.g. api.example.com or *.example.com)",fileInvalid:"invalid file",sourceInvalid:"invalid source",duplicateFormats:"the same format twice",noFormats:"at least one format",emptyFill:"at least one field to write",labelNotInFormats:"a label for a format that is not in the brief",briefWithPartial:"a full brief cannot be sent together with formats or labels",badLocales:"invalid languages (no repeats, and the main language is not among the extra ones)",duplicateStores:"the same store twice",storePackIphone:'the App Store needs the iPhone 6.9" screenshots',storePackPhone:"Google Play needs the phone screenshots",storePackScreenshots:"the number of screenshots is outside what the chosen stores accept",badAssetPath:"invalid path (must be a file under assets/)",missingValue:"missing or invalid value"},brandFields:{colors:"color",fonts:"font",logos:"logo",dos:"thing to do",donts:"thing to avoid",tone:"tone of voice",photoStyle:"photo style"},desktop:{menu:{edit:"Edit",undo:"Undo",redo:"Redo",cut:"Cut",copy:"Copy",paste:"Paste",selectAll:"Select All",view:"View",reload:"Reload",fullScreen:"Toggle Full Screen",resetZoom:"Actual Size",zoomIn:"Zoom In",zoomOut:"Zoom Out",window:"Window",minimize:"Minimize",close:"Close",help:"Help",restartToUpdate:"Restart to Update",github:"Motion Studio on GitHub"},attachedGoneMessage:"The Motion Studio this app was connected to has closed.",attachedGoneRestart:"Restart",attachedGoneQuit:"Quit",renderRunningMessage:e=>e.count===1?"A render is still running":`${e.count} renders are still running`,renderRunningDetail:"Quitting stops them: nothing half-done is kept, and you can render again later.",renderRunningQuit:"Stop and quit",renderRunningKeep:"Keep rendering",draftUnsavedMessage:e=>e.count===1?"You have unsaved edits in the editor":`You have unsaved edits in ${e.count} editors`,draftUnsavedDetail:"Quitting discards them. Keep editing to save them as a new version first.",draftUnsavedQuit:"Discard and quit",draftUnsavedKeep:"Keep editing",draftReloadDetail:"Reloading discards them. Keep editing to save them as a new version first.",draftReloadDiscard:"Discard and reload",invalidRequest:"Invalid request",invalidPath:"Invalid path",alreadyRunning:e=>`Motion Studio is already running (port ${e.port})`,updateAvailable:e=>`Motion Studio ${e.version} is available: restart to update`,updateCheckFailed:e=>`Update check failed: ${e.detail}`},cli:{help:`Usage: npx @motion-studio/cli [--port 4317] [--no-open]
2
2
  npx @motion-studio/cli --print-url
3
3
  (if installed: motion-studio [--port 4317] [--no-open])
4
4
 
5
5
  Starts Motion Studio locally and opens the browser.
6
6
  --print-url shows the address (with the access code) of the Motion Studio that is already running.
7
- Variables: MOTION_STUDIO_CONFIG_DIR, MOTION_STUDIO_CLAUDE_COMMAND (JSON array)`,invalidPort:e=>`Invalid port: ${e.value}`,unknownOption:e=>`Unknown option: ${e.option}`,invalidOptionValue:e=>`Invalid value for ${e.option}`,unexpectedArgument:e=>`Unexpected argument: ${e.arg}`,notRunning:"Motion Studio is not running: start it with motion-studio",alreadyRunning:e=>`Motion Studio is already running: ${e.url}`,running:e=>`Motion Studio is running at ${e.url}`,openManually:e=>`Open ${e.url} manually`,closeFailed:e=>`Shutdown failed: ${e.detail}`,portInUse:e=>`Port ${e.port} is already in use: try --port <other>`},agentActions:{afterTurn:"from the end of this turn",briefDuration:e=>`Brief duration: ${e.from} → ${e.to}`,durationNone:"none",seconds:e=>`${e.n} s`,briefGoal:"Brief goal updated",briefMessage:"Brief key message updated",briefNotes:"Brief notes updated",briefServices:e=>`Brief services: ${e.list}`,formatAdded:e=>`Format added to the brief: ${e.format}`,formatMadeNext:e=>`${e.formats}: made at the next turn`,languageAdded:e=>`Language added to the brief: ${e.language} · translated after this turn`,duplicateQueued:e=>`After this turn: duplicate ${e.format}`,formatsNamed:e=>`Format names: ${e.list}`,duplicateDone:e=>`Format duplicated: ${e.format} (v${e.n})`,variantAdded:e=>`New variant ${e.letter}: ${e.direction}`,variantDiscarded:e=>`Variant ${e.letter} discarded`,variantRestored:e=>`Variant ${e.letter} restored`,pickSet:e=>`★ of ${e.format}: ${e.version}`,pickQueued:e=>`After this turn: ★ of ${e.format} on the new version`,renderStarted:e=>`Render started: v${e.n} · ${e.formats}`,renderQueued:e=>`After this turn: render ${e.formats}`,allFormats:"every format",exportQueued:"After this turn: render what the ★ export needs",exportNothing:"The ★ export needs no render: open Export to save the files",exportRendering:e=>`Rendering ${e.count===1?"1 format":`${e.count} formats`} for the ★ export; then open Export to save the files`,dropped:e=>`Not done, because the turn did not save a version or was stopped: ${e.list}`,failed:e=>`${e.action}: not done (${e.reason})`,limit:e=>`At most ${e.max} app actions per turn`,nothingToChange:"Nothing to change: give at least one field",formatUnknown:e=>`Unknown format: ${e.format}`,formatInBrief:e=>`${e.format} is already in the brief: use duplicate_format for a second one`,formatIdentity:"Identity formats (logo, favicon, app icon) are chosen when the creative is created",namesRefused:e=>`No name given to the formats: ${e.list}`,nameUserNamed:"named by the user: the name is theirs, never change it",nameNotInBrief:"not in the brief",nameGroupNamed:"already named: in a group of variants only the agent the user talks to renames a format",nameEmpty:"empty name",primaryNeeded:"The brief has no languages yet: give the primary language (primary) too",languageInBrief:e=>`${e.language} is already in the brief`,discardNotPointed:e=>`The user did not point to variant ${e.letter}: ask the user which variant to discard (AskUserQuestion) before discarding it`,helperGroupAction:"You work on one variant for the agent the user talks to: adding, discarding or restoring variants and the ★ of another variant are its actions",variantInPlan:e=>`Variant ${e.letter} has work in this turn: it stays as it is until the turn is over`,groupPickNeedsVariant:"Name the variant and a saved version of it (the agent of the group has no version of its own)",groupRenderNeedsVariant:"Name the variant and a saved version of it",currentOwnOnly:'"current" is the version this turn makes: it applies to your own variant only',incompleteDuration:e=>`v${e.n} is incomplete: the video lasts ${e.duration} s, the brief says ${e.target} s. Change the duration in the brief (the version is checked again at once, with no new turn) or ask the agent to shorten it.`,incompleteOther:e=>`v${e.n} is incomplete: ${e.count===1?"1 problem was":`${e.count} problems were`} left after the automatic fixes. They are listed on the version: ask the agent to fix them, or edit the composition in the editor.`,recheckComplete:e=>`v${e.n} checked again against the brief's duration (${e.target}): it is complete now.`,recheckPartial:e=>`v${e.n} checked again against the brief's duration (${e.target}): ${e.formats} pass now; other problems remain.`,recheckCommit:e=>`${e.title}: v${e.n} checked again against the brief`},web:{identity:{start:"Start",fromBrand:"From the brand logo",fromScratch:"From scratch",sourceCodebase:"from codebase",fromBrandHint:"The agent adapts the brand logo (margins, a simplified version for small sizes) without redrawing it.",noBrandLogo:"The brand has no logo yet: the agent will draw one in the brand style.",name:"Name or initials",namePlaceholder:"E.g. Acme or AC",keywords:"Style keywords (optional)",keywordsPlaceholder:"E.g. geometric, friendly, bold",colors:"Colours",colorsBrand:"From the brand",colorsFree:"Free",view:"View",viewImage:"Image",viewSizes:"Sizes",sizesTitle:"Sizes",sizesIntro:"Every file of the set at its real size, and how the icon looks where it is used.",zoomed:"Zoom in",oneToOne:"1:1",fileSize:e=>`${e.name}, ${e.w}×${e.h} px`,noPreview:"No preview",contexts:"In context",browserTab:"Browser tab",iosIcon:"iOS icon",androidIcon:"Android adaptive icon",maskableIcon:"Maskable web icon",safeZone:"Safe zone",safeZoneNote:e=>`The dashed circle is the safe zone (${e.pct}% of the icon): keep the mark inside it.`,warnings:"Warnings",onLight:"On light",onDark:"On dark",noDarkLogo:"Regenerate to get the negative logo",noDarkLogoTip:"This version of the logo has no negative version for dark backgrounds: the main logo is shown on dark.",logoSides:e=>`${e.label} on a light and on a dark background`,useAsLogo:"Use as brand logo",useAsLogoOf:e=>`Use ${e.label} as the brand logo`,useAsLogoTitle:"Use as the brand logo?",useAsLogoBody:"The logo is copied into the project assets and added to the brand kit. If the kit already has a logo of the chosen kind, that one is demoted (primary to secondary, icon to other). The brand kit changes at once, with no proposal to approve.",useAsLogoDarkNote:"The logo’s negative version, for dark backgrounds, is added with it.",useAsLogoAs:"Add it as",variantPrimary:"Main logo",variantIcon:"Icon",useAsLogoConfirm:"Add to the brand",useAsLogoDone:"Added to the brand kit",useAsLogoNotCommitted:"Added to the brand kit, but the change could not be saved in the project history; it will be saved with the next change",useAsLogoOpen:"Open the brand",useAsLogoFailed:e=>`Could not add the logo to the brand: ${e.detail}`},variantGroup:{discardedReadOnly:"Discarded variant: restore it to work on it",groupBy:"Group by",variant:"Variant",variants:"Variants",identityVariantsHint:"Each variant has a logo, favicon and app icon that go together, so you can compare them and keep one.",format:"Format",all:"All",addVariant:"+ Variant",addVariantMenu:"Add variant",discard:"Discard",restore:"Restore",showDiscarded:"Show discarded",viewLabel:"Variants view",viewChosen:"Chosen",viewAll:"All variants",chosenTitle:"Chosen",noChoiceTitle:"No choice yet",noChoiceHint:"The final selection takes the default rule for these formats: choose them in Final selection.",noVariantFile:"No variant has this format yet",useForAllFormats:"Use this variant for all formats",finalSelection:"Final selection",missing:"missing",letterLabel:e=>`Variant ${e.letter}`,count:e=>e.count===1?"1 variant":`${e.count} variants`,discardRefused:{running:"Stop it before discarding it",lastActive:"It is the last active variant: keep at least one"},openVariant:"Open this variant",fieldHint:"Each variant is a different creative direction, with all the formats.",directionOf:e=>`Direction of variant ${e.letter} (optional)`,directionPlaceholder:"E.g. minimal, lots of white space",directionAuto:"Left empty, the agent proposes one.",directionLimit:e=>`At most ${e.max} characters`,groupFailed:e=>`The creative was created, but its variants could not be made: ${e.detail}`,startFailed:e=>`The creative was created, but its variants did not start: ${e.detail}`,selectorLabel:"Send to",singleHint:`The message goes to the creative's agent. Name the variants (B, "variant C", "all variants") or leave a comment on one: if you do not, the agent asks you.`,sendToHint:e=>`The message goes to variant ${e.letter}. The chat is the same for every variant.`,selectorAll:"All",allHint:"The same request goes to every active variant.",sentToAll:e=>e.count===1?"Request sent to 1 variant":`Request sent to ${e.count} variants`,sentToAllRefused:e=>`Not started: ${e.list}`,pinsNotSentToAll:"not sent to All",sendAllFailed:e=>`Couldn't send the request to the variants: ${e.detail}`,toolbarAria:"Variants",groupByAria:"Group by",rowMenu:e=>`Options of variant ${e.letter}`,exportVariant:"Export this variant",editDirection:"Edit direction",directionSave:"Save direction",directionFailed:e=>`Couldn't save the direction: ${e.detail}`,noDirection:"No direction yet",discarded:"Discarded",discardFailed:e=>`Couldn't discard the variant: ${e.detail}`,restoreFailed:e=>`Couldn't restore the variant: ${e.detail}`,layoutFailed:e=>`Couldn't change the grouping: ${e.detail}`,missingFolder:"The folder of this variant is missing",orphanNotice:"The group of this variant could not be found: it opens as a single creative.",waiting:"Waiting",finalPick:e=>`${e.format} · Variant ${e.variant} · v${e.n}`,finalDefault:e=>`${e.format} · default rule`,finalDefaultFrom:e=>`${e.format} · Variant ${e.variant} · v${e.n} · default rule`,finalEmpty:"No formats",finalHint:"Where each format of the group export comes from. Without a ★ the default rule applies to variant A.",starUse:e=>`Use ${e.label} v${e.n} of variant ${e.variant} for export`,starUsed:e=>`${e.label}: variant ${e.variant} v${e.n} is chosen for export`,choose:"Choose",inChat:"In chat",inChatHint:"The chat, the versions and the comments are of this variant",chosen:"Chosen",readyBanner:e=>`${e.count} variants ready: choose the final one`,chooserHint:"For each format, click the variant to export. Click the chosen one again to go back to the default rule.",chooserPick:e=>`${e.format}: variant ${e.variant}, v${e.n}`,chooserDefaultTag:"Default rule",chooserNone:"No variant has this format yet.",cardFormats:e=>`Formats of variant ${e.letter}`,pickFailed:e=>`Couldn't save the choice: ${e.detail}`,usedForAll:e=>`Variant ${e.letter} is now chosen for every format`,useForAllFailed:e=>`Couldn't choose the variant: ${e.detail}`,addTitle:"Add a variant",addDirection:"Direction (optional)",addBase:"Start from",addBaseBrief:"The brief",addBaseOf:e=>`Variant ${e.letter}, version ${e.n}`,addSubmit:"Add variant",addFailed:e=>`Couldn't add the variant: ${e.detail}`,listMissing:e=>`missing: ${e.letters}`,stateLabel:e=>`State of variant ${e.letter}`,waitReasons:{"variant-directions":"waiting for directions","variant-confirm":"waiting for confirmation","variant-slot":"queued: two variants already working","video-long":"waiting for confirmation: long video","video-queue":"queued: another video of the project is being analysed","transcription-choice":"waiting for the transcription choice","transcription-check":"checking the audio for speech"}},theme:{aria:"Theme",system:"System",light:"Light",dark:"Dark"},instances:{duplicate:"Duplicate format",duplicating:"Duplicating…",duplicateHint:e=>`Duplicate ${e.label} as a new format of this creative`,duplicateFailed:e=>`Couldn't duplicate the format: ${e.detail}`,duplicated:e=>`Duplicated: ${e.label}`,title:"Formats of this creative",hint:"Give each format a label, change the order, or add the same format again.",list:"Selected formats",labelOf:e=>`Label of ${e.name}`,labelPlaceholder:"Label (optional)",dragHandle:e=>`Drag to reorder ${e.name}`,moveUp:e=>`Move ${e.name} up`,moveDown:e=>`Move ${e.name} down`,addAnother:e=>`Add another ${e.name}`,addAnotherShort:"Add another",full:"The limit of 20 of the same format is reached",remove:e=>`Remove ${e.name}`,removeTitle:e=>`Remove ${e.name}?`,removeBody:"Saved versions are kept. The format is left out of the next generations.",removeConfirm:"Remove",saveFailed:e=>`Couldn't save the formats: ${e.detail}`,invalidId:e=>`The brief has the format “${e.id}”, which is no longer valid. Remove it from the formats list and save again.`},codebase:{needAbsolute:"Enter an absolute path",alreadyLinked:"Folder already linked",pickTitle:"Choose the folder to link",hint:"Linked folders are read-only. The agent can read them; editing tools are blocked and changes in git repositories are reported.",notFound:"Not found",noteFor:e=>`Note for ${e.path}`,remove:e=>`Remove ${e.path}`,pathAria:"Absolute folder path",pathPlaceholder:"/Users/yourname/dev/app",noteAria:"Note (optional)",notePlaceholder:"E.g. iOS app, screens in /Screens",link:"Link"},questionUi:{title:"The agent asks you",other:"Other",otherPlaceholder:"Write your answer",multiHint:"Choose one or more",send:"Answer",skip:"Don’t answer",chooseFirst:"Choose an option or write your answer for every question",historyLabel:"Question from the agent",yourAnswer:"Your answer",skipped:"Not answered",expired:"No answer in time",cancelled:"Cancelled: the turn was stopped"},approvalUi:{alreadyHandled:"Request already handled",generate:"Generate",deny:"Deny",allow:"Allow",alwaysHere:"Always here",alwaysRule:e=>`“Always here” saves the rule ${e.rule}`,alwaysScope:e=>`Always here allows: ${e.label} · this project only`,alwaysSaved:e=>`Always allowed in this project: ${e.label}`,showCommand:"Show command",hideCommand:"Hide command",showDetails:"Show details",hideDetails:"Hide details",fullCommand:"Full command",fullDetails:"Full details",lines:e=>e.count===1?"1 line":`${e.count} lines`,scrollMore:"Scroll to read it all",shortened:e=>`Shortened by Motion Studio to the first ${e.count} characters`,describe:{command:"The agent wants to run a command on this computer.",edit:"The agent wants to change a file outside the project.",read:"The agent wants to read a file outside the project.",web:"The agent wants to open a web page.",tool:"The agent wants to use a tool that needs your permission."},kinds:{command:"Command",edit:"File change",read:"File read",web:"Web page",tool:"Tool",provider:"External service"},agentSays:e=>`The agent says: “${e.reason}”`,riskPrefix:e=>`${e.risk}:`,otherRisk:"Other risk",runsCommand:"Runs a command"},exportUi:{title:e=>`Export the starred versions of “${e.title}”`,heading:"Export the starred versions",sub:e=>`“${e.title}”: each format at its ★ version, ready to post.`,format:"Format",version:"Version",include:e=>`Export ${e.label}`,star:e=>`★ v${e.n}`,groupHeading:"Export the final selection",groupSub:e=>`“${e.title}”: each format from its ★ in the group, from any variant.`,groupPick:e=>`Variant ${e.variant} · v${e.n}`,groupDefault:e=>`Variant ${e.variant} · v${e.n} · default rule`,groupLoading:"Reading the final selection…",groupLoadFailed:e=>`Couldn't read the final selection: ${e.detail}`,newer:e=>`v${e.n} newer`,follows:e=>`follows ${e.primary}`,fileMissing:e=>`The file of v${e.n} is missing or cannot be read safely`,noFollowerFile:e=>`v${e.n} of the ${e.primary} has no file for this format`,names:"File names",pattern:"File name pattern",insertToken:e=>`Insert {${e.token}}`,preview:"Preview",previewLanguage:e=>`Preview, ${e.language}`,unknownVars:e=>`Unknown variables are left out: ${e.list}`,emptyName:"This pattern gives an empty file name",collision:e=>`Two formats would get the same file name (${e.list}). Add {format} to the pattern.`,saveDefault:"Save as default",savedDefault:"Saved as the workspace default",saveFailed:e=>`Could not save the default: ${e.detail}`,errors:{invalidPicks:"Choose at least one format to export.",pickFollower:"A format that follows another one is exported with its primary’s ★ version: reopen Export and try again.",pickNoFile:e=>`${e.detail}. Reopen Export to refresh the list.`,followMismatch:e=>`${e.detail}. Reopen Export to refresh the list.`,fileMissing:e=>`${e.detail}. Reopen Export to refresh the list.`,nameCollision:e=>`Nothing was exported. ${e.detail}.`,nameEmpty:"This pattern gives an empty file name.",invalidPattern:"The file name pattern is not valid (at most 200 characters).",invalidDestination:"Choose a destination folder (an absolute path).",invalidDate:"The export date is not valid: reopen Export and try again."},saveTo:"Save to",pickTitle:"Choose the destination folder",choose:"Choose…",folder:"Destination folder",placeholder:"/Users/yourname/Delivery",lastUsed:"last used",noFolder:"No folder chosen",subtitles:{title:"Subtitles",files:".srt and .vtt files",filesHint:"Next to each video, for YouTube, Vimeo, LinkedIn and websites.",drawn:"In the video",drawnHint:"One video per language, with the subtitles drawn in their style.",soft:"Track in the MP4 file",softHint:"Subtitles the viewer turns on in the player, inside the video file.",cleanNote:"Files and tracks go with a video without drawn subtitles.",previewDrawn:e=>`In the video, ${e.language}`,previewDrawnOn:e=>`${e.video} video, ${e.language} subtitles`,drawnVideo:e=>`Video for the ${e.language} subtitles`,voicedOnly:e=>`Follows the voice of the ${e.language} video: it goes with that video only, when you export it`,noTrackRow:"Draws no subtitles: not exported"},noOverwrite:"Existing files are never overwritten",files:e=>e.count===1?"1 file":`${e.count} files`,run:e=>e.count===1?"Export 1 file":`Export ${e.count} files`,running:"Exporting…",done:e=>e.count===1?"1 file exported":`${e.count} files exported`,skipped:e=>`Not exported: ${e.list}`,renderProblems:e=>`Rendered with problems: ${e.list}. Tick it to export it anyway`,excluded:e=>`Not exported because the render has problems: ${e.list}`,excludedItem:e=>`${e.label} v${e.n} (${e.list})`,problemShort:{tooLarge:e=>`${e.size} MB instead of at most ${e.max} MB`,durationOffTarget:e=>`duration ${e.duration} s instead of ${e.target} s`,durationOverMax:e=>`duration ${e.duration} s, at most ${e.max} s`,badResolution:e=>`${e.size} instead of ${e.expected}`,notReadable:"the file cannot be read",badExtension:e=>`.${e.ext} not accepted`},resolution:"Resolution",resolutionOriginal:"Format size",resolutionOption:e=>e.n===2160?"2160p (4K)":e.n===1440?"1440p (2K)":`${e.n}p`,frameRate:"Frame rate",frameRateOriginal:e=>e.fps===null?"The format's own":`${e.fps} fps (the format's own)`,frameRateOption:e=>`${e.n} fps`,quality:"Quality",qualityNames:{standard:"Standard",high:"High",max:"Max"},qualityHints:{standard:"Smaller files, as Motion Studio made them before",high:"Sharp text and edges: about 8 Mbps at 1080p, as YouTube recommends",max:"The largest files: every frame lossless before the encode"},profileHint:"Videos only: images keep their size",profileLocked:"With other languages the videos are exported at the format size and High quality",outputSize:e=>`→ ${e.size}`,background:"The export goes on in the background: you can close this window, you will be told when the files are in the folder.",exportingPct:e=>`Exporting ${e.pct}%`,renderingFirst:e=>`Rendering · ${e.pct}%`,copying:"Copying the files…",cancelExport:"Cancel export",cancelled:"Export cancelled",failed:e=>`Export failed: ${e.detail}`,doneToast:e=>e.count===1?`1 file exported to ${e.folder}`:`${e.count} files exported to ${e.folder}`,doneNotification:"Export finished",doneLeftOut:e=>`${e.count} not exported: open Export again to see why.`,needsForceToast:e=>`Export stopped: these translations have open problems or outdated texts: ${e.list}`,doneRow:e=>e.count===1?`1 file in ${e.folder}`:`${e.count} files in ${e.folder}`,cancelOf:e=>`Cancel ${e.label}`,showInFinder:"Show in Finder",showInFolder:"Show in folder",finish:"Done",empty:"Nothing to export yet."},player:{audio:e=>`Audio player: ${e.name}`,video:e=>`Video player: ${e.name}`,play:"Play",pause:"Pause",position:"Position",positionText:e=>`${e.time} of ${e.total}`,waveform:"Waveform",unplayable:"This file can’t be played here",keys:"Space plays or pauses · ←/→ 5 s · Home/End"},library:{generate:{open:"Generate",title:"Generate an asset",tabs:"What to generate",kinds:{image:"Image",voice:"Voice-over",sfx:"Sound effect",music:"Music"},providerLabel:"Provider",providerNames:{openai:"OpenAI",elevenlabs:"ElevenLabs"},providerLine:e=>`Made by ${e.provider} (${e.model}).`,paidNote:"Every generation is a paid call to your provider account: Motion Studio asks you to confirm it first, and the result is added to Assets.",noKeyTitle:e=>`Add the ${e.providers} key to use this tab.`,openSettings:"Open Settings",noKeysAtAll:"No provider key is set yet, so nothing can be generated.",prompt:"Description",imagePlaceholder:"e.g. a flat illustration of a blue paper plane over a city",soundPlaceholder:"e.g. a short wooden door slam",musicPlaceholder:"e.g. calm piano with a slow build",text:"Text to speak",textPlaceholder:"The words to say, exactly as written.",width:"Width",height:"Height",sizeNote:"The size is adjusted to the nearest one the model supports (up to 3840 px).",quality:"Quality",qualities:{auto:"Auto",low:"Low",medium:"Medium",high:"High"},voice:"Voice",voiceId:"Voice ID",voicePlaceholder:"Default voice",brandVoice:e=>`Brand voice: ${e.name}`,instructions:"Speaking style",instructionsPlaceholder:"e.g. warm and unhurried",format:"Format",duration:"Duration",sfxLimits:"Between 0.5 and 30 seconds. Leave it empty to let the service choose.",musicLimits:"Between 10 and 300 seconds.",seconds:"s",loop:"Loop",instrumental:"Instrumental only",brandStyle:"The prompt starts from the brand sound style; edit it freely.",name:"File name",namePlaceholder:"Optional",submit:"Generate",cancel:"Cancel",close:"Close",stop:"Stop",starting:"Starting…",running:"Generating… If a confirmation is waiting, you will find it in the activity center.",done:"Added to Assets.",failed:e=>`Generation failed: ${e.error}`,cancelled:"Generation cancelled.",errors:{promptRequired:"Describe what to generate.",textRequired:"Write the text to speak.",duration:e=>`Choose a duration between ${e.min} and ${e.max} seconds.`,size:"Enter a width and a height."}},assets:{title:"Assets",filters:"Asset filters",type:"Type",origin:"Origin",tags:"Tags",kinds:{all:"All",image:"Images",svg:"Vector",video:"Video",font:"Fonts",audio:"Audio",other:"Other"},origins:{website:"From website",upload:"Uploaded",generated:"Generated",stock:"Stock","google-fonts":"Google Fonts",codebase:"From codebase"},originShort:{website:"website",upload:"uploaded",generated:"generated",stock:"stock","google-fonts":"Google Fonts",codebase:"codebase"},count:e=>`${e.shown} of ${e.total}`,selectedCount:e=>`${e.count} selected`,clearFilters:"Clear filters",search:"Search assets",searchPlaceholder:"Search names, descriptions, tags",upload:"Upload",uploadInput:"Upload files",dropTitle:"Drop files anywhere",dropBody:"Images, SVG, video, fonts, audio · up to 200 MB each. Describe them with Claude afterwards.",dropOverlay:e=>`Drop to add to ${e.project}`,refsGroup:"Creatives",refsFilter:"Creative references",refsIntro:"Files added from the computer in a brief, only for that creative. They are deleted with it unless you save them in Assets.",refsEmpty:"No creative references",refsEmptyBody:"Files you add from the computer in a new creative’s brief show up here.",refsUsedBy:"Used by",refsUnused:"Brief not created yet",saveToAssets:"Save in Assets",savedToAssets:e=>`${e.name} saved in Assets`,saveToAssetsFailed:e=>`Couldn't save it in Assets: ${e.detail}`,uploading:"Uploading…",uploaded:e=>e.count===1?"Uploaded 1 file":`Uploaded ${e.count} files`,uploadFailed:e=>`Upload failed: ${e.detail}`,describing:"Describing…",noDescription:"No description yet",undescribed:e=>e.count===1?"1 asset without a description":`${e.count} assets without a description`,describeMissing:e=>e.count===1?"Describe it":"Describe them",allDescribed:"Every asset has a description",describeBusy:"Claude is working on this project’s brand. Describe when it finishes.",describeFailed:e=>`The description didn't start: ${e.detail}`,described:"Descriptions updated",select:e=>`Select ${e.name}`,open:e=>`Open ${e.name}`,more:e=>`+${e.count}`,selection:"Selection",describeAgain:"Describe again",addTags:"Add tags",addTagsLabel:"Tags to add",addTagsPlaceholder:"Comma-separated, e.g. logo, night",addTagsApply:"Add",tagsAdded:e=>e.count===1?"Tags added to 1 asset":`Tags added to ${e.count} assets`,tagsFailed:e=>`Tags not saved: ${e.detail}`,useInCreative:"Use in a creative",delete:"Delete",clearSelection:"Clear selection",deleted:e=>e.count===1?`${e.name} deleted`:`${e.count} assets deleted`,deleteFailed:e=>`Not deleted: ${e.detail}`,undo:"Undo",emptyTitle:"No assets yet",emptyBody:"Add logos, images, fonts or video, then describe them with Claude. Every creative of this project can use them.",noMatchTitle:"Nothing matches",noMatchBody:"Try another filter or search.",loadFailed:e=>`Can't load the assets: ${e.detail}`,retry:"Try again",listUnreadable:e=>`The asset list can't be read: ${e.detail}. Fix or remove assets/assets.json in the project folder, then try again.`,unregistered:e=>e.count===1?"1 file in the assets folder is not in Assets yet":`${e.count} files in the assets folder are not in Assets yet`,register:"Add them",registerFailed:e=>`Not added: ${e.detail}`,sort:{label:"Sort by",date:"Newest first",name:"Name",kind:"Type",duration:"Longest first"},durationBadge:e=>`Duration ${e.time}`,detail:{label:"Asset details",close:"Close details",description:"Description",descriptionHint:"Claude reads it · edit freely",looking:"Claude is looking at it",descriptionPlaceholder:"What does it show? Claude reads this when it picks assets.",tags:"Tags",addTag:"Add a tag",addTagPlaceholder:"+ Add",removeTag:e=>`Remove ${e.tag}`,tagRules:"Up to 30 tags of 40 characters",file:"File",size:"Size",added:"Added",source:"Source",credit:"Credit",saved:"Saved",rename:"Rename file",renameLabel:"New file name",renameApply:"Rename",renameCancel:"Cancel",renameHint:"Same folder · links in the brand and in briefs follow the new name",useAsProjectIcon:"Use as project icon",projectIconSet:"Project icon updated",projectIconFailed:e=>`Project icon not changed: ${e.detail}`,renamed:e=>`Renamed to ${e.name}`,renameFailed:e=>`Not renamed: ${e.detail}`,duration:"Duration",fileSize:"File size",waveformFailed:"The waveform is not available",saveFailed:e=>`Not saved: ${e.detail}`,delete:"Delete asset"}},references:{title:"References",sub:"Inspiration for the look and feel. The agent reads them; renders only use what’s in Assets.",addImages:"Add images",feeding:e=>e.count===1?"1 reference feeds the next brand analysis":`${e.count} references feed the next brand analysis`,feedingHint:"turn it on for any card with the switch",analyze:"Analyze brand with these",analyzeFailed:e=>`The analysis didn't start: ${e.detail}`,brandAnalysis:"Brand analysis",useForBrand:e=>`Use ${e.name} for brand analysis`,notePlaceholder:"Add a note for the agent",noteFor:e=>`Note for ${e.name}`,remove:e=>`Remove ${e.name}`,removed:"Reference removed",removeFailed:e=>`Not removed: ${e.detail}`,saveFailed:e=>`Not saved: ${e.detail}`,undo:"Undo",emptyTitle:"No references yet",emptyBody:"Add images that capture the look you want. The agent reads them, and they can feed the brand analysis.",dropOverlay:"Drop images to add them to the references",uploading:"Uploading…",uploaded:e=>e.count===1?"Added 1 reference":`Added ${e.count} references`,uploadFailed:e=>`Upload failed: ${e.detail}`,loadFailed:e=>`Can't load the references: ${e.detail}`,retry:"Try again",listUnreadable:e=>`The reference list can't be read: ${e.detail}. Fix or remove references/references.json in the project folder, then try again.`}},projectSettings:{sections:"Project settings sections",nav:{general:"General",agent:"Agent and approvals",internet:"Internet access",code:"Linked code"},everyProject:"Shared by every project",retry:"Try again",undo:"Undo",general:{title:"General",sub:"Claude reads the name and the description in every job of this project.",name:"Project name",description:"Description",descriptionPlaceholder:"What is this project about?",save:"Save",saved:"Saved",saveFailed:e=>`Not saved: ${e.detail}`,nameRequired:"The project needs a name",icon:{title:"Project icon",sub:"Shown on the Projects page and next to the project name. Automatic: the app icon, the favicon or a square logo of the brand.",label:"Project icon",auto:"Automatic",initials:"Initials",images:"Images from Assets",saved:"Icon updated",failed:e=>`Icon not changed: ${e.detail}`}},agent:{title:"Agent and approvals",sub:"What Claude can do in this project without asking you first.",confirmPaid:"Confirm before using paid services",confirmPaidSub:"Image generation, voice-over and stock footage show the estimated cost and wait for you.",jobs:"Jobs at the same time",jobsSub:"More parallel jobs finish sooner but use your Claude plan faster.",fewer:"Fewer jobs",more:"More jobs",advanced:"Advanced",isolation:"Agent isolation",isolationSub:"The sandbox keeps the agent’s commands inside the project folder, with internet only to the allowed sites.",isolationAuto:"Automatic (recommended)",isolationOff:"Off",isolationWarning:"Without isolation, the agent can write anywhere with the commands you allow.",model:"Model",modelSub:"Leave it empty to use Claude Code’s default model.",modelPlaceholder:"Claude Code default",sandboxOn:"Sandbox on: the agent works isolated in the project folder.",sandboxUnknown:"Sandbox status unavailable: open App settings → System check.",autoApprove:"Approve sandboxed commands automatically",autoApproveSub:"Commands that stay inside this project run without asking; network access stays limited to the allowed sites. You still decide on files outside the project, paid services and new websites.",appliesNew:"Applies to new jobs",needsIsolation:"Needs agent isolation",autoOn:"Sandboxed commands now run without asking",autoOff:"Every command will ask for your OK",runningKeeps:e=>e.count===1?"1 running job keeps its current setting":`${e.count} running jobs keep their current setting`},allowed:{title:"Always allowed",count:e=>`${e.count} · added from approval cards`,revokeAll:"Revoke all",revoke:"Revoke",revokeLabel:e=>`Revoke ${e.label}`,revoked:e=>`Revoked: ${e.label}`,revokedAll:e=>e.count===1?"1 permission revoked":`${e.count} permissions revoked`,revokeFailed:e=>`Not revoked: ${e.detail}`,confirm:"Revoke this rule?",confirmAll:e=>e.count===1?"Revoke the only rule?":`Revoke all ${e.count} rules?`,confirmAllLabel:e=>e.count===1?"Revoke the only rule":`Revoke all ${e.count} rules`,cancel:"Cancel",emptyTitle:"Nothing is always allowed",emptySub:"Choose “Always here” on an approval card to add a rule.",loadFailed:e=>`Can't load the permissions: ${e.detail}`},internet:{title:"Internet access for creatives",sub:"The agent’s commands can only reach these sites. Everything else is blocked by the sandbox.",defaults:"Always reachable: package registries (npm, PyPI), GitHub, CDNs and Google Fonts.",add:"Add",addLabel:"Add a website",placeholder:"Add a website, e.g. assets.example.com",invalid:"Use a domain like assets.example.com or *.example.com",exists:"This website is already in the list",remove:e=>`Remove ${e.domain}`,dropped:e=>`Ignored invalid websites: ${e.list}`,none:"No extra websites yet."},code:{title:"Linked code",sub:"The agent can read these folders to match your app’s real screens. It never writes to them.",readOnly:"Read only",notFound:"Not found",link:"Link a folder…",pathLabel:"Folder path",pathPlaceholder:"/Users/you/code/app",noteFor:e=>`Note for ${e.path}`,notePlaceholder:"Note (optional), e.g. iOS app",add:"Link",cancel:"Cancel",pickTitle:"Choose the folder to link",unlink:e=>`Unlink ${e.path}`,unlinked:e=>`${e.name} unlinked`,needAbsolute:"Enter an absolute path",alreadyLinked:"This folder is already linked",empty:"No folders linked yet.",saveFailed:e=>`Not saved: ${e.detail}`}},appSettings:{sections:"Settings sections",appName:"Motion Studio",nav:{general:"General",system:"System check",paid:"Paid services",usage:"Usage",notifications:"Notifications",updates:"Updates",transcription:"Video transcription"},usage:{title:"Usage",sub:"Tokens Claude used and the paid services, for every project on this computer.",week:"Claude · last 7 days",today:"Today",chart:"Tokens per day, last 7 days",day:"Day",tokens:"Tokens",cost:"Cost",barTitle:e=>`${e.day}: ${e.count} tokens`,byProject:"By project",byKind:"By kind of work",kinds:{creative:"Creatives","brand-analysis":"Brand analyses",describe:"Asset descriptions",console:"Agent console",localize:"Translations","video-analysis":"Video analyses"},none:"No tokens used in these 7 days.",empty:"Usage appears here after your first generation",emptySub:"Motion Studio records every run from now on. Earlier runs are not rebuilt.",trackedSince:e=>`Tracked since ${e.date}`,loading:"Loading usage…",loadFailed:e=>`Couldn't load usage: ${e.detail}`,tryAgain:"Try again",paid:{title:"Paid services · last 7 days",chart:"Estimated cost per day, last 7 days",cost:"Estimated cost",barTitle:e=>`${e.day}: ≈ ${e.cost}`,byService:"By service",byKind:"By kind",byProject:"By project",services:{openai:"OpenAI",elevenlabs:"ElevenLabs"},kinds:{images:"Images",voice:"Voice",music:"Music",sfx:"Sound effects",transcription:"Transcription"},estimate:e=>`≈ ${e.cost}`,approx:e=>`≈ ${e.text}`,units:{tokens:e=>`${e.count} ${e.n===1?"image token":"image tokens"}`,characters:e=>`${e.count} ${e.n===1?"character":"characters"}`,seconds:e=>`${e.count} s`,minutes:e=>`${e.count} min`,images:e=>`${e.count} ${e.n===1?"image":"images"}`},note:"Costs are estimated at list prices. The real bill is on your account with each service.",none:"No paid services used in the last 7 days."}},configured:e=>`${e.n} of ${e.total}`,appliesAll:"Applies to every project on this computer.",general:{title:"General",language:"Language",languageSub:"Also the language Claude answers in and writes guidelines with.",theme:"Theme",themeSub:"Follows your system unless you pick one.",agentPointer:"Paid-service confirmation, parallel jobs, internet access and agent isolation are in any project’s Settings, and apply to every project."},status:{ok:"Everything works",problems:e=>e.count===1?"1 problem to fix":`${e.count} problems to fix`,notes:e=>e.count===1?"Works · 1 recommendation":`Works · ${e.count} recommendations`,checking:"Checking…",checkAgain:"Check again",details:"See details"},system:{title:"System check",sub:"Motion Studio uses Claude Code and a few tools on this computer."},paid:{title:"Paid services",sub:"Keys are stored in the system keychain and never shown to the agent.",uses:{openai:"images and voice-over",elevenlabs:"premium voices",pexels:"stock footage",unsplash:"stock photos"},inKeychain:"Key saved in the Keychain",fromEnv:e=>`From the ${e.env} environment variable`,notConnected:"Not connected",addKey:"Add key",replace:"Replace",replaceLabel:e=>`Replace ${e.name} key`,remove:"Remove",removeLabel:e=>`Remove ${e.name} key`,removeConfirm:e=>`Remove the ${e.name} key?`,keyLabel:e=>`${e.name} API key`,keyPlaceholder:"Paste the API key",cancel:"Cancel",save:"Save",saving:"Saving…",saved:e=>`${e.name} key saved in the Keychain`,removed:e=>`${e.name} key removed`,notStored:"The key could not be read back from the Keychain. Try again.",failed:e=>`Key not saved: ${e.detail}`,removeFailed:e=>`Key not removed: ${e.detail}`,loadFailed:e=>`Can't read the keys: ${e.detail}`,test:"Test",testLabel:e=>`Test the ${e.name} key`,testing:"Testing…",savedChecking:"Saved · checking…",checksLabel:e=>`What the ${e.name} key can do`,checkFailed:e=>`Test not run: ${e.detail}`,caps:{key:"Key",images:"Images",tts:"Voice-over",voices:"Voice list",account:"Account",sfx:"Sound effects",music:"Music",search:"Search"},capStatus:{ok:"works",missing:"missing",unverified:"not verified",error:"error"},keyRefused:"The service refused this key or the request: check the key, or a region, organization or firewall restriction at the provider.",someErrors:e=>`Some checks did not finish (${e.detail}). Press Test to try again.`,unverifiedNote:"Not verified: checking would cost a generation. The first real use updates it.",permissionsTitle:"Permissions to enable",permissionsHelp:{openai:'In the OpenAI dashboard (API keys), give a restricted key "Models: Read" to test it and "Model capabilities: Write" (model.request) for images and voice-over. A missing model may need organization verification.',elevenlabs:"In ElevenLabs (Developers → API keys), edit the key and enable the permission of each feature you use:",pexels:"Pexels keys have no permissions: if the key is refused, create a new one on pexels.com/api.",unsplash:"Unsplash access keys have no permissions: if the key is refused, check your app on unsplash.com/developers."}},notifications:{title:"Notifications",approvals:"When the agent needs your OK",approvalsSub:"A banner, the Dock badge and a notification, even when the window is open.",approvalsLabel:"Notify for approvals",ready:"When a creative is ready",readySub:"Only when Motion Studio is in the background.",readyLabel:"Notify when ready",sound:"Play a sound",soundSub:"The system sound that goes with an approval notification.",soundLabel:"Play a sound",test:"Check that you see them",testSub:"Sends a notification now, with the sound setting applied.",testButton:"Send a test notification",testSent:"Sent: the system showed the notification.",testBlocked:"The system refused the notification. macOS shows notifications only for the installed (signed) Motion Studio app: System Settings → Notifications → Motion Studio → Allow notifications. Development builds can't show system notifications.",testTimeout:"No answer from the system. If macOS asked for permission, answer the prompt and try again.",testBlockedWeb:"The browser or the system did not show the notification. Check the notification settings of the browser and of the system.",testReason:e=>`System message: ${e.detail}`,testUnconfirmed:"Sent, but this version of the desktop app cannot confirm that it was shown.",testFailed:e=>`Couldn't show the notification: ${e.detail}`,unsupported:"This system reports that it cannot show notifications.",webDenied:"The browser blocks notifications for this page. Allow them in the site settings of the browser.",webDefault:"The browser has not been asked yet.",webAllow:"Allow notifications",webUnsupported:"This browser does not support notifications.",howTo:"macOS shows notifications only for the installed (signed) Motion Studio app: System Settings → Notifications → Motion Studio → Allow notifications. Development builds can't show system notifications."},updates:{title:"Updates",version:e=>`Motion Studio ${e.version}`,off:"Automatic updates are not active in this version",automatic:"The desktop app downloads updates automatically and asks you to restart."}},status:{draft:"Draft",working:"Working",ready:"Ready",incomplete:"Incomplete",error:"Error",interrupted:"Interrupted"},jobState:{queued:"Queued",running:"Running",succeeded:"Done",failed:"Failed",cancelled:"Cancelled"},creatives:{title:"Creatives",filter:"Filter creatives",filters:{all:"All",needs:"Needs you",running:"In progress",ready:"Ready",drafts:"Drafts"},search:"Search creatives",newCreative:"New creative",loading:"Loading creatives…",loadFailed:e=>`Can't load the creatives: ${e.detail}. Make sure Motion Studio is still running, then try again.`,tryAgain:"Try again",emptyTitle:"No creatives yet",emptyBody:"Start with the brand so every creative looks right, or jump straight to your first brief.",setUpBrand:"Set up the brand",noMatchTitle:"Nothing here",noMatchBody:"Try another filter or search.",showAll:"Show all",review:"Review",queued:"Waiting to start",working:"Working…",readyVersion:e=>`Ready · v${e.n}`,incomplete:e=>`v${e.n} · some formats are missing`,failed:"The last generation failed.",interrupted:"The generation was interrupted before it finished.",retryFailed:e=>`Couldn't start again: ${e.detail}`,draftNote:"Brief saved · nothing generated yet",draft:"Draft",generate:"Generate",generateOf:e=>`Generate ${e.title}`,generateFailed:e=>`Couldn't start the generation: ${e.detail}`,moreFormats:e=>`+${e.n} more`,unreadable:"Unreadable"},removal:{menu:e=>`Actions for ${e.title}`,archive:"Archive",archiveGroup:e=>`Archive all ${e.count} variants`,archiveVariant:e=>`Archive variant ${e.letter}`,delete:"Delete…",deleteGroup:e=>`Delete all ${e.count} variants…`,deleteVariant:e=>`Delete variant ${e.letter}…`,checking:"Checking whether it can be removed…",archived:e=>`“${e.title}” archived`,undo:"Undo",archiveFailed:e=>`Couldn't archive: ${e.detail}`,restore:"Restore",restored:e=>`“${e.title}” restored`,restoreFailed:e=>`Couldn't restore: ${e.detail}`,deleted:e=>`“${e.title}” moved to the Trash`,deleteFailed:e=>`Couldn't delete: ${e.detail}`,deleteTitle:e=>`Delete “${e.title}”?`,deleteBody:"Its folder, with every version and render, goes to the Trash. You can put it back from the Trash until you empty it.",deleteGroupBody:e=>`All ${e.count} variants of this group, with every version and render, go to the Trash. You can put them back from the Trash until you empty it.`,deleteVariantBody:e=>`Variant ${e.letter} leaves the group and its folder, with every version and render, goes to the Trash. You can put it back from the Trash until you empty it.`,deleteConfirm:"Move to Trash",archiveGroupTitle:e=>`Archive “${e.title}”?`,archiveGroupBody:e=>`All ${e.count} variants of this group leave the lists. You can restore them from Archived.`,archiveConfirm:"Archive",cancel:"Cancel",archivedCount:e=>`Archived (${e.n})`,archivedTitle:"Archived creatives",archivedEmpty:"No archived creatives.",archivedOn:e=>`Archived ${e.when}`,backToCreatives:"Back to creatives"},briefSession:{goneOnCreate:"The brief session ended elsewhere (started over or turned into a creative): press Generate again to create the creative without it.",loadFailed:e=>`The brief session could not be read: ${e.detail}`,modeLabel:"How to fill in the brief",modeYou:"Fill it in yourself",modeAgent:"With the agent",cta:"Let the agent fill it in",resumeTitle:"You have a brief session in progress",resumeBody:"You can pick it up where you left off or start over: the previous session will be deleted.",resume:"Resume the brief session",agentWorking:"The agent is filling in the brief",title:"Brief with the agent",panelLabel:"Session with the agent",state:{new:"New session",working:"Working…",filled:"Brief filled in"},intro:"Use the + below to link the code folders and the assets you need, then tell me what you want to achieve. I'll fill in the brief.",composerLabel:"Message to the agent",placeholderFirst:"Tell the agent what you want to achieve",placeholderFollowUp:"Ask for a change to the brief…",add:"Add folders or assets",addMenu:"Add context",folder:{title:"Link a folder",hint:"Code on your Mac, read-only"},library:{title:"From Assets",hint:"Images, videos and logos of the project"},upload:{title:"Upload from your Mac",hint:"Only for this creative, unless you save it in Assets"},folderPath:"Folder path",link:"Link",cancel:"Cancel",uploadFailed:e=>`Upload failed: ${e.detail}`,removePin:e=>`Remove ${e.name}`,folders:e=>e.count===1?"1 folder":`${e.count} folders`,noFolders:"No folders",assets:e=>e.count===1?"1 asset":`${e.count} assets`,noAssets:"No assets",foldersTitle:"Folders of the session",assetsTitle:"Assets of the session",removeContext:e=>`Remove ${e.name} from the session`,startOver:"Start over",openCreative:"Open the creative",discard:"Discard the session",agentMark:"Agent",created:"Creative created"},newCreative:{secondsShort:e=>`${e.n} s`,goalQuestion:"What do you want to make?",goalPlaceholder:"Describe the idea: what happens, the mood, how it ends.",goalRequired:"Describe what you want to make first",goalCount:e=>`${e.n.toLocaleString("en-US")} / ${e.max.toLocaleString("en-US")}`,brandKit:"Brand kit",assetCount:e=>e.count===1?"1 asset":`${e.count} assets`,addAssets:"Add assets",tryLabel:"Try",suggestions:{teaser:{label:"Launch teaser",text:"A 6-second teaser for the launch. Open on the product in use, keep the palette calm, reveal the key message last and close on the logo."},feature:{label:"Feature announcement",text:"Announce the new feature. Calm, confident, one line per scene, end on the key message and the logo."},screenshots:{label:"App Store screenshots",text:"Three App Store screenshots that show the three main screens of the app, each with a short caption."}},titleHint:"you can rename it in the canvas",untitled:"Untitled creative",keyMessage:"Key message",keyMessageHint:"· shown on screen",optional:"(optional)",whereTo:"Where will it be published?",videoLength:"Video length",lengthFor:e=>e.count===1?"for the video format":`for the ${e.count} video formats`,noVideo:"no video formats selected",custom:"Custom",customSeconds:"Length in seconds",customInvalid:"Enter a length from 1 to 600 seconds",durationMismatch:e=>`The text says ${e.stated} s, the duration is ${e.current} s`,durationMismatchUnset:e=>`The text says ${e.stated} s`,durationUse:e=>`Use ${e.n} s`,overMax:e=>`Longer than ${e.label} allows (${e.max})`,assetsToUse:"Assets to use",browse:"Browse Assets",libraryTitle:e=>`${e.project} Assets`,libraryLoading:"Loading Assets…",libraryFailed:e=>`Couldn't read Assets: ${e.detail}`,libraryEmpty:"No assets in this project yet",libraryEmptyBody:"Add images, logos or clips from your computer, or upload them in Assets.",openAssets:"Open Assets",tryAgain:"Try again",removeAsset:e=>`Remove ${e.name}`,brandAuto:"The logo and fonts come from the brand kit automatically.",fromComputer:"From your computer…",fromComputerHint:"Only for this creative, unless you save it in Assets",fromLibrary:"From Assets",fromLibraryHint:"Files already in Assets",uploadFromComputer:"Upload from your computer",uploadInput:"Files to add to the brief",dropHere:"Drop the files to add them to this brief",uploadingAsset:e=>`Uploading ${e.name}…`,uploadAssetFailed:e=>`${e.name} was not uploaded: ${e.detail}`,dismissUpload:e=>`Dismiss the error for ${e.name}`,referenceOnly:"Only for this creative",referenceSaved:"Saved in Assets",referenceOnlyHint:e=>`${e.name} is only for this creative: click to save it in Assets too`,referenceSavedHint:e=>`${e.name} is saved in Assets: click to keep it only for this creative`,referenceFailed:e=>`Couldn't change where the file is kept: ${e.detail}`,followsBrand:e=>`Follows the ${e.project} brand`,editBrand:"Edit brand",noBrand:"No brand yet",noBrandBody:"Colours, fonts and logos keep every format consistent.",setUpBrand:"Set up the brand",brandFailed:e=>`Couldn't read the brand kit: ${e.detail}`,codebases:"Codebases for this creative",codebasesHint:"(in addition to the project's)",notesForAgent:"Notes for the agent",moreOptions:"More options",title:"Title",formatKind:"Format type",kindAll:"All",kindVideo:"Video",kindImage:"Image",searchFormats:"Search formats",selectedCount:e=>`${e.n} selected`,moreChannels:"More channels",noMatch:"No formats match",noMatchBody:"Try another word, or show every type.",showAllFormats:"Show all formats",formatsLoading:"Loading the formats…",formatsFailed:e=>`Couldn't load the formats: ${e.detail}`,linkOn:e=>`Linked: uses the same file as ${e.primary}, no extra render. Click to make a dedicated version`,linkOff:e=>`Can use the same file as ${e.primary}, at no cost. Click to link`,linkToggle:e=>`Link ${e.label} to ${e.primary}`,notLinkable:e=>`Can’t share the file of ${e.primary}: ${e.reason}`,copiesLabel:e=>`Copies of ${e.label}`,copiesLess:"One copy fewer",copiesMore:"One more copy",copiesSaid:e=>`${e.label}: ${e.n===1?"1 copy":`${e.n} copies`}`,copiesPackLimit:e=>`The store pack uses ${e.n} more of this format: 20 in all`,copiesTotal:e=>`${e.n} in total`,hiddenChosen:e=>e.n===1?"1 chosen format is hidden by the filter":`${e.n} chosen formats are hidden by the filter`,packFull:e=>`${e.label}: the copies and the store pack ask for more than ${e.max}. Lower its copies or the pack's screenshots.`,copiesHint:"Copies: more images or videos of this format on the same brief, each a different one (not variants)",customTile:"Custom",customTileHint:"Define a format",customTileAria:"New custom format",customEditAria:e=>`Edit ${e.label}`,customNewTitle:"New custom format",customEditTitle:"Edit custom format",customName:"Name",customNamePlaceholder:"e.g. Lobby totem",customKind:"Type",customKindImage:"Image",customKindVideo:"Video",customWidth:"Width",customHeight:"Height",customPx:"px",customRatio:"Ratio",customRatioAria:e=>`Ratio ${e.ratio}: the height follows the width`,customRatioHint:"A ratio sets the height from the width.",customDuration:"Maximum length",customSecondsUnit:"seconds",customDurationHint:"Empty: no limit of its own.",customInUse:e=>`${e.count===1?"A creative uses":`${e.count} creatives use`} this format: its type and size stay as they are. To change them, create a new format.`,customUnreadable:e=>`${e.n===1?"A creative cannot be read and might use":`${e.n} creatives cannot be read and might use`} this format: its type and size stay locked.`,customErrName:"Give the format a name",customErrNameTaken:"A custom format already has this name",customErrSize:"A whole number from 16 to 8192",customErrDuration:"Whole seconds from 1 to 3600, or empty",customErrEven:"A video needs an even number of pixels on each side",customErrVideoMax:"A video is at most 4096 px on each side",customErrDurationShort:e=>`A creative uses this format for ${e.sec} s: no less than that`,customLongest:e=>`Creatives use it for up to ${e.sec} s.`,customUsageLoading:"Checking which creatives use this format…",customUsageFailed:"Could not check which creatives use this format: its type and size stay locked.",formatsDropped:e=>e.n===1?"A chosen format is no longer available and was taken out":`${e.n} chosen formats are no longer available and were taken out`,formatGone:"no longer available",customCreate:"Create format",customSave:"Save",customDelete:"Delete",customDeleteAsk:e=>`Delete “${e.name}”? Creatives that use it keep it.`,customDeleteConfirm:"Delete format",customFailed:e=>`Could not save the format: ${e.detail}`,customDeleteFailed:e=>`Could not delete the format: ${e.detail}`,customAdded:e=>`“${e.name}” added to Custom formats and selected`,customDeleted:e=>`“${e.name}” deleted`,customHidden:e=>`“${e.name}” removed from the formats: the creatives that use it keep it`,summary:e=>[e.formats===1?"1 format":`${e.formats} formats`,[e.videos&&(e.videos===1?"1 video render":`${e.videos} video renders`),e.images&&(e.images===1?"1 image":`${e.images} images`)].filter(Boolean).join(" + ")].join(" · "),libraryPartial:e=>`Part of Assets could not be read: ${e.detail}`,pickFormat:"Pick at least one format",summaryHint:"It runs in the background: you'll get a notification when it's ready.",similar:e=>`Similar creatives used about ${e.range} tokens`,createFailed:e=>`Couldn't create the creative: ${e.detail}. Check the brief and try again.`,draftSaved:e=>`Draft “${e.title}” saved`,open:"Open",saveDraft:"Save draft",generate:"Generate"},formatUi:{video:"video",image:"image",unknownPreset:e=>`${e.id}: unknown preset`,missingIn:e=>`Missing in v${e.n}`,unverified:"unverified",other:"Other"},storePack:{cardTitle:"App store pack",cardBody:"A series of App Store and Google Play screenshots, with an optional preview video.",cardAction:"Set up the pack",entryTitle:"Store pack",entryHint:"Screenshots and a preview for the App Store and Google Play",entryOn:e=>`Store pack · ${e.count} ${e.count===1?"screenshot":"screenshots"}`,entryAria:e=>`Store pack, ${e.count} ${e.count===1?"screenshot":"screenshots"}: edit`,entryAdd:"Add the store pack to the formats",entryEdit:"Edit",entryRemove:"Remove",entryRemoveAria:"Remove the store pack",removeTitle:"Remove the store pack?",removeBody:"The pack instances leave the formats; versions already made stay in the history. Formats picked by hand do not change.",removeConfirm:"Remove the pack",confirmAdd:"Add to the formats",confirmUpdate:"Update the pack",saveFailed:e=>`The store pack could not be saved: ${e.detail}`,groupTitle:"Store pack",exportChoice:{title:"What do you want to export?",pack:"Store pack",packHint:"The App Store and Google Play folders, with the store checks.",formats:"Format files",formatsHint:"One file per format, from the ★ versions: the ones outside the pack too."},title:"App store pack",creativeTitle:e=>`${e.name} · App store pack`,steps:{app:"App",stores:"Stores and devices",screens:"Screenshots",preview:"Preview video",review:"Review"},stepsLabel:"Steps",stepOf:e=>`Step ${e.n} of ${e.total}: ${e.name}`,back:"Back",next:"Next",generate:"Generate",saveDraft:"Save draft",appName:"App name",tagline:"One line about the app",taglineHint:"(optional)",nameRequired:"Enter the name of the app",stores:"Stores",devicesFor:e=>`Devices for ${e.store}`,required:"Required",optional:"Optional",devices:{iphone69:"iPhone 6.9″",ipad13:"iPad 13″",phone:"Phone",tablet:"Tablet",feature:"Feature graphic"},oneStore:"Choose at least one store",count:"Number of screenshots",countRange:e=>`${e.min} to ${e.max} for the chosen stores`,screenshot:e=>`Screenshot ${e.n}`,caption:"Caption (optional)",captionOf:e=>`Caption of screenshot ${e.n}`,captionHint:"Captions are optional: the agent writes the empty ones from the brief. A long caption is fine: the agent shortens it.",screen:"App screen",noScreen:"No screen yet",chooseScreen:e=>`Choose the app screen of screenshot ${e.n}`,changeScreen:"Change",removeScreen:e=>`Remove the screen of screenshot ${e.n}`,pickerTitle:"App screen from Assets",pickerUpload:"Upload an image",pickerUploadInput:"Image file to upload",pickerUploading:"Uploading…",pickerEmpty:"Assets has no images yet. Upload a screenshot of the app.",pickerLoading:"Loading Assets…",pickerList:"Images from Assets",pickerLoadFailed:e=>`Assets could not be loaded: ${e.detail}`,pickerUploadFailed:e=>`The upload failed: ${e.detail}`,pickerWrongFile:"Only images (PNG, JPEG or WebP) can be an app screen",pickerClose:"Close",noScreenChoice:"No app screen",noScreenOf:e=>`Screenshot ${e.n}: no app screen`,screenMissing:e=>`Choose an app screen, or “No app screen”, for: ${e.list}`,reviewNoScreenRows:e=>`Without an app screen: screenshots ${e.list}`,closeTitle:"Discard this pack?",closeBody:"The choices you made in this pack will be lost.",keepEditing:"Keep editing",discard:"Discard",previewQuestion:"Add a preview video?",previewYes:"Yes",previewNo:"No",previewHint:"A short video that tells the same story, made for each chosen store.",reviewApp:"App",reviewStores:"Stores",reviewDevices:"Devices",reviewShots:"Screenshots",reviewPreview:"Preview video",reviewFormats:e=>e.count===1?"1 format will be created":`${e.count} formats will be created`,reviewNoScreen:"no app screen",reviewFromBrief:"caption from the brief",yes:"Yes",no:"No",createFailed:e=>`The pack could not be created: ${e.detail}`,draftSaved:e=>`“${e.title}” saved as a draft`,export:{action:"Export store pack",title:e=>`Export the store pack of “${e.title}”`,heading:"Export the store pack",sub:e=>`Version ${e.n} · one folder per store, language and device`,subGroup:"Each screenshot from the final selection of the variants, one folder per store, language and device",saveTo:"Save to",folder:"Destination folder",placeholder:"Absolute path of a folder",noFolder:"No folder chosen",choose:"Choose folder…",pickTitle:"Choose the folder for the store pack",lastUsed:"last used",languages:"Languages",original:e=>`${e.language} (original)`,notTranslated:"not translated: will fail",needsReview:"outdated or with problems: may fail",run:e=>e.count===1?"Export 1 file":`Export ${e.count} files`,files:"Files",fileOf:e=>`${e.group} · ${e.file}`,excluded:"Excluded",nav:"Stores and devices",selectedOf:e=>`${e.n} of ${e.of} ${e.of===1?"file":"files"} selected`,selectAll:"Select all",selectNone:"None",shots:e=>e.count===1?"1 screenshot":`${e.count} screenshots`,video:e=>`video · ${e.size}`,image:e=>`image · ${e.size}`,size:e=>`${e.width} × ${e.height}`,noFiles:"This version has no files of the pack to export.",running:"Preparing the pack…",cancel:"Cancel",finish:"Done",writtenTitle:e=>e.count===1?"1 file written":`${e.count} files written`,failedTitle:e=>e.count===1?"1 file not exported":`${e.count} files not exported`,notInPack:e=>e.count===1?"Not part of the pack (not exported):":`Not part of the pack (not exported, ${e.count}):`,noneWritten:"Nothing was written: every file failed its check.",folderLine:e=>`Folder: ${e.folder}`,rendered:e=>e.count===1?"1 format was rendered first":`${e.count} formats were rendered first`,reason:e=>`${e.file}: ${e.reason}`,notAPack:"This creative has no store pack to export.",failed:e=>`The export failed: ${e.detail}`}},languages:{title:"Languages",button:"Languages",sub:e=>`Translations of v${e.n} · original language: ${e.primary}`,noCompositions:e=>`v${e.n} has no compositions to translate`,formatsLabel:"Formats",pick:e=>`Translate to ${e.language}`,statusNone:"Not translated",statusOk:"Translated",statusStale:e=>`${e.count} outdated`,statusProblems:e=>e.count===1?"1 problem":`${e.count} problems`,voiceLabel:"Voice",voiceFor:e=>`Voice in ${e.language}`,voiceTranslate:"Translate",voiceOriginal:"Keep original",voiceMuted:"Mute",voiceTranslateFromPanel:"The voice is translated when you press Translate in the Languages panel",voiceReason:{off:"the voice service is off for this creative",noKey:"there is no key for the voice service",missingPermission:"the key lacks the text-to-speech permission",declined:"the confirmation was declined",failed:"the generation failed"},voiceUnavailable:e=>`The voice cannot be translated: ${e.reason}`,voiceFellBack:e=>`Last time the voice stayed as it was: ${e.reason}`,noScriptCount:e=>e.count===1?"1 voice clip can't be translated: it has no known script":`${e.count} voice clips can't be translated: they have no known script`,noScriptTitle:"Voice clips that can't be translated",noScriptItem:e=>`${e.clip}: no known script, it keeps the original voice`,review:e=>`Review ${e.format}`,confirmations:"Confirmations",working:"The agent is translating…",loading:"Loading…",translate:e=>e.count===1?"Translate 1 language":`Translate ${e.count} languages`,started:e=>e.count===1?"Translation started":`Translation of ${e.count} languages started`,notInBrief:"This language is not in the creative's brief any more: add it in the brief first",busy:"The agent is working on this creative: edit the translation when it has finished",tableTitle:e=>`${e.language} · ${e.format}`,problemsLabel:"Problems of this translation",warningsLabel:"Warnings",nothingToTranslate:"This format has no text to translate",colSource:"Original",colTranslation:"Translation",colStatus:"State",colFit:"Fit",translationOf:e=>`Translation of ${e.clip}`,fitOf:e=>`Text size of ${e.clip}`,rowNotTranslated:"Not translated",rowStale:"Outdated",rowOverflow:"Outside the box",rowOk:"OK",save:"Save translation",saved:"Saved",previewLanguage:"Language of the preview",previewOriginal:e=>`Original (${e.language})`,previewLoading:"Loading the translation…",previewFailed:e=>`The translation cannot be shown: ${e.detail}`,flaggedLabel:"Clips to check",flagStale:"outdated",flagOverflow:"outside the box",flagNotTranslated:"not translated",flagVoice:"voice problem",flagAsset:"file changed",editorPreviewNote:"You are previewing a translation: editing works on the original text. Choose Original to go back to the draft.",briefTitle:"Languages",briefHint:"The language of the creative and the ones it is translated into. Without a language, the creative is not translated.",briefPrimary:"Original language",briefNone:"None (one language)",briefExtra:e=>`Translate into (${e.count} of ${e.max})`,briefExtraLabel:"Languages to translate into",briefFull:e=>`At most ${e.max} languages`,briefRtl:"Right-to-left languages are not supported yet: the layout would have to be mirrored, and only text and voice change in a translation",renderTitle:"Render",renderSub:e=>`Formats: ${e.formats}`,renderLanguages:"Languages to render",renderOriginal:e=>`Original (${e.language})`,renderAction:"Render",renderWithSubtitles:"with subtitles",renderAnyway:"Render anyway",needsForceTitle:"These translations have open problems or outdated texts:",exportLanguages:"Languages"},paidBatch:{intro:e=>e.count===1?`Motion Studio will make 1 paid call to ${e.provider}.`:`Motion Studio will make ${e.count} paid calls to ${e.provider}.`,provider:e=>e.provider,total:e=>`${e.chars} characters in all`,estimate:e=>`Estimate ${e.estimate}`,noEstimate:"Estimate not available",introMixed:e=>`Motion Studio will make about ${e.count} paid calls: ${e.list}.`,estimatedCalls:"Estimated calls (price not known)",variantItems:"Calls per variant",itemSeconds:e=>`${e.seconds} s`,calls:"Calls",chars:e=>`${e.chars} characters`,approve:"Approve",decline:"Decline"},formatView:{stage:e=>`Preview of ${e.label}`,briefOff:e=>`Brief says ${e.n} s`,briefOffBody:e=>`This version lasts ${e.actual} s and the brief asks for ${e.n} s, so the check marks it incomplete. If ${e.actual} s is right, put it in the brief: the version is checked again, without a new turn.`,briefOffEdited:"The duration comes from a direct edit.",briefOffFix:e=>`Use ${e.n} s in the brief`,briefOffFixed:e=>`Brief updated: ${e.n} s`,briefOffFailed:e=>`The brief could not be updated: ${e.detail}`,scenes:"Scenes",scenesSoon:"Edit scenes, text and timing directly — coming with the timeline",play:"Play (Space)",pause:"Pause (Space)",prevFrame:"Previous frame (←)",nextFrame:"Next frame (→)",transport:"Playback",loop:"Loop",speed:"Playback speed",speedValue:e=>`${e.n}×`,position:"Position",positionText:e=>`${e.time} of ${e.total}`,commentAt:e=>`Click the spot of the frame at ${e.time}`,commentFrame:e=>`Comment on the frame at ${e.time}`,commentImage:"Click the image to comment on a spot",keys:"Space plays · ← → one frame · click the paused frame to comment",keysLocked:"Space plays · ← → one frame",marker:e=>`Comment ${e.n} at ${e.time}`,pinAt:e=>`At ${e.time}`,unknownTitle:e=>`“${e.id}” isn’t a format of this creative`,unknownSub:"It may have been removed from the brief. Go back to all formats to pick one.",videoFailed:"Can’t play this video. It may still be rendering, or the file was moved. Try again in a moment.",zoom:"Zoom",fit:"Fit",actual:"Actual size (100%)",chat:"Chat"},editor:{edit:"Edit",editOf:e=>`Edit ${e.label} directly`,back:"Back to the preview",editing:e=>`Editing ${e.name}`,editingPrimary:e=>`Editing ${e.primary} · also used by ${e.also}`,alsoUsedBy:e=>`Also used by ${e.list}`,version:e=>`v${e.n}`,meta:e=>`${e.size} · ${e.seconds} s · ${e.fps} fps`,metaImage:e=>`${e.size} · still image`,loading:"Opening the editor…",loadingVideo:"Loading the video…",loadFailed:e=>`Can't open the editor: ${e.detail}`,legacy:"This version has no composition to edit. Ask the agent to make it again, or go back to the preview.",busyAgent:"The agent or a render is working on this creative: direct edits are available again when it has finished.",olderVersion:e=>`You are looking at v${e.n}, an earlier version: only the latest one (v${e.latest}) can be edited.`,editLatest:e=>`Edit v${e.n}`,saveFromLatest:"To save your edits, go back to the version you are editing",commentSpot:"Comment a spot",commentSpotTip:"Then click a spot of the picture and write a note for the agent (P)",commentTools:"Comments",commentLayer:"Comment on layer",commentElement:"Comment on element",commentLayerTip:"Write a note for the agent about the selected layer (C)",commentElementTip:"Write a note for the agent about the selected element of the layer (C)",commentLayerNeeds:"Select a layer first, in Layers or on the picture",undoTip:e=>`Undo (${e.keys})`,redoTip:e=>`Redo (${e.keys})`,snapTip:"Snap to guides: a layer you move or resize lines up with the edges and the centre of the picture",pendingComments:e=>e.n===1?"1 comment waiting to be sent":`${e.n} comments waiting to be sent`,commentSpotLocked:e=>`Comments go on v${e.n}`,scenes:"Scenes",layers:"Layers",stage:e=>`Stage of ${e.label}`,inspector:"Inspector",chat:"Chat",panelTabs:"Side panel",timeline:"Timeline",scenesSoon:"The scenes of this composition appear here.",layersSoon:"The layers of this image appear here.",layersList:"Layers of this image",layersAsk:"Ask the agent to add layers",layersEmpty:"This image has no layers.",layerExpand:e=>`Show the elements of ${e.name}`,layerCollapse:e=>`Hide the elements of ${e.name}`,layerElements:e=>`Elements of ${e.name}`,layerSmall:"Small version",layerDark:"Negative for dark backgrounds",zoom:"Zoom",zoomFit:"Fit",zoomFitTitle:"Fit the image to the window",zoomValue:e=>`${e.pct}%`,inspectorSoon:"Select a clip to change its text, position and style.",draft:e=>e.n===1?"Draft · 1 edit":`Draft · ${e.n} edits`,noEdits:"No changes yet",saveAs:e=>`Save as v${e.n}`,saving:"Saving…",saved:e=>`✓ Saved as ${e.name} v${e.n}`,saveFailed:e=>`Couldn't save: ${e.detail}`,saveProblems:e=>`${e.count} problems stop this draft from being saved`,discard:"Discard",discardTitle:"Discard the draft?",discardBody:e=>e.n===1?"The edit you made will be lost.":`The ${e.n} edits you made will be lost.`,discardConfirm:"Discard edits",keepEditing:"Keep editing",undo:"Undo",redo:"Redo",leaveTitle:"Save your edits first?",leaveBody:e=>e.n===1?"You have 1 edit that is not saved as a version.":`You have ${e.n} edits that are not saved as a version.`,leaveBodyChat:"Your message starts from the latest saved version: edits you have not saved would not be part of it.",leaveSave:e=>`Save as v${e.n}`,leaveDiscard:"Discard",leaveKeep:"Keep editing",leaveSaveFailed:e=>`The draft was not saved, so you stay here: ${e.detail}`,baseChangedTitle:"This format changed while you were editing",baseChangedBody:e=>`${e.name} has a newer version (v${e.n}). Your draft is kept: it cannot be saved on top of it.`,reopenLatest:"Reopen on the latest version",reopenTitle:"Discard the draft and reopen?",reopenBody:"Your edits will be lost and the editor will open on the latest version.",reopenConfirm:"Discard and reopen",keysDeleteClip:"Ask the agent to remove clips",staging:e=>`Preparing ${e.file}…`,stagingLong:"Large videos are converted first: this can take a while. You can keep editing.",saveWhileStaging:"Wait for the file being added to be ready, then save.",stagedRestored:"The files added to the draft are ready again in the preview.",stagedLost:e=>`A file added to the draft is no longer available (${e.file}): choose it again.`,stageFailed:e=>`Couldn't add the file: ${e.detail}`,previewRefused:e=>`The preview can't show this draft: ${e.text}`,previewBusy:"Opening the preview…",previewFailed:e=>`The preview isn't available: ${e.detail}`,sessionRenewed:"The preview was renewed; your edits are still here.",snap:"Snap to guides and edges",locked:"Locked",lockedStage:"Locked: unlock it to move it",coords:e=>`${e.x} · ${e.y} · ${e.w} × ${e.h}`,selectionBox:e=>`Selected: ${e.clip}`,moveHandle:"Move",resizeNw:"Resize from the top left corner",resizeNe:"Resize from the top right corner",resizeSe:"Resize from the bottom right corner",resizeSw:"Resize from the bottom left corner",rotateHandle:"Rotate (Shift snaps to 15°)",sceneLength:e=>`${e.seconds} s`,scenesAria:"Scenes of this composition",inThisScene:"In this scene",inSceneNone:"No clips in this scene",reorderScene:e=>`Reorder ${e.name}: drag, or press ↑ or ↓`,reorderedTo:e=>`${e.name} moved to position ${e.n} of ${e.total}`,tlZoom:"Zoom",tlZoomValue:e=>`${e.n}×`,tlRipple:"Ripple: a clip that grows pushes the later scenes",tlRuler:"Timeline ruler: drag to move the playhead",tlPlayhead:"Playhead: drag it to scrub through the video",tlTracks:"Tracks",tlSceneAt:e=>`${e.name}, from ${e.time}`,trackName:e=>`${e.kind} ${e.n}`,kindVisual:"Visual",kindVideo:"Video",kindText:"Text",kindAudio:"Audio",kindSubtitles:"Subtitles",hideTrack:e=>`Hide ${e.name}`,showTrack:e=>`Show ${e.name}`,lockTrack:e=>`Lock ${e.name}`,unlockTrack:e=>`Unlock ${e.name}`,muteTrack:e=>`Mute ${e.name}`,unmuteTrack:e=>`Unmute ${e.name}`,clipText:"text",clipShape:"shape",clipImage:"image",clipSvg:"vector image",clipVideo:"video",clipHtml:"html",clipAudio:"audio",clipSubtitles:"subtitles",clipBar:e=>`${e.name}, ${e.kind}, from ${e.start} to ${e.end}`,clipBarHidden:"hidden",inspEmptyTitle:"Select a clip",inspEmptySub:"Click a clip in the timeline or a scene on the left to change it here.",inspLocked:"Locked: unlock it in the timeline to edit it",inspHeader:e=>`${e.name} · ${e.kind}`,secTiming:"Timing",secBox:"Box",secText:"Text",secShape:"Shape",secMedia:"Media",secAudio:"Audio",secAnimation:"Animation",secParams:"Parameters",secSvg:"SVG content",svgColors:"Colours",svgTexts:"Texts",svgElements:"Elements",svgElementList:"Elements of the SVG",svgLoading:"Reading the SVG…",svgCannot:"This SVG can’t be edited here",svgRefused:"The change was not applied",svgColorCount:e=>`${e.hex}, used ${e.n} ${e.n===1?"time":"times"}`,svgColorNew:e=>`New colour for ${e.hex}`,svgNoColors:"No colours to change",svgNoTexts:'No editable texts: lettering drawn as shapes is changed by the agent (select the element, then "Ask the agent")',svgNoElements:"No elements",svgText:e=>`Text ${e.n}`,svgTextFonts:"Text in an SVG depends on the fonts installed: where the font is missing it looks different.",svgShow:e=>`Show ${e.name}`,svgHide:e=>`Hide ${e.name}`,svgFill:"Fill",svgStroke:"Stroke",svgElementKind:"SVG element",svgCrumbs:"Layer and element",svgBackToLayer:e=>`Back to the layer ${e.name}`,secSvgElement:"Element",svgVisible:"Visible",svgPaint:"Colours of the element",svgNoFill:"No fill",svgNoStroke:"No stroke",svgFillInherited:"From its group",svgPaintOther:"Gradient or pattern",svgAddFill:"Add fill",svgAddStroke:"Add stroke",svgSetColour:"Set a colour",svgRemoveFill:"Remove the fill",svgRemoveStroke:"Remove the stroke",svgPaletteFor:e=>`Swatches for: ${e.field}`,svgOutlined:"This SVG has no editable text: its lettering is drawn as shapes. To change the words, ask the agent.",svgAskElement:"Ask the agent to change it",svgAskElementTip:e=>`Write what to change in ${e.name}: the comment goes to the agent with your next message`,svgOtherVersions:"The other versions of the logo do not change: edit them from the layer list",svgElementName:e=>`${{g:"Group",path:"Path",rect:"Rectangle",circle:"Circle",ellipse:"Ellipse",line:"Line",polyline:"Polyline",polygon:"Polygon",text:"Text",use:"Reference"}[e.tag]??e.tag} ${e.n}`,tagIn:"IN",tagDur:"DUR",tagOut:"OUT",fIn:"In point (seconds)",fDur:"Duration (seconds)",fOut:"Out point (seconds)",tagX:"X",tagY:"Y",tagW:"W",tagH:"H",tagRot:"ROT",fX:"X position",fY:"Y position",fW:"Width",fH:"Height",fRotation:"Rotation (degrees)",fOpacity:"Opacity",fOpacityField:"Opacity (0 to 1)",fContent:"Content",fFont:"Font",fWeight:"Weight",fSize:"Size",fColor:"Colour",fColorHex:"Hex colour",fAlign:"Alignment",alignLeft:"Left",alignCenter:"Centre",alignRight:"Right",fontsComposition:"In this composition",fontsBrand:"Brand kit",fontNoFile:"No font file in the brand kit",fontAdding:e=>`Adding ${e.family}…`,fFill:"Fill",fRadius:"Corner radius",fVolume:"Volume",fTrimStart:"Trim start (seconds)",fFadeIn:"Fade in (seconds)",fFadeOut:"Fade out (seconds)",fFile:"File",replace:"Replace…",swatchBrand:"Brand palette",swatchComposition:"In this composition",animIn:"In",animOut:"Out",animNone:"None",animDuration:"Duration (seconds)",animCustom:"Custom animation · ask the agent to change it",animAsk:"Ask the agent",animAskTip:e=>`Write what to change in the ${e.slot} animation of ${e.name}: the comment goes to the agent with your next message`,presetFadeIn:"Fade in",presetFadeOut:"Fade out",presetSlideUp:"Slide up",presetSlideDown:"Slide down",presetSlideLeft:"Slide left",presetSlideRight:"Slide right",presetPopIn:"Pop in",presetScaleIn:"Scale in",presetWipe:"Wipe",pickerTitle:"Choose a file",pickerFor:e=>`Choose a ${e.kind} file`,pickerEmpty:e=>`No ${e.kind} files in Assets yet. Upload one.`,pickerLoading:"Loading Assets…",pickerLoadFailed:e=>`Can’t load Assets: ${e.detail}`,pickerUpload:"Upload…",pickerUploading:"Uploading…",pickerUploadFailed:e=>`Couldn’t upload the file: ${e.detail}`,pickerUploadInput:"File to upload",pickerClose:"Close",pickerList:"Files from Assets",pickerPreparing:e=>`Preparing ${e.file}…`,shortVideo:e=>`This video lasts ${e.video} s, but the clip needs ${e.needed} s from its trim start. The end of the clip would be empty.`,fitClip:"Fit clip to video",fitNoRoom:e=>`The trim start (${e.trim} s) is at or past the end of this video (${e.video} s): lower the trim start first`,pickerWrongKind:e=>`The uploaded file is a different kind: this clip needs ${e.kind}. Nothing was replaced`,weightNotOffered:e=>`Weight ${e.weight} is not one this font declares: choose one from the list`,kindImageFile:"image",kindSvgFile:"vector image",kindVideoFile:"video",kindAudioFile:"audio"},creative:{resumeNote:e=>`Your next message continues from version ${e.n}.`,versionIncomplete:e=>`v${e.n} is incomplete:`,formatsLoadFailed:e=>`Can't load formats: ${e.detail}`},canvas:{loading:"Loading the creative…",loadFailed:e=>`Can't load this creative: ${e.detail}. Make sure Motion Studio is still running, then try again.`,tryAgain:"Try again",formats:"Formats",formatsAria:"Formats of this creative",canvasAria:"Canvas",tools:"Canvas tools",select:"Select (V)",comment:"Comment (C)",hand:"Hand (H)",zoomIn:"Zoom in",zoomOut:"Zoom out",zoomReset:e=>`Zoom ${e.pct}%, back to 100%`,safeZones:"Safe zones",safeTitle:"Safe zones",safeBody:"The shaded areas are covered by the channel’s interface. Keep text and logos out of them.",safeNone:"None of these formats has a safe zone.",safeTop:"Account name",safeBottom:"Caption and buttons",safeSide:"Buttons",commentHint:"Click a frame to comment · Esc to stop",commentStart:e=>`Comment on a spot of ${e.label}`,commentOn:e=>`Comment on ${e.label}`,openEditor:"Open editor",openEditorOf:e=>`Open the editor for ${e.label}`,rendering:"Rendering",renderingState:"Rendering…",inProgress:"In progress",boardReady:"Ready",notGenerated:"Not generated yet",seconds:e=>`${e.n} s`,largeChip:e=>`${e.size} MB · large`,largeOpen:e=>`Large file, ${e.size} MB: show the recommendation`,largeTitle:"Large file",largeDetail:e=>`${e.size} MB at ${e.mbps} Mbps. About ${e.target} Mbps is plenty for ${e.channel}.`,nothingTitle:"Nothing generated yet",nothingBody:"The brief is saved. Generate the first version when you’re ready.",generate:"Generate",generateFailed:e=>`Couldn't start the generation: ${e.detail}`,versionReady:e=>`v${e.n} is ready`,export:"Export",pin:{marker:e=>`Comment ${e.n}`,edit:e=>`Edit comment ${e.n}`,field:"Comment text",placeholder:"What should change here?",add:"Comment",save:"Save",remove:"Delete comment",atStart:"At 0:00",atStartHint:"Comments on exact frames come with the editor"},title:{rename:e=>`Rename “${e.title}” (F2)`,field:"Creative title",saveFailed:e=>`Couldn't rename the creative: ${e.detail}`},state:{needs:"Needs you",working:"Working"},panel:"Creative panel",subtitles:"Subtitles",tabs:{chat:"Chat",comments:"Comments",brief:"Brief"},comments:{emptyTitle:"No comments yet",emptySub:"Point at a format, choose Comment and click the spot.",start:"Start commenting",applied:e=>`Applied in v${e.n}`,working:"Being applied",open:"Not applied yet",noText:"No text"},brief:{goal:"Goal",message:"Key message",length:"Length",formats:"Formats",assets:"Assets",notes:"Notes",services:"Services",none:"—",edit:"Edit the brief",back:"Back to the brief"},versions:{timeline:"Versions",historyItem:"Version history",historyItemVariant:e=>`Version history of variant ${e.letter}`,timelineRow:e=>`Version ${e.n} · ${e.when} · ${e.note}`,title:"Versions",fromBrief:"From the brief",noteMore:"More",noteLess:"Less",incomplete:"Incomplete",compare:"Compare",restart:"Restart from here",restartNote:e=>`Your next change starts from v${e.n}. Later versions stay in the history.`,restarted:e=>`Next changes start from v${e.n}`,undo:"Undo",commentsOn:e=>`Comments apply to v${e.n} — use Restart from here to comment on this version.`,showInFinder:"Show in Finder",showInFolder:"Show in folder",actionFailed:e=>`That didn't work: ${e.detail}`},compare:{title:e=>`Compare ${e.label}`,label:"Compare versions",left:"Left",right:"Right",slider:"Position of the divider",noOutput:"Not in this version",view:"View",overlay:"Overlay",sideBySide:"Side by side",useForExport:e=>`★ Use v${e.n} for export`,usedForExport:e=>`★ v${e.n} is used for export`,starManual:"★ Your pick",starAuto:"★ Auto",videoFailed:e=>`Can’t play v${e.n}. The file may have been moved.`}},formatVersions:{badge:e=>`${e.label}: v${e.n} is used for export. Open its versions`,count:e=>e.n===1?"1 version":`${e.n} versions`,viewing:e=>`viewing v${e.n}`,newer:e=>`v${e.n} newer`,title:e=>`${e.label} versions`,viewRow:e=>`View v${e.n} · ${e.when} · ${e.note}`,star:e=>`Use v${e.n} for export`,starred:e=>`v${e.n} is used for export`,starToast:e=>`v${e.n} will be exported for ${e.label}`,manual:"Your pick",auto:"Auto",autoTip:"Starred automatically: the newest version without problems",resetAuto:"Reset to Auto",resetToast:e=>`${e.label} is starred automatically again`,pickedByYou:"Picked by you",automatic:"Automatic",range:e=>`v${e.n}–v${e.last}`,unchangedUntil:e=>`unchanged up to v${e.last}`,onlyChanges:"Only the versions that changed this format are listed here.",follows:e=>`follows ${e.primary}`,followsStar:e=>`follows ${e.primary} ★ v${e.n}`,followsNote:e=>`${e.label} uses the file of ${e.primary} and its ★: it has no versions of its own.`,linkedTo:e=>`Linked to ${e.primary}`,linkedMenu:e=>`Linked to ${e.primary}: open the link menu`,unlink:"Unlink — make a dedicated version",unlinked:e=>`${e.label} is unlinked: the next change makes its own version`,linkTo:e=>`Link to ${e.primary}`,linkHint:"Same size and kind: it can use the same file, at no cost.",linked:e=>`${e.label} now follows ${e.primary}`,fileMissing:e=>`The v${e.n} file is missing on disk, so Export can’t include this format. Star another version.`,followerMissing:e=>`No identical copy of ${e.primary} ★ v${e.n} to export. Star a ${e.primary} version that has it, or Unlink.`,followerMissingShort:"Not exportable",errors:{hashesPending:"Still computing versions, try again in a moment",pickFollower:e=>`${e.label} follows ${e.primary}: it is exported with the ★ of ${e.primary}.`,notInBrief:e=>`${e.label} is no longer in the brief. Reload the creative.`,pickNoFile:e=>`v${e.n} has no ${e.label} file: it can’t be used for export.`,pickFileMissing:e=>`The ${e.label} file of v${e.n} is missing on disk or is a link: it can’t be used for export.`,versionNotFound:e=>`v${e.n} no longer exists. Reload the creative and try again.`,linkSelf:"A format can’t follow itself.",linkChain:e=>`${e.label} can’t follow ${e.primary}: a linked format can’t have followers, and a format with followers can’t follow another.`,linkIncompatible:e=>`${e.label} can’t follow ${e.primary}: ${e.reason}.`,jobRunning:"Wait for the current generation to finish, then try again.",formatsNotInBrief:"None of the chosen formats is in the brief any more: choose them again.",failed:e=>`That didn’t work: ${e.detail}`}},services:{title:"Services",hint:"Which external services the agent may use for this creative. Generate in Assets is not affected.",kinds:{images:"Images",voice:"Voice",music:"Music",sfx:"Sound effects"},choices:{auto:"Auto",openai:"OpenAI",elevenlabs:"ElevenLabs",stock:"Stock only",none:"Off"},group:e=>`${e.kind}: service`,needsKey:e=>`${e.choice} needs the ${e.provider} key: add it in Settings → Paid services.`,stockProviders:"Pexels or Unsplash",missingPermission:e=>`${e.choice} is unavailable: the ${e.provider} key lacks the permission ${e.permission}. Enable it at ${e.provider}, then test the key again in Settings → Paid services.`,keyRefused:e=>`${e.choice} is unavailable: ${e.provider} refused the saved key or the request. Check the key, or a region, organization or firewall restriction, in Settings → Paid services.`,chip:"Services",chipAria:e=>`Services: ${e.summary}. Change which external services the agent may use`,summaryAuto:"all auto",summarySkipped:e=>`${e.kind}: ${e.provider} unavailable`,autoSkipped:e=>`${e.provider} ${e.kind.toLowerCase()}: ${e.why} · Auto skips it until the key is fixed.`,whyPermission:e=>`missing permission ${e.permission}`,whyKeyRefused:"the provider refused the saved key or the request",testInSettings:"Test in Settings",openSettings:"Add a key in Settings",summaryPart:e=>`${e.kind} ${e.choice}`,nextTurn:"Changes apply from the next message.",busy:"You can change the services when the generation ends.",saving:"Saving…",saveFailed:e=>`Can't save the services: ${e.detail}`},conversation:{agentAction:"Agent action",atSeconds:e=>`@ ${e.time}s`,goal:"Goal",length:"Length",lengthNone:"None",lengthFor:"Length of the video formats",assets:"Assets (comma-separated)",notes:"Notes",formats:"Formats",saveAndRegenerate:"Save and regenerate",legacyConvertNotice:"This creative was made before editable compositions. Regenerating converts every format into a composition with the agent: it costs more tokens this once, and the formats may look slightly different.",viewVersion:e=>`View v${e.n}`,helperRow:{working:"at work…",workingStep:e=>`at work · ${e.step}`,ready:e=>`v${e.n} ready`,incomplete:e=>`v${e.n} incomplete`,unchanged:"no change",failed:"did not succeed",stopped:"stopped",done:"done"},groupTurn:{workedOn:e=>`Worked on: ${e.list}`,incomplete:e=>`v${e.n} incomplete`,unchanged:"no change",unchangedAt:e=>`no change, v${e.n}`,stopped:"stopped",failed:"did not succeed",turnStopped:"Stopped"},openVariantVersion:e=>`Open ${e.letter} · v${e.n}`,removeComment:e=>`Remove comment ${e.n}`,editComment:e=>`Edit comment ${e.n}`,requestChange:"Request a change",chipClip:e=>`${e.format} · "${e.name}" clip`,chipRange:e=>`${e.format} · ${e.a}–${e.b} s`,chipClipRange:e=>`${e.format} · "${e.name}" clip · ${e.a}–${e.b} s`,chipClipAnimIn:e=>`${e.format} · "${e.name}" clip · in animation`,chipClipAnimOut:e=>`${e.format} · "${e.name}" clip · out animation`,chipClipElement:e=>`${e.format} · "${e.element}" in "${e.name}"`,noteTitleAnimIn:e=>`Comment on the in animation of "${e.name}"`,noteTitleAnimOut:e=>`Comment on the out animation of "${e.name}"`,noteTitleElement:e=>`Comment on "${e.element}" in "${e.name}"`,commentWaiting:"Comment added: it goes to the agent with your next message (Chat tab)",clipComment:"Comment on clip",clipCommentNeeds:"Select a clip to comment on it",clipPick:"Comment on a clip",clipPickNone:"No clip at this time",rangeHint:"Shift + drag on the ruler to comment on a time range",rangeSpan:e=>`Comment on ${e.a}–${e.b} s${e.note?`: ${e.note}`:""}`,onlyOnVersion:e=>`Comments apply to v${e.n}: open that version to comment.`,noteTitleClip:e=>`Comment on "${e.name}"`,noteTitleRange:e=>`Comment on ${e.a}–${e.b} s`,noteLabel:"Your comment",noteAdd:"Add comment",noteSave:"Save comment",rangeComment:"Comment on range",rangeDialogTitle:"Comment on a time range",rangeStart:"Start",rangeEnd:"End",rangeInvalid:"The end must be after the start",rangeContinue:"Continue",rangeBubble:"Range selection",rangeBubbleAction:"Comment",rangeBubbleEsc:"Esc cancels",rangeTip:e=>`Comment on range · ${e.keys} sets in and out at the playhead · drag the ruler to pick one`,noteCancel:"Cancel"},labels:{colorRoles:{primary:"Primary",secondary:"Secondary",accent:"Accent",background:"Background",text:"Text",other:"Other"},fontRoles:{heading:"Headings",body:"Body",accent:"Accent",other:"Other"},logoVariants:{primary:"Primary",secondary:"Secondary",mono:"Monochrome",icon:"Icon",other:"Other"},logoBackgrounds:{light:"Light",dark:"Dark",any:"Any"},describing:"Describing…",analyzing:"Analyzing…",describeFailed:e=>`Description failed: ${e.error??"unknown error"}`,analysisFailed:e=>`Analysis failed: ${e.error??"unknown error"}`},brand:{sections:"Brand sections",nav:{overview:"Overview",colors:"Colors",type:"Typography",logos:"Logos",voice:"Voice",sound:"Sound",photo:"Photo style",guidelines:"Guidelines"},loadFailed:e=>`Couldn't load the brand: ${e.error}`,retry:"Try again",kitUnreadable:e=>`brand/brand-kit.json is unreadable. Fix or delete it to continue. (${e.error})`,kitLocked:"Editing is off until the file is fixed.",undo:"Undo",save:{saving:"Saving…",saved:"Saved",allSaved:"All changes saved",failed:e=>`Not saved: ${e.error}`,retry:"Retry"},overview:{learnedFrom:e=>`Learned from ${e.hosts} · ${e.when}`,notAnalyzed:"Not analyzed yet",intro:"Colors, fonts, logos and rules the agent follows in every creative.",details:"Details"},colors:{hint:"Click a swatch to edit",add:"+ Add color",newName:"New color",edit:e=>`Edit color ${e.name}`,popTitle:"Edit color",name:"Name",hex:"Hex",hexInvalid:"Use 6 hex digits, e.g. 1B1913",role:"Role",remove:"Remove",removed:e=>`${e.name} removed`,contrast:e=>`Text in ${e.name}: contrast ${e.ratio}:1`,empty:"No colors yet. Add the brand palette, or analyze a website."},fonts:{hint:"Font files live in the project, so renders always match",add:"+ Add manually",addGoogle:"+ Add from Google Fonts",google:{title:"Add from Google Fonts",search:"Search fonts",searchHint:"Search by name",category:"Category",categoryAll:"All categories",categories:{"Sans Serif":"Sans serif",Serif:"Serif",Display:"Display",Handwriting:"Handwriting",Monospace:"Monospace"},results:"Matching fonts",searching:"Searching…",empty:"No font matches this search.",failed:e=>`Couldn't search fonts: ${e.error}`,fallback:"The Google Fonts catalog is not available right now. Type the exact family name to look it up.",stale:"Showing a saved copy of the catalog: it may be out of date.",previewFailed:"Preview unavailable",variable:"Variable",choose:"Choose a font on the left to pick its weights.",weights:"Weights",weight:e=>`Weight ${e.weight}`,italic:"Include italic",role:"Role",license:"Open license (OFL or Apache 2.0): free for commercial use.",add:"Add to the brand",adding:"Adding…",added:e=>`${e.family} added to the brand`,updated:e=>`${e.family} updated: weights added`,addFailed:e=>`Couldn't add the font: ${e.error}`,close:"Close"},newFamily:"New font",inProject:"✓ File in the project",noFile:"No font file",noPreview:"Preview unavailable: add the font file to the project",loadFailed:"Couldn't load the font file: preview in a system font",specimen:"Aa Bb Cc 0123",sample:"The quick brown fox jumps over the lazy dog",edit:e=>`Edit font ${e.family}`,popTitle:"Edit font",family:"Family",familyNormalized:e=>`Kept the first family of the CSS stack: ${e.family}`,familyRequired:"Enter a family name",role:"Role",weights:"Weights",weightsHint:"e.g. 400, 700",file:"Font file",noFileOption:"No file",noFontAssets:"Upload .ttf, .otf or .woff files on the Assets tab to link them here.",remove:"Remove",removed:e=>`${e.family} removed`,empty:"No fonts yet."},logos:{add:"+ Add logo",upload:"Upload a file…",fromAssets:"From Assets",noAssets:"No images in Assets yet",edit:e=>`Edit logo ${e.file}`,popTitle:"Edit logo",variant:"Variant",background:"Background",onLight:"On light",onDark:"On dark",onAny:"Any background",remove:"Remove",removed:"Logo removed",missingLight:"Missing: logo for light backgrounds",missingDark:"Missing: logo for dark backgrounds",missingLightSub:"Upload a dark version of the logo, or pick one from Assets.",missingDarkSub:"Upload a light version of the logo, or pick one from Assets.",uploadLogo:"Upload logo",uploading:"Uploading…",added:"Logo added",alt:e=>`Logo ${e.file}`},sound:{hint:"The agent follows this when it chooses music, sound effects and voices.",genre:"Genre",genrePlaceholder:"e.g. warm electronic",genreSuggestions:"Genre suggestions",genreOptions:{cinematic:"Cinematic",electronic:"Electronic",acoustic:"Acoustic",hiphop:"Hip hop",corporate:"Corporate",ambient:"Ambient",jazz:"Jazz",pop:"Pop"},energy:"Energy",energyNone:"Not set",energyLow:"Low",energyMedium:"Medium",energyHigh:"High",instruments:"Instruments",instrumentsPlaceholder:"e.g. piano",avoid:"Avoid",avoidPlaceholder:"e.g. brass",add:"Add",none:"None yet",full:"The list is full.",remove:e=>`Remove ${e.text}`,voice:"Voice",noVoice:"No brand voice chosen.",chooseVoice:"Choose a voice",changeVoice:"Change voice",clearVoice:"Remove voice",voiceOf:e=>`${e.provider} · ${e.name}`,picker:{title:"Choose the brand voice",provider:"Voice provider",providers:{elevenlabs:"ElevenLabs",openai:"OpenAI"},search:"Search voices",searchHint:"Search by name",results:"Matching voices",loading:"Loading voices…",empty:"No voice matches this search.",failed:e=>`Couldn't load the voices: ${e.error}`,noKey:e=>`${e.provider} needs an API key before you can choose a voice.`,openSettings:"Open Settings",noPreview:"No preview",play:e=>`Play preview of ${e.name}`,stop:e=>`Stop preview of ${e.name}`,previewFailed:"Couldn't play the preview.",openaiNote:"OpenAI voices have no free preview.",use:e=>`Use ${e.name}`,selected:"Selected",close:"Close"}},voice:{empty:"No tone of voice yet.",edit:"Edit",write:"Write it",save:"Save",cancel:"Cancel",placeholder:"How the brand speaks…",toneLabel:"Tone of voice",do:"Do",avoid:"Avoid",more:e=>`Show ${e.count} more`,less:"Show less",addRule:"+ Add",doPlaceholder:"Something to always do",avoidPlaceholder:"Something to avoid",doLabel:"New do rule",avoidLabel:"New avoid rule",add:"Add",removeRule:e=>`Remove rule: ${e.text}`,ruleRemoved:"Rule removed",noRules:"No rules yet."},photo:{empty:"No photo style yet.",placeholder:"Light, framing, subjects, treatment…",label:"Photo style"},guidelines:{open:"Open full document",empty:"No guidelines yet. Analyze a website, or write them yourself.",write:"Write guidelines",edit:"Edit",save:"Save",cancel:"Cancel",close:"Close",label:"Guidelines (Markdown)",discardQ:"Discard your changes to the guidelines?",discard:"Discard",keep:"Keep editing"},codebase:{kindAria:"Source type",kindSite:"From a website",kindCode:"From a codebase",emptySub:"Choose the folder of the app or site. Claude reads its code, styles and assets and proposes colors, fonts, logos and voice for you to review.",pathAria:"Codebase folder",pathPlaceholder:"/Users/yourname/dev/app",noteAria:"Note (optional)",notePlaceholder:"E.g. the design system is in /packages/ui",hint:"The agent reads the folder read-only and never opens secret files (.env, keys…).",suggestions:"Codebases of this project",suggestionTitle:e=>`Use ${e.path}`,add:"Add folder",addAndAnalyze:"Analyze",needPath:"Enter the absolute path of a folder",actions:e=>`Actions for ${e.name}`,removed:e=>`${e.name} removed`,added:"Folder added · analyze to learn from it",notesTitle:"Notes on the analysis"},sources:{title:"Sources",actions:e=>`Actions for ${e.host}`,remove:"Remove",removed:e=>`${e.host} removed`,analyzedAt:e=>`Analyzed ${e.when}`,never:"Never analyzed",inProgress:"Analysis in progress",addLabel:"Add a source",addPlaceholder:"Add a website URL",add:"Add",added:"Source added · analyze to learn from it",images:e=>e.count===1?"+ 1 image from References is included":`+ ${e.count} images from References are included`,noImages:'Check "Use for brand analysis" on References to include images.',analyze:"Analyze",analyzeAgain:"Analyze again",busyDescribe:"Assets are being described: analyze when that finishes.",needSource:"Add a website first.",empty:"No websites yet.",invalidUrl:"Enter a web address, e.g. https://www.example.com"},analysis:{title:"Learning the brand",queued:"Waiting to start…",starting:"Starting: reading the sources",phasesLabel:"Analysis phases",phases:{queued:"Starting",reading:"Reading",fonts:"Fonts",colors:"Colors",logos:"Logos",tone:"Tone",writing:"Writing",done:"Done"},phaseState:{done:"completed",current:"in progress",pending:"not started"},working:"working",progress:"Analysis progress",cancel:"Cancel",canceled:"Analysis canceled",failed:e=>`The analysis didn't finish: ${e.error}`,retry:"Try again",ready:"Brand suggestions are ready",review:"Review",readyTitle:"Suggestions ready",readySub:e=>e.count===1?"1 suggestion to review":`${e.count} suggestions to review`},health:{title:"Brand health",ok:"done",todo:"to do",palette:"Palette with roles",fonts:"Font files in the project",rules:"Do and avoid rules",lightLogo:"Logo for light backgrounds",fix:{palette:"Add colors",fonts:"Link files",rules:"Add rules",lightLogo:"Upload"}},history:{title:"Analyses",autoTitle:"Commands that ran",autoTruncated:"Only the first ones are listed.",applied:"applied",discarded:"discarded",open:"to review",undone:"undone"},empty:{title:"Teach Claude this brand",sub:"Paste the website. Claude reads it and proposes colors, fonts, logos and voice for you to review.",website:"Website",placeholder:"https://www.example.com",analyze:"Analyze",manual:"Or set it up by hand"}},brandReview:{dialog:"Review brand suggestions",title:e=>`Here's what Claude learned from ${e.hosts}`,yourSources:"your sources",sub:e=>`${e.count===1?"1 suggestion":`${e.count} suggestions`} · pick what to keep, everything stays editable afterwards`,close:"Close",groupsLabel:"Suggestion groups",groups:{colors:"Colors",fonts:"Typography",logos:"Logos",tone:"Voice",dos:"Do",donts:"Avoid",photoStyle:"Photo style",guidelines:"Guidelines"},selectAll:"Select all",deselectAll:"Deselect all",selected:e=>`${e.n} of ${e.m} selected`,assetsAdded:e=>`Also added to Assets: ${e.count===1?"1 file":`${e.count} files`}`,keep:e=>`Keep ${e.label}`,ops:{add:"New",update:"Update",remove:"Remove"},replaces:e=>`Replaces: ${e.text}`,fontNoFile:"Preview in a system font: the font file was not downloaded",fontFailed:"Preview in a system font: the font file couldn't be loaded",useGuidelines:"Use the proposed guidelines",replacesGuidelines:"Replaces the current guidelines",footnote:"Applying adds the items you keep. You can undo from the notification.",discardAll:"Discard all",confirmDiscard:e=>`Discard ${e.count===1?"the suggestion":`all ${e.count} suggestions`}? This can't be undone.`,keepReviewing:"Keep reviewing",apply:e=>`Apply ${e.n} of ${e.m}`,applied:e=>e.count===1?"Applied 1 suggestion to the brand":`Applied ${e.count} suggestions to the brand`,undo:"Undo",restored:"Brand restored",discarded:"Suggestions discarded",nothing:"Nothing new found",nothingSub:"The analysis found nothing to change in the brand."},source:{website:e=>`Website: ${e.host}`,image:e=>`Image: ${e.name}`},app:{approvalNotificationTitle:"Motion Studio: approval needed",settingsSaveFailed:e=>`Settings not saved: ${e.detail}`,readyNotificationTitle:"Motion Studio: creative ready"},welcome:{setupStep:e=>`Setup · ${e.n} of ${e.total}`,title:"Turn briefs into motion graphics with Claude Code",intro:"Everything runs on this computer. Your projects, brands and renders stay in a folder you choose.",steps:"Setup steps",stepDone:"done",checkTitle:"Check your setup",checkIntro:"Motion Studio uses Claude Code and a few tools on this computer.",checksPassed:e=>`${e.ok} of ${e.total} checks passed`,checking:"Checking…",checkingRow:"checking…",checksList:"System checks",serverUnreachable:e=>`Can't reach the Motion Studio server: ${e.detail}. Make sure Motion Studio is still running, then check again.`,serverUnreachableShort:"Can't reach the server",missing:"Missing",recommended:"Recommended",remedy:"How to fix",checkAgain:"Check again",blocked:"Fix the checks marked Missing, then check again.",workspaceTitle:"Choose a workspace",workspaceSub:"Where projects are saved",workspaceIntro:"Motion Studio keeps one folder per project inside it, with versioned history. You can change it later by replaying the setup from the account menu.",folder:"Folder",pathPlaceholder:"/Users/yourname/MotionStudio",pickFolderTitle:"Choose the working folder",statusCurrent:e=>e.count===0?"Current workspace · no projects yet":`Current workspace · ${e.count} ${e.count===1?"project":"projects"}`,statusChecking:"Reading the workspace…",statusNew:"Motion Studio creates the folder if it doesn't exist and checks it when you continue.",workspaceNotFound:e=>`Folder not found: ${e.path}. Choose another.`,workspaceInvalid:e=>`Invalid content in ${e.path}: ${e.detail}`,saveFailed:e=>`This folder can't be used: ${e.detail}. Choose another folder or fix its permissions.`,preview:"Folder preview",previewProject:"one folder per project",systemReady:"Your computer is ready",systemNotes:"Ready, with recommendations",recheck:"Re-check",projectTitle:"Create your first project",projectSub:"Name it, then add a website to learn the brand",projectIntro:"Add a website and Claude learns the colors, fonts, logos and voice.",projectName:"Project name",projectNamePlaceholder:"E.g. Acme",website:"Website",optional:"optional",websitePlaceholder:"https://www.example.com",websiteInvalid:"Enter a web address like https://www.example.com, or leave the field empty.",createFailed:e=>`The project wasn't created: ${e.detail}. Check the name and try again.`,created:e=>`${e.name} created`,createdLearning:e=>`${e.name} created · learning the brand from ${e.site}`,sourceFailed:e=>`The project was created, but the website wasn't added: ${e.detail}. Add it again here in Brand.`,analysisFailed:e=>`The project was created, but the brand analysis didn't start: ${e.detail}. Start it again here in Brand.`,back:"Back",continue:"Continue",create:"Create project",skip:"Skip for now",enterHint:"Press ↵ to continue"},pairing:{title:"Open Motion Studio from the link in your terminal",body:"This tab doesn't have the private key that Motion Studio printed when it started. The key keeps other apps and websites on this computer from controlling your projects.",terminal:"Terminal",terminalExample:"What the terminal shows when Motion Studio starts",running:"Motion Studio is running.",open:"Open:",lostTitle:"Closed the terminal or lost the link?",lostBody:"Run this in a new terminal window. It prints the link again without restarting anything.",copy:"Copy",copied:"Copied",copiedStatus:"Command copied to the clipboard.",desktopHint:"Using the desktop app? Open Motion Studio from Applications; it never needs this step.",copyFallback:e=>`Copying isn't available here: the command is selected, press ${e.keys} to copy it.`},projects:{title:"Projects",jumpBackIn:"Jump back in",recentCreatives:"Recent creatives",newCreativeIn:e=>`New creative in ${e.project}`,formats:e=>e.n===1?"1 format":`${e.n} formats`,waiting:"Waiting for your OK",rendering:e=>`Rendering · ${e.step}`,readyWhen:e=>`Ready · ${e.when}`,sort:"Sort projects",sortRecent:"Last edited",sortName:"Name",newProject:"New project",startTitle:"Start a new project",startBody:"Give it a name, then add its website in Brand: Claude learns the colors, fonts, logos and voice for you.",nameLabel:"Project name",create:"Create",created:e=>`Project “${e.name}” created`,open:"Open",createFailed:e=>`The project wasn't created: ${e.detail}. Check the name and try again.`,loadFailed:e=>`Can't load the projects: ${e.detail}. Make sure Motion Studio is still running, then try again.`,tryAgain:"Try again",loading:"Loading projects…",emptyTitle:"No projects yet",emptyBody:"A project holds a brand and its creatives. Name your first one to get started.",approvalsWaiting:e=>e.n===1?"1 approval waiting":`${e.n} approvals waiting`,creatives:e=>e.n===1?"creative":"creatives",assets:e=>e.n===1?"asset":"assets",colors:e=>e.n===1?"color":"colors",fonts:e=>e.n===1?"font":"fonts",unreadable:"Unreadable"},project:{sections:"Project sections",tabs:{creatives:"Creatives",brand:"Brand",assets:"Assets",references:"References",settings:"Settings"},loadFailed:e=>`Can't load the project: ${e.detail}`},integrity:{title:"This project is locked",body:"Files that configure git or the agent changed in a way Motion Studio did not make. They would run outside the sandbox, so no agent and no git run on this project until they are back as they were, or until you accept the changes as yours.",filesLabel:"Changed protected files",change:{changed:"changed",added:"added",removed:"removed"},restoreHint:"Put these files back as they were and the project unlocks by itself.",accept:"Accept these changes",gitTitle:"Git is blocked on this project",gitBody:"This setting can never be accepted: remove it as described, then the project works again.",confirmTitle:"Accept these changes?",confirmText:"Only accept if you made these changes yourself",confirmDetail:"The files listed become the new reference. If you did not change them yourself, cancel and restore them instead.",confirm:"Accept",cancel:"Cancel",changedSince:"The files changed again. Check the updated list.",acceptFailed:e=>`Couldn't accept the changes: ${e.detail}`,accepted:"Changes accepted: the project is unlocked"},common:{chooseFolder:"Choose folder…",send:"Send"},api:{httpError:e=>`Error ${e.status}`},settings:{language:"Language",languageSystem:e=>`System (${e.detected})`,languageNames:{en:"English",it:"Italiano"},languageFailed:e=>`Language not changed: ${e.detail}`},usage:{tokens:e=>`${e.count} tokens`,unknown:"—",todayButton:e=>`Tokens used today: ${e.count}. Open Usage`,today:e=>`Today · ${e.count} tokens`,todayUnknown:"Today · tokens not available yet",open:"Usage",tokensAtLeast:e=>`≥ ${e.count} tokens`,soFar:"so far",atLeast:e=>`≥ ${e.cost}`,billingSubscription:e=>`This counts toward your Claude plan. At API prices it would be about ${e.cost}.`,billingApi:e=>e.cost,billingUnknown:e=>`Estimated at API prices: ${e.cost}`,billingSubscriptionAtLeast:e=>`This counts toward your Claude plan. At API prices it would be at least ${e.cost}.`,billingUnknownAtLeast:e=>`Estimated at API prices: at least ${e.cost}`,costUnknown:"The cost of some runs is not known, so the real figure may be higher.",noCost:"Cost not available for this run.",details:"Token details",input:"Input",output:"Output",cacheWrite:"Cache write",cacheRead:"Cache read (not in the total)",creativeTotal:"Tokens",untracked:"Versions made before tracking began are not counted."},shell:{home:"Motion Studio home",search:"Search projects, creatives and pages",running:e=>`${e.count} running`,bell:e=>e.count?`Activity, ${e.count} waiting`:"Activity",account:"Account menu",settings:"Settings",systemCheck:"System check",replaySetup:"Replay setup",projects:"Projects",newProject:"New project",switchProject:e=>`Project ${e.name}, switch project`,backAllFormats:"All formats",moreActions:"More actions",newCreative:"New creative",breadcrumb:"Location",activity:{label:"Activity",sections:"Activity sections",needsYou:"Needs you",running:"Running",done:"Done",emptyNeeds:"Nothing waiting for you",emptyNeedsSub:"Requests from the agent show up here and as a banner.",emptyRunning:"Nothing running",groupPhases:{coordinator:"Reading your message",confirm:"Waiting for your confirmation",helpers:"The variants are working",report:"Writing the reply"},emptyRunningSub:"Generations and analyses show their progress here.",emptyDone:"Nothing finished yet",emptyDoneSub:"The latest results of this session show up here.",queued:"Waiting to start",open:"Open",enableNotifications:"Turn on notifications",versionReady:e=>`v${e.n} ready`,versionIncomplete:e=>`v${e.n} saved, incomplete`,versionKept:e=>`No new version: v${e.n} unchanged`},palette:{label:"Go to",placeholder:"Search projects, creatives and pages",empty:e=>`No results for “${e.query}”`,pages:"Pages",projects:"Projects",creatives:"Creatives",hint:"↑↓ to move · ↵ to open · esc to close",inProject:e=>`in ${e.project}`},attention:{waiting:e=>e.count===1?"1 request needs you":`${e.count} requests need you`,review:"Review",many:e=>`${e.count} approvals waiting`}},chat:{label:"Messages",appliesTo:"Applies to",appliesAll:"All formats",appliesHint:"The formats this change applies to: the others stay exactly as they are",appliesButton:e=>`Applies to: ${e.choice}. Choose the formats`,appliesInGroup:e=>`${e.group} · ${e.count} formats`,appliesCount:e=>`${e.count} formats`,appliesWholeGroup:e=>`${e.group}: whole group`,followsBoth:e=>`${e.follower} follows ${e.primary}: the change applies to both`,you:"You",agent:"Agent",summary:"Summary",steps:e=>e.count===1?"1 step":`${e.count} steps`,details:e=>`Activity details (${e.count})`,commandsRan:e=>{const t=e.count===1,i=e.attempted?t?"ran or was attempted":"ran or were attempted":"ran";return`${`${e.atLeast?"At least ":""}${e.count} ${t?"command":"commands"} ${i}`}${e.sandbox?" in the sandbox":""}${e.approved>0?` · ${e.approved} approved by you`:""}`},commandMarks:{approved:"You approved",denied:"Denied",notRun:"Didn’t run",error:"Ended with an error",interrupted:"Interrupted"},readFile:e=>`Read ${e.file}`,autoDetails:"Details",detailKinds:{session:"Session",text:"Message",tool:"Tool",result:"Output",error:"Error",limit:"Limit",step:"Step",log:"Log",unreadable:"Unreadable",done:"Done",failed:"Failed",stopped:"Stopped by you"},failed:e=>`The agent stopped: ${e.error}`,working:"The agent is working…",placeholder:"Describe what to change",busyPlaceholder:"The agent is working on the last request",sendHint:e=>`${e.keys} to send`,sendWithKeys:e=>`Send (${e.keys})`,attach:"Attach files",attachMenu:"Attach files to the message",attachComputer:{title:"From computer",hint:"Also saved in the project’s Assets"},attachLibrary:{title:"From Assets",hint:"Images, videos and files of the project"},attachedFiles:"Attached files",attachWait:"The attached files go with the next request, once the agent has finished.",uploading:e=>`Uploading ${e.name}…`,cancelUpload:e=>`Cancel the upload of ${e.name}`,attachmentGone:e=>e.count===1?`${e.names} is no longer in Assets: removed from the attachments. Send again.`:`${e.names} are no longer in Assets: removed from the attachments. Send again.`,pin:e=>`${e.n} · ${e.format}`,sendFailed:e=>`Couldn’t send: ${e.detail}. Your message is kept — try again.`,retried:e=>`Retried · ${e.time}`,sendBusy:"A generation is already running for this creative. Wait for it to finish, then send again.",cancelFailed:"Couldn’t stop the agent. Try again.",emptyTitle:"No messages yet",emptySub:"Ask for a change below: every request and every step of the agent shows up here."},liveUi:{send:"Send to agent",queue:"Queue for after",interruptedRow:"Interrupted by you",consoleMessage:"Message to the console turn",consoleOpen:"Message",consoleUnsupported:"Live messages aren’t supported for this Claude Code version. Send it when the turn ends.",sendMore:"More ways to send",redirect:"Redirect",cancelRedirect:"Cancel redirect",redirectNote:"Redirect stops the agent’s current step and continues in the same session with your message.",queueOnly:"The agent can’t take messages while it works. Your message waits and runs as the next request.",liveHint:"Enter sends · Shift+Enter new line",liveNote:"Send: the agent reads it as soon as the current step ends. Queue for after runs it when the agent is done.",queueHint:"Enter queues it",redirectHint:e=>`${e.keys} to redirect`,livePlaceholder:"Message to the agent…",queuePlaceholder:"Next request…",redirectPlaceholder:"What should the agent do instead?",stop:"Stop",stopMenu:"Stop options",stopAndRedirect:"Stop and redirect…",stopFailed:"Couldn’t stop the agent. Try again.",redirectFailed:e=>`Couldn’t redirect: ${e.detail}`,redirectTitleFor:e=>`Stop and redirect: ${e.label}`,redirectSend:"Redirect",redirectCancel:"Cancel",redirectFieldLabel:"What the agent should do instead",state:{sending:"Sending…",pending:"Waiting for the agent’s next step",pendingStart:"Will be included when the agent starts",sent:"Sent",delivered:"Delivered",queued:"Queued",notDelivered:"Not delivered",redirect:"Redirect"},sentHint:"The agent reads it as soon as the current step ends",deliveredHint:"The agent has started on it",notDeliveredReason:"The turn ended before the agent read it. Your words are kept above: send them again.",outcome:{"queued-unsupported":"Queued: this Claude Code can’t take messages during a turn, so it runs as the next request.","queued-after-finish":"Queued as the next request.",queued:"Queued for after.",restarted:"Redirected: the agent continues with your message.",interrupted:"Redirected: the agent’s step was interrupted.","pending-start":"Will be included when the agent starts."},queueLabel:"Queued requests",queueTitle:e=>e.count===1?"1 request queued":`${e.count} requests queued`,queuePaused:"Nothing is running: the queue waits for you.",runNext:"Run next",item:e=>`Queued request ${e.n}`,edit:e=>`Edit queued request ${e.n}`,remove:e=>`Remove queued request ${e.n}`,moveUp:e=>`Move queued request ${e.n} up`,moveDown:e=>`Move queued request ${e.n} down`,drag:e=>`Drag queued request ${e.n} to reorder`,editField:"Queued request text",save:"Save",cancelEdit:"Cancel",draftKeptLabel:"Your unsaved edit",draftKept:"This request started before your edit was saved, so it ran with its earlier text. Your edit is kept here.",draftField:"Your unsaved edit",draftQueue:"Queue as a new request",draftDiscard:"Discard",moved:e=>`Request ${e.n} moved to position ${e.to}`,pins:e=>e.count===1?"1 comment":`${e.count} comments`},render:{playerFrame:e=>`Live preview of ${e.label}`,loading:"Preparing the live preview…",busy:"Previews are busy: trying again in a moment…",failed:e=>`The live preview could not start: ${e.detail}`,retry:"Try again",runtimeIssues:"Preview problems",runtimeError:{compositionMissing:"The composition could not be read",compositionInvalid:"The composition is not valid",baseNotAllowed:"The composition points outside its folder",assetPathRejected:"A file path was refused",assetLoadFailed:"A file could not be loaded",fontMissing:"A font is missing",fontLoadFailed:"A font could not be loaded",videoSeekTimeout:"A video took too long to show its frame",layerTimeout:"An HTML layer took too long to answer",layerError:"An HTML layer reported an error",layerStalled:"An HTML layer waited on a timer that never fires while rendering",badAnimation:"An animation could not be applied",audioBlocked:"The browser blocked the sound: playing muted",unknownClipType:"A clip of an unknown type was skipped",frameTimeout:"A frame took too long to draw",videoFrameMismatch:"A video frame may be slightly off",clipAudioFailed:"A clip plays without its sound",textOverflow:"A text does not fit its box",subtitlesInvalid:"The subtitles could not be read: the video shows without them"},errorClip:e=>`${e.text} (${e.clip})`,playPreview:e=>`Play the live preview of ${e.label}`,stopPreview:e=>`Stop the live preview of ${e.label}`,queued:"Queued",queuedAhead:e=>e.count===1?"Queued · 1 render ahead":`Queued · ${e.count} renders ahead`,rendering:e=>`Rendering ${e.pct}%`,rendered:"Rendered",failedState:"Render failed",retryRender:"Retry",retryRenderOf:e=>`Retry the render of ${e.label}`,problemState:e=>e.count===1?"Render problem":`${e.count} render problems`,problemTitle:"The render has problems",problemOpen:e=>`Show the render problems of ${e.label}`,problemHint:"The platform may refuse this file. Render it again, or change the composition.",renderAgain:"Render again",renderAgainOf:e=>`Render ${e.label} again`,render:"Render",renderVersion:e=>`Render v${e.n}`,started:e=>e.count===1?"Rendering 1 format":`Rendering ${e.count} formats`,startFailed:e=>`The render could not start: ${e.detail}`,startedPartly:e=>`${e.count===1?"Rendering 1 format":`Rendering ${e.count} formats`}; not started: ${e.list} (${e.detail})`,storyboard:"Storyboard",scene:e=>`Scene ${e.n}`,sceneAt:e=>`${e.name}, at ${e.time}`,storyboardLoading:"Preparing the storyboard…",wholeVideo:"Whole video",scenesLoading:"Loading the scenes…",scenesUnavailable:"The scenes of this version could not be read",framesProgress:e=>`${e.format} · ${e.done} / ${e.total} frames`,mediaProgress:e=>`${e.format} · preparing media ${e.done}/${e.total}`,finishing:e=>`${e.format} · finishing`,starting:"Starting…",cancel:"Cancel",cancelRender:e=>`Cancel ${e.label}`,cancelFailed:e=>`Couldn’t cancel: ${e.detail}`,rendersFirst:"Rendered first",engineLabel:"Render engine",engineElectron:"Built in (Electron)",engineSystem:e=>`Google Chrome ${e.version}`,engineSystemPlain:"Google Chrome",engineCft:e=>`Chrome for Testing ${e.version}`,engineInjected:"Built in",engineNone:"Not available",engineNoneHint:"Live previews, storyboards and renders need Chrome: install Google Chrome, or download Chrome for Testing.",downloadOffer:"Download Chrome for Testing (about 100 MB)",consentTitle:"Download Chrome for Testing?",consentBody:e=>`Chrome for Testing ${e.version} (${e.size}) is downloaded from Google into Motion Studio’s data folder and used only for previews and renders. Nothing is downloaded until you agree.`,consentAgree:e=>`Download ${e.size}`,consentChecking:"Checking the download size…",consentFailed:e=>`Couldn’t read the download: ${e.detail}`,downloading:e=>`Downloading ${e.done} of ${e.total}`,downloaded:"Chrome for Testing is installed",downloadFailed:e=>`The download failed: ${e.detail}`,sizeMb:e=>`${e.n} MB`,engineLoadFailed:e=>`Couldn’t read the render engine: ${e.detail}`,pinFrame:e=>`Frame sent with comment ${e.n}`},ui:{pickColor:"Pick a colour",loading:"Loading",typing:"Typing",progress:"Progress",timeLeft:e=>`${e.time} left`,version:e=>`Version ${e.n}`,chosenVersion:e=>`Chosen version ${e.n}`,emptyTitle:"Nothing here",noPreview:"Can’t preview this file"}},explain:{complex:"Runs a complex shell command",more:e=>e.count===1?"and 1 more step":`and ${e.count} more steps`,runs:e=>`Runs ${e.cmd}`,tool:e=>`Uses ${e.tool}`,edit:e=>`Edits ${e.path}`,read:e=>`Reads ${e.path}`,webFetch:e=>`Opens ${e.host}`,webSearch:"Searches the web",cd:e=>`Moves to ${e.path}`,list:e=>`Lists the files in ${e.paths}`,show:e=>`Shows ${e.paths}`,headFile:e=>`Shows the start of ${e.paths}`,headPipe:"Keeps the first lines of the output",tailFile:e=>`Shows the end of ${e.paths}`,tailPipe:"Keeps the last lines of the output",fileType:e=>`Checks the file type of ${e.paths}`,count:e=>`Counts the lines in ${e.paths}`,countPipe:"Counts the lines of the output",readFiles:e=>`Reads ${e.paths}`,filter:e=>`Processes the text of ${e.paths}`,filterPipe:"Processes the text of the output",search:e=>`Searches for text in ${e.paths}`,searchPipe:"Filters the lines of the output",json:e=>`Reads the JSON in ${e.paths}`,jsonPipe:"Reads JSON from the output",jsonCheck:e=>`Checks the JSON file ${e.path}`,editText:e=>`Edits the text of ${e.paths}`,mkdir:e=>e.n>1?`Creates the folders: ${e.paths}`:`Creates the folder ${e.paths}`,copy:e=>`Copies ${e.sources} to ${e.dest}`,move:e=>`Moves ${e.sources} to ${e.dest}`,delete:e=>`Deletes ${e.paths}`,touch:e=>`Creates or updates ${e.paths}`,chmod:e=>`Changes the permissions of ${e.paths}`,link:e=>`Creates the link ${e.link} to ${e.target}`,find:e=>`Searches for files in ${e.paths}`,findDelete:e=>`Deletes the matching files in ${e.paths}`,findExec:e=>`Runs ${e.cmd} on the matching files in ${e.paths}`,size:e=>`Measures the size of ${e.paths}`,archiveCreate:e=>`Creates the archive ${e.archive}`,archiveExtract:e=>`Extracts ${e.archive} into ${e.dest}`,archiveList:e=>`Lists the contents of ${e.archive}`,mediaConvert:e=>`Converts ${e.inputs} into ${e.outputs}`,mediaProcess:e=>`Processes ${e.inputs} with ffmpeg`,mediaInfo:e=>`Reads the media details of ${e.paths}`,filterFiles:"Applies a filter graph that reads or writes files",imageConvert:e=>`Converts ${e.inputs} into ${e.outputs}`,imageEdit:e=>e.n>1?`Modifies the images: ${e.paths}`:`Modifies the image ${e.paths}`,imageInfo:e=>e.n>1?`Reads the details of the images: ${e.paths}`:`Reads the image details of ${e.paths}`,imageOptimize:e=>e.n>1?`Optimizes the images: ${e.paths}`:`Optimizes the image ${e.paths}`,pythonScript:e=>`Runs the Python script ${e.script}`,pythonInline:"Runs a Python snippet",pythonModule:e=>`Runs the Python module ${e.module}`,venv:e=>`Creates a Python environment in ${e.path}`,pipInstall:e=>`Installs Python packages: ${e.packages}`,pipInstallReq:e=>`Installs the Python packages listed in ${e.file}`,pipInfo:"Lists the installed Python packages",pkgRemove:e=>`Removes packages: ${e.packages}`,pkgInfo:e=>`Shows package information with ${e.tool}`,pkgOther:e=>`Runs ${e.tool} ${e.sub}`,nodeScript:e=>`Runs the Node script ${e.script}`,nodeInline:"Runs a JavaScript snippet",inlineCode:e=>`Runs a ${e.lang} snippet`,npmInstall:e=>`Installs Node packages: ${e.packages}`,npmInstallAll:"Installs the project’s Node packages",npmRun:e=>`Runs the package script ${e.script}`,npx:e=>`Runs the Node tool ${e.tool} (it may download it)`,runScript:e=>`Runs the script ${e.script}`,runsInput:"Runs the code it receives from the previous step",download:e=>`Downloads from ${e.host}`,downloadTo:e=>`Downloads from ${e.host} to ${e.path}`,upload:e=>`Sends data to ${e.host}`,openUrl:e=>`Opens ${e.host} in the browser`,gitClone:e=>`Downloads the repository ${e.url}`,gitStatus:"Shows the Git status",gitDiff:"Shows the Git changes",gitLog:"Shows the Git history",gitInfo:"Reads Git information",gitAdd:e=>`Prepares ${e.paths} for a Git commit`,gitCommit:"Saves a Git commit",gitSync:e=>`Syncs with the remote repository (git ${e.sub})`,gitChange:e=>`Changes the Git history or files (git ${e.sub})`,gitOther:e=>`Runs git ${e.sub}`,systemInstall:e=>`Installs system packages: ${e.packages}`,kill:e=>e.n>1?`Stops the processes: ${e.targets}`:`Stops the process ${e.targets}`,sleep:e=>`Waits ${e.seconds} s`,print:"Prints text",writeText:e=>`Writes text to ${e.path}`,writeFile:e=>`Writes ${e.paths}`,xargs:e=>`Runs ${e.cmd} on each line of the input`,open:e=>`Opens ${e.paths}`,which:e=>`Checks whether ${e.cmd} is installed`,pwd:"Shows the current folder",sysInfo:"Shows system information",changesSystem:"Changes system settings",printEnv:"Shows the environment variables",noop:"Does nothing",setVar:e=>`Sets the variable ${e.name}`,shellOption:"Changes a shell option",check:"Checks a condition",indicators:{deletesFiles:"Deletes files",installsPackages:"Installs packages",usesNetwork:"Uses the network",killsProcesses:"Stops processes",writesOutsideProject:"Writes outside the project",readsOutsideProject:"Reads outside the project",runsCode:"Runs code",elevated:"Administrator rights",changesGit:"Changes Git",complex:"Complex command",unknownCommand:e=>e.option?`Unrecognised option ${e.option}`:"Unknown command",outsideSandbox:"Outside the sandbox"},risk:{low:"Low risk",medium:"Medium risk",high:"High risk"}}},Rn={common:{cancel:"Annulla",save:"Salva",close:"Chiudi",loading:"Caricamento…",items:e=>e.count===1?"1 elemento":`${e.count} elementi`},errors:{toolUnavailable:"Strumento non disponibile in questo lavoro",notFound:"Non trovato",fileNotFoundShort:"File non trovato",nonLocalOrigin:"Richiesta non consentita: origine non locale",kitUnreadable:"Brand kit non leggibile",invalidBridgeAccess:"Accesso al bridge non valido",internalError:"Errore interno di Motion Studio",unknownTool:e=>`Strumento sconosciuto: ${e.tool}`,markerNotFound:"marcatore non trovato",exitCode:e=>`codice ${e.code}`,timedOut:e=>`timeout dopo ${e.seconds} s`,formatCatalogFallback:e=>`${e.detail}. Uso il catalogo predefinito.`,jobCancelled:"Il lavoro è stato annullato.",invalidProgress:"Messaggio di avanzamento non valido (1-300 caratteri)",invalidPhase:"Fase di analisi non valida: usa reading, fonts, colors, logos, tone o writing",validateOnlyCreatives:"Validazione disponibile solo nelle creatività",previewFramesLimit:e=>`preview_frames si può usare al massimo ${e.max} volte per turno: guarda i fotogrammi che hai già, poi chiudi il turno`,previewFramesTimes:e=>`Indica da 1 a ${e.max} istanti, in secondi dall'inizio della composizione`,previewBusy:"Si stanno preparando troppe anteprime: riprova tra un momento",previewSessionNotFound:"Anteprima dal vivo inesistente",chromeDownloadFailed:e=>`Il download di Chrome for Testing non è stato completato (${e.code}). I dettagli sono nel log di Motion Studio.`,chromeConsentRequired:"Chrome for Testing si scarica solo dopo che ne hai accettato la dimensione",chromeDownloadUnavailable:"Qui Chrome for Testing non si può scaricare",chromeInfoFailed:e=>`Impossibile leggere il download di Chrome for Testing (${e.code}). I dettagli sono nel log di Motion Studio.`,chromeSizeChanged:"Il download di Chrome for Testing è cambiato da quando hai accettato: controlla di nuovo la dimensione",renderEngineAvailable:"Un browser per i render è già disponibile",formatNotInTurn:e=>`${e.format} non è uno dei formati di questo turno: usa ${e.list}`,previewUnavailable:"Le anteprime non sono disponibili in questo Motion Studio: non c'è un Chromium con cui renderizzare",previewOrigin:"Questa finestra non può mostrare l'anteprima dal vivo (la sua origine non è ammessa)",compositionNotFound:e=>`La v${e.n} non ha una composizione per ${e.format}`,compositionUnusable:e=>`La composizione di ${e.format} nella v${e.n} ha dei problemi: non si può mostrare in anteprima`,rootPath:"(radice)",turnFailed:"Turno non riuscito",codebaseNotAbsolute:e=>`La cartella collegata deve essere un percorso assoluto: ${e.path}`,codebaseDiskRoot:"Non puoi collegare la radice del disco",codebaseHome:"Collega una cartella specifica, non l'intera home",codebaseOverlap:"La cartella collegata non può contenere il progetto né trovarsi al suo interno",codebaseOverlapNamed:e=>`La cartella collegata ${e.path} non può contenere il progetto né l'area di lavoro, né trovarsi al loro interno`,codebaseUnsafePath:"Il percorso della cartella contiene caratteri di controllo: rinomina la cartella o scegline un'altra",codebaseGlobChars:e=>`Il percorso della cartella ${e.path} contiene ( ) [ ] { } * ? o \\, che le regole sui file dell'agente non riescono a confrontare in modo sicuro: rinomina la cartella (o la cartella che la contiene e ha quei caratteri). Un collegamento simbolico non basta: si controlla anche il percorso reale della cartella`,folderGlobChars:e=>`Il percorso ${e.path} della cartella di lavoro o del progetto contiene ( ) [ ] { } * ? o \\, che le regole dell'agente a protezione dei file di Motion Studio non riescono a confrontare in modo sicuro, quindi l'agente non lavora lì: rinomina la cartella (o la cartella che la contiene e ha quei caratteri), poi scegli di nuovo la cartella di lavoro`,codebaseSourceMissing:e=>`Cartella non trovata: ${e.path}`,codebaseSourceDuplicate:e=>`Questa cartella è già una fonte del brand: ${e.path}`,codebaseSourceLimit:e=>`Al massimo ${e.max} fonti codebase per brand`,codebaseOverlapBrand:"La codebase non può contenere il progetto o il workspace, né trovarsi al loro interno",codebaseNestedBrand:"La codebase sta dentro un'altra fonte codebase o ne contiene una: aggiungine solo una",codebaseConfigBrand:"La codebase non può contenere la cartella di configurazione di Motion Studio, né trovarsi al suo interno",codebaseSensitiveBrand:"La codebase non può essere, contenere o stare dentro una cartella privata della tua home: chiavi e credenziali, .config, o qualunque cosa sotto Library (iCloud Drive compreso)",pathIsFile:e=>`Il percorso ${e.path} è un file, non una cartella`,workspaceNotFound:e=>`Cartella del workspace non trovata: ${e.path}`,notWritable:e=>`Impossibile scrivere nella cartella ${e.path}: controlla i permessi`,invalidSettings:e=>`Impostazioni non valide: ${e.fields}`,invalidProjectId:e=>`Identificativo progetto non valido: ${e.slug}`,projectNotFound:e=>`Progetto ${e.slug} non trovato`,projectNameRequired:"Il nome del progetto è obbligatorio",invalidProject:e=>`Progetto non valido: ${e.fields}`,projectIconInvalid:"L’icona del progetto deve essere un’immagine degli Asset.",fileNotFound:"file non trovato",invalidJson:e=>`JSON non valido (${e.detail})`,invalidContent:e=>`contenuto non valido — ${e.detail}`,gitNotFound:"git non trovato: installalo per usare Motion Studio",commitNotFound:e=>`Versione non trovata nel repository: ${e.commit}`,gitFailed:e=>`git ${e.command} fallito: ${e.detail}`,gitRepoUnsafe:e=>`Motion Studio si è fermato prima di eseguire git: il repository ha impostazioni che non ha creato lui e che potrebbero eseguire un comando fuori dalla sandbox (${e.detail}). Nessun commit è stato fatto. Controlla .git/config, .gitattributes e .git/info/attributes del progetto, togli ciò che non hai aggiunto tu e riprova.`,gitDirNotFolder:'Motion Studio si è fermato prima di eseguire git: il .git del progetto non è una cartella (è un file o un collegamento, per esempio un puntatore "gitdir:"), quindi git leggerebbe una configurazione da un altro posto. Nessun commit è stato fatto. Sostituisci .git con la vera cartella del repository del progetto e riprova.',gitLayoutFile:e=>`Motion Studio si è fermato prima di eseguire git: il progetto ha ${e.file}, che fa caricare a git una configurazione da un altro posto. Motion Studio non lo crea mai. Nessun commit è stato fatto. Elimina ${e.file} se non l'hai aggiunto tu di proposito e riprova.`,gitConfigOrigin:e=>`Motion Studio si è fermato prima di eseguire git: l'impostazione ${e.key} viene da ${e.origin}, non dal .git/config del progetto (per esempio tramite un include). Nessun commit è stato fatto. Togli l'include o il file che la aggiunge e riprova.`,gitConfigKeyBlocked:e=>`Motion Studio si è fermato prima di eseguire git: il .git/config del progetto ha l'impostazione ${e.key}, che Motion Studio non consente perché potrebbe eseguire un comando fuori dalla sandbox (filtri, driver di diff, include, alias, hook…). Nessun commit è stato fatto. Se non l'hai aggiunta tu di proposito, toglila con "git config --unset ${e.key}" nella cartella del progetto (o elimina la sua sezione da .git/config) e riprova.`,gitConfigValueBlocked:e=>`Motion Studio si è fermato prima di eseguire git: il valore di ${e.key} nel .git/config del progetto contiene "!", "ext::" o un'opzione --upload-pack/--receive-pack, che potrebbe eseguire un comando. Nessun commit è stato fatto. Impostalo su un indirizzo semplice con "git config ${e.key} <valore>" (o toglilo con "git config --unset ${e.key}") e riprova.`,gitAttributesBlocked:e=>`Motion Studio si è fermato prima di eseguire git: ${e.file} imposta un filtro o un driver di diff/merge ("${e.line}"), che potrebbe eseguire un comando fuori dalla sandbox. Nessun commit è stato fatto. Togli quella riga (i nomi di diff integrati come diff=python vanno bene) e riprova.`,projectQuarantined:e=>`Motion Studio ha bloccato questo progetto: alcuni file protetti sono cambiati in un modo che non ha fatto lui (${e.list}). Configurano git o l'agente e verrebbero eseguiti fuori dalla sandbox, quindi per ora sul progetto non partono né l'agente né git. Rimetti quei file com'erano (per esempio da un backup, o annullando la modifica che hai fatto); Motion Studio sblocca il progetto da solo appena tornano uguali. Se la modifica l'hai fatta tu, accettala nella pagina del progetto.`,integrityChangedSince:"I file protetti sono cambiati da quando è stata mostrata la lista: controlla la lista aggiornata prima di accettare.",integrityRecordUnreadable:"non è stato possibile leggere il registro di integrità nella cartella delle impostazioni di Motion Studio",invalidRequest:"Richiesta non valida",invalidRequestDetail:e=>`Richiesta non valida: ${e.detail}`,outputsFolderNotFound:"Cartella degli output non trovata",useAsLogoNoSvg:"Questo formato non ha un file logo da usare: fai prima il render (l’icona app non ha un SVG)",useAsLogoNotChecked:"Questa versione non ha ancora un logo controllato: fai prima il render del formato",useAsLogoMissing:"Il file del logo di questa versione manca: rifai il render del formato",useAsLogoRefused:"Il file del logo non ha passato il controllo di sicurezza degli SVG, quindi non si può aggiungere al brand",useAsLogoNotIdentity:"Questo formato non è un logo, una favicon o un’icona app",useAsLogoBadVariant:"Scegli il logo principale o l’icona",versionNotFound:"Versione non trovata",noWorkspace:"Nessun workspace configurato: scegli una cartella di lavoro",workspacePathAbsolute:"Indica un percorso assoluto per il workspace",promptRequired:"Scrivi una richiesta per l'agente",invalidSessionId:"Identificativo della sessione non valido",textMissing:"Testo mancante",imageMustBeReference:"L'immagine deve essere un riferimento del progetto",unknownProvider:e=>`Provider sconosciuto: ${e.provider}`,keyFromEnv:"La chiave arriva da una variabile d'ambiente: modificala lì",invalidDecision:"Decisione non valida",questionNeedsAnswer:"Rispondi alla domanda con una delle opzioni o con parole tue",invalidAnswer:"La risposta non corrisponde alla domanda",ruleMissing:"Regola mancante",revealFailed:"Impossibile mostrare la cartella degli output nel Finder",invalidKey:"Chiave non valida: incolla la chiave del provider su una sola riga",keychainUnavailable:e=>`Portachiavi del sistema non disponibile: ${e.detail}`,invalidPath:e=>`Percorso non valido: ${e.file}`,reservedFile:e=>`File riservato: ${e.file}`,fileNotValid:e=>`File non trovato o non valido: ${e.kind}/${e.file}`,fileInaccessible:e=>`File non accessibile: ${e.kind}/${e.file}`,fileOutsideFolder:e=>`File al di fuori della cartella: ${e.kind}/${e.file}`,folderInvalid:e=>`Cartella ${e.kind} non valida: è un collegamento o è fuori dal progetto`,assetsMetaInvalid:"Metadati degli asset non validi",referencesMetaInvalid:"Metadati dei riferimenti non validi",assetNotFound:e=>`Asset ${e.file} non trovato`,assetReferenceInUse:e=>`${e.file} è già usato da una creatività o dal brand: resta negli Asset`,referenceNotFound:e=>`Riferimento ${e.file} non trovato`,assetRenameInvalid:"Scegli un nuovo nome di file senza cartelle",assetRenameExists:e=>`Esiste già un file chiamato ${e.file}`,assetRenameKind:e=>`Il nuovo nome ${e.file} cambierebbe il tipo di file`,assetRenameFailed:"Non è stato possibile rinominare l'asset; nulla è stato modificato",waveformUnavailable:"La forma d'onda di questo file non è disponibile",fileTooLarge:e=>`File troppo grande: ${e.name}`,uploadTooLarge:"Troppi file o file troppo grandi in un solo caricamento",noFileReceived:"Nessun file ricevuto",invalidCreativeId:e=>`Identificativo creatività non valido: ${e.slug}`,invalidBrief:e=>`Brief non valido: ${e.detail}`,creativeNotFound:e=>`Creatività ${e.slug} non trovata`,invalidCreative:e=>`Creatività non valida: ${e.detail}`,formatsReorderRemoveOnly:"Un salvataggio parziale può solo riordinare o togliere formati già presenti nel brief",waitBeforeBrief:"Attendi la fine della generazione in corso prima di modificare il brief",variantRunning:e=>`La variante ${e.letter} sta lavorando: fermala prima di scartarla`,variantLastActive:e=>`La variante ${e.letter} è l'ultima attiva: tienine almeno una`,creativeBusyTurn:"Una richiesta all'agente di questa creatività è in corso o in coda: aspetta che finisca, o fermala",creativeBusyQueued:"Questa creatività ha richieste in attesa nella coda: toglile prima",creativeBusyRender:"Un render di questa creatività è in corso o in coda: aspetta che finisca",creativeGroupAll:e=>`È la variante A di un gruppo di ${e.count} varianti: archivia o elimina tutto il gruppo`,trashUnavailable:e=>`Impossibile spostare la creatività nel Cestino: ${e.detail}`,trashOtherVolume:"il progetto è su un disco diverso da quello del Cestino",trashUnsupported:"Motion Studio non può usare il Cestino di questo sistema",variantUnknown:e=>`Questa creatività non ha la variante ${e.letter}`,variantAddFanout:e=>`Questa richiesta è stata inviata a più varianti: le nuove varianti le aggiunge la variante ${e.letter}. Non aggiungerne una qui`,variantAddFirstGeneration:"La prima generazione di una variante non aggiunge varianti: l'utente può chiederne una con un messaggio",variantNoGroup:"Questa creatività non ha varianti",variantOrphan:"Il gruppo di questa variante non si trova: si apre come creatività singola",variantDiscarded:e=>`La variante ${e.letter} è scartata: prima ripristinala`,variantPickInvalid:e=>`Scelta non valida: ${e.detail}`,variantPickNotMember:e=>`${e.slug} non è una variante attiva di questo gruppo`,variantPickNoFormat:e=>`La versione ${e.n} non ha ${e.format}`,variantBaseInvalid:e=>`Non si può partire da quella versione: ${e.detail}`,variantBaseChanged:e=>`I file di ${e.format} nella versione ${e.n} sono cambiati da quando sono stati salvati`,variantFolderExists:e=>`Esiste già una cartella ${e.slug}`,variantDirections:"Al massimo una direzione per ogni nuova variante, ciascuna fino a 140 caratteri",variantDiscardedTurn:"Ripristina la variante per lavorarci",variantBusyFormats:e=>`La variante ${e.letter} sta lavorando: una richiesta limitata ad alcuni formati non può aspettare nella sua coda. Mandala a quella variante quando ha finito`,variantDirectionsFailed:"L'agente non ha proposto direzioni valide per le varianti: scrivile tu o riprova",generationRunning:"Una generazione è già in corso per questa creatività",waitBeforeRestart:"Attendi la fine della generazione in corso prima di ripartire da una versione",versionNNotFound:e=>`Versione ${e.n} non trovata`,versionNotRestorable:e=>`La versione ${e.n} non può essere ripristinata (manca commit o sessione)`,formatNotInBrief:e=>`Il formato ${e.format} non è nel brief`,waitBeforeLinks:"Attendi la fine della generazione in corso prima di collegare o scollegare i formati",formatsNotInBrief:"Nessuno dei formati richiesti è nel brief",linkSelf:"Un formato non può seguire se stesso",linkChain:e=>`${e.follower} non può seguire ${e.primary}: un formato che ne segue un altro non può avere seguaci, e un formato con seguaci non può seguirne un altro`,linkIncompatible:e=>`${e.follower} non può seguire ${e.primary}: ${e.reason}`,followReason:{kind:"uno è un video e l’altro un’immagine",size:"le dimensioni sono diverse",extension:"non accetta tutti i tipi di file che il formato principale può avere",duration:"il formato principale supera la sua durata massima",safeZone:"la sua area sicura è più piccola di quella del formato principale",self:"è lo stesso formato",chain:"i collegamenti non possono formare una catena",unknown:"il formato non è nel brief o nel catalogo",fileSize:"il file del formato principale supera la sua dimensione massima"},hashesPending:"Sto ancora leggendo i file di questo formato: riprova tra qualche secondo",pickFollower:e=>`${e.format} segue ${e.primary}: usa la ★ di ${e.primary}`,pickNoFile:e=>`La versione ${e.n} non ha un file per ${e.format}`,pickFileMissing:e=>`Il file ${e.format} della versione ${e.n} non è più sul disco o non si può usare (è un collegamento)`,approvalNotFound:"Richiesta di approvazione non trovata o già gestita",invalidRule:"Regola di permesso non valida",tooManyPermissions:"Troppi permessi salvati: revocane qualcuno nelle impostazioni del progetto",invalidPermission:"Permesso non valido",permissionNotFound:"Permesso non trovato",invalidBrandKit:e=>`Brand kit non valido: ${e.detail}`,resultingBrandKitInvalid:e=>`Brand kit risultante non valido: ${e.detail}`,guidelinesTooLong:"Linee guida troppo lunghe (massimo 200.000 caratteri)",invalidSourceUrl:"Sorgente non valida: URL non valido",privateSourceUrl:"Indirizzo locale o privato non ammesso come sorgente",invalidSource:e=>`Sorgente non valida: ${e.detail}`,sourceExists:"Sorgente già presente",sourceNotFound:e=>`Sorgente ${e.id} non trovata`,invalidProposalId:e=>`Identificativo proposta non valido: ${e.id}`,proposalNotFound:e=>`Proposta ${e.id} non trovata`,proposalInvalid:e=>`Proposta non valida: ${e.detail}`,proposalNotObject:"Proposta non valida: brand-kit.json non contiene un oggetto JSON",proposalKitFile:e=>`Proposta non valida: brand-kit.json ${e.reason}`,proposalBadJson:e=>`Proposta non valida: JSON non valido (${e.detail})`,proposalMissing:"mancante",proposedGuidelinesTooLong:"Linee guida proposte troppo lunghe",proposalClosed:"La proposta è già stata applicata o scartata",analysisRunning:"Un'analisi del brand o una descrizione degli asset è già in corso per questo progetto",addSourceFirst:"Aggiungi almeno un sito, un'immagine o una codebase da analizzare",noUsableCodebase:"Nessuna fonte si può analizzare: le cartelle delle codebase mancano o non sono utilizzabili",noAssetsToDescribe:"Nessun asset da descrivere",skipNotRegular:"non è un file regolare",skipTooLarge:"file troppo grande",skipUnreadable:"non leggibile",skipLinked:"file collegato non consentito",skipOutside:"fuori dal progetto",claudeCommandInvalidJson:e=>`MOTION_STUDIO_CLAUDE_COMMAND non è JSON valido (${e.detail}): usa un array JSON di stringhe`,claudeCommandNotArray:"MOTION_STUDIO_CLAUDE_COMMAND deve essere un array JSON di stringhe",claudeCommandEmpty:"claudeCommand vuoto",alreadyRunning:e=>`Motion Studio è già avviato (porta ${e.port})`,bootBusy:"Un altro Motion Studio si sta avviando con la stessa configurazione: riprova tra poco",formatCatalogInvalid:e=>`Catalogo formati non valido: ${e.detail}`,formatCatalogUnreadable:e=>`Il catalogo formati non si legge, quindi non è stato modificato: ${e.detail}`,customFormatNotFound:e=>`Non c'è un formato personalizzato "${e.id}"`,customFormatNotCustom:e=>`"${e.id}" non è un formato personalizzato: qui si modificano o eliminano solo quelli`,customFormatNameTaken:e=>`Un formato personalizzato si chiama già "${e.name}": scegli un altro nome`,customFormatInUse:e=>`${e.count===1?"Una creatività usa":`${e.count} creatività usano`} questo formato: tipo e dimensioni restano come sono (crea un nuovo formato per un'altra misura)`,customFormatMaybeInUse:e=>`${e.count===1?"Una creatività non si legge e potrebbe usare":`${e.count} creatività non si leggono e potrebbero usare`} questo formato: tipo e dimensioni restano come sono`,customFormatDurationShort:e=>`Una creatività usa questo formato per ${e.sec} s: la durata massima non può scendere sotto`,formatUnavailable:e=>`Il formato "${e.id}" non è più disponibile: toglilo dal brief`,invalidLanguage:"Scegli una lingua dall'elenco.",settingsNotWritable:e=>`Motion Studio non riesce a scrivere il file delle impostazioni (${e.path}). Controlla che il file e la sua cartella siano scrivibili e non bloccati (Finder: Ottieni informazioni, Bloccato), poi salva di nuovo.`,briefSessionGone:"Questa sessione del brief è finita (ricominciata o diventata una creatività altrove). Ricarica la pagina.",briefQueueFull:e=>`Al massimo ${e.max} messaggi possono aspettare l’agente: aspetta che finisca, oppure fermalo.`,briefSessionUnreadable:"La sessione del brief di questo progetto non si può leggere: inizia da capo per scartarla.",briefHandedOff:"Questa sessione del brief è stata spostata in una creatività, ma non del tutto: apri la creatività, oppure scarta la sessione.",briefSessionBusy:"L’agente sta ancora lavorando al brief: aspetta che finisca, oppure fermalo.",briefUnknownFormat:e=>`${e.id} non è un formato del catalogo: usa un id di list_formats.`,briefIdentityFormat:e=>`${e.id} è un formato di identità: l’agente del brief non può sceglierlo.`,briefFormatGap:e=>`${e.id}: le copie di un formato vanno dal suo id in su, senza salti: manca ${e.missing}.`,briefAssetOutside:e=>`${e.path} non è tra gli asset allegati a questa sessione.`,briefCodebaseOutside:e=>`${e.path} non è tra le cartelle collegate a questa sessione.`,briefFillLimit:e=>`fill_brief si può chiamare al massimo ${e.max} volte in un turno.`,briefBadField:e=>`fill_brief: ${e.field}: ${e.detail}`,briefSourceSize:e=>`${e.path}: la sua misura non è nota (solo un video o un’immagine degli Asset del progetto di cui si conosce la misura può dare un formato).`,briefSourceKind:e=>`${e.path} non è un video né un’immagine (un SVG o un altro file non ha una misura propria da usare come formato).`,briefSourceSmall:e=>`${e.path} è troppo piccolo per un formato (un lato sotto i 16 px).`,briefSourceNoName:e=>`Non c’è un nome libero per il formato di ${e.path}: rinomina uno dei formati personalizzati «Originale …» e riprova.`,briefAssetNotFound:e=>`${e.path} non è un file degli Asset del progetto.`,analysisEdited:"Questa analisi è stata modificata a mano: conferma per sostituirla con una nuova analisi.",analysisNotVideo:"Si possono analizzare solo i video degli Asset del progetto.",analysisBadWrite:e=>`write_video_analysis: ${e.detail}`,analysisNoWrite:"L'agente ha finito senza scrivere l'analisi (write_video_analysis non è stato chiamato).",analysisChanged:"Il video è cambiato durante l'analisi: verrà analizzato di nuovo.",analysisWriteLimit:"write_video_analysis si può chiamare al massimo 5 volte per esecuzione.",analysisGone:"Il video non è più negli Asset.",analysisNothingWaits:"Questa creatività non sta aspettando l'analisi di un video.",whisperNotFound:"Nessun Whisper trovato: installane uno o indicalo in Impostazioni → Trascrizione video.",whisperProbeFailed:e=>`Questo Whisper non ha funzionato su un secondo di audio di prova: ${e.detail}`,whisperModelMissing:"Il modello di Whisper non è installato.",transcriptionFailed:e=>`La trascrizione non è riuscita: ${e.reason}`,downloadSizeChanged:"La dimensione del download non è quella mostrata: riapri la scelta.",downloadBusy:"Si sta già scaricando un modello di Whisper: aspetta che finisca.",downloadHashMismatch:"Il file scaricato non è quello atteso (controllo sha256 non riuscito): è stato eliminato.",transcriptionNoKey:e=>`Non c'è una chiave ${e.provider} salvata: aggiungila in Impostazioni → Servizi.`,transcriptionNothingAsks:"Questo video non sta aspettando una scelta sulla trascrizione.",transcriptionRecheckTimeout:"La ricerca dei Whisper non ha risposto in tempo: riprova.",subtitlesRunning:"I sottotitoli di questa creatività sono già in preparazione.",subtitlesNoSet:"Non ci sono sottotitoli di cui rifare i tempi: falli prima.",subtitlesNoVideo:"L'ultima versione non ha un formato video: non c'è niente da sottotitolare.",noFfmpegSubtitles:"Per i sottotitoli serve ffmpeg, che non è stato trovato su questo Mac.",subtitlesTranscriptionOff:"La trascrizione dei video è disattivata: attivala in Impostazioni → Trascrizione video per fare i sottotitoli.",subtitlesConflict:"I sottotitoli sono stati modificati altrove: ricaricali.",subtitlesTooLarge:e=>`I sottotitoli superano ${e.maxMB} MB.`,subtitlesOncePerTurn:"I sottotitoli sono già stati chiesti in questo turno: partono quando finisce.",subtitlesNoLang:e=>`Questa creatività non ha sottotitoli in ${e.lang}.`,subtitlesUnknownCue:e=>`Nessuna riga dei sottotitoli ha questi id: ${e.ids}. Non è stato cambiato niente.`,subtitlesCueChanged:e=>`Queste righe dei sottotitoli sono cambiate da quando le hai lette: ${e.ids}. Non è stato cambiato niente: rileggile.`,subtitlesNoSource:"Non ci sono sottotitoli fatti dal parlato da tradurre: falli prima.",subtitlesSameLang:e=>`I sottotitoli sono già in ${e.lang}.`,subtitlesLangSpoken:e=>`I sottotitoli in ${e.lang} vengono dal parlato del video: non si traducono.`,subtitlesTranslating:e=>`I sottotitoli in ${e.lang} sono già in traduzione.`,subtitlesNoCues:e=>`I sottotitoli non hanno righe con questi id: ${e.ids}.`,subtitlesNoIds:"Indica almeno una riga dei sottotitoli da ritradurre.",subtitlesNothingToTranslate:e=>`Tutte le righe in ${e.lang} sono righe che hai corretto: non c'è niente da tradurre.`,subtitlesLangExists:e=>`Questa creatività ha già i sottotitoli in ${e.lang}.`,subtitlesNothingStale:e=>`Nessuna riga in ${e.lang} è da ritradurre.`,subtitlesNothingStaleCorrected:e=>`Le righe da ritradurre in ${e.lang} sono righe che hai corretto: sceglile per ritradurle.`,subtitlesFollowsSource:"Una traduzione ha i tempi dei sottotitoli da cui viene: controlla i tempi di quelli.",subtitlesSourceSet:"Questi sottotitoli vengono dal parlato del video e ci sono lingue tradotte da loro: elimina prima quelle traduzioni.",subtitlesSourceChanged:"I sottotitoli da cui traduceva non ci sono più (eliminati, o rifatti in un'altra lingua): non è stato scritto niente.",subtitlesLangTranslated:e=>`I sottotitoli in ${e.lang} sono una traduzione: per farli dal parlato del video, eliminali prima.`,subtitlesOtherSpeech:e=>`I sottotitoli dal parlato del video sono in ${e.other} e ci sono lingue tradotte da loro: per rifarli in ${e.lang} elimina prima quelle traduzioni. Per aggiungere una lingua usa «+ Lingua», che li traduce.`,subtitlesVoiceGone:e=>`Il video in ${e.lang} non ha più la sua voce tradotta: i suoi sottotitoli non si rifanno dal parlato. Eliminali e aggiungi di nuovo ${e.lang} con «+ Lingua», che li traduce.`,subtitlesTranslateBad:e=>`submit_subtitle_translation: ${e.detail}`,subtitlesTranslateLimit:"submit_subtitle_translation si può chiamare al massimo 5 volte per esecuzione.",transcriptionNoBundled:"Questa app non ha un Whisper suo: installane uno o indicalo in Impostazioni → Trascrizione video."},videoAnalysis:{waiting:e=>`Analisi del video in corso (${e.files})…`,skip:"Salta",skipped:e=>`Analisi saltata: l'agente usa il video così com'è (${e.files}).`,failed:e=>`L'analisi di ${e.file} non è riuscita: ${e.reason}`,states:{none:"Non analizzato",queued:"In coda",running:"In corso",waiting:"In attesa",ready:"Pronta",stale:"Non aggiornata",error:"Errore"},commit:e=>`Analisi video: ${e.file}`,editedCommit:e=>`Analisi video modificata: ${e.file}`,movedCommit:e=>`Analisi video spostata: ${e.from} → ${e.to}`,section:"Analisi",analyze:"Analizza",reanalyze:"Rianalizza",edit:"Modifica",stop:"Ferma",answer:"Scegli…",overwriteTitle:"L'analisi è stata modificata: sovrascriverla?",overwriteText:"Una nuova analisi sostituisce il testo che hai modificato a mano.",overwrite:"Sovrascrivi",summary:"Riepilogo",timeline:"Scene",moments:"Momenti utili",transcript:"Trascrizione",tags:"Tag",onScreenText:"Testo a schermo",seek:e=>`Vai a ${e.time}`,automatic:"Trascrizione automatica: i nomi possono essere sbagliati.",noTranscript:{skipped:"Trascrizione saltata.",noSpeech:"Nel video non si parla.",noAudio:"Il video non ha audio.",empty:"Nessun parlato riconosciuto."},edited:"Modificata a mano",raw:"Il testo è stato riscritto a mano: lo mostro così com'è.",hints:{none:"Il video si analizza quando entra in un brief, o subito con Analizza.",queued:"Parte appena finiscono le altre analisi del progetto.",checkingAudio:"Prima controlla se nell'audio si parla.",running:"L'agente sta guardando i fotogrammi del video…",stale:"Il video è cambiato dopo l'analisi.",staleEdited:"Il video è cambiato dopo la tua modifica: Rianalizza per aggiornarla.",long:"È un video lungo: scegli come analizzarlo.",transcription:"Serve una scelta sulla trascrizione del parlato."},editLabel:"Testo dell'analisi",editHint:"L'intestazione del file resta quella scritta dall'app.",actionFailed:e=>`Non riuscito: ${e.detail}`,analyzedMark:"Analizzato",longTitle:e=>`Video lungo: ${e.file}`,longText:e=>`Il video dura ${e.minutes} minuti: analizzarlo tutto usa molti token.`,longFull:"Analizza tutto",longReduced:"Analizza a densità ridotta",longEstimate:e=>`${e.frames} fotogrammi · circa ${e.tokens} token`,longReducedNote:"Un fotogramma per scena, al massimo uno ogni 30 secondi.",skipFailed:e=>`Non sono riuscito a saltare l'attesa: ${e.detail}`},transcription:{title:"Trascrizione video",why:"Con la trascrizione l'agente sa cosa viene detto e quando: può citarlo o sincronizzare i testi.",leavesMac:"L'audio lascia il Mac.",pythonCache:"Questo Whisper scarica i modelli nella sua cartella al primo uso.",dialogTitle:e=>`Trascrivere il parlato di ${e.file}?`,subtitlesTitle:e=>`Sottotitoli di ${e.title}: trascrivere il parlato?`,subtitlesWhy:"I sottotitoli si fanno dal parlato del video: per farli bisogna trascriverlo.",methods:{ask:"Chiedi ogni volta",whisper:"Whisper sul Mac",openai:"OpenAI",elevenlabs:"ElevenLabs",never:"Mai"},method:"Metodo",model:"Modello di Whisper",models:{small:"Small","large-v3-turbo":"Large v3 Turbo"},withOpenai:e=>`Trascrivi con OpenAI · ~${e.cost}`,withElevenlabs:e=>`Trascrivi con ElevenLabs · ~${e.cost}`,continueWithout:"Continua senza trascrizione",remember:"Ricorda la scelta",install:e=>`Installa · ${e.size}`,remove:"Rimuovi",installed:"Installato",notInstalled:"Non installato",downloading:e=>`Download in corso… ${e.percent}%`,useInstalled:"Usa un Whisper già installato",choose:"Scegli…",program:"Programma",modelFile:"File del modello (ggml)",test:"Prova",found:e=>`Whisper trovato: ${e.engine}, ${e.version}, ${e.model}, Metal/GPU ${e.gpu}`,gpu:{yes:"sì",no:"no",unknown:"non noto"},versionUnknown:"versione non nota",choicesLabel:"Come trascrivere il parlato",installing:"Installazione di Whisper…",installFailed:e=>`L'installazione non è riuscita: ${e.detail}`,choiceFailed:e=>`Scelta non riuscita: ${e.detail}`,chosen:"Scelta inviata: l'analisi continua.",free:"Gratis, resta sul Mac.",sub:"Quando un video con parlato entra in un brief, l'app lo trascrive con il metodo scelto. Vale per tutti i progetti.",methodSub:`Con "Chiedi ogni volta" l'app chiede per ogni video con parlato.`,modelSub:"Small è veloce e leggero; Large v3 Turbo è più preciso e più pesante.",installedSize:e=>`Installato · ${e.size}`,perMinute:e=>`circa ${e.cost} al minuto`,noKey:"Serve una chiave salvata in Impostazioni → Servizi a pagamento.",paidNote:"A pagamento: l'audio lascia il Mac.",inUse:e=>`In uso: ${e.engine} · ${e.source}`,noneInUse:"Nessun Whisper pronto: installa un modello o indica un Whisper già installato.",sources:{settings:"indicato da te",bundled:"incluso nell'app",detected:"trovato sul Mac"},detected:"Trovati su questo Mac",noneDetected:"Nessun Whisper sul PATH né nelle cartelle di Homebrew.",useThis:"Usa questo",stopUsing:"Non usarlo più",engine:"Motore",programPlaceholder:"/opt/homebrew/bin/whisper-cli",modelFilePlaceholder:"Facoltativo: un file ggml-*.bin che hai già",testAndSave:"Prova e salva",testing:"Prova in corso…",problem:e=>`Non ha funzionato: ${e.detail}`,saved:"Salvato",saveFailed:e=>`Non salvato: ${e.detail}`,removeFailed:e=>`Non rimosso: ${e.detail}`,loadFailed:e=>`Impossibile leggere le impostazioni della trascrizione: ${e.detail}`,pickFailed:e=>`Impossibile aprire la scelta del file: ${e.detail}`,searching:"Ricerca dei Whisper sul Mac…",searchAgain:"Cerca di nuovo",needsModel:"Funziona con un modello scaricato dall'app.",downloadsOwn:"Scarica da solo il suo modello al primo uso.",custom:"Indicato da te",whyTitle:"A cosa serve",whisperTitle:"Trascrivi con Whisper",recommended:"Consigliato",freeLocal:"Gratis · l'audio resta sul Mac",modelOnce:e=>`modello ${e.model}, ${e.size} una volta sola`,modelReady:e=>`modello ${e.model}`,ownModel:"scarica il suo modello al primo uso",paidHeading:"A pagamento",getWhisper:"Questa app non ha un Whisper suo: installane uno con uno di questi comandi nel Terminale, poi premi Ricontrolla.",stepBrew:"whisper.cpp con Homebrew",stepPip:"oppure Whisper per Python",copy:"Copia",copied:"Copiato",copyCommand:e=>`Copia ${e.command}`,copiedStatus:"Comando copiato.",copyFallback:e=>`Non è stato possibile copiarlo: il comando è selezionato, premi ${e.keys}.`,recheck:"Ricontrolla",rechecking:"Ricontrollo…",stillNone:"Ancora nessun Whisper trovato su questo Mac.",recheckFailed:e=>`Il controllo non è riuscito: ${e.detail}`,pickInstalled:"Già installato altrove? Indicalo in Impostazioni"},subtitles:{commit:e=>`Sottotitoli: ${e.title} (${e.lang})`,commitDeleted:e=>`Sottotitoli eliminati: ${e.title} (${e.lang})`,ready:e=>`Sottotitoli pronti (${e.lang}).`,readyOtherLang:e=>`Sottotitoli pronti in ${e.lang}: è la lingua parlata nel video, non quella del brief (${e.brief}).`,noSpeech:"Nessun parlato nel video: nessun sottotitolo.",transcriptionOff:"la trascrizione dei video è disattivata (Impostazioni → Trascrizione video).",transcriptionUnavailable:"la trascrizione non è stata fatta: il metodo scelto non è disponibile o non ha funzionato. Controlla Impostazioni → Trascrizione video.",transcriptionTimeout:"il controllo della trascrizione non ha risposto in tempo: riprova.",unsupportedUnknown:"Nessun sottotitolo: non è stato possibile riconoscere la lingua parlata nel video.",unsupported:e=>`Nessun sottotitolo: la lingua parlata nel video (${e.detected}) non è supportata.`,failed:e=>`I sottotitoli non sono riusciti: ${e.reason}`,notStarted:e=>`I sottotitoli non sono partiti: ${e.reason}`,cancelledNoTranscription:"Sottotitoli annullati: hai scelto di continuare senza trascrizione.",setUnreadable:e=>`il file ${e.file} non si legge come sottotitoli e potrebbe contenere le tue correzioni: correggilo o spostalo, poi rifai i sottotitoli.`,translated:e=>`Sottotitoli tradotti in ${e.lang}.`,translateFailed:e=>`Non è stato possibile tradurre i sottotitoli in ${e.lang}: ${e.reason}`,translateMissing:e=>e.count===1?"la traduzione ha tralasciato 1 riga":`la traduzione ha tralasciato ${e.count} righe`,translatedStale:e=>e.count===1?`Sottotitoli tradotti in ${e.lang}. 1 riga non corrisponde più alla sua riga d'origine (è cambiata nel frattempo, o l'avevi corretta): controllala.`:`Sottotitoli tradotti in ${e.lang}. ${e.count} righe non corrispondono più alla loro riga d'origine (sono cambiate nel frattempo, o le avevi corrette): controllale.`,translateNothing:e=>`Niente da tradurre in ${e.lang}: tutte le righe sono righe che hai corretto.`,notStartedTurn:"I sottotitoli non sono partiti: il turno non si è concluso. Chiedili di nuovo.",styleStarted:"Sottotitoli pronti: l'agente li disegna nel video.",styleWaiting:"Sottotitoli pronti: l'agente li disegnerà nel video appena finisce il lavoro in corso.",styleVersionRequest:"Sottotitoli disegnati nel video",styleAfterStop:"il lavoro precedente non si è concluso. Chiedi all'agente di disegnarli.",styleAskLater:"Sottotitoli pronti: chiedi all'agente di disegnarli nel video quando riprendi.",styleNotStarted:e=>`I sottotitoli non sono stati disegnati nel video: ${e.reason}`,readyTitle:"Sottotitoli pronti",download:e=>`Scarica ${e.ext}`,downloadFailed:e=>`Download non riuscito: ${e.detail}`,openEditor:"Apri l'editor",editorTitle:"Sottotitoli",backToCreative:"Torna alla creatività",backToEditor:"Torna all'editor",savedElsewhere:"Modificati altrove: ricaricati, le tue correzioni restano",saveState:"Stato del salvataggio",saving:"Salvataggio…",saved:"Salvato",saveFailed:"Salvataggio non riuscito",notSaved:"le ultime modifiche non sono salvate, il file non le avrebbe. Riprova quando il salvataggio è riuscito",retry:"Riprova",undo:"Annulla",redo:"Ripeti",loading:"Caricamento dei sottotitoli…",loadFailed:e=>`I sottotitoli non si sono caricati: ${e.detail}`,noSets:"Questa creatività non ha ancora sottotitoli: chiedili all'agente nella chat.",noPreview:"L'anteprima di questa versione non è disponibile: le righe si modificano lo stesso.",play:"Riproduci",pause:"Pausa",lines:"Righe",listLabel:"Righe dei sottotitoli",addLine:"+ Riga",noRoom:"Qui non c'è spazio per una nuova riga: porta il video in un punto senza sottotitoli.",findReplace:"Trova e sostituisci",find:"Trova",replaceWith:"Sostituisci con",matchCase:"Maiuscole/minuscole",replaceAll:"Sostituisci tutto",matches:e=>e.count===1?"1 riga":`${e.count} righe`,row:e=>`Riga ${e.n}`,start:e=>`Inizio della riga ${e.n}`,end:e=>`Fine della riga ${e.n}`,text:e=>`Testo della riga ${e.n}`,timeHint:"Scrivi il tempo come mm:ss.mmm",split:"Dividi al cursore",merge:"Unisci con la successiva",remove:"Elimina la riga",timeline:"Timeline",timelineHint:e=>`Trascina una riga o i suoi bordi per cambiarne i tempi; ${e.mod} + rotellina per lo zoom`,waveformLoading:"Carico la forma d'onda…",timingChanged:"Il video è cambiato: ricontrolla i tempi",translationTimingChanged:"I tempi di questa traduzione non sono più quelli dei sottotitoli da cui viene: rifai i tempi di quelli, o ritraduci.",timingAligned:"I tempi sono di nuovo allineati al video.",retime:"Rifai i tempi",retimed:e=>`Tempi dei sottotitoli rifatti (${e.lang}).`,retimeStarted:"Rifaccio i tempi: le righe che hai corretto tengono il loro testo.",retimeFailed:e=>`I tempi non sono ripartiti: ${e.detail}`,timingChecked:"Tempi controllati",timingCheckedHint:"I tempi vanno bene così: l'avviso sparisce finché il video non cambia di nuovo.",timingCheckedFailed:e=>`I tempi non sono stati segnati come controllati: ${e.detail}`,redoMenu:"Rifai la trascrizione…",redoTitle:"Rifai la trascrizione",redoLanguage:"Lingua parlata",redoAuto:"Riconoscila da sola",redoHint:"Le righe che hai corretto restano come sono.",redoOtherLanguage:"Il parlato del video ha un solo insieme di sottotitoli: con un'altra lingua si rifà in quella (se nessuna lingua è tradotta da lui). Per aggiungere una lingua usa «+ Lingua».",redoStart:"Rifai la trascrizione",redoStarted:"Trascrizione avviata: i sottotitoli si aggiornano quando è pronta.",redoFailed:e=>`La trascrizione non è partita: ${e.detail}`,languages:"Lingue dei sottotitoli",addLanguage:"+ Lingua",addLanguageTitle:"Aggiungi una lingua",addFromBrief:"Lingue del brief",addOthers:"Altre lingue",addHint:"Si traduce dalle righe del parlato, corrette comprese; una lingua che il video ha già con la sua voce si trascrive da quella.",addFailed:e=>`La lingua non è stata aggiunta: ${e.detail}`,notSavedSwitch:"Le modifiche non sono salvate: riprova prima di cambiare lingua.",pendingLanguage:e=>`Preparo i sottotitoli in ${e.lang}…`,pendingFailed:e=>`I sottotitoli in ${e.lang} non sono stati fatti: ${e.detail}`,noLanguage:e=>`Questa creatività non ha sottotitoli in ${e.lang}: aggiungili con «+ Lingua».`,sourceText:"Testo originale",staleMark:"Testo originale cambiato",staleHint:"La riga da cui viene questa traduzione è cambiata: «Ritraduci» la traduce di nuovo.",goneMark:"Riga originale tolta",goneHint:"La riga da cui veniva questa traduzione non c'è più: tienila o eliminala.",retranslate:"Ritraduci",retranslateAll:"Ritraduci tutto",missingTranslation:"Manca la traduzione",missingTranslationHint:"Queste righe dell'originale non hanno ancora una riga in questa lingua: «Ritraduci tutto» le traduce.",retranslateAllHint:"Ritraduce le righe il cui testo originale è cambiato e traduce quelle che mancano; quelle che hai corretto restano come sono (usa «Ritraduci» sulla riga).",retranslateStarted:"Ritraduzione avviata: le righe si aggiornano quando è pronta.",retranslateFailed:e=>`La ritraduzione non è partita: ${e.detail}`,retranslateDropped:e=>e.count===1?"Tolta 1 riga senza più il testo originale.":`Tolte ${e.count} righe senza più il testo originale.`,deleteLanguage:e=>`Elimina i sottotitoli in ${e.lang}`,deleteConfirm:e=>`I sottotitoli in ${e.lang} hanno ${e.count===1?"1 riga che hai corretto":`${e.count} righe che hai corretto`}: eliminandoli la correzione va persa.`,deleteYes:"Elimina",deleteNo:"Annulla",deleteFailed:e=>`I sottotitoli non sono stati eliminati: ${e.detail}`,translateInto:e=>`Traduci in ${e.language}`,translateIntoFailed:e=>`La traduzione non è partita: ${e.detail}`,warnings:{tooLong:"Troppo lunga",tooFast:"Troppo veloce",tooShort:"Troppo breve",tooLongOnScreen:"Troppo a lungo",overlap:"Si sovrappone",placeholder:"Da scrivere"},warningHints:{tooLong:e=>`Non sta in ${e.lines} righe: accorciala o dividila.`,tooFast:e=>`Più di ${e.cps} caratteri al secondo: troppo veloce da leggere. Accorcia il testo o allunga la riga.`,tooShort:e=>`Resta sullo schermo meno di ${e.seconds} secondo: allungala.`,tooLongOnScreen:e=>`Resta sullo schermo più di ${e.seconds} secondi: dividila.`,overlap:"Finisce dopo l'inizio della riga che segue.",placeholder:"Ha ancora il testo segnaposto «…»: scrivi la battuta o elimina la riga, se no finisce nei file."}},briefSession:{filled:e=>`Compilato il brief: ${e.parts}`,parts:{texts:"testi",length:"durata",assets:e=>`${e.count} asset`,codebases:e=>`${e.count} codebase`,formats:e=>e.count===1?"1 formato":`${e.count} formati`,variants:e=>e.count===1?"1 variante":`${e.count} varianti`},keptYours:e=>` · tenuti i tuoi: ${e.fields}`,sourceFormatName:e=>`Originale ${e.width}×${e.height}`,sourceFormatAdded:e=>`Aggiunto «${e.name}» ai formati personalizzati`,nothingWritten:"Nessun campo del brief è cambiato",reclaimed:e=>`L'agente ha riscritto ${e.fields} su tua richiesta`,fieldNames:{goal:"Cosa vuoi realizzare",message:"Messaggio chiave",durationSec:"Durata dei video",assets:"Asset da usare",linkedCodebases:"Codebase",notes:"Note per l'agente",formats:"Formati",variants:"Varianti"},creativeStarts:e=>`${e.title} · ${e.formats}. La sessione del brief resta qui sopra.`,memoryUnavailable:"La memoria della sessione del brief non è più disponibile: l'agente riparte dal suo riassunto."},brand:{droppedKeepFailed:e=>`${e.name}: versione attuale non mantenuta (troppe voci, massimo ${e.limit})`,droppedNotList:e=>`${e.label}: elenco non valido`,droppedDuplicateId:e=>`${e.name}: id duplicato`,droppedTooMany:e=>`${e.name}: troppe voci (massimo ${e.limit})`,droppedPrefix:e=>`Voci scartate: ${e.list}`,droppedMore:e=>`e altre ${e.count}`,droppedOutsideAssets:e=>`${e.label} (${e.file} fuori da assets/)`,droppedNotFound:e=>`${e.label} (${e.file} non trovato)`,droppedNotRegistered:e=>`${e.file} (non registrato)`,ignoredGuidelines:e=>`guidelines.md (ignorato: ${e.reason})`,ignoredSummary:e=>`summary.md (ignorato: ${e.reason})`,ignoredAssetList:e=>`assets.json della proposta (ignorato: ${e.reason})`,ignoredDescriptions:e=>`File delle descrizioni ignorato: ${e.reason}`,assetRemovedWhileDescribing:e=>`${e.file} eliminato durante la descrizione: saltato`,commitAnalysis:e=>`Analisi brand ${e.id}`,commitAnalysisAssets:e=>`Asset dell'analisi brand ${e.id} (non riuscita)`,commitDescribe:"Descrizione asset",commitApply:e=>`Applica proposta ${e.id}`,commitDiscard:e=>`Scarta proposta ${e.id}`,siteFontsSummary:e=>`Font del sito: ${e.count===1?"1 nota":`${e.count} note`}: ${e.list}${e.more?" · …":""}`,siteBlocked:e=>`${e.url} non letto (indirizzo non consentito)`,siteUnreachable:e=>`${e.url} non raggiungibile`,siteStatus:e=>`${e.url} ha risposto ${e.status}`,siteTooLarge:e=>`${e.url} supera ${e.mb} MB: letto solo l'inizio`,siteOffSite:e=>`${e.url} non letto (foglio di stile su un altro sito)`,siteScheme:e=>`${e.url} ignorato (solo indirizzi http e https)`,siteTooManySheets:e=>`più di ${e.max} fogli di stile: gli altri non sono stati letti`,siteImportDepth:e=>`${e.url} non letto (import annidati oltre ${e.max} livelli)`,siteImportCycle:e=>`${e.url} importa sé stesso in un ciclo: letto una volta`,siteTooManyFaces:e=>`più di ${e.max} regole @font-face: le altre sono state ignorate`,siteTimeout:e=>`interrotto al limite di tempo (${e.seconds} s): risultato parziale`,siteFontUrlsIgnored:e=>e.count===1?"1 indirizzo di font ignorato (solo http e https)":`${e.count} indirizzi di font ignorati (solo http e https)`},doctor:{supportedVersion:"Versione supportata",nodeTooOld:"Serve Node.js 22 o superiore",nodeFix:"Installa Node.js 22+ da https://nodejs.org",installed:"Installato",gitMissing:"Git non trovato",gitFix:"Installa Git da https://git-scm.com",ffmpegRecommended:"Consigliato per montaggio e conversioni video",ffmpegFix:"Installa FFmpeg da https://ffmpeg.org (macOS: brew install ffmpeg)",ffmpegArch:e=>e.translated?`${e.arch} con Rosetta: render più lenti`:e.arch,ffmpegUniversal:"universale",ffmpegWrongArch:"FFmpeg trovato ma compilato per Intel: su questo Mac non può partire. Installa la versione per Apple Silicon, es. con Homebrew in /opt/homebrew",ffmpegRosetta:"Installato: una build Intel che gira con Rosetta su Apple Silicon. I render funzionano, più lentamente; una build arm64 (Homebrew in /opt/homebrew) è più veloce",claudeMissing:"Claude Code non trovato",broken:"Installato ma non risponde correttamente",brokenDetail:e=>`Installato ma non risponde correttamente: ${e.detail}`,claudeAuthLabel:"Accesso a Claude",installClaudeFirst:"Installa prima Claude Code",claudeMustRespond:"Claude Code deve prima rispondere correttamente",authenticated:"Autenticato",notAuthenticated:"Claude Code non è autenticato",sandboxLabel:"Sandbox dell'agente",sandboxAvailable:"Disponibile: l'agente lavora isolato nella cartella del progetto",sandboxFix:"Senza sandbox Motion Studio usa permessi più ristretti; vedi il README",shellPathLabel:"PATH della shell di login",shellPathLoaded:"PATH caricato dalla shell di login",shellPathFallback:e=>`PATH di riserva: ${e.reason}`,unknownReason:"motivo sconosciuto",workspacePathLabel:"Percorso della cartella di lavoro",workspaceSettingsLabel:"Impostazioni dell'area di lavoro",workspacePathGlob:"Il percorso contiene [ ] * o ?: la sandbox protegge meno i registri di Motion Studio (macOS) o non li protegge affatto (Linux)",workspacePathFix:"Sposta la cartella di lavoro in un percorso senza questi caratteri, poi sceglila di nuovo",folderGlobChars:e=>`Il percorso ${e.path} contiene ( ) [ ] { } * ? o \\: le regole dell'agente a protezione dei file di Motion Studio non riescono a confrontarlo in modo sicuro, quindi ogni esecuzione dell'agente lì è rifiutata (sfogliare ed esportare funzionano ancora)`,folderGlobFix:"Rinomina la cartella con questi caratteri (per una cartella di progetto che è un collegamento: rinomina la destinazione, poi ricrea il collegamento), poi scegli di nuovo la cartella di lavoro",updatesLabel:"Aggiornamenti automatici",updatesOff:"Non attivi in questa versione",denyPathsLabel:"Percorsi della cartella home e di configurazione",denyPathsGlob:e=>e.count===1?`Il percorso ${e.paths} contiene ( ) [ ] { } * ? o \\: le regole che negano all'agente l'accesso (token, file segreti) potrebbero non valere lì`:`I percorsi ${e.paths} contengono ( ) [ ] { } * ? o \\: le regole che negano all'agente l'accesso (token, file segreti) potrebbero non valere lì`,shellPathFix:"Se mancano programmi, avvia Motion Studio dal terminale o controlla i file di avvio della shell",sandboxAvailableReason:"Disponibile",sandboxExecMissing:"sandbox-exec non trovato: la sandbox di macOS non è disponibile",sandboxLinuxMissing:e=>`Mancano ${e.tools}: installa bubblewrap e socat per isolare l'agente`,sandboxAnd:"e",sandboxWindows:"La sandbox di Claude Code non è disponibile su Windows",sandboxUnsupported:e=>`La sandbox non è supportata su ${e.platform}`,sandboxOff:"Isolamento disattivato nelle Impostazioni",liveMessagesLabel:"Messaggi durante il lavoro",liveMessagesQueued:"solo in coda (non verificati per questa versione di Claude Code)",liveMessagesSupported:"attivi (verificati per questa versione di Claude Code)",liveMessagesOff:"solo in coda (disattivati nelle impostazioni dell’area di lavoro)",interruptLabel:"Interruzione",interruptStopResume:"ferma e riprendi",interruptSupported:"attiva (verificata per questa versione di Claude Code)",interruptOff:"ferma e riprendi (disattivata nelle impostazioni dell’area di lavoro)"},approvals:{briefReadOnly:"L'agente del brief legge solo le cartelle collegate e il progetto: nient'altro si può approvare.",videoAnalysisReadOnly:"L'analisi video guarda solo i fotogrammi estratti: nient'altro si può approvare.",subtitlesTranslateOnly:"La traduzione dei sottotitoli consegna solo le righe tradotte: nient'altro si può approvare.",runCommand:"Eseguire un comando",editOutside:"Modificare un file fuori dal progetto",readOutside:"Leggere un file fuori dal progetto",openPage:"Aprire una pagina web",useTool:e=>`Usare lo strumento ${e.tool}`,editsIn:e=>`Modifiche in ${e.dir}`,readsIn:e=>`Letture in ${e.dir}`,commandsLabel:e=>`Comandi "${e.command}"`,pagesOf:e=>`Pagine di ${e.host}`,providerNoConfirm:e=>`Uso di ${e.provider} senza conferma`,toolLabel:e=>`Strumento ${e.tool}`,generateImage:"Generare un'immagine con gpt-image-2",imageDetail:e=>`${e.width}×${e.height}${e.refs?`, ${e.refs} riferimenti`:""}: ${e.prompt}`,generateVoice:e=>`Generare una voce con ${e.provider}`,readOnlyTurn:"Un turno di traduzione legge soltanto i file e invia le traduzioni: le scrive Motion Studio",coordinatorReadOnly:"L'agente con cui parli legge solo il progetto e ti fa domande: il lavoro sui file lo fanno i turni delle varianti",directionsTurnOnly:"Un turno delle direzioni propone solo le direzioni delle varianti: non usa altri strumenti",brandCodebaseToolDenied:"Un'analisi del brand da una codebase non esegue comandi né cerca nel contenuto dei file: apri i file per nome con Read",moreCalls:e=>`…e altre ${e.count}`,generateVoices:e=>`Generare ${e.count===1?"una voce tradotta":`${e.count} voci tradotte`} con ${e.provider}`,voicesBatchDetail:e=>`${e.count===1?"1 chiamata":`${e.count} chiamate`}, ${e.chars} caratteri in tutto: ${e.list}`,variantBatchTitle:e=>`Servizi a pagamento per ${e.count} varianti`,variantBatchDetail:e=>`Chiamate stimate (prezzo non noto): ${e.providers}. Per variante: ${e.variants}. Nessuna variante parte prima della tua risposta. Rifiuta avvia le varianti senza servizi a pagamento (in questa esecuzione non verrà fatta nessuna chiamata a pagamento); per annullare del tutto la generazione, ferma il lavoro.`,variantBatchItem:e=>`Variante ${e.letter} · ${e.service} (${e.provider})`,serviceNames:{images:"Immagini",voice:"Voce",music:"Musica",sfx:"Effetti sonori"},generateSfx:e=>`Generare un effetto sonoro con ${e.provider}`,generateMusic:e=>`Generare musica con ${e.provider}`,audioDetail:e=>`${e.provider}, ${e.seconds===null?"durata scelta dal servizio":`${e.seconds} s`}: ${e.prompt}`,denied:"L'utente ha negato questa azione.",expired:"Nessuna risposta entro 10 minuti: azione negata.",protectedPath:"La cartella di configurazione di Motion Studio è vietata all'agente (contiene token di accesso): richiesta negata senza chiedere all'utente.",invalidRequest:"Richiesta non valida.",unknownTool:"sconosciuto",providerNotApproved:"L'utente non ha approvato l'uso del provider",questionTitle:"L'agente ti fa una domanda",questionSkipped:"L'utente ha scelto di non rispondere. Prosegui con la scelta più ragionevole e di' cosa hai deciso.",questionExpired:"Nessuna risposta entro 10 minuti. Prosegui con la scelta più ragionevole e di' cosa hai deciso."},validation:{manifestMissing:e=>`manifest.json mancante in ${e.dir}`,manifestInvalid:e=>`manifest.json non valido: ${e.detail}`,unknownPreset:e=>`Preset sconosciuto: ${e.id} (non è nel catalogo formati)`,missingFormat:e=>`Manca il formato ${e.label} (${e.id})`,fileNotFound:e=>`File non trovato per ${e.id}: ${e.file}`,badExtension:e=>`${e.file}: estensione .${e.ext} non ammessa per ${e.id} (ammesse: ${e.allowed})`,tooLarge:e=>`${e.file}: ${e.size} MB, massimo ${e.max} MB`,notReadable:e=>`${e.file}: file non leggibile come media`,badResolution:e=>`${e.file}: risoluzione ${e.width}×${e.height}, attesa ${e.expectedWidth}×${e.expectedHeight}`,notAVideo:e=>`${e.file}: non sembra un video`,durationOverMax:e=>`${e.file}: durata ${e.duration}s oltre il massimo di ${e.max}s`,durationOffTarget:e=>`${e.file}: durata ${e.duration}s, richiesta circa ${e.target}s`,reservedName:e=>`${e.file}: questo nome appartiene a ${e.format}, che in questa versione consegna Motion Studio; rinomina il tuo file`,compositionMissing:e=>`Manca la composizione di ${e.label} (${e.id}): scrivi ${e.dir}/composition.json`,compositionProblem:e=>`${e.dir}: ${e.text}`},outputs:{largeFile:e=>`File pesante: ${e.sizeMB} MB a ${e.mbps} Mbps (circa ${e.targetMbps} Mbps bastano per ${e.channel})`,keptUnchanged:e=>`${e.format} non faceva parte di questa richiesta: il file dell’agente è stato scartato e quello precedente è rimasto invariato`,followerReplaced:e=>`${e.format}: il file dell’agente è stato scartato; Motion Studio ha copiato al suo posto ${e.primary}`},composition:{jsonEmpty:"composition.json è vuoto: scrivi la composizione come JSON UTF-8",jsonNotUtf8:"composition.json non è UTF-8 valido: salvalo in UTF-8 (non UTF-16 né Latin-1)",jsonSyntax:e=>`composition.json non è JSON valido (${e.detail}): correggi la sintassi`,jsonTooLarge:e=>`composition.json pesa ${e.sizeMB} MB, oltre il limite di ${e.maxMB} MB: sposta i contenuti lunghi in livelli html o negli asset`,limit:e=>`${e.path}: più di ${e.max} elementi, il massimo: semplifica la composizione`,moreProblems:"Altri problemi non sono elencati: correggi questi e valida di nuovo",unknownField:e=>`${e.path}: campo sconosciuto "${e.field}": toglilo o controlla il nome nello schema`,missingField:e=>`${e.path}: manca un campo obbligatorio: aggiungilo`,wrongType:e=>`${e.path}: atteso ${e.expected}: correggi il tipo del valore`,badValue:e=>`${e.path}: valore non ammesso; usa uno tra: ${e.allowed}`,tooSmall:e=>`${e.path}: deve essere almeno ${e.min}`,notAbove:e=>`${e.path}: deve essere maggiore di ${e.min}`,tooBig:e=>`${e.path}: deve essere al massimo ${e.max}`,tooLong:e=>`${e.path}: più lungo di ${e.max} caratteri: accorcialo`,invalid:e=>`${e.path}: valore non valido: controllalo con lo schema`,badId:e=>`${e.path}: id non valido: usa lettere minuscole, cifre e trattini (al massimo 64), iniziando con una lettera o una cifra`,badColor:e=>`${e.path}: colore non valido: usa l'esadecimale #rrggbb (o #rgb, #rgba, #rrggbbaa)`,badPath:e=>`${e.path}: percorso non valido: usa un percorso relativo sotto assets/ o layers/, senza "..", "\\", ":", "%", "?", "#" né schema`,badFontFamily:e=>`${e.path}: famiglia di font non valida: usa un solo nome di famiglia dichiarato in fonts[], senza virgolette né alternative`,badEase:e=>`${e.path}: easing non valido: usa un easing CSS come linear, ease-out o cubic-bezier(.2,.8,.2,1)`,badParamKey:e=>`${e.path}: nome del parametro non valido: usa lettere, cifre e _ (al massimo 64), senza iniziare con una cifra`,badAnimation:e=>`${e.path}: animazione non valida: usa {preset, duration}, {prop, from, to, duration} o {prop, keyframes, duration}`,scriptNeedsVoice:e=>`${e.path}: lo script appartiene a una clip voce: imposta role "voice" o togli lo script`,duplicateId:e=>`L'id "${e.id}" è usato più volte: dai a ogni scena, traccia e clip un id diverso`,sceneStart:e=>`La scena ${e.scene} inizia a ${e.start}s: la prima scena deve iniziare a 0`,sceneGap:e=>`Vuoto tra la scena ${e.previous} (finisce a ${e.from}s) e la scena ${e.scene} (inizia a ${e.to}s): rendi le scene contigue`,sceneOverlap:e=>`La scena ${e.scene} inizia a ${e.to}s, prima che finisca la scena ${e.previous} (${e.from}s): le scene non devono sovrapporsi; elencale in ordine di tempo`,scenesEnd:e=>`Le scene finiscono a ${e.end}s ma la composizione dura ${e.duration}s: l'ultima scena deve finire esattamente alla durata`,fontWeightUndeclared:e=>`La clip ${e.clip}: ${e.family} non dichiara il peso ${e.weight} (dichiara ${e.declared}): il testo è disegnato con un peso sintetizzato o vicino; dichiara il peso in fonts[] o usane uno dichiarato`,stillScenes:"Un fotogramma singolo (durata 0) ignora le scene: puoi svuotare scenes[]",stillAnimations:e=>`Clip ${e.clip}: un fotogramma singolo mostra solo t = 0, quindi le sue animazioni sono ignorate: puoi toglierle`,stillAudio:e=>`Traccia ${e.track}: un fotogramma singolo non ha audio, quindi le sue clip audio sono ignorate: puoi toglierle`,clipStill:e=>`Clip ${e.clip}: in un fotogramma singolo ogni clip inizia a 0`,clipZero:e=>`La clip ${e.clip} dura 0 secondi: dalle una durata positiva o toglila`,clipOutside:e=>`La clip ${e.clip} va da ${e.start}s a ${e.end}s, fuori dalla composizione (da 0 a ${e.duration}s): spostala o accorciala`,clipOutsideScene:e=>`La clip ${e.clip} è fuori dalla sua scena ${e.scene} (da ${e.start}s a ${e.end}s): spostala dentro la scena o cambiale scena`,unknownScene:e=>`La clip ${e.clip} fa riferimento alla scena ${e.scene}, che non esiste: usa un id di scenes[]`,trackKind:e=>`La clip ${e.clip} (${e.type}) non può stare sulla traccia ${e.track} (${e.kind}): le clip audio vanno sulle tracce audio, le clip sottotitoli sulla traccia sottotitoli, tutte le altre sulle tracce visual, video o text`,subtitlesTwice:()=>"Una composizione ha al massimo una traccia sottotitoli: togli le altre",subtitlesSpan:e=>`Traccia ${e.track}: una traccia sottotitoli ha una sola clip sottotitoli, da 0 a ${e.duration}s, senza scena`,subtitlesOnStill:()=>"Un fotogramma singolo non ha tempo in cui disegnare i sottotitoli: togli la traccia sottotitoli",animationOutside:e=>`Clip ${e.clip}: un'animazione finisce a ${e.end}s, dopo la clip (lunga ${e.duration}s); i tempi delle animazioni sono relativi all'inizio della clip`,keyframesOrder:e=>`Clip ${e.clip}: i tempi dei keyframe devono crescere da 0 a 1`,animationValue:e=>`Clip ${e.clip}: valori sbagliati per l'animazione di ${e.prop}: "color" vuole colori esadecimali, ogni altra proprietà vuole numeri`,fontMissing:e=>`La clip di testo ${e.clip} non ha un font e fonts[] è vuoto: metti un file di font sotto assets/, dichiaralo in fonts[] e imposta fontFamily`,unknownFont:e=>`La clip ${e.clip} usa il font "${e.family}", che non è in fonts[]: metti il file del font sotto assets/ e dichiaralo in fonts[]`,fontNotAsset:e=>`Font ${e.family}: ${e.src} deve essere un file di font (.ttf, .otf, .woff, .woff2) sotto assets/`,layerNotHtml:e=>`Clip ${e.clip}: ${e.src} deve essere un file .html sotto layers/`,mediaNotAsset:e=>`Clip ${e.clip}: ${e.src} deve essere un file sotto assets/`,assetMissing:e=>`${e.path} non è nella cartella della composizione: aggiungi il file o correggi il percorso`,assetsTooLarge:e=>`La cartella della composizione pesa ${e.sizeMB} MB, oltre il limite di ${e.maxMB} MB: comprimi, accorcia o togli dei media`,sizeMismatch:e=>`Dimensione ${e.width}×${e.height}, ma ${e.format} è ${e.expectedWidth}×${e.expectedHeight}: imposta width e height alla dimensione del formato`,durationOverMax:e=>`La durata di ${e.duration}s supera il massimo di ${e.max}s per ${e.format}: accorcia la composizione`,stillForVideo:e=>`${e.format} è un video: la durata deve essere maggiore di 0`,durationForImage:e=>`${e.format} è un'immagine: imposta la durata a 0 (fotogramma singolo), non ${e.duration}s`,layerNetwork:e=>`${e.file}, riga ${e.line}: ${e.api} non è ammesso, i livelli html non hanno rete: metti i file sotto assets/ e usali con percorsi relativi`,layerWorker:e=>`${e.file}, riga ${e.line}: ${e.api} non è ammesso nei livelli html: esegui il codice nel livello stesso`,layerAudio:e=>`${e.file}, riga ${e.line}: ${e.api} non è ammesso nei livelli html: metti il suono su una traccia audio della composizione`,layerAutoplay:e=>`${e.file}, riga ${e.line}: nei livelli html i media non devono partire da soli (${e.api}): usa una clip video o audio della composizione`,jsonMissing:"composition.json manca o non si può leggere in sicurezza: scrivi la composizione come file normale nella cartella della composizione",folderUnreadable:e=>`La cartella della composizione non si può leggere in sicurezza (${e.path}): togli link, hard link e file speciali, e resta nei limiti`,ambiguousNames:e=>`Due file della cartella della composizione hanno lo stesso nome una volta normalizzato in Unicode (${e.path}): rinominane uno`,durationOffBrief:e=>`La composizione dura ${e.duration}s, ma ne erano stati chiesti circa ${e.target}: correggi la durata e le scene`,vectorShape:e=>`Logo, favicon e icona app sono composizioni vettoriali: ${e.reason}`,logoDarkMissing:'Il logo non ha la versione negativa per sfondi scuri: aggiungi un secondo clip svg con "id": "dark", "hidden": true, a tutto quadro, "fit": "contain" e un file suo (es. assets/logo-dark.svg): lo stesso disegno con i colori per uno sfondo scuro',svgRefused:e=>`${e.file} è stato rifiutato dal controllo SVG: ${e.reason}`,svgText:e=>`${e.file} contiene testo: convertilo in tracciati, altrimenti cambia aspetto dove il font non è installato`,svgRefusedSummary:e=>`${e.file} non ha passato il controllo di sicurezza degli SVG (${e.count} ${e.count===1?"motivo":"motivi"})`,svgRefusedDetails:"Dettagli"},editor:{locked:e=>`La clip ${e.clip} è bloccata: sbloccala per modificarla`,unknownClip:e=>`Non c'è nessuna clip ${e.clip}`,unknownTrack:e=>`Non c'è nessuna traccia ${e.track}`,unknownScene:e=>`Non c'è nessuna scena ${e.scene}`,unknownParam:e=>`La clip ${e.clip} non ha il parametro ${e.key}`,badProp:e=>`Clip ${e.clip}: ${e.key} non si può modificare qui`,badValue:e=>`Clip ${e.clip}: il valore di ${e.key} non è valido`,badParam:e=>`Clip ${e.clip}: il valore di ${e.key} non è adatto al parametro`,badAsset:e=>`${e.path} non è un file di questa composizione in assets/`,badFont:e=>`${e.family}: un font deve essere un file .ttf, .otf, .woff o .woff2 in assets/`,fontExists:e=>`Il font ${e.family} è già nella composizione`,wrongType:e=>`Questa modifica non vale per una clip ${e.type} (${e.clip})`,stillTiming:"Un fotogramma singolo non ha linea del tempo: tempi, scene e animazioni non valgono",customAnimation:e=>`La clip ${e.clip} ha un'animazione personalizzata nello slot ${e.slot}: chiedi all'agente di cambiarla`,badOrder:"Il nuovo ordine delle scene deve elencare ogni scena una volta",sceneOrderBlocked:e=>`Le scene non si possono riordinare: la clip ${e.clip} non sta dentro una sola scena`,readOnly:"Qui le modifiche non sono disponibili: questa vista è di sola lettura",invalid:e=>`La modifica renderebbe la composizione non valida (${e.path})`,badWeight:e=>`Clip ${e.clip}: ${e.family} non ha il peso ${e.weight} (ha ${e.declared})`,badOp:"Questa modifica non è supportata",itemText:e=>`testo di ${e.name}`,itemStyle:e=>`stile di ${e.name}`,itemLayout:e=>`posizione di ${e.name}`,itemTiming:e=>`tempi di ${e.name}`,itemMedia:e=>`file di ${e.name}`,itemFlags:e=>`visibilità di ${e.name}`,itemSceneDuration:e=>`durata della scena ${e.n}`,itemSceneOrder:"ordine delle scene",itemAnimation:e=>`animazione di ${e.name}`,itemParam:e=>`${e.name} ${e.key}`,itemFont:e=>`font ${e.family}`,itemSvg:e=>{const t=[...e.colors>0?[e.colors===1?"1 colore cambiato":`${e.colors} colori cambiati`]:[],...e.texts>0?[e.texts===1?"1 testo":`${e.texts} testi`]:[],...e.hidden>0?[e.hidden===1?"1 elemento mostrato o nascosto":`${e.hidden} elementi mostrati o nascosti`]:[]];return t.length>0?`${e.name}: ${t.join(", ")}`:`contenuto SVG di ${e.name}`},summary:e=>`Modifiche dirette: ${e.items}${e.more>0?` e altre ${e.more}`:""}`,stageNoSession:"Quest'anteprima è terminata: riapri l'editor",stagingBusy:"Un file di questa bozza è ancora in preparazione: salva di nuovo quando è pronto.",stageTimeout:e=>`La preparazione di ${e.file} ha richiesto troppo tempo (oltre ${e.minutes} min): prova un video più corto o più piccolo.`,stageNotRegistered:e=>`${e.file} non è tra gli Asset del progetto`,stageUnreadable:e=>`${e.file} non si può leggere in modo sicuro: deve essere un file normale dentro la cartella assets del progetto`,stageUnsupported:e=>`${e.file} non si può usare in una composizione: usa un file immagine, SVG, video, audio o font`,stageNotMedia:e=>`${e.file} non è un file multimediale leggibile`,stageTooLarge:e=>`${e.file} supera i ${e.maxMB} MB`,stageTooMany:e=>`Una bozza può aggiungere al massimo ${e.max} file: salvala prima come nuova versione`,stageUnknownBrandFont:"Questo font non è nel brand kit",stageBrandFontNoFile:e=>`${e.family} non ha un file del font nel brand kit`,stagedCollision:e=>`${e.path} esiste già in questa composizione con un altro contenuto: aggiungi di nuovo il file`,stageSvgBadBase:e=>`${e.file} non è un SVG di questa composizione: riapri l'editor`,summaryNone:"Modifiche dirette",busy:"L'agente o un render sta lavorando su questa creatività: salva la bozza quando ha finito",unchanged:e=>`Nessuna modifica: ${e.format} è uguale alla v${e.n}, quindi non è stata salvata una versione nuova.`,baseChanged:e=>`${e.format} è cambiato in v${e.n} mentre lo modificavi: riapri l'editor sull'ultima versione (la bozza resta finché non la scarti)`,carryFailed:e=>`${e.format} in v${e.n} non è più la composizione registrata: chiedi all'agente di rifarlo prima di salvare`,saveInvalid:e=>`La bozza non si può salvare: ${e.text}`,srcUnavailable:e=>`Clip ${e.clip}: ${e.path} non è un file di questa versione né un file aggiunto a questa bozza`,fontUnavailable:e=>`Font ${e.family}: ${e.path} non è un file di questa versione né un file aggiunto a questa bozza`,htmlChanged:e=>`Clip ${e.clip}: il suo livello HTML può cambiarlo solo l'agente`,htmlNew:e=>`Clip ${e.clip}: le clip HTML può aggiungerle solo l'agente`,layersChanged:"I file dei livelli HTML può cambiarli solo l'agente"},render:{jobLabel:e=>`Render · ${e.title} v${e.n}`,exportJobLabel:e=>`Render per l'export · ${e.title} v${e.n} (${e.detail})`,qualityNames:{standard:"Standard",high:"Alta",max:"Massima"},fpsName:e=>`${e.fps} fps`,exportSubtitlesDrawn:e=>`sottotitoli ${e.lang}`,exportNoSubtitles:"senza sottotitoli",notV2:e=>`v${e.n} non ha composizioni da renderizzare: i suoi file media sono il risultato`,formatsNotInVersion:e=>`Formati non presenti in questa versione: ${e.list}`,noRenderer:"Il render non è disponibile in questo Motion Studio",noBrowser:"Nessun Chromium per il render: installa Google Chrome, oppure scarica Chrome for Testing dal controllo di sistema",compositionChanged:e=>`${e.format}: la composizione è cambiata dopo il salvataggio della versione, quindi non è stata renderizzata`,compositionProblems:e=>`${e.format}: la composizione ha dei problemi: ${e.list}`,formatFailed:e=>`${e.format}: ${e.reason}`,someFailed:e=>`Render non riuscito: ${e.list}`,mediaNotNormalised:e=>`${e.format}: non è stato possibile preparare ${e.src} per il render; viene usato così com'è e alcuni suoi fotogrammi potrebbero essere sfasati di uno`,hdrApproximate:e=>`${e.format}: ${e.src} è una sorgente HDR; i suoi colori sono approssimati nel render e nell'anteprima`,frameWarnings:e=>`${e.format}: ${e.count} fotogrammi video provengono da una sorgente di cui non si è potuto verificare il timing`,outputProblems:e=>`${e.format}: il render ha dei problemi: ${e.list}. Rifai il render, o correggi la composizione`,identitySvgRefused:e=>`${e.format}: l'SVG è stato rifiutato, non è stato rasterizzato nulla: ${e.list}`,identityOpaqueWhite:e=>`${e.format}: lo sfondo della composizione è trasparente e il brand non ha un colore primario, quindi le icone che non possono essere trasparenti sono su bianco`,identitySafeZone:e=>`${e.file}: il ${e.pct}% del disegno è fuori dalla zona sicura e la maschera potrebbe tagliarlo`,identitySvgText:e=>`${e.file}: l'SVG contiene testo; convertilo in tracciati, altrimenti cambia aspetto dove il font non è installato`,identitySetFailed:e=>`${e.format}: non è stato possibile creare il set di file: ${e.reason}`},export:{jobLabel:e=>`Export · ${e.title}`,invalidProfile:"Scegli una risoluzione e una qualità tra quelle offerte da Export",profileWithLanguages:"Con altre lingue i video si esportano alla dimensione del formato e in qualità Alta: scegli queste, o esporta le altre lingue a parte",absoluteDestination:"Scegli una cartella di destinazione (percorso assoluto)",outsideWorkspace:"Scegli una cartella fuori dal workspace di Motion Studio",destinationIsFile:"La destinazione è un file, non una cartella",cannotWrite:e=>`Impossibile scrivere nella cartella ${e.path}`,interrupted:e=>`Esportazione interrotta: ${e.reason}. File già copiati: ${e.count} in ${e.path}`,nothingToExport:e=>`Nessun output da esportare per v${e.n}`,invalidFormats:"Scegli almeno un formato da esportare",formatsNotInVersion:e=>`Formati non disponibili in questa versione: ${e.list}`,diskFull:"spazio su disco esaurito",permissionDenied:"permesso negato",quotaExceeded:"quota di spazio esaurita",nameTooLong:"nome del file troppo lungo",writeError:"errore di scrittura",invalidPicks:"Scegli almeno un formato da esportare, ognuno con un numero di versione",pickFollower:e=>`${e.format} segue ${e.primary}: si esporta con la versione ★ di ${e.primary}, non si può scegliere da solo`,pickNoFile:e=>`v${e.n} non ha un file ${e.format} da esportare`,filesMissing:e=>`Questi file mancano o non si possono leggere in sicurezza, non è stato esportato nulla: ${e.list}`,nameCollision:e=>`Due formati avrebbero lo stesso nome di file (${e.list}): aggiungi {format} allo schema dei nomi`,nameEmpty:"Lo schema dei nomi dà un nome di file vuoto",followMismatch:e=>`${e.format} segue ${e.primary}: non si può esportare dalla v${e.n} mentre ${e.primary} si esporta dalla v${e.p}`,invalidDestination:"Scegli una cartella di destinazione",invalidDate:"Data di esportazione non valida (AAAA-MM-GG)",invalidPattern:"Lo schema dei nomi non è valido (al massimo 200 caratteri)",subtitlesMissing:e=>`Non ci sono sottotitoli in ${e.lang} da esportare`,subtitlesPair:e=>`I sottotitoli in ${e.lang} seguono la voce del video in ${e.video}: vanno solo con quel video (esportalo, o scegli un'altra lingua)`,subtitlesStill:e=>`${e.format}: un'immagine fissa non ha sottotitoli, è stata esportata senza`,subtitlesNoTrack:e=>`${e.format}: il video non ha la traccia dei sottotitoli, quindi i sottotitoli in ${e.lang} non sono stati disegnati (chiedi all'agente di aggiungerli)`,subtitlesNoSoft:e=>`${e.format}: questo file non può contenere tracce di sottotitoli, quindi sono state tralasciate`,subtitlesSoftStore:e=>`${e.format}: un'anteprima per l'App Store non porta tracce di sottotitoli, quindi sono state tralasciate`,renderFailed:e=>`Questi formati non si sono potuti renderizzare, non è stato esportato nulla: ${e.list}`,renderProblems:e=>`${e.item} (renderizzato con problemi: ${e.list})`,renderProblemsOnly:e=>`Non è stato esportato nulla: ${e.list}`,groupSkipped:e=>`${e.format} (variante ${e.variant} v${e.n}): ${e.reason}`,groupReason:{missing:"il file manca o non si può leggere in sicurezza",notRendered:"non ha un render aggiornato",problems:"il render ha dei problemi",noTranslation:e=>`nessuna traduzione aggiornata in ${e.locale}`,renderFailed:e=>`il render non è riuscito: ${e.reason}`,renderProblems:e=>`renderizzato ora con problemi: ${e.list}`}},jobs:{regenerateRequest:"Rigenera tutti i formati partendo dal brief aggiornato.",pinsOnlyRequest:"Applica i commenti puntuali.",attachmentsOnlyRequest:"Usa i file allegati.",queuedFilesGone:"Una richiesta in coda è stata tolta: aveva solo file allegati, e non sono più negli Asset.",addFormatsRequest:e=>`Aggiungi i formati ${e.formats} riusando i sorgenti esistenti in work/ e lo stesso stile della versione ${e.n}.`,renderCommandWas:e=>`Il comando di render della versione ${e.n} era: ${e.command}.`,regenerateFormatsRequest:e=>`Rigenera ${e.formats} partendo dal brief aggiornato.`,addedFollowers:e=>`Aggiunti ${e.formats} usando ${e.primary} (v${e.n})`,noAgentNeeded:"senza agente",layerWarnings:e=>`Controlli consigliati dei livelli html: ${e.list}`,strayRemoved:e=>`L'agente ha scritto file che Motion Studio crea da sé; sono stati rimossi: ${e.list}`,followerUnlinked:e=>`${e.follower} non può più seguire ${e.primary} (${e.reason}): è scollegato, anche se questo turno viene annullato, e in questo turno riceve una versione dedicata.`,copyFailed:e=>`${e.format}: Motion Studio non è riuscito a mettere il suo file in questa versione`,carriedChanged:e=>`${e.format}: il file di v${e.n} non è quello registrato per quella versione, quindi non può essere mantenuto invariato`,copyChangedAfter:e=>`${e.format}: il file è cambiato dopo la copia di Motion Studio`,copyUnverified:e=>`${e.format}: il file copiato da Motion Studio non può essere verificato (non è leggibile come file normale)`,earlierOutputsChanged:e=>`Attenzione: durante questo turno sono cambiati file di versioni precedenti (${e.list}). La loro cronologia registrata non cambia; controllali prima di esportare.`,convertingLegacy:"Conversione al formato modificabile · costa più token questa volta",earlierLinksDetached:e=>`Attenzione: alcuni file di versioni precedenti avevano un secondo nome sul disco (un hard link) attraverso cui questo turno avrebbe potuto modificarli (${e.list}). Motion Studio li ha staccati prima dell'avvio dell'agente, quindi le versioni precedenti restano in sola lettura.`,workspacePathGlob:"Attenzione: il percorso della cartella di lavoro contiene [ ] * o ?. Su macOS la sandbox non può impedire all'agente di spostare e poi rimettere a posto le cartelle che contengono i registri di Motion Studio, quindi Motion Studio le controlla dopo ogni esecuzione; su Linux la sandbox non le protegge affatto. Sposta la cartella di lavoro in un percorso senza questi caratteri.",protectedFilesTampered:e=>`Errore: durante questa esecuzione sono stati modificati, aggiunti o eliminati file che Motion Studio non cambia mai da solo (${e.list}). Configurano git o l'agente e vengono eseguiti fuori dalla sandbox. Il turno è stato fermato prima di salvare e il progetto è bloccato (niente agente, niente git) finché quei file non tornano com'erano prima dell'esecuzione (poi si sblocca da solo), o finché non accetti la modifica nella pagina del progetto se l'hai fatta tu.`,protectedFilesChangedBetweenRuns:e=>`Errore: dall'ultima esecuzione dell'agente sono stati modificati, aggiunti o eliminati file che Motion Studio non cambia mai da solo (${e.list}), per esempio da un processo rimasto attivo. Configurano git o l'agente e vengono eseguiti fuori dalla sandbox, quindi l'agente non è stato avviato e il progetto è bloccato (niente agente, niente git) finché quei file non tornano com'erano (poi si sblocca da solo), o finché non accetti la modifica nella pagina del progetto se l'hai fatta tu.`,integrityCheckFailed:"Errore: Motion Studio non è riuscito a controllare i file protetti del progetto dopo questa esecuzione. Il turno è stato fermato prima di salvare e il progetto è bloccato (niente agente, niente git) finché i file non si possono controllare e non sono com'erano prima dell'esecuzione.",recordFoldersMoved:e=>`Avviso: dopo questa esecuzione c'è un file o una cartella inattesi nelle cartelle che contengono i registri di Motion Studio (${e.list}). Controlla di cosa si tratta; la cronologia della chat e le versioni delle creatività lì dentro sono con ogni probabilità a posto.`,logHistoryRewritten:e=>`Attenzione: durante questa esecuzione sono state modificate o rimosse righe precedenti di ${e.list}. Quella cronologia non è più quella registrata da Motion Studio.`,workspaceSettingsReverted:"Attenzione: le impostazioni dell'area di lavoro (.studio/settings.json) sono cambiate mentre l'agente lavorava senza sandbox. Motion Studio le ha rimesse com'erano. Se la modifica era tua, rifalla ora dalle impostazioni.",workspaceSettingsNotReverted:"Attenzione: le impostazioni dell'area di lavoro (.studio/settings.json) sono cambiate mentre l'agente lavorava senza sandbox, e Motion Studio non è riuscito a rimetterle com'erano. Finché non salvi di nuovo le impostazioni, Motion Studio continua a usare quelle di prima (sandbox, conferme e opzioni).",settingsHoldBroken:"Motion Studio non è riuscito a conservare la sua copia protetta delle impostazioni dell'area di lavoro: un agente potrebbe averle cambiate senza che si vedesse. Gli agenti senza sandbox sono rifiutati finché non controlli le impostazioni e le salvi nell'app.",settingsAdjusted:"Motion Studio ha reso più restrittive alcune impostazioni dell'area di lavoro dopo che un agente senza sandbox le aveva cambiate. Controllale nelle impostazioni e salva per confermarle.",settingsHeldFields:e=>`Campi interessati: ${e.fields}.`,settingsHoldStuck:e=>`Motion Studio non riesce a togliere il suo vecchio record in ${e.path}: se è bloccato, togli prima la spunta “Bloccato” da Ottieni informazioni nel Finder, poi toglilo tu e salva di nuovo le impostazioni.`,protectedLinksDetached:e=>`Attenzione: alcuni registri di Motion Studio avevano un secondo nome sul disco (un hard link), quindi potevano essere modificati a sua insaputa (${e.list}). Motion Studio li ha staccati e ne ha tenuto il contenuto così com'era, che potrebbe essere già stato modificato.`,followerNotDelivered:e=>`${e.follower} non è stato consegnato: non può seguire ${e.primary} (${e.reason}). Non è più collegato, quindi il prossimo turno ne fa una versione dedicata.`,versionFolderUnsafe:e=>`La cartella outputs/v${e.n} non è una cartella della creatività (un collegamento?): la versione non può essere salvata`,updateProjectCommit:"Progetto aggiornato",brandKitCommit:"Brand kit aggiornato",guidelinesCommit:"Linee guida aggiornate",addGoogleFontCommit:e=>`Aggiungi font Google Fonts ${e.family}`,addSourceCommit:"Aggiungi sorgente brand",removeSourceCommit:"Rimuovi sorgente brand",syncSourcesCommit:"Allinea sorgenti brand ai riferimenti",uploadAssetsCommit:e=>`Carica ${e.count} asset`,registerAssetsCommit:"Registra asset",deleteAssetCommit:e=>`Elimina asset ${e.file}`,saveReferenceCommit:e=>`Salva ${e.file} negli Asset`,referenceOnlyCommit:e=>`${e.file}: solo per la sua creatività`,deleteReferencesCommit:e=>`Elimina ${e.count===1?"1 riferimento":`${e.count} riferimenti`} delle creatività`,uploadReferencesCommit:e=>`Carica ${e.count} riferimenti`,deleteReferenceCommit:e=>`Elimina riferimento ${e.file}`,createProjectCommit:e=>`Crea progetto ${e.name}`,updateAssetCommit:e=>`Aggiorna asset ${e.file}`,renameAssetRecoveredCommit:"Completa una rinomina di asset interrotta",renameAssetCommit:e=>`Rinomina asset ${e.from} in ${e.to}`,updateReferenceCommit:e=>`Aggiorna riferimento ${e.file}`,turnLabel:e=>`Turno · ${e.name}`,briefLabel:e=>`${e.name} · brief con l'agente`,videoAnalysisLabel:e=>`Analisi video · ${e.file}`,subtitlesLabel:e=>`Sottotitoli · ${e.title}`,subtitlesTranslateLabel:e=>`Sottotitoli · ${e.title} · ${e.lang}`,creativeLabel:e=>`Creatività · ${e.title}`,localizeLabel:e=>`Traduzione · ${e.title}`,localizeStarted:e=>`Traduzione della v${e.n} in ${e.locales}`,localizeNothingToDo:e=>`v${e.n}: tutte le traduzioni richieste sono già aggiornate`,localizeChecking:e=>`${e.count===1?"1 problema di traduzione":`${e.count} problemi di traduzione`} da correggere: tentativo ${e.attempt} di ${e.max}`,localizeDone:e=>`Traduzioni della v${e.n} salvate: ${e.list}`,localizeOpenProblems:e=>`${e.count===1?"Resta aperto 1 problema di traduzione":`Restano aperti ${e.count} problemi di traduzione`}: vedi il pannello Lingue`,localizeCommit:e=>`${e.title}: traduzioni della v${e.n}`,localizeVersionChanged:e=>`Attenzione: durante il turno di traduzione sono cambiati file del progetto (${e.list}). Un turno di traduzione legge soltanto: controlla queste modifiche se non le ha fatte nessun altro.`,voicesNotGenerated:e=>`Voci tradotte non generate (${e.reason}): ${e.locales} tengono la voce originale`,brandAnalysisLabel:"Analisi brand",assetDescriptionLabel:"Descrizione asset",assetGenerationLabel:e=>`Generazione · ${e.kind}`,conflict:"Lo stesso lavoro è già in coda o in corso. Riprova quando è finito.",briefUpdatedCommit:e=>`${e.title}: brief aggiornato`,variantsAddedCommit:e=>`${e.title}: varianti ${e.letters}`,variantRequestWillStop:"Questa richiesta verrà fermata appena parte (rimozione dalla coda non riuscita)",variantsRolledBackCommit:e=>`${e.title}: aggiunta di varianti annullata`,groupChatMergedCommit:e=>`${e.title}: le chat delle varianti unite in una`,variantGroupCommit:e=>`${e.title}: varianti`,creativeArchivedCommit:e=>`${e.title}: archiviata`,creativeUnarchivedCommit:e=>`${e.title}: ripristinata dall'archivio`,creativeDeletedCommit:e=>`${e.title}: spostata nel Cestino`,variantSeedRequest:e=>`Partita dalla variante ${e.letter}, versione ${e.n}`,variantBriefDeferred:"Il brief è cambiato mentre questa variante lavorava: il brief nuovo vale dalla sua prossima richiesta",groupLabel:e=>`${e.title} · agente`,groupFailed:e=>`L'agente non ha potuto rispondere: ${e.text}`,groupReportFailed:e=>`Il lavoro sulle varianti è finito, ma l'agente non ha potuto scrivere la risposta: ${e.text}`,groupHelperNotStarted:e=>`La variante ${e.letter} non è partita: ${e.error}`,groupInterruptedQueued:"Il turno dell'agente si è interrotto alla chiusura di Motion Studio prima di partire: il messaggio è tornato in cima alla coda (Esegui il prossimo lo avvia).",groupInterrupted:"Il turno dell'agente si è interrotto alla chiusura di Motion Studio. Manda di nuovo il messaggio per continuare.",variantDirectionsLabel:e=>`Direzioni delle varianti · ${e.title}`,variantDirectionsDone:e=>`Direzioni proposte dall'agente: ${e.list}`,variantDirectionsRetry:e=>`Le direzioni proposte non erano valide: le richiedo (tentativo ${e.attempt} di ${e.max})`,restartCommit:e=>`${e.title}: ripartenza da v${e.n}`,stateCommit:e=>`${e.title}: stato`,versionStateCommit:e=>`${e.title}: v${e.n} · stato`,noOutputChanged:e=>`Nessun video o immagine è cambiato: nessuna versione nuova, resta la v${e.n}.${e.brief?" Il brief è aggiornato.":""}`,noOutputChangedCommit:e=>`${e.title}: nessuna versione nuova (v${e.n} invariata)`,removedUnsaved:e=>`Rimossi ${e.count} file non salvati in una versione`,restartedFrom:e=>`Ripartenza dalla versione ${e.n}: il prossimo messaggio lavora su quella base.`,codebaseNotRepo:e=>`Codebase ${e.path} non controllabile (non è un repository git): eventuali modifiche non verrebbero rilevate`,codebaseCheckFailed:e=>`Codebase ${e.path}: controllo delle modifiche non riuscito, eventuali modifiche non verrebbero rilevate`,codebaseChanged:e=>`Attenzione: la codebase ${e.path} risulta modificata durante il turno. Controlla le modifiche.`,checkingOutputs:e=>`Controllo output: ${e.count} problemi. Chiedo una correzione (tentativo ${e.attempt} di ${e.max}).`,requestFromBrief:"Generazione dal brief",lateCancel:e=>`Annullamento arrivato a lavoro quasi concluso: la versione v${e.n} è stata salvata.`,lateCancelKept:e=>`Annullamento arrivato a lavoro quasi concluso: nessuna versione nuova, resta la v${e.n}.`,generationFailed:e=>`Generazione non riuscita: ${e.text}`,cancelledNote:"Generazione annullata.",brandKitUnreadable:e=>`Brand kit non leggibile: ${e.detail}`,guidelinesUnreadable:e=>`Linee guida non leggibili: ${e.detail}`,assetListUnreadable:e=>`Elenco asset non leggibile: ${e.detail}`,referenceListUnreadable:e=>`Elenco riferimenti non leggibile: ${e.detail}`,codebaseIgnored:e=>`Codebase ignorata (${e.path}): ${e.reason}`,codebaseMissing:e=>`Codebase non trovata, ignorata in questo turno: ${e.path}`,codebaseSecretScanTruncated:"La codebase è molto grande: i file segreti oltre le prime 50.000 voci sono esclusi solo dai modelli dei nomi",brandCodebaseSkipped:e=>`Codebase lasciata fuori dall'analisi (${e.path}): ${e.reason}`,brandCodebaseNotCheckable:e=>`La codebase ${e.path} non si può controllare (non è un repository git): una modifica fatta dall'analisi passerebbe inosservata`,brandCodebaseCheckFailed:e=>`Codebase ${e.path}: il controllo delle modifiche non è riuscito, una modifica fatta dall'analisi passerebbe inosservata`,brandCodebaseChanged:e=>`L'analisi ha modificato la codebase ${e.path}: la proposta è stata scartata. Controlla le modifiche in quella cartella.`,brandCodebaseChangedFiles:e=>`File modificati in ${e.path}: ${e.list}`,brandCodebaseCheckFailedAfter:e=>`Il controllo della codebase ${e.path} dopo l'analisi non è riuscito: la proposta è stata scartata, perché non si può escludere una modifica.`,brandCodebaseCheckFailedBefore:e=>`La codebase ${e.path} non si poteva controllare prima dell'analisi ma ora sì: il controllo non è riuscito e la proposta è stata scartata, perché non si può escludere una modifica.`,brandCodebaseChangedUnknown:e=>`File modificati in ${e.path}: git non ha saputo dire quali`,brandSecretsToolRulesOnly:"Senza sandbox: in questa analisi l'agente non esegue comandi, e i file segreti della codebase sono esclusi solo dalle regole dei suoi strumenti sui file, non dal sistema operativo",interruptedError:"Il lavoro è stato interrotto (app chiusa durante la generazione).",interruptedNote:"Lavoro interrotto: Motion Studio è stato chiuso durante la generazione. Invia un messaggio per riprendere."},live:{tooLong:e=>`Il messaggio è troppo lungo: al massimo ${e.max} caratteri.`,tooManyLive:e=>`Al massimo ${e.max} messaggi per turno: mettilo in coda per dopo, o aspetta la fine del turno.`,queueFull:e=>`In coda possono aspettare al massimo ${e.max} richieste: togline una o aspetta che parta la prossima.`,emptyMessage:"Scrivi un messaggio o aggiungi un pin.",notQueued:"Questa richiesta non è più in coda (è partita o è stata tolta).",queueChanged:"Nel frattempo la coda è cambiata: ricaricala e riprova.",queueEmpty:"Non ci sono richieste in coda.",queuedAfterFinish:"Arrivato quando l'agente aveva finito: messo in coda come prossima richiesta.",redirectUnsupported:"Questo lavoro non si può reindirizzare: è disponibile solo Stop.",notRunning:"Il lavoro non è più in corso.",consoleLiveOff:"I messaggi durante un turno della console richiedono i messaggi dal vivo, che sono spenti: invialo a turno finito.",consoleTurnOver:"Il turno della console è già finito: invialo come nuovo messaggio.",wordsNotDelivered:"Il tuo messaggio non è arrivato all'agente.",stoppedSessionUnavailable:"La sessione del turno fermato non è più disponibile: si riprende dalla sessione dell'ultima versione.",queuedPinsVersionGone:e=>`I commenti fissati di questa richiesta erano sulla versione ${e.n}, che non esiste più: arrivano all'agente come testo, senza fotogrammi.`},formats:{"instagram-post-1x1":"Post 1:1","instagram-post-4x5":"Post 4:5","instagram-reel-9x16":"Story/Reel 9:16","instagram-image-1x1":"Immagine 1:1","instagram-image-4x5":"Immagine 4:5","tiktok-9x16":"Video 9:16","youtube-16x9":"Video 16:9","youtube-4k-16x9":"Video 4K 16:9","youtube-shorts-9x16":"Shorts 9:16","youtube-thumbnail":"Thumbnail","facebook-feed-1x1":"Feed 1:1","facebook-feed-4x5":"Feed 4:5","facebook-story-9x16":"Story 9:16","facebook-cover":"Cover","linkedin-1x1":"Post 1:1","linkedin-4x5":"Post 4:5","linkedin-16x9":"Video 16:9","linkedin-banner":"Banner","x-16x9":"Video 16:9","x-1x1":"Post 1:1","pinterest-2x3":"Pin 2:3","web-hero-16x9":"Hero 16:9","web-banner-300x250":"Banner 300×250","web-banner-728x90":"Banner 728×90","web-banner-160x600":"Banner 160×600","og-image-1200x630":"Anteprima social (Open Graph)","identity-logo":"Logo","identity-favicon":"Favicon per siti","identity-app-icon":"Icona app","appstore-iphone-69":'Screenshot iPhone 6.9"',"appstore-iphone-65":'Screenshot iPhone 6.5"',"appstore-ipad-13":'Screenshot iPad 13"',"appstore-preview":"App Preview","appstore-icon":"Icona","playstore-feature":"Feature graphic","playstore-phone-9x16":"Screenshot telefono 9:16","playstore-tablet":"Screenshot tablet","playstore-icon":"Icona","playstore-promo-16x9":"Video promo 16:9"},channels:{instagram:"Instagram",tikTok:"TikTok",youTube:"YouTube",facebook:"Facebook",linkedIn:"LinkedIn",x:"X",pinterest:"Pinterest",web:"Web",appStore:"App Store",playStore:"Play Store",identity:"Identità",custom:"Personalizzati"},variants:{rtlUnsupported:"Le lingue da destra a sinistra non sono ancora supportate: servirebbe specchiare l'impaginazione, mentre in una traduzione cambiano solo testo e voce",duplicatedRequest:e=>`Duplicato ${e.label}`,duplicateBusy:"L'agente o un render stanno lavorando su questa creatività: duplica il formato quando hanno finito",instancesFull:e=>`${e.format} ha già ${e.max} copie: rimuovine una prima di duplicarlo ancora`,formatNotInVersion:e=>`${e.format} non è nella v${e.n}: apri una versione che lo contiene per duplicarlo`,localeUnsupported:e=>`"${e.tag}" non è una delle lingue supportate`,localeRtl:e=>`"${e.tag}": le lingue da destra a sinistra non sono ancora supportate: servirebbe specchiare l'impaginazione, mentre in una traduzione cambiano solo testo e voce`,localeNotInBrief:e=>`${e.tag} non è una delle lingue di questa creatività: aggiungila prima nel brief`,instanceUnknown:e=>`${e.format} non è un formato della v${e.n}`,localizationNotFound:e=>`Nessuna traduzione ${e.locale} di ${e.format} nella v${e.n}`,localizationBusy:"L'agente sta lavorando su questa creatività: modifica la traduzione quando ha finito",localizationInvalid:e=>`Impossibile salvare la traduzione: ${e.detail}`,localizationMismatch:e=>`"${e.entry}" non è un testo traducibile di questo formato`,localizationUnusable:e=>`La traduzione ${e.locale} di ${e.format} non corrisponde più alla sua composizione`,textOverflow:e=>`La traduzione di "${e.clip}" esce dal suo riquadro, anche al ${e.fit}% della dimensione`,fallbackFontUnavailable:e=>`Font di ripiego non disponibile: impossibile scaricare ${e.family}, alcuni caratteri potrebbero apparire in un font di sistema`,tooManyFonts:"La traduzione richiede più file di font di quanti una composizione ne possa avere",voiceFileInvalid:e=>`La voce tradotta di "${e.clip}" non è un file di questa versione`,renderNeedsForce:e=>`Queste traduzioni hanno problemi aperti o testi superati: ${e.list}. Scegli "Renderizza comunque" per proseguire`,localizationMissing:e=>`Nessuna traduzione da renderizzare per: ${e.list}`,localeStale:e=>`${e.count} superati`,textOverflowMeasured:e=>`La traduzione di "${e.clip}" esce dal suo riquadro nel render, al ${e.fit}% della dimensione`,sourceLayoutOverflow:e=>`Il testo originale di "${e.clip}" esce già da qui (dal suo riquadro, dal fotogramma o dalla zona sicura): va corretto nell'originale`,sourceTextOverflow:e=>`Il testo originale di "${e.clip}" esce dal suo riquadro nel render: appare non tradotto o non aggiornato, quindi va corretto nell'originale`,renderCheckFailed:e=>`${e.file} è stato renderizzato ma non si è potuto controllare`,assetChanged:e=>`${e.file} è cambiato da quando Motion Studio l'ha creato o aggiunto per questa traduzione: traduci di nuovo (o ripristina il file) prima del render`,staleEntry:e=>`Il testo originale di "${e.clip}" è cambiato dopo la traduzione: si vede nella lingua originale finché non lo traduci di nuovo`,notTranslated:e=>`"${e.clip}" non è ancora tradotto`,voiceTooLong:e=>`La voce tradotta di "${e.clip}" dura ${e.voice.toFixed(1).replace(".",",")} s, più della sua clip (${e.clipSec.toFixed(1).replace(".",",")} s): serve un testo più corto`,voiceDurationUnknown:e=>`Non si è potuta misurare la durata della voce tradotta di "${e.clip}"`,voiceFailed:e=>`La voce tradotta di "${e.clip}" non si è potuta generare: ${e.reason}`,voiceNoScript:e=>`Impossibile tradurre la voce di "${e.clip}" (${e.format}): non ha un testo noto, quindi tiene la voce originale`,voiceFallbackReason:{off:"il servizio voce è spento per questa creatività",noKey:"manca la chiave del servizio voce",missingPermission:"la chiave non ha il permesso di sintesi vocale",declined:"la conferma è stata rifiutata",failed:"la generazione non è riuscita"},localizeNoCompositions:e=>`La v${e.n} non ha composizioni da tradurre`,submitNotInTurn:e=>`${e.locale} · ${e.format} non è richiesto in questo turno`,voiceNotTranslatable:e=>`"${e.clip}" non è una clip voce con un testo noto`,voicesNotInTurn:e=>`In questo turno le voci non si traducono per ${e.locale}: lascia vuoto voiceScripts`,fitWithoutText:e=>`Il fit di "${e.clip}" richiede il suo testo tradotto`,storePack:{title:"Pacchetto store",appStore:"App Store",googlePlay:"Google Play",goal:e=>`Screenshot App Store e Google Play per ${e.app}`,notStorePack:"Questa creatività non è un pacchetto store",foreignFormat:e=>`Non sono formati di questo pacchetto store: ${e.list}`,collision:e=>`Non c'è più posto per altre istanze di ${e.list} (al massimo 20): togli un formato di quel tipo e riprova`,badInstances:"Le istanze del pacchetto store non corrispondono ai suoi formati",second:"Una creatività ha un solo pacchetto store: per cambiarlo o toglierlo si usa il campo storePack, non il brief intero",useEntry:"Il pacchetto store si imposta con il campo storePack (la voce Pacchetto store), non con il brief intero",lastFormats:"Il pacchetto store è l'ultimo formato della creatività: aggiungi un altro formato prima di toglierlo",screenNotImage:e=>`${e.file} non è un'immagine degli Asset del progetto`,check:{notImage:"non è un file PNG o JPEG",unreadable:"il file non si può leggere",wrongSize:e=>`${e.width}×${e.height} invece di ${e.expectedWidth}×${e.expectedHeight}`,hasAlpha:"ha un canale alfa (trasparenza), che lo store rifiuta",notVideo:"non è un video leggibile",codec:e=>`codec video ${e.codec}: lo store richiede H.264`,fps:e=>`${Math.round(e.fps*100)/100} fps: l'App Store ne richiede ${e.expected}`,duration:e=>`dura ${e.seconds.toFixed(1).replace(".",",")} s: le anteprime App Store durano da ${e.min} a ${e.max} s`,noAudio:"manca la traccia audio: l'App Store la richiede",tooLarge:e=>`${e.sizeMB} MB: il limite è ${e.maxMB} MB`,noTranslation:e=>`manca la traduzione ${e.locale}`,renderFailed:e=>`il render non è riuscito: ${e.reason}`,renderProblems:e=>`il render ha problemi: ${e.list}`,copyFailed:e=>`non si è potuto copiare: ${e.reason}`,notRendered:"non renderizzato",notInVersion:e=>`non è nella versione ${e.n}`,notInGroup:"nessuna variante ha questo formato",tooFewScreenshots:e=>`${e.count} screenshot: lo store ne chiede almeno ${e.min}`,tooManyScreenshots:e=>`screenshot ${e.count}: lo store ne accetta al massimo ${e.max}`},readme:{title:e=>`${e.app}: pacchetto App Store e Google Play`,made:e=>`Creato da Motion Studio il ${e.date} dalla versione ${e.version}.`,madeGroup:e=>`Creato da Motion Studio il ${e.date} dalla selezione finale del gruppo di varianti.`,limits:e=>`Limiti degli store (controllati il ${e.date} sulle pagine pubbliche di Apple e Google):`,appStoreShots:e=>`Screenshot App Store: PNG o JPEG senza trasparenza, da ${e.min} a ${e.max} per dimensione di dispositivo (${e.sizes}).`,appStorePreview:e=>`Anteprima app App Store: H.264, esattamente ${e.fps} fps (Apple accetta fino a ${e.fps}; Motion Studio renderizza e controlla ${e.fps}), da ${e.min} a ${e.max} secondi, con traccia audio (AAC), fino a ${e.maxMB} MB, fino a ${e.perDevice} per dimensione di dispositivo.`,playShots:e=>`Screenshot Google Play: PNG senza trasparenza o JPEG, da ${e.min} a ${e.max} per tipo di dispositivo, lati da ${e.minSide} a ${e.maxSide} px (${e.sizes}).`,playFeature:e=>`Feature graphic Google Play: ${e.size}, PNG senza trasparenza o JPEG.`,sources:"Fonti:",order:"Ordine di caricamento:",orderAppStore:"App Store Connect: per ogni lingua, carica gli screenshot di ogni cartella di dispositivo nell'ordine dei nomi (01, 02, …): i primi si vedono per primi.",orderPreview:'App Store Connect: carica preview.mp4 come anteprima app del display iPhone 6.9".',orderPlay:"Google Play Console: per ogni lingua, carica gli screenshot di telefono e tablet nell'ordine dei nomi, poi feature-graphic.png.",playVideoTitle:"Video Google Play:",playVideo:"Google Play non accetta un file video: carica promo-video.mp4 su YouTube (pubblico o non in elenco, annunci disattivati) e incolla il link YouTube nella scheda dello store. Solo i primi 30 secondi partono da soli.",failedTitle:"File non esportati:",notInPackTitle:"Non fanno parte del pacchetto (formati store scelti a mano, non esportati):"}}},pairing:{openFromLink:"Apri Motion Studio dal link mostrato nel terminale"},keyChecks:{refused:"Il servizio ha rifiutato la richiesta: premi Prova di nuovo o controlla la chiave e i suoi permessi",timeout:e=>`Nessuna risposta entro ${e.seconds} s`,network:"Servizio non raggiungibile",status:e=>`Il servizio ha risposto ${e.status}`,rateLimited:"Troppe richieste: riprova più tardi"},providers:{unreachable:e=>`${e.provider} non raggiungibile: ${e.detail}`,invalidKey:e=>`Chiave ${e.provider} non valida o senza permessi`,rateLimited:e=>`Limite di richieste raggiunto per ${e.provider}: riprova più tardi`,responded:e=>`${e.provider} ha risposto ${e.status}: ${e.detail}`,fileTooLarge:e=>`File troppo grande da ${e.provider}`,invalidResponse:e=>`Risposta non valida da ${e.provider}`,blockedAddress:"Indirizzo non consentito per il download",tooManyRedirects:"Troppi reindirizzamenti",unsplashNoVideo:"Unsplash non offre video: usa Pexels",invalidStockId:"Identificativo di stock non valido",noPexelsVideo:"Nessun file video scaricabile su Pexels",photoBy:e=>`Foto di ${e.author} su ${e.provider}`,videoBy:e=>`Video di ${e.author} su ${e.provider}`,invalidFontName:"Nome del font non valido",invalidFontWeights:"Pesi del font non validi",fontNotFound:e=>`Font "${e.family}" non trovato su Google Fonts`,textTooLong:e=>`Testo troppo lungo per ${e.provider} (massimo ${e.max} caratteri)`,invalidVoice:"Voce non valida",noVoice:"Nessuna voce disponibile su ElevenLabs",invalidImageSize:"Dimensioni immagine non valide",invalidAssetsFolder:"Cartella degli asset non valida",optionInvalid:e=>`${e.label} non valido`,optionQuality:"Qualità",optionBackground:"Sfondo",optionOrientation:"Orientamento",optionProvider:"Provider",configureKey:e=>`Configura la chiave ${e.provider} nelle Impostazioni di Motion Studio`,referencesTooLarge:"Riferimenti troppo grandi",invalidReference:e=>`Riferimento non valido: ${e.file}`,describeImage:"Descrivi l'immagine da generare",nearestSize:"Dimensione supportata più vicina: ridimensiona o ritaglia l'immagine se serve",writeText:"Scrivi il testo da leggere",imageTag:"immagine",voiceTag:"voce",soundTag:"effetto sonoro",musicTag:"musica",audioAttribution:e=>`Generato con AI (${e.provider})`,promptRequired:"Descrivi il suono da generare",promptTooLong:e=>`Descrizione troppo lunga (massimo ${e.max} caratteri)`,durationOutOfRange:e=>`Durata fuori intervallo (da ${e.min} a ${e.max} secondi)`,voiceAttribution:e=>`Voce generata con AI (${e.provider})`,searchWhat:"Indica cosa cercare",fontsAttribution:"Google Fonts · OFL / Apache 2.0",fontsLicense:"Google Fonts: licenza OFL o Apache 2.0, uso commerciale consentito",invalidDestination:"Destinazione non valida: usa assets/brand/<nome> per immagini e loghi o assets/fonts/<nome> per i font (png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf)",invalidUrl:"URL non valido: indica un indirizzo http(s) completo",siteFontsLimit:e=>`inspect_site_fonts si può usare al massimo ${e.max} volte per analisi`,codebaseImport:{outside:()=>"la sorgente non è dentro una delle codebase dell'analisi (o il suo percorso reale ne esce)",secret:()=>"la sorgente è un file segreto (o sta in una cartella segreta): non viene mai aperta",notFile:()=>"la sorgente non è un file regolare (o è cambiata mentre veniva letta)",tooBig:e=>`il file supera ${e.max} MB`,extension:()=>"si copiano solo file png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf, con la stessa estensione nella destinazione",dest:()=>"destinazione non valida: usa assets/brand/<nome> per immagini e loghi o assets/fonts/<nome> per i font",limit:e=>`import_codebase_file si può usare al massimo ${e.max} volte per analisi`,missing:()=>"il file sorgente non esiste"},accessDenied:e=>`${e.host} ha negato l'accesso al file (${e.status})`,unknownAuthor:"autore sconosciuto",unrestorableEdit:e=>`L'agente ha provato a modificare direttamente ${e.file}: modifica non annullabile`,revertedEdit:e=>`L'agente ha provato a modificare direttamente ${e.file}: modifica annullata`,turnEnded:e=>`Turno terminato con esito ${e.subtype}`,claudeExited:e=>`claude è terminato con codice ${e.code} senza risultato`,claudeNotFound:e=>`Comando claude non trovato (${e.bin}). Installa Claude Code o controlla il Doctor.`,claudeCannotStart:e=>`Impossibile avviare claude: ${e.detail}`,projectFolderMissing:e=>`Cartella del progetto non trovata: ${e.path}`,serviceOff:{images:"Le immagini sono disattivate nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi",voice:"La voce è disattivata nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi",music:"La musica è disattivata nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi",sfx:"Gli effetti sonori sono disattivati nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi"},serviceFor:{images:"le immagini",voice:"la voce",music:"la musica",sfx:"gli effetti sonori"},serviceStockOnly:"Questo creativo usa solo immagini stock: usa stock_search e stock_download invece di generate_image",serviceNoKey:e=>`Il brief di questo creativo sceglie ${e.provider} per ${e.service}, ma la chiave ${e.provider} non è impostata: aggiungila nelle Impostazioni di Motion Studio, oppure l'utente può cambiare il servizio con il pulsante Servizi`,serviceOverridden:e=>`Il brief di questo creativo sceglie ${e.provider} per ${e.service}: usato al posto di ${e.requested}`,serviceMissingPermission:e=>`La chiave ${e.provider} non si può usare per ${e.service}: ${e.permission?`le manca il permesso ${e.permission}. Di' all'utente di sistemare la chiave nelle impostazioni di Motion Studio (e di provarla di nuovo)`:`${e.provider} ha rifiutato la chiave o la richiesta senza indicare un permesso (può essere anche una restrizione di area, organizzazione o firewall presso il fornitore). Di' all'utente di verificarlo con ${e.provider} e nelle impostazioni di Motion Studio (e di provare di nuovo la chiave)`}, oppure di cambiare il servizio con il pulsante Servizi`,serviceVoicesUnused:"Il brief di questo creativo sceglie OpenAI per la voce: le voci ElevenLabs non si possono usare, quindi non c'è nulla da elencare",voiceDropped:e=>`La voce ${e.voice} è una voce ${e.owner} e questa voce fuori campo usa ${e.provider}: non è stata usata, al suo posto c'è ${e.brand?`la voce ${e.provider} del brand`:`la voce predefinita di ${e.provider}`}`,voiceWrongProvider:e=>`La voce ${e.voice} non è una voce ${e.provider}: scegline una fra le voci ${e.provider}`},issues:{id:"identificativo non valido (minuscole, cifre e trattini)",manualRef:"le fonti manuali devono avere ref: null",websiteRefRequired:"le fonti da sito richiedono un indirizzo http(s) come ref",websiteRefInvalid:"le fonti da sito devono avere un indirizzo http(s) come ref",imageRefRequired:"le fonti da immagine richiedono un percorso relativo come ref",imageRefInvalid:"le fonti da immagine devono avere un percorso relativo come ref",weights:"pesi non validi (numeri interi da 100 a 900)",nameRequired:"nome obbligatorio",nameTooLong:"nome troppo lungo (massimo 60 caratteri)",hex:"hex non valido (usa #RRGGBB)",role:"ruolo non valido",familyRequired:"famiglia obbligatoria",familyTooLong:"famiglia troppo lunga (massimo 80 caratteri)",maxWeights:"al massimo 9 pesi",variant:"variante non valida",background:"sfondo non valido",textRequired:"testo obbligatorio",textTooLong:"testo troppo lungo (massimo 2000 caratteri)",duplicateIds:"id duplicati",siteSourceUrl:"le sorgenti da sito richiedono un indirizzo",siteSourceFile:"le sorgenti da sito devono avere file: null",imageSourceFile:"le sorgenti immagine richiedono un file",imageSourceUrl:"le sorgenti immagine devono avere url: null",codebaseRefRequired:"le fonti da codebase richiedono come ref un percorso relativo alla codebase",codebaseRefInvalid:"le fonti da codebase devono avere un percorso relativo come ref",codebaseSourcePath:"le sorgenti da codebase richiedono il percorso della cartella",codebaseSourcePathInvalid:"la cartella della codebase deve essere un percorso assoluto, non la radice del disco",codebaseSourceUrl:"le sorgenti da codebase devono avere url: null",codebaseSourceFile:"le sorgenti da codebase devono avere file: null",pathOnlyCodebase:"solo le sorgenti da codebase hanno un percorso di cartella o una nota",maxCodebaseSources:"al massimo 5 sorgenti da codebase",duplicateSourceIds:"id delle sorgenti duplicati",relativePath:'percorso non valido (deve essere relativo, senza ".." o "\\")',httpOnly:"solo indirizzi http(s)",duplicateFiles:"file duplicati",fileName:"nome file non valido",duplicatePresetIds:"id dei preset duplicati",customVideoEven:"un video vuole un numero pari di pixel per lato",customVideoMax:"un video ha al massimo 4096 pixel per lato",domain:"dominio non valido (es. api.esempio.it o *.esempio.it)",fileInvalid:"file non valido",sourceInvalid:"fonte non valida",duplicateFormats:"lo stesso formato due volte",noFormats:"almeno un formato",emptyFill:"almeno un campo da scrivere",labelNotInFormats:"un'etichetta per un formato che non è nel brief",briefWithPartial:"un brief completo non può essere inviato insieme a formati o etichette",badLocales:"lingue non valide (senza ripetizioni, e la lingua principale non è tra quelle extra)",duplicateStores:"lo stesso store due volte",storePackIphone:`l'App Store richiede gli screenshot iPhone 6.9"`,storePackPhone:"Google Play richiede gli screenshot del telefono",storePackScreenshots:"il numero di screenshot è fuori da ciò che gli store scelti accettano",badAssetPath:"percorso non valido (deve essere un file in assets/)",missingValue:"valore mancante o non valido"},brandFields:{colors:"colore",fonts:"font",logos:"logo",dos:"cosa da fare",donts:"cosa da evitare",tone:"tono di voce",photoStyle:"stile fotografico"},desktop:{menu:{edit:"Modifica",undo:"Annulla",redo:"Ripeti",cut:"Taglia",copy:"Copia",paste:"Incolla",selectAll:"Seleziona tutto",view:"Vista",reload:"Ricarica",fullScreen:"Schermo intero",resetZoom:"Zoom predefinito",zoomIn:"Ingrandisci",zoomOut:"Riduci",window:"Finestra",minimize:"Riduci a icona",close:"Chiudi",help:"Aiuto",restartToUpdate:"Riavvia per aggiornare",github:"Motion Studio su GitHub"},attachedGoneMessage:"Il Motion Studio a cui l'app era collegata si è chiuso.",attachedGoneRestart:"Riavvia",attachedGoneQuit:"Chiudi",renderRunningMessage:e=>e.count===1?"Un render è ancora in corso":`${e.count} render sono ancora in corso`,renderRunningDetail:"Uscendo li fermi: non resta nulla a metà, e potrai rifarli più tardi.",renderRunningQuit:"Ferma ed esci",renderRunningKeep:"Continua il render",draftUnsavedMessage:e=>e.count===1?"Hai modifiche non salvate nell'editor":`Hai modifiche non salvate in ${e.count} editor`,draftUnsavedDetail:"Uscendo le scarti. Continua a modificare per salvarle prima come nuova versione.",draftUnsavedQuit:"Scarta ed esci",draftUnsavedKeep:"Continua a modificare",draftReloadDetail:"Ricaricando le scarti. Continua a modificare per salvarle prima come nuova versione.",draftReloadDiscard:"Scarta e ricarica",invalidRequest:"Richiesta non valida",invalidPath:"Percorso non valido",alreadyRunning:e=>`Motion Studio è già avviato (porta ${e.port})`,updateAvailable:e=>`È disponibile Motion Studio ${e.version}: riavvia per aggiornare`,updateCheckFailed:e=>`Controllo aggiornamenti non riuscito: ${e.detail}`},cli:{help:`Uso: npx @motion-studio/cli [--port 4317] [--no-open]
7
+ Variables: MOTION_STUDIO_CONFIG_DIR, MOTION_STUDIO_CLAUDE_COMMAND (JSON array)`,invalidPort:e=>`Invalid port: ${e.value}`,unknownOption:e=>`Unknown option: ${e.option}`,invalidOptionValue:e=>`Invalid value for ${e.option}`,unexpectedArgument:e=>`Unexpected argument: ${e.arg}`,notRunning:"Motion Studio is not running: start it with motion-studio",alreadyRunning:e=>`Motion Studio is already running: ${e.url}`,running:e=>`Motion Studio is running at ${e.url}`,openManually:e=>`Open ${e.url} manually`,closeFailed:e=>`Shutdown failed: ${e.detail}`,portInUse:e=>`Port ${e.port} is already in use: try --port <other>`},agentActions:{afterTurn:"from the end of this turn",briefDuration:e=>`Brief duration: ${e.from} → ${e.to}`,durationNone:"none",seconds:e=>`${e.n} s`,briefGoal:"Brief goal updated",briefMessage:"Brief key message updated",briefNotes:"Brief notes updated",briefServices:e=>`Brief services: ${e.list}`,formatAdded:e=>`Format added to the brief: ${e.format}`,formatMadeNext:e=>`${e.formats}: made at the next turn`,languageAdded:e=>`Language added to the brief: ${e.language} · translated after this turn`,duplicateQueued:e=>`After this turn: duplicate ${e.format}`,formatsNamed:e=>`Format names: ${e.list}`,duplicateDone:e=>`Format duplicated: ${e.format} (v${e.n})`,variantAdded:e=>`New variant ${e.letter}: ${e.direction}`,variantDiscarded:e=>`Variant ${e.letter} discarded`,variantRestored:e=>`Variant ${e.letter} restored`,pickSet:e=>`★ of ${e.format}: ${e.version}`,pickQueued:e=>`After this turn: ★ of ${e.format} on the new version`,renderStarted:e=>`Render started: v${e.n} · ${e.formats}`,renderQueued:e=>`After this turn: render ${e.formats}`,allFormats:"every format",exportQueued:"After this turn: render what the ★ export needs",exportNothing:"The ★ export needs no render: open Export to save the files",exportRendering:e=>`Rendering ${e.count===1?"1 format":`${e.count} formats`} for the ★ export; then open Export to save the files`,dropped:e=>`Not done, because the turn did not save a version or was stopped: ${e.list}`,failed:e=>`${e.action}: not done (${e.reason})`,limit:e=>`At most ${e.max} app actions per turn`,nothingToChange:"Nothing to change: give at least one field",formatUnknown:e=>`Unknown format: ${e.format}`,formatInBrief:e=>`${e.format} is already in the brief: use duplicate_format for a second one`,formatIdentity:"Identity formats (logo, favicon, app icon) are chosen when the creative is created",namesRefused:e=>`No name given to the formats: ${e.list}`,nameUserNamed:"named by the user: the name is theirs, never change it",nameNotInBrief:"not in the brief",nameGroupNamed:"already named: in a group of variants only the agent the user talks to renames a format",nameEmpty:"empty name",primaryNeeded:"The brief has no languages yet: give the primary language (primary) too",languageInBrief:e=>`${e.language} is already in the brief`,discardNotPointed:e=>`The user did not point to variant ${e.letter}: ask the user which variant to discard (AskUserQuestion) before discarding it`,helperGroupAction:"You work on one variant for the agent the user talks to: adding, discarding or restoring variants and the ★ of another variant are its actions",variantInPlan:e=>`Variant ${e.letter} has work in this turn: it stays as it is until the turn is over`,groupPickNeedsVariant:"Name the variant and a saved version of it (the agent of the group has no version of its own)",groupRenderNeedsVariant:"Name the variant and a saved version of it",currentOwnOnly:'"current" is the version this turn makes: it applies to your own variant only',incompleteDuration:e=>`v${e.n} is incomplete: the video lasts ${e.duration} s, the brief says ${e.target} s. Change the duration in the brief (the version is checked again at once, with no new turn) or ask the agent to shorten it.`,incompleteOther:e=>`v${e.n} is incomplete: ${e.count===1?"1 problem was":`${e.count} problems were`} left after the automatic fixes. They are listed on the version: ask the agent to fix them, or edit the composition in the editor.`,recheckComplete:e=>`v${e.n} checked again against the brief's duration (${e.target}): it is complete now.`,recheckPartial:e=>`v${e.n} checked again against the brief's duration (${e.target}): ${e.formats} pass now; other problems remain.`,recheckCommit:e=>`${e.title}: v${e.n} checked again against the brief`},web:{identity:{start:"Start",fromBrand:"From the brand logo",fromScratch:"From scratch",sourceCodebase:"from codebase",fromBrandHint:"The agent adapts the brand logo (margins, a simplified version for small sizes) without redrawing it.",noBrandLogo:"The brand has no logo yet: the agent will draw one in the brand style.",name:"Name or initials",namePlaceholder:"E.g. Acme or AC",keywords:"Style keywords (optional)",keywordsPlaceholder:"E.g. geometric, friendly, bold",colors:"Colours",colorsBrand:"From the brand",colorsFree:"Free",view:"View",viewImage:"Image",viewSizes:"Sizes",sizesTitle:"Sizes",sizesIntro:"Every file of the set at its real size, and how the icon looks where it is used.",zoomed:"Zoom in",oneToOne:"1:1",fileSize:e=>`${e.name}, ${e.w}×${e.h} px`,noPreview:"No preview",contexts:"In context",browserTab:"Browser tab",iosIcon:"iOS icon",androidIcon:"Android adaptive icon",maskableIcon:"Maskable web icon",safeZone:"Safe zone",safeZoneNote:e=>`The dashed circle is the safe zone (${e.pct}% of the icon): keep the mark inside it.`,warnings:"Warnings",onLight:"On light",onDark:"On dark",noDarkLogo:"Regenerate to get the negative logo",noDarkLogoTip:"This version of the logo has no negative version for dark backgrounds: the main logo is shown on dark.",logoSides:e=>`${e.label} on a light and on a dark background`,useAsLogo:"Use as brand logo",useAsLogoOf:e=>`Use ${e.label} as the brand logo`,useAsLogoTitle:"Use as the brand logo?",useAsLogoBody:"The logo is copied into the project assets and added to the brand kit. If the kit already has a logo of the chosen kind, that one is demoted (primary to secondary, icon to other). The brand kit changes at once, with no proposal to approve.",useAsLogoDarkNote:"The logo’s negative version, for dark backgrounds, is added with it.",useAsLogoAs:"Add it as",variantPrimary:"Main logo",variantIcon:"Icon",useAsLogoConfirm:"Add to the brand",useAsLogoDone:"Added to the brand kit",useAsLogoNotCommitted:"Added to the brand kit, but the change could not be saved in the project history; it will be saved with the next change",useAsLogoOpen:"Open the brand",useAsLogoFailed:e=>`Could not add the logo to the brand: ${e.detail}`},variantGroup:{discardedReadOnly:"Discarded variant: restore it to work on it",groupBy:"Group by",variant:"Variant",variants:"Variants",identityVariantsHint:"Each variant has a logo, favicon and app icon that go together, so you can compare them and keep one.",format:"Format",all:"All",addVariant:"+ Variant",addVariantMenu:"Add variant",discard:"Discard",restore:"Restore",showDiscarded:"Show discarded",viewLabel:"Variants view",viewChosen:"Chosen",viewAll:"All variants",chosenTitle:"Chosen",noChoiceTitle:"No choice yet",noChoiceHint:"The final selection takes the default rule for these formats: choose them in Final selection.",noVariantFile:"No variant has this format yet",useForAllFormats:"Use this variant for all formats",finalSelection:"Final selection",missing:"missing",letterLabel:e=>`Variant ${e.letter}`,count:e=>e.count===1?"1 variant":`${e.count} variants`,discardRefused:{running:"Stop it before discarding it",lastActive:"It is the last active variant: keep at least one"},openVariant:"Open this variant",fieldHint:"Each variant is a different creative direction, with all the formats.",directionOf:e=>`Direction of variant ${e.letter} (optional)`,directionPlaceholder:"E.g. minimal, lots of white space",directionAuto:"Left empty, the agent proposes one.",directionLimit:e=>`At most ${e.max} characters`,groupFailed:e=>`The creative was created, but its variants could not be made: ${e.detail}`,startFailed:e=>`The creative was created, but its variants did not start: ${e.detail}`,selectorLabel:"Send to",singleHint:`The message goes to the creative's agent. Name the variants (B, "variant C", "all variants") or leave a comment on one: if you do not, the agent asks you.`,sendToHint:e=>`The message goes to variant ${e.letter}. The chat is the same for every variant.`,selectorAll:"All",allHint:"The same request goes to every active variant.",sentToAll:e=>e.count===1?"Request sent to 1 variant":`Request sent to ${e.count} variants`,sentToAllRefused:e=>`Not started: ${e.list}`,pinsNotSentToAll:"not sent to All",sendAllFailed:e=>`Couldn't send the request to the variants: ${e.detail}`,toolbarAria:"Variants",groupByAria:"Group by",rowMenu:e=>`Options of variant ${e.letter}`,exportVariant:"Export this variant",editDirection:"Edit direction",directionSave:"Save direction",directionFailed:e=>`Couldn't save the direction: ${e.detail}`,noDirection:"No direction yet",discarded:"Discarded",discardFailed:e=>`Couldn't discard the variant: ${e.detail}`,restoreFailed:e=>`Couldn't restore the variant: ${e.detail}`,layoutFailed:e=>`Couldn't change the grouping: ${e.detail}`,missingFolder:"The folder of this variant is missing",orphanNotice:"The group of this variant could not be found: it opens as a single creative.",waiting:"Waiting",finalPick:e=>`${e.format} · Variant ${e.variant} · v${e.n}`,finalDefault:e=>`${e.format} · default rule`,finalDefaultFrom:e=>`${e.format} · Variant ${e.variant} · v${e.n} · default rule`,finalEmpty:"No formats",finalHint:"Where each format of the group export comes from. Without a ★ the default rule applies to variant A.",starUse:e=>`Use ${e.label} v${e.n} of variant ${e.variant} for export`,starUsed:e=>`${e.label}: variant ${e.variant} v${e.n} is chosen for export`,choose:"Choose",inChat:"In chat",inChatHint:"The chat, the versions and the comments are of this variant",chosen:"Chosen",readyBanner:e=>`${e.count} variants ready: choose the final one`,chooserHint:"For each format, click the variant to export. Click the chosen one again to go back to the default rule.",chooserPick:e=>`${e.format}: variant ${e.variant}, v${e.n}`,chooserDefaultTag:"Default rule",chooserNone:"No variant has this format yet.",cardFormats:e=>`Formats of variant ${e.letter}`,pickFailed:e=>`Couldn't save the choice: ${e.detail}`,usedForAll:e=>`Variant ${e.letter} is now chosen for every format`,useForAllFailed:e=>`Couldn't choose the variant: ${e.detail}`,addTitle:"Add a variant",addDirection:"Direction (optional)",addBase:"Start from",addBaseBrief:"The brief",addBaseOf:e=>`Variant ${e.letter}, version ${e.n}`,addSubmit:"Add variant",addFailed:e=>`Couldn't add the variant: ${e.detail}`,listMissing:e=>`missing: ${e.letters}`,stateLabel:e=>`State of variant ${e.letter}`,waitReasons:{"variant-directions":"waiting for directions","variant-confirm":"waiting for confirmation","variant-slot":"queued: two variants already working","video-long":"waiting for confirmation: long video","video-queue":"queued: another video of the project is being analysed","transcription-choice":"waiting for the transcription choice","transcription-check":"checking the audio for speech"}},theme:{aria:"Theme",system:"System",light:"Light",dark:"Dark"},instances:{duplicate:"Duplicate format",duplicating:"Duplicating…",duplicateHint:e=>`Duplicate ${e.label} as a new format of this creative`,duplicateFailed:e=>`Couldn't duplicate the format: ${e.detail}`,duplicated:e=>`Duplicated: ${e.label}`,title:"Formats of this creative",hint:"Give each format a label, change the order, or add the same format again.",list:"Selected formats",labelOf:e=>`Label of ${e.name}`,labelPlaceholder:"Label (optional)",dragHandle:e=>`Drag to reorder ${e.name}`,moveUp:e=>`Move ${e.name} up`,moveDown:e=>`Move ${e.name} down`,addAnother:e=>`Add another ${e.name}`,addAnotherShort:"Add another",full:"The limit of 20 of the same format is reached",remove:e=>`Remove ${e.name}`,removeTitle:e=>`Remove ${e.name}?`,removeBody:"Saved versions are kept. The format is left out of the next generations.",removeConfirm:"Remove",saveFailed:e=>`Couldn't save the formats: ${e.detail}`,invalidId:e=>`The brief has the format “${e.id}”, which is no longer valid. Remove it from the formats list and save again.`},codebase:{needAbsolute:"Enter an absolute path",alreadyLinked:"Folder already linked",pickTitle:"Choose the folder to link",hint:"Linked folders are read-only. The agent can read them; editing tools are blocked and changes in git repositories are reported.",notFound:"Not found",noteFor:e=>`Note for ${e.path}`,remove:e=>`Remove ${e.path}`,pathAria:"Absolute folder path",pathPlaceholder:"/Users/yourname/dev/app",noteAria:"Note (optional)",notePlaceholder:"E.g. iOS app, screens in /Screens",link:"Link"},questionUi:{title:"The agent asks you",other:"Other",otherPlaceholder:"Write your answer",multiHint:"Choose one or more",send:"Answer",skip:"Don’t answer",chooseFirst:"Choose an option or write your answer for every question",historyLabel:"Question from the agent",yourAnswer:"Your answer",skipped:"Not answered",expired:"No answer in time",cancelled:"Cancelled: the turn was stopped"},approvalUi:{alreadyHandled:"Request already handled",generate:"Generate",deny:"Deny",allow:"Allow",alwaysHere:"Always here",alwaysRule:e=>`“Always here” saves the rule ${e.rule}`,alwaysScope:e=>`Always here allows: ${e.label} · this project only`,alwaysSaved:e=>`Always allowed in this project: ${e.label}`,showCommand:"Show command",hideCommand:"Hide command",showDetails:"Show details",hideDetails:"Hide details",fullCommand:"Full command",fullDetails:"Full details",lines:e=>e.count===1?"1 line":`${e.count} lines`,scrollMore:"Scroll to read it all",shortened:e=>`Shortened by Motion Studio to the first ${e.count} characters`,describe:{command:"The agent wants to run a command on this computer.",edit:"The agent wants to change a file outside the project.",read:"The agent wants to read a file outside the project.",web:"The agent wants to open a web page.",tool:"The agent wants to use a tool that needs your permission."},kinds:{command:"Command",edit:"File change",read:"File read",web:"Web page",tool:"Tool",provider:"External service"},agentSays:e=>`The agent says: “${e.reason}”`,riskPrefix:e=>`${e.risk}:`,otherRisk:"Other risk",runsCommand:"Runs a command"},exportUi:{title:e=>`Export the starred versions of “${e.title}”`,heading:"Export the starred versions",sub:e=>`“${e.title}”: each format at its ★ version, ready to post.`,format:"Format",version:"Version",include:e=>`Export ${e.label}`,star:e=>`★ v${e.n}`,groupHeading:"Export the final selection",groupSub:e=>`“${e.title}”: each format from its ★ in the group, from any variant.`,groupPick:e=>`Variant ${e.variant} · v${e.n}`,groupDefault:e=>`Variant ${e.variant} · v${e.n} · default rule`,groupLoading:"Reading the final selection…",groupLoadFailed:e=>`Couldn't read the final selection: ${e.detail}`,newer:e=>`v${e.n} newer`,follows:e=>`follows ${e.primary}`,fileMissing:e=>`The file of v${e.n} is missing or cannot be read safely`,noFollowerFile:e=>`v${e.n} of the ${e.primary} has no file for this format`,names:"File names",pattern:"File name pattern",insertToken:e=>`Insert {${e.token}}`,preview:"Preview",previewLanguage:e=>`Preview, ${e.language}`,unknownVars:e=>`Unknown variables are left out: ${e.list}`,emptyName:"This pattern gives an empty file name",collision:e=>`Two formats would get the same file name (${e.list}). Add {format} to the pattern.`,saveDefault:"Save as default",savedDefault:"Saved as the workspace default",saveFailed:e=>`Could not save the default: ${e.detail}`,errors:{invalidPicks:"Choose at least one format to export.",pickFollower:"A format that follows another one is exported with its primary’s ★ version: reopen Export and try again.",pickNoFile:e=>`${e.detail}. Reopen Export to refresh the list.`,followMismatch:e=>`${e.detail}. Reopen Export to refresh the list.`,fileMissing:e=>`${e.detail}. Reopen Export to refresh the list.`,nameCollision:e=>`Nothing was exported. ${e.detail}.`,nameEmpty:"This pattern gives an empty file name.",invalidPattern:"The file name pattern is not valid (at most 200 characters).",invalidDestination:"Choose a destination folder (an absolute path).",invalidDate:"The export date is not valid: reopen Export and try again."},saveTo:"Save to",pickTitle:"Choose the destination folder",choose:"Choose…",folder:"Destination folder",placeholder:"/Users/yourname/Delivery",lastUsed:"last used",noFolder:"No folder chosen",subtitles:{title:"Subtitles",files:".srt and .vtt files",filesHint:"Next to each video, for YouTube, Vimeo, LinkedIn and websites.",drawn:"In the video",drawnHint:"One video per language, with the subtitles drawn in their style.",soft:"Track in the MP4 file",softHint:"Subtitles the viewer turns on in the player, inside the video file.",cleanNote:"Files and tracks go with a video without drawn subtitles.",previewDrawn:e=>`In the video, ${e.language}`,previewDrawnOn:e=>`${e.video} video, ${e.language} subtitles`,drawnVideo:e=>`Video for the ${e.language} subtitles`,voicedOnly:e=>`Follows the voice of the ${e.language} video: it goes with that video only, when you export it`,noTrackRow:"Draws no subtitles: not exported"},noOverwrite:"Existing files are never overwritten",files:e=>e.count===1?"1 file":`${e.count} files`,run:e=>e.count===1?"Export 1 file":`Export ${e.count} files`,running:"Exporting…",done:e=>e.count===1?"1 file exported":`${e.count} files exported`,skipped:e=>`Not exported: ${e.list}`,renderProblems:e=>`Rendered with problems: ${e.list}. Tick it to export it anyway`,excluded:e=>`Not exported because the render has problems: ${e.list}`,excludedItem:e=>`${e.label} v${e.n} (${e.list})`,problemShort:{tooLarge:e=>`${e.size} MB instead of at most ${e.max} MB`,durationOffTarget:e=>`duration ${e.duration} s instead of ${e.target} s`,durationOverMax:e=>`duration ${e.duration} s, at most ${e.max} s`,badResolution:e=>`${e.size} instead of ${e.expected}`,notReadable:"the file cannot be read",badExtension:e=>`.${e.ext} not accepted`},resolution:"Resolution",resolutionOriginal:"Format size",resolutionOption:e=>e.n===2160?"2160p (4K)":e.n===1440?"1440p (2K)":`${e.n}p`,frameRate:"Frame rate",frameRateOriginal:e=>e.fps===null?"The format's own":`${e.fps} fps (the format's own)`,frameRateOption:e=>`${e.n} fps`,quality:"Quality",qualityNames:{standard:"Standard",high:"High",max:"Max"},qualityHints:{standard:"Smaller files, as Motion Studio made them before",high:"Sharp text and edges: about 8 Mbps at 1080p, as YouTube recommends",max:"The largest files: every frame lossless before the encode"},profileHint:"Videos only: images keep their size",profileLocked:"With other languages the videos are exported at the format size and High quality",outputSize:e=>`→ ${e.size}`,background:"The export goes on in the background: you can close this window, you will be told when the files are in the folder.",exportingPct:e=>`Exporting ${e.pct}%`,renderingFirst:e=>`Rendering · ${e.pct}%`,copying:"Copying the files…",cancelExport:"Cancel export",cancelled:"Export cancelled",failed:e=>`Export failed: ${e.detail}`,doneToast:e=>e.count===1?`1 file exported to ${e.folder}`:`${e.count} files exported to ${e.folder}`,doneNotification:"Export finished",doneLeftOut:e=>`${e.count} not exported: open Export again to see why.`,needsForceToast:e=>`Export stopped: these translations have open problems or outdated texts: ${e.list}`,doneRow:e=>e.count===1?`1 file in ${e.folder}`:`${e.count} files in ${e.folder}`,cancelOf:e=>`Cancel ${e.label}`,showInFinder:"Show in Finder",showInFolder:"Show in folder",finish:"Done",empty:"Nothing to export yet."},player:{audio:e=>`Audio player: ${e.name}`,video:e=>`Video player: ${e.name}`,play:"Play",pause:"Pause",position:"Position",positionText:e=>`${e.time} of ${e.total}`,waveform:"Waveform",unplayable:"This file can’t be played here",keys:"Space plays or pauses · ←/→ 5 s · Home/End"},library:{generate:{open:"Generate",title:"Generate an asset",tabs:"What to generate",kinds:{image:"Image",voice:"Voice-over",sfx:"Sound effect",music:"Music"},providerLabel:"Provider",providerNames:{openai:"OpenAI",elevenlabs:"ElevenLabs"},providerLine:e=>`Made by ${e.provider} (${e.model}).`,paidNote:"Every generation is a paid call to your provider account: Motion Studio asks you to confirm it first, and the result is added to Assets.",noKeyTitle:e=>`Add the ${e.providers} key to use this tab.`,openSettings:"Open Settings",noKeysAtAll:"No provider key is set yet, so nothing can be generated.",prompt:"Description",imagePlaceholder:"e.g. a flat illustration of a blue paper plane over a city",soundPlaceholder:"e.g. a short wooden door slam",musicPlaceholder:"e.g. calm piano with a slow build",text:"Text to speak",textPlaceholder:"The words to say, exactly as written.",width:"Width",height:"Height",sizeNote:"The size is adjusted to the nearest one the model supports (up to 3840 px).",quality:"Quality",qualities:{auto:"Auto",low:"Low",medium:"Medium",high:"High"},voice:"Voice",voiceId:"Voice ID",voicePlaceholder:"Default voice",brandVoice:e=>`Brand voice: ${e.name}`,instructions:"Speaking style",instructionsPlaceholder:"e.g. warm and unhurried",format:"Format",duration:"Duration",sfxLimits:"Between 0.5 and 30 seconds. Leave it empty to let the service choose.",musicLimits:"Between 10 and 300 seconds.",seconds:"s",loop:"Loop",instrumental:"Instrumental only",brandStyle:"The prompt starts from the brand sound style; edit it freely.",name:"File name",namePlaceholder:"Optional",submit:"Generate",cancel:"Cancel",close:"Close",stop:"Stop",starting:"Starting…",running:"Generating… If a confirmation is waiting, you will find it in the activity center.",done:"Added to Assets.",failed:e=>`Generation failed: ${e.error}`,cancelled:"Generation cancelled.",errors:{promptRequired:"Describe what to generate.",textRequired:"Write the text to speak.",duration:e=>`Choose a duration between ${e.min} and ${e.max} seconds.`,size:"Enter a width and a height."}},assets:{title:"Assets",filters:"Asset filters",type:"Type",origin:"Origin",tags:"Tags",kinds:{all:"All",image:"Images",svg:"Vector",video:"Video",font:"Fonts",audio:"Audio",other:"Other"},origins:{website:"From website",upload:"Uploaded",generated:"Generated",stock:"Stock","google-fonts":"Google Fonts",codebase:"From codebase"},originShort:{website:"website",upload:"uploaded",generated:"generated",stock:"stock","google-fonts":"Google Fonts",codebase:"codebase"},count:e=>`${e.shown} of ${e.total}`,selectedCount:e=>`${e.count} selected`,clearFilters:"Clear filters",search:"Search assets",searchPlaceholder:"Search names, descriptions, tags",upload:"Upload",uploadInput:"Upload files",dropTitle:"Drop files anywhere",dropBody:"Images, SVG, video, fonts, audio · up to 200 MB each. Describe them with Claude afterwards.",dropOverlay:e=>`Drop to add to ${e.project}`,refsGroup:"Creatives",refsFilter:"Creative references",refsIntro:"Files added from the computer in a brief, only for that creative. They are deleted with it unless you save them in Assets.",refsEmpty:"No creative references",refsEmptyBody:"Files you add from the computer in a new creative’s brief show up here.",refsUsedBy:"Used by",refsUnused:"Brief not created yet",saveToAssets:"Save in Assets",savedToAssets:e=>`${e.name} saved in Assets`,saveToAssetsFailed:e=>`Couldn't save it in Assets: ${e.detail}`,uploading:"Uploading…",uploaded:e=>e.count===1?"Uploaded 1 file":`Uploaded ${e.count} files`,uploadFailed:e=>`Upload failed: ${e.detail}`,describing:"Describing…",noDescription:"No description yet",undescribed:e=>e.count===1?"1 asset without a description":`${e.count} assets without a description`,describeMissing:e=>e.count===1?"Describe it":"Describe them",allDescribed:"Every asset has a description",describeBusy:"Claude is working on this project’s brand. Describe when it finishes.",describeFailed:e=>`The description didn't start: ${e.detail}`,described:"Descriptions updated",select:e=>`Select ${e.name}`,open:e=>`Open ${e.name}`,more:e=>`+${e.count}`,selection:"Selection",describeAgain:"Describe again",addTags:"Add tags",addTagsLabel:"Tags to add",addTagsPlaceholder:"Comma-separated, e.g. logo, night",addTagsApply:"Add",tagsAdded:e=>e.count===1?"Tags added to 1 asset":`Tags added to ${e.count} assets`,tagsFailed:e=>`Tags not saved: ${e.detail}`,useInCreative:"Use in a creative",delete:"Delete",clearSelection:"Clear selection",deleted:e=>e.count===1?`${e.name} deleted`:`${e.count} assets deleted`,deleteFailed:e=>`Not deleted: ${e.detail}`,undo:"Undo",emptyTitle:"No assets yet",emptyBody:"Add logos, images, fonts or video, then describe them with Claude. Every creative of this project can use them.",noMatchTitle:"Nothing matches",noMatchBody:"Try another filter or search.",loadFailed:e=>`Can't load the assets: ${e.detail}`,retry:"Try again",listUnreadable:e=>`The asset list can't be read: ${e.detail}. Fix or remove assets/assets.json in the project folder, then try again.`,unregistered:e=>e.count===1?"1 file in the assets folder is not in Assets yet":`${e.count} files in the assets folder are not in Assets yet`,register:"Add them",registerFailed:e=>`Not added: ${e.detail}`,sort:{label:"Sort by",date:"Newest first",name:"Name",kind:"Type",duration:"Longest first"},durationBadge:e=>`Duration ${e.time}`,detail:{label:"Asset details",close:"Close details",description:"Description",descriptionHint:"Claude reads it · edit freely",looking:"Claude is looking at it",descriptionPlaceholder:"What does it show? Claude reads this when it picks assets.",tags:"Tags",addTag:"Add a tag",addTagPlaceholder:"+ Add",removeTag:e=>`Remove ${e.tag}`,tagRules:"Up to 30 tags of 40 characters",file:"File",size:"Size",added:"Added",source:"Source",credit:"Credit",saved:"Saved",rename:"Rename file",renameLabel:"New file name",renameApply:"Rename",renameCancel:"Cancel",renameHint:"Same folder · links in the brand and in briefs follow the new name",useAsProjectIcon:"Use as project icon",projectIconSet:"Project icon updated",projectIconFailed:e=>`Project icon not changed: ${e.detail}`,renamed:e=>`Renamed to ${e.name}`,renameFailed:e=>`Not renamed: ${e.detail}`,duration:"Duration",fileSize:"File size",waveformFailed:"The waveform is not available",saveFailed:e=>`Not saved: ${e.detail}`,delete:"Delete asset"}},references:{title:"References",sub:"Inspiration for the look and feel. The agent reads them; renders only use what’s in Assets.",addImages:"Add images",feeding:e=>e.count===1?"1 reference feeds the next brand analysis":`${e.count} references feed the next brand analysis`,feedingHint:"turn it on for any card with the switch",analyze:"Analyze brand with these",analyzeFailed:e=>`The analysis didn't start: ${e.detail}`,brandAnalysis:"Brand analysis",useForBrand:e=>`Use ${e.name} for brand analysis`,notePlaceholder:"Add a note for the agent",noteFor:e=>`Note for ${e.name}`,remove:e=>`Remove ${e.name}`,removed:"Reference removed",removeFailed:e=>`Not removed: ${e.detail}`,saveFailed:e=>`Not saved: ${e.detail}`,undo:"Undo",emptyTitle:"No references yet",emptyBody:"Add images that capture the look you want. The agent reads them, and they can feed the brand analysis.",dropOverlay:"Drop images to add them to the references",uploading:"Uploading…",uploaded:e=>e.count===1?"Added 1 reference":`Added ${e.count} references`,uploadFailed:e=>`Upload failed: ${e.detail}`,loadFailed:e=>`Can't load the references: ${e.detail}`,retry:"Try again",listUnreadable:e=>`The reference list can't be read: ${e.detail}. Fix or remove references/references.json in the project folder, then try again.`}},projectSettings:{sections:"Project settings sections",nav:{general:"General",agent:"Agent and approvals",internet:"Internet access",code:"Linked code"},everyProject:"Shared by every project",retry:"Try again",undo:"Undo",general:{title:"General",sub:"Claude reads the name and the description in every job of this project.",name:"Project name",description:"Description",descriptionPlaceholder:"What is this project about?",save:"Save",saved:"Saved",saveFailed:e=>`Not saved: ${e.detail}`,nameRequired:"The project needs a name",icon:{title:"Project icon",sub:"Shown on the Projects page and next to the project name. Automatic: the app icon, the favicon or a square logo of the brand.",label:"Project icon",auto:"Automatic",initials:"Initials",images:"Images from Assets",saved:"Icon updated",failed:e=>`Icon not changed: ${e.detail}`}},agent:{title:"Agent and approvals",sub:"What Claude can do in this project without asking you first.",confirmPaid:"Confirm before using paid services",confirmPaidSub:"Image generation, voice-over and stock footage show the estimated cost and wait for you.",jobs:"Jobs at the same time",jobsSub:"More parallel jobs finish sooner but use your Claude plan faster.",fewer:"Fewer jobs",more:"More jobs",advanced:"Advanced",isolation:"Agent isolation",isolationSub:"The sandbox keeps the agent’s commands inside the project folder, with internet only to the allowed sites.",isolationAuto:"Automatic (recommended)",isolationOff:"Off",isolationWarning:"Without isolation, the agent can write anywhere with the commands you allow.",model:"Model",modelSub:"Leave it empty to use Claude Code’s default model.",modelPlaceholder:"Claude Code default",sandboxOn:"Sandbox on: the agent works isolated in the project folder.",sandboxUnknown:"Sandbox status unavailable: open App settings → System check.",autoApprove:"Approve sandboxed commands automatically",autoApproveSub:"Commands that stay inside this project run without asking; network access stays limited to the allowed sites. You still decide on files outside the project, paid services and new websites.",appliesNew:"Applies to new jobs",needsIsolation:"Needs agent isolation",autoOn:"Sandboxed commands now run without asking",autoOff:"Every command will ask for your OK",runningKeeps:e=>e.count===1?"1 running job keeps its current setting":`${e.count} running jobs keep their current setting`},allowed:{title:"Always allowed",count:e=>`${e.count} · added from approval cards`,revokeAll:"Revoke all",revoke:"Revoke",revokeLabel:e=>`Revoke ${e.label}`,revoked:e=>`Revoked: ${e.label}`,revokedAll:e=>e.count===1?"1 permission revoked":`${e.count} permissions revoked`,revokeFailed:e=>`Not revoked: ${e.detail}`,confirm:"Revoke this rule?",confirmAll:e=>e.count===1?"Revoke the only rule?":`Revoke all ${e.count} rules?`,confirmAllLabel:e=>e.count===1?"Revoke the only rule":`Revoke all ${e.count} rules`,cancel:"Cancel",emptyTitle:"Nothing is always allowed",emptySub:"Choose “Always here” on an approval card to add a rule.",loadFailed:e=>`Can't load the permissions: ${e.detail}`},internet:{title:"Internet access for creatives",sub:"The agent’s commands can only reach these sites. Everything else is blocked by the sandbox.",defaults:"Always reachable: package registries (npm, PyPI), GitHub, CDNs and Google Fonts.",add:"Add",addLabel:"Add a website",placeholder:"Add a website, e.g. assets.example.com",invalid:"Use a domain like assets.example.com or *.example.com",exists:"This website is already in the list",remove:e=>`Remove ${e.domain}`,dropped:e=>`Ignored invalid websites: ${e.list}`,none:"No extra websites yet."},code:{title:"Linked code",sub:"The agent can read these folders to match your app’s real screens. It never writes to them.",readOnly:"Read only",notFound:"Not found",link:"Link a folder…",pathLabel:"Folder path",pathPlaceholder:"/Users/you/code/app",noteFor:e=>`Note for ${e.path}`,notePlaceholder:"Note (optional), e.g. iOS app",add:"Link",cancel:"Cancel",pickTitle:"Choose the folder to link",unlink:e=>`Unlink ${e.path}`,unlinked:e=>`${e.name} unlinked`,needAbsolute:"Enter an absolute path",alreadyLinked:"This folder is already linked",empty:"No folders linked yet.",saveFailed:e=>`Not saved: ${e.detail}`}},appSettings:{sections:"Settings sections",appName:"Motion Studio",nav:{general:"General",system:"System check",paid:"Paid services",usage:"Usage",notifications:"Notifications",updates:"Updates",transcription:"Video transcription"},usage:{title:"Usage",sub:"Tokens Claude used and the paid services, for every project on this computer.",week:"Claude · last 7 days",today:"Today",chart:"Tokens per day, last 7 days",day:"Day",tokens:"Tokens",cost:"Cost",barTitle:e=>`${e.day}: ${e.count} tokens`,byProject:"By project",byKind:"By kind of work",kinds:{creative:"Creatives","brand-analysis":"Brand analyses",describe:"Asset descriptions",console:"Agent console",localize:"Translations","video-analysis":"Video analyses"},none:"No tokens used in these 7 days.",empty:"Usage appears here after your first generation",emptySub:"Motion Studio records every run from now on. Earlier runs are not rebuilt.",trackedSince:e=>`Tracked since ${e.date}`,loading:"Loading usage…",loadFailed:e=>`Couldn't load usage: ${e.detail}`,tryAgain:"Try again",paid:{title:"Paid services · last 7 days",chart:"Estimated cost per day, last 7 days",cost:"Estimated cost",barTitle:e=>`${e.day}: ≈ ${e.cost}`,byService:"By service",byKind:"By kind",byProject:"By project",services:{openai:"OpenAI",elevenlabs:"ElevenLabs"},kinds:{images:"Images",voice:"Voice",music:"Music",sfx:"Sound effects",transcription:"Transcription"},estimate:e=>`≈ ${e.cost}`,approx:e=>`≈ ${e.text}`,units:{tokens:e=>`${e.count} ${e.n===1?"image token":"image tokens"}`,characters:e=>`${e.count} ${e.n===1?"character":"characters"}`,seconds:e=>`${e.count} s`,minutes:e=>`${e.count} min`,images:e=>`${e.count} ${e.n===1?"image":"images"}`},note:"Costs are estimated at list prices. The real bill is on your account with each service.",none:"No paid services used in the last 7 days."}},configured:e=>`${e.n} of ${e.total}`,appliesAll:"Applies to every project on this computer.",general:{title:"General",language:"Language",languageSub:"Also the language Claude answers in and writes guidelines with.",theme:"Theme",themeSub:"Follows your system unless you pick one.",agentPointer:"Paid-service confirmation, parallel jobs, internet access and agent isolation are in any project’s Settings, and apply to every project."},status:{ok:"Everything works",problems:e=>e.count===1?"1 problem to fix":`${e.count} problems to fix`,notes:e=>e.count===1?"Works · 1 recommendation":`Works · ${e.count} recommendations`,checking:"Checking…",checkAgain:"Check again",details:"See details"},system:{title:"System check",sub:"Motion Studio uses Claude Code and a few tools on this computer."},paid:{title:"Paid services",sub:"Keys are stored in the system keychain and never shown to the agent.",uses:{openai:"images and voice-over",elevenlabs:"premium voices",pexels:"stock footage",unsplash:"stock photos"},inKeychain:"Key saved in the Keychain",fromEnv:e=>`From the ${e.env} environment variable`,notConnected:"Not connected",addKey:"Add key",replace:"Replace",replaceLabel:e=>`Replace ${e.name} key`,remove:"Remove",removeLabel:e=>`Remove ${e.name} key`,removeConfirm:e=>`Remove the ${e.name} key?`,keyLabel:e=>`${e.name} API key`,keyPlaceholder:"Paste the API key",cancel:"Cancel",save:"Save",saving:"Saving…",saved:e=>`${e.name} key saved in the Keychain`,removed:e=>`${e.name} key removed`,notStored:"The key could not be read back from the Keychain. Try again.",failed:e=>`Key not saved: ${e.detail}`,removeFailed:e=>`Key not removed: ${e.detail}`,loadFailed:e=>`Can't read the keys: ${e.detail}`,test:"Test",testLabel:e=>`Test the ${e.name} key`,testing:"Testing…",savedChecking:"Saved · checking…",checksLabel:e=>`What the ${e.name} key can do`,checkFailed:e=>`Test not run: ${e.detail}`,caps:{key:"Key",images:"Images",tts:"Voice-over",voices:"Voice list",account:"Account",sfx:"Sound effects",music:"Music",search:"Search"},capStatus:{ok:"works",missing:"missing",unverified:"not verified",error:"error"},keyRefused:"The service refused this key or the request: check the key, or a region, organization or firewall restriction at the provider.",someErrors:e=>`Some checks did not finish (${e.detail}). Press Test to try again.`,unverifiedNote:"Not verified: checking would cost a generation. The first real use updates it.",permissionsTitle:"Permissions to enable",permissionsHelp:{openai:'In the OpenAI dashboard (API keys), give a restricted key "Models: Read" to test it and "Model capabilities: Write" (model.request) for images and voice-over. A missing model may need organization verification.',elevenlabs:"In ElevenLabs (Developers → API keys), edit the key and enable the permission of each feature you use:",pexels:"Pexels keys have no permissions: if the key is refused, create a new one on pexels.com/api.",unsplash:"Unsplash access keys have no permissions: if the key is refused, check your app on unsplash.com/developers."}},notifications:{title:"Notifications",approvals:"When the agent needs your OK",approvalsSub:"A banner, the Dock badge and a notification, even when the window is open.",approvalsLabel:"Notify for approvals",ready:"When a creative is ready",readySub:"Only when Motion Studio is in the background.",readyLabel:"Notify when ready",sound:"Play a sound",soundSub:"The system sound that goes with an approval notification.",soundLabel:"Play a sound",test:"Check that you see them",testSub:"Sends a notification now, with the sound setting applied.",testButton:"Send a test notification",testSent:"Sent: the system showed the notification.",testBlocked:"The system refused the notification. macOS shows notifications only for the installed (signed) Motion Studio app: System Settings → Notifications → Motion Studio → Allow notifications. Development builds can't show system notifications.",testTimeout:"No answer from the system. If macOS asked for permission, answer the prompt and try again.",testBlockedWeb:"The browser or the system did not show the notification. Check the notification settings of the browser and of the system.",testReason:e=>`System message: ${e.detail}`,testUnconfirmed:"Sent, but this version of the desktop app cannot confirm that it was shown.",testFailed:e=>`Couldn't show the notification: ${e.detail}`,unsupported:"This system reports that it cannot show notifications.",webDenied:"The browser blocks notifications for this page. Allow them in the site settings of the browser.",webDefault:"The browser has not been asked yet.",webAllow:"Allow notifications",webUnsupported:"This browser does not support notifications.",howTo:"macOS shows notifications only for the installed (signed) Motion Studio app: System Settings → Notifications → Motion Studio → Allow notifications. Development builds can't show system notifications."},updates:{title:"Updates",version:e=>`Motion Studio ${e.version}`,off:"Automatic updates are not active in this version",automatic:"The desktop app downloads updates automatically and asks you to restart."}},status:{draft:"Draft",working:"Working",ready:"Ready",incomplete:"Incomplete",error:"Error",interrupted:"Interrupted"},jobState:{queued:"Queued",running:"Running",succeeded:"Done",failed:"Failed",cancelled:"Cancelled"},creatives:{title:"Creatives",filter:"Filter creatives",filters:{all:"All",needs:"Needs you",running:"In progress",ready:"Ready",drafts:"Drafts"},search:"Search creatives",newCreative:"New creative",loading:"Loading creatives…",loadFailed:e=>`Can't load the creatives: ${e.detail}. Make sure Motion Studio is still running, then try again.`,tryAgain:"Try again",emptyTitle:"No creatives yet",emptyBody:"Start with the brand so every creative looks right, or jump straight to your first brief.",setUpBrand:"Set up the brand",noMatchTitle:"Nothing here",noMatchBody:"Try another filter or search.",showAll:"Show all",review:"Review",queued:"Waiting to start",working:"Working…",readyVersion:e=>`Ready · v${e.n}`,incomplete:e=>`v${e.n} · some formats are missing`,failed:"The last generation failed.",interrupted:"The generation was interrupted before it finished.",retryFailed:e=>`Couldn't start again: ${e.detail}`,draftNote:"Brief saved · nothing generated yet",draft:"Draft",generate:"Generate",generateOf:e=>`Generate ${e.title}`,generateFailed:e=>`Couldn't start the generation: ${e.detail}`,moreFormats:e=>`+${e.n} more`,unreadable:"Unreadable"},removal:{menu:e=>`Actions for ${e.title}`,archive:"Archive",archiveGroup:e=>`Archive all ${e.count} variants`,archiveVariant:e=>`Archive variant ${e.letter}`,delete:"Delete…",deleteGroup:e=>`Delete all ${e.count} variants…`,deleteVariant:e=>`Delete variant ${e.letter}…`,checking:"Checking whether it can be removed…",archived:e=>`“${e.title}” archived`,undo:"Undo",archiveFailed:e=>`Couldn't archive: ${e.detail}`,restore:"Restore",restored:e=>`“${e.title}” restored`,restoreFailed:e=>`Couldn't restore: ${e.detail}`,deleted:e=>`“${e.title}” moved to the Trash`,deleteFailed:e=>`Couldn't delete: ${e.detail}`,deleteTitle:e=>`Delete “${e.title}”?`,deleteBody:"Its folder, with every version and render, goes to the Trash. You can put it back from the Trash until you empty it.",deleteGroupBody:e=>`All ${e.count} variants of this group, with every version and render, go to the Trash. You can put them back from the Trash until you empty it.`,deleteVariantBody:e=>`Variant ${e.letter} leaves the group and its folder, with every version and render, goes to the Trash. You can put it back from the Trash until you empty it.`,deleteConfirm:"Move to Trash",archiveGroupTitle:e=>`Archive “${e.title}”?`,archiveGroupBody:e=>`All ${e.count} variants of this group leave the lists. You can restore them from Archived.`,archiveConfirm:"Archive",cancel:"Cancel",archivedCount:e=>`Archived (${e.n})`,archivedTitle:"Archived creatives",archivedEmpty:"No archived creatives.",archivedOn:e=>`Archived ${e.when}`,backToCreatives:"Back to creatives"},briefSession:{goneOnCreate:"The brief session ended elsewhere (started over or turned into a creative): press Generate again to create the creative without it.",loadFailed:e=>`The brief session could not be read: ${e.detail}`,modeLabel:"How to fill in the brief",modeYou:"Fill it in yourself",modeAgent:"With the agent",cta:"Let the agent fill it in",resumeTitle:"You have a brief session in progress",resumeBody:"You can pick it up where you left off or start over: the previous session will be deleted.",resume:"Resume the brief session",agentWorking:"The agent is filling in the brief",title:"Brief with the agent",panelLabel:"Session with the agent",state:{new:"New session",working:"Working…",filled:"Brief filled in"},intro:"Use the + below to link the code folders and the assets you need, then tell me what you want to achieve. I'll fill in the brief.",composerLabel:"Message to the agent",placeholderFirst:"Tell the agent what you want to achieve",placeholderFollowUp:"Ask for a change to the brief…",add:"Add folders or assets",addMenu:"Add context",folder:{title:"Link a folder",hint:"Code on your Mac, read-only"},library:{title:"From Assets",hint:"Images, videos and logos of the project"},upload:{title:"Upload from your Mac",hint:"Only for this creative, unless you save it in Assets"},folderPath:"Folder path",link:"Link",cancel:"Cancel",uploadFailed:e=>`Upload failed: ${e.detail}`,removePin:e=>`Remove ${e.name}`,folders:e=>e.count===1?"1 folder":`${e.count} folders`,noFolders:"No folders",assets:e=>e.count===1?"1 asset":`${e.count} assets`,noAssets:"No assets",foldersTitle:"Folders of the session",assetsTitle:"Assets of the session",removeContext:e=>`Remove ${e.name} from the session`,startOver:"Start over",openCreative:"Open the creative",discard:"Discard the session",agentMark:"Agent",created:"Creative created"},newCreative:{secondsShort:e=>`${e.n} s`,goalQuestion:"What do you want to make?",goalPlaceholder:"Describe the idea: what happens, the mood, how it ends.",goalRequired:"Describe what you want to make first",goalCount:e=>`${e.n.toLocaleString("en-US")} / ${e.max.toLocaleString("en-US")}`,brandKit:"Brand kit",assetCount:e=>e.count===1?"1 asset":`${e.count} assets`,addAssets:"Add assets",tryLabel:"Try",suggestions:{teaser:{label:"Launch teaser",text:"A 6-second teaser for the launch. Open on the product in use, keep the palette calm, reveal the key message last and close on the logo."},feature:{label:"Feature announcement",text:"Announce the new feature. Calm, confident, one line per scene, end on the key message and the logo."},screenshots:{label:"App Store screenshots",text:"Three App Store screenshots that show the three main screens of the app, each with a short caption."}},titleHint:"you can rename it in the canvas",untitled:"Untitled creative",keyMessage:"Key message",keyMessageHint:"· shown on screen",optional:"(optional)",whereTo:"Where will it be published?",videoLength:"Video length",lengthFor:e=>e.count===1?"for the video format":`for the ${e.count} video formats`,noVideo:"no video formats selected",custom:"Custom",customSeconds:"Length in seconds",customInvalid:"Enter a length from 1 to 600 seconds",durationMismatch:e=>`The text says ${e.stated} s, the duration is ${e.current} s`,durationMismatchUnset:e=>`The text says ${e.stated} s`,durationUse:e=>`Use ${e.n} s`,overMax:e=>`Longer than ${e.label} allows (${e.max})`,assetsToUse:"Assets to use",browse:"Browse Assets",libraryTitle:e=>`${e.project} Assets`,libraryLoading:"Loading Assets…",libraryFailed:e=>`Couldn't read Assets: ${e.detail}`,libraryEmpty:"No assets in this project yet",libraryEmptyBody:"Add images, logos or clips from your computer, or upload them in Assets.",openAssets:"Open Assets",tryAgain:"Try again",removeAsset:e=>`Remove ${e.name}`,brandAuto:"The logo and fonts come from the brand kit automatically.",fromComputer:"From your computer…",fromComputerHint:"Only for this creative, unless you save it in Assets",fromLibrary:"From Assets",fromLibraryHint:"Files already in Assets",uploadFromComputer:"Upload from your computer",uploadInput:"Files to add to the brief",dropHere:"Drop the files to add them to this brief",uploadingAsset:e=>`Uploading ${e.name}…`,uploadAssetFailed:e=>`${e.name} was not uploaded: ${e.detail}`,dismissUpload:e=>`Dismiss the error for ${e.name}`,referenceOnly:"Only for this creative",referenceSaved:"Saved in Assets",referenceOnlyHint:e=>`${e.name} is only for this creative: click to save it in Assets too`,referenceSavedHint:e=>`${e.name} is saved in Assets: click to keep it only for this creative`,referenceFailed:e=>`Couldn't change where the file is kept: ${e.detail}`,followsBrand:e=>`Follows the ${e.project} brand`,editBrand:"Edit brand",noBrand:"No brand yet",noBrandBody:"Colours, fonts and logos keep every format consistent.",setUpBrand:"Set up the brand",brandFailed:e=>`Couldn't read the brand kit: ${e.detail}`,codebases:"Codebases for this creative",codebasesHint:"(in addition to the project's)",notesForAgent:"Notes for the agent",moreOptions:"More options",title:"Title",formatKind:"Format type",kindAll:"All",kindVideo:"Video",kindImage:"Image",searchFormats:"Search formats",selectedCount:e=>`${e.n} selected`,moreChannels:"More channels",noMatch:"No formats match",noMatchBody:"Try another word, or show every type.",showAllFormats:"Show all formats",formatsLoading:"Loading the formats…",formatsFailed:e=>`Couldn't load the formats: ${e.detail}`,linkOn:e=>`Linked: uses the same file as ${e.primary}, no extra render. Click to make a dedicated version`,linkOff:e=>`Can use the same file as ${e.primary}, at no cost. Click to link`,linkToggle:e=>`Link ${e.label} to ${e.primary}`,notLinkable:e=>`Can’t share the file of ${e.primary}: ${e.reason}`,copiesLabel:e=>`Copies of ${e.label}`,copiesLess:"One copy fewer",copiesMore:"One more copy",copiesSaid:e=>`${e.label}: ${e.n===1?"1 copy":`${e.n} copies`}`,copiesPackLimit:e=>`The store pack uses ${e.n} more of this format: 20 in all`,copiesTotal:e=>`${e.n} in total`,hiddenChosen:e=>e.n===1?"1 chosen format is hidden by the filter":`${e.n} chosen formats are hidden by the filter`,packFull:e=>`${e.label}: the copies and the store pack ask for more than ${e.max}. Lower its copies or the pack's screenshots.`,copiesHint:"Copies: more images or videos of this format on the same brief, each a different one (not variants)",customTile:"Custom",customTileHint:"Define a format",customTileAria:"New custom format",customEditAria:e=>`Edit ${e.label}`,customNewTitle:"New custom format",customEditTitle:"Edit custom format",customName:"Name",customNamePlaceholder:"e.g. Lobby totem",customKind:"Type",customKindImage:"Image",customKindVideo:"Video",customWidth:"Width",customHeight:"Height",customPx:"px",customRatio:"Ratio",customRatioAria:e=>`Ratio ${e.ratio}: the height follows the width`,customRatioHint:"A ratio sets the height from the width.",customDuration:"Maximum length",customSecondsUnit:"seconds",customDurationHint:"Empty: no limit of its own.",customInUse:e=>`${e.count===1?"A creative uses":`${e.count} creatives use`} this format: its type and size stay as they are. To change them, create a new format.`,customUnreadable:e=>`${e.n===1?"A creative cannot be read and might use":`${e.n} creatives cannot be read and might use`} this format: its type and size stay locked.`,customErrName:"Give the format a name",customErrNameTaken:"A custom format already has this name",customErrSize:"A whole number from 16 to 8192",customErrDuration:"Whole seconds from 1 to 3600, or empty",customErrEven:"A video needs an even number of pixels on each side",customErrVideoMax:"A video is at most 4096 px on each side",customErrDurationShort:e=>`A creative uses this format for ${e.sec} s: no less than that`,customLongest:e=>`Creatives use it for up to ${e.sec} s.`,customUsageLoading:"Checking which creatives use this format…",customUsageFailed:"Could not check which creatives use this format: its type and size stay locked.",formatsDropped:e=>e.n===1?"A chosen format is no longer available and was taken out":`${e.n} chosen formats are no longer available and were taken out`,formatGone:"no longer available",customCreate:"Create format",customSave:"Save",customDelete:"Delete",customDeleteAsk:e=>`Delete “${e.name}”? Creatives that use it keep it.`,customDeleteConfirm:"Delete format",customFailed:e=>`Could not save the format: ${e.detail}`,customDeleteFailed:e=>`Could not delete the format: ${e.detail}`,customAdded:e=>`“${e.name}” added to Custom formats and selected`,customDeleted:e=>`“${e.name}” deleted`,customHidden:e=>`“${e.name}” removed from the formats: the creatives that use it keep it`,summary:e=>[e.formats===1?"1 format":`${e.formats} formats`,[e.videos&&(e.videos===1?"1 video render":`${e.videos} video renders`),e.images&&(e.images===1?"1 image":`${e.images} images`)].filter(Boolean).join(" + ")].join(" · "),libraryPartial:e=>`Part of Assets could not be read: ${e.detail}`,pickFormat:"Pick at least one format",summaryHint:"It runs in the background: you'll get a notification when it's ready.",similar:e=>`Similar creatives used about ${e.range} tokens`,createFailed:e=>`Couldn't create the creative: ${e.detail}. Check the brief and try again.`,draftSaved:e=>`Draft “${e.title}” saved`,open:"Open",saveDraft:"Save draft",generate:"Generate"},formatUi:{video:"video",image:"image",unknownPreset:e=>`${e.id}: unknown preset`,missingIn:e=>`Missing in v${e.n}`,unverified:"unverified",other:"Other"},storePack:{cardTitle:"App store pack",cardBody:"A series of App Store and Google Play screenshots, with an optional preview video.",cardAction:"Set up the pack",entryTitle:"Store pack",entryHint:"Screenshots and a preview for the App Store and Google Play",entryOn:e=>`Store pack · ${e.count} ${e.count===1?"screenshot":"screenshots"}`,entryAria:e=>`Store pack, ${e.count} ${e.count===1?"screenshot":"screenshots"}: edit`,entryAdd:"Add the store pack to the formats",entryEdit:"Edit",entryRemove:"Remove",entryRemoveAria:"Remove the store pack",removeTitle:"Remove the store pack?",removeBody:"The pack instances leave the formats; versions already made stay in the history. Formats picked by hand do not change.",removeConfirm:"Remove the pack",confirmAdd:"Add to the formats",confirmUpdate:"Update the pack",saveFailed:e=>`The store pack could not be saved: ${e.detail}`,groupTitle:"Store pack",exportChoice:{title:"What do you want to export?",pack:"Store pack",packHint:"The App Store and Google Play folders, with the store checks.",formats:"Format files",formatsHint:"One file per format, from the ★ versions: the ones outside the pack too."},title:"App store pack",creativeTitle:e=>`${e.name} · App store pack`,steps:{app:"App",stores:"Stores and devices",screens:"Screenshots",preview:"Preview video",review:"Review"},stepsLabel:"Steps",stepOf:e=>`Step ${e.n} of ${e.total}: ${e.name}`,back:"Back",next:"Next",generate:"Generate",saveDraft:"Save draft",appName:"App name",tagline:"One line about the app",taglineHint:"(optional)",nameRequired:"Enter the name of the app",stores:"Stores",devicesFor:e=>`Devices for ${e.store}`,required:"Required",optional:"Optional",devices:{iphone69:"iPhone 6.9″",ipad13:"iPad 13″",phone:"Phone",tablet:"Tablet",feature:"Feature graphic"},oneStore:"Choose at least one store",count:"Number of screenshots",countRange:e=>`${e.min} to ${e.max} for the chosen stores`,screenshot:e=>`Screenshot ${e.n}`,caption:"Caption (optional)",captionOf:e=>`Caption of screenshot ${e.n}`,captionHint:"Captions are optional: the agent writes the empty ones from the brief. A long caption is fine: the agent shortens it.",screen:"App screen",noScreen:"No screen yet",chooseScreen:e=>`Choose the app screen of screenshot ${e.n}`,changeScreen:"Change",removeScreen:e=>`Remove the screen of screenshot ${e.n}`,pickerTitle:"App screen from Assets",pickerUpload:"Upload an image",pickerUploadInput:"Image file to upload",pickerUploading:"Uploading…",pickerEmpty:"Assets has no images yet. Upload a screenshot of the app.",pickerLoading:"Loading Assets…",pickerList:"Images from Assets",pickerLoadFailed:e=>`Assets could not be loaded: ${e.detail}`,pickerUploadFailed:e=>`The upload failed: ${e.detail}`,pickerWrongFile:"Only images (PNG, JPEG or WebP) can be an app screen",pickerClose:"Close",noScreenChoice:"No app screen",noScreenOf:e=>`Screenshot ${e.n}: no app screen`,screenMissing:e=>`Choose an app screen, or “No app screen”, for: ${e.list}`,reviewNoScreenRows:e=>`Without an app screen: screenshots ${e.list}`,closeTitle:"Discard this pack?",closeBody:"The choices you made in this pack will be lost.",keepEditing:"Keep editing",discard:"Discard",previewQuestion:"Add a preview video?",previewYes:"Yes",previewNo:"No",previewHint:"A short video that tells the same story, made for each chosen store.",reviewApp:"App",reviewStores:"Stores",reviewDevices:"Devices",reviewShots:"Screenshots",reviewPreview:"Preview video",reviewFormats:e=>e.count===1?"1 format will be created":`${e.count} formats will be created`,reviewNoScreen:"no app screen",reviewFromBrief:"caption from the brief",yes:"Yes",no:"No",createFailed:e=>`The pack could not be created: ${e.detail}`,draftSaved:e=>`“${e.title}” saved as a draft`,export:{action:"Export store pack",title:e=>`Export the store pack of “${e.title}”`,heading:"Export the store pack",sub:e=>`Version ${e.n} · one folder per store, language and device`,subGroup:"Each screenshot from the final selection of the variants, one folder per store, language and device",saveTo:"Save to",folder:"Destination folder",placeholder:"Absolute path of a folder",noFolder:"No folder chosen",choose:"Choose folder…",pickTitle:"Choose the folder for the store pack",lastUsed:"last used",languages:"Languages",original:e=>`${e.language} (original)`,notTranslated:"not translated: will fail",needsReview:"outdated or with problems: may fail",run:e=>e.count===1?"Export 1 file":`Export ${e.count} files`,files:"Files",fileOf:e=>`${e.group} · ${e.file}`,excluded:"Excluded",nav:"Stores and devices",selectedOf:e=>`${e.n} of ${e.of} ${e.of===1?"file":"files"} selected`,selectAll:"Select all",selectNone:"None",shots:e=>e.count===1?"1 screenshot":`${e.count} screenshots`,video:e=>`video · ${e.size}`,image:e=>`image · ${e.size}`,size:e=>`${e.width} × ${e.height}`,noFiles:"This version has no files of the pack to export.",running:"Preparing the pack…",cancel:"Cancel",finish:"Done",writtenTitle:e=>e.count===1?"1 file written":`${e.count} files written`,failedTitle:e=>e.count===1?"1 file not exported":`${e.count} files not exported`,notInPack:e=>e.count===1?"Not part of the pack (not exported):":`Not part of the pack (not exported, ${e.count}):`,noneWritten:"Nothing was written: every file failed its check.",folderLine:e=>`Folder: ${e.folder}`,rendered:e=>e.count===1?"1 format was rendered first":`${e.count} formats were rendered first`,reason:e=>`${e.file}: ${e.reason}`,notAPack:"This creative has no store pack to export.",failed:e=>`The export failed: ${e.detail}`}},languages:{title:"Languages",button:"Languages",sub:e=>`Translations of v${e.n} · original language: ${e.primary}`,noCompositions:e=>`v${e.n} has no compositions to translate`,formatsLabel:"Formats",pick:e=>`Translate to ${e.language}`,statusNone:"Not translated",statusOk:"Translated",statusStale:e=>`${e.count} outdated`,statusProblems:e=>e.count===1?"1 problem":`${e.count} problems`,voiceLabel:"Voice",voiceFor:e=>`Voice in ${e.language}`,voiceTranslate:"Translate",voiceOriginal:"Keep original",voiceMuted:"Mute",voiceTranslateFromPanel:"The voice is translated when you press Translate in the Languages panel",voiceReason:{off:"the voice service is off for this creative",noKey:"there is no key for the voice service",missingPermission:"the key lacks the text-to-speech permission",declined:"the confirmation was declined",failed:"the generation failed"},voiceUnavailable:e=>`The voice cannot be translated: ${e.reason}`,voiceFellBack:e=>`Last time the voice stayed as it was: ${e.reason}`,noScriptCount:e=>e.count===1?"1 voice clip can't be translated: it has no known script":`${e.count} voice clips can't be translated: they have no known script`,noScriptTitle:"Voice clips that can't be translated",noScriptItem:e=>`${e.clip}: no known script, it keeps the original voice`,review:e=>`Review ${e.format}`,confirmations:"Confirmations",working:"The agent is translating…",loading:"Loading…",translate:e=>e.count===1?"Translate 1 language":`Translate ${e.count} languages`,started:e=>e.count===1?"Translation started":`Translation of ${e.count} languages started`,notInBrief:"This language is not in the creative's brief any more: add it in the brief first",busy:"The agent is working on this creative: edit the translation when it has finished",tableTitle:e=>`${e.language} · ${e.format}`,problemsLabel:"Problems of this translation",warningsLabel:"Warnings",nothingToTranslate:"This format has no text to translate",colSource:"Original",colTranslation:"Translation",colStatus:"State",colFit:"Fit",translationOf:e=>`Translation of ${e.clip}`,fitOf:e=>`Text size of ${e.clip}`,rowNotTranslated:"Not translated",rowStale:"Outdated",rowOverflow:"Outside the box",rowOk:"OK",save:"Save translation",saved:"Saved",previewLanguage:"Language of the preview",previewOriginal:e=>`Original (${e.language})`,previewLoading:"Loading the translation…",previewFailed:e=>`The translation cannot be shown: ${e.detail}`,flaggedLabel:"Clips to check",flagStale:"outdated",flagOverflow:"outside the box",flagNotTranslated:"not translated",flagVoice:"voice problem",flagAsset:"file changed",editorPreviewNote:"You are previewing a translation: editing works on the original text. Choose Original to go back to the draft.",briefTitle:"Languages",briefHint:"The language of the creative and the ones it is translated into. Without a language, the creative is not translated.",briefPrimary:"Original language",briefNone:"None (one language)",briefExtra:e=>`Translate into (${e.count} of ${e.max})`,briefExtraLabel:"Languages to translate into",briefFull:e=>`At most ${e.max} languages`,briefRtl:"Right-to-left languages are not supported yet: the layout would have to be mirrored, and only text and voice change in a translation",renderTitle:"Render",renderSub:e=>`Formats: ${e.formats}`,renderLanguages:"Languages to render",renderOriginal:e=>`Original (${e.language})`,renderAction:"Render",renderWithSubtitles:"with subtitles",renderAnyway:"Render anyway",needsForceTitle:"These translations have open problems or outdated texts:",exportLanguages:"Languages"},paidBatch:{intro:e=>e.count===1?`Motion Studio will make 1 paid call to ${e.provider}.`:`Motion Studio will make ${e.count} paid calls to ${e.provider}.`,provider:e=>e.provider,total:e=>`${e.chars} characters in all`,estimate:e=>`Estimate ${e.estimate}`,noEstimate:"Estimate not available",introMixed:e=>`Motion Studio will make about ${e.count} paid calls: ${e.list}.`,estimatedCalls:"Estimated calls (price not known)",variantItems:"Calls per variant",itemSeconds:e=>`${e.seconds} s`,calls:"Calls",chars:e=>`${e.chars} characters`,approve:"Approve",decline:"Decline"},formatView:{stage:e=>`Preview of ${e.label}`,briefOff:e=>`Brief says ${e.n} s`,briefOffBody:e=>`This version lasts ${e.actual} s and the brief asks for ${e.n} s, so the check marks it incomplete. If ${e.actual} s is right, put it in the brief: the version is checked again, without a new turn.`,briefOffEdited:"The duration comes from a direct edit.",briefOffFix:e=>`Use ${e.n} s in the brief`,briefOffFixed:e=>`Brief updated: ${e.n} s`,briefOffFailed:e=>`The brief could not be updated: ${e.detail}`,scenes:"Scenes",scenesSoon:"Edit scenes, text and timing directly — coming with the timeline",play:"Play (Space)",pause:"Pause (Space)",prevFrame:"Previous frame (←)",nextFrame:"Next frame (→)",transport:"Playback",loop:"Loop",speed:"Playback speed",speedValue:e=>`${e.n}×`,position:"Position",positionText:e=>`${e.time} of ${e.total}`,commentAt:e=>`Click the spot of the frame at ${e.time}`,commentFrame:e=>`Comment on the frame at ${e.time}`,commentImage:"Click the image to comment on a spot",keys:"Space plays · ← → one frame · click the paused frame to comment",keysLocked:"Space plays · ← → one frame",marker:e=>`Comment ${e.n} at ${e.time}`,pinAt:e=>`At ${e.time}`,unknownTitle:e=>`“${e.id}” isn’t a format of this creative`,unknownSub:"It may have been removed from the brief. Go back to all formats to pick one.",videoFailed:"Can’t play this video. It may still be rendering, or the file was moved. Try again in a moment.",zoom:"Zoom",fit:"Fit",actual:"Actual size (100%)",chat:"Chat"},editor:{edit:"Edit",editOf:e=>`Edit ${e.label} directly`,back:"Back to the preview",editing:e=>`Editing ${e.name}`,editingPrimary:e=>`Editing ${e.primary} · also used by ${e.also}`,alsoUsedBy:e=>`Also used by ${e.list}`,version:e=>`v${e.n}`,meta:e=>`${e.size} · ${e.seconds} s · ${e.fps} fps`,metaImage:e=>`${e.size} · still image`,loading:"Opening the editor…",loadingVideo:"Loading the video…",loadFailed:e=>`Can't open the editor: ${e.detail}`,legacy:"This version has no composition to edit. Ask the agent to make it again, or go back to the preview.",busyAgent:"The agent or a render is working on this creative: direct edits are available again when it has finished.",olderVersion:e=>`You are looking at v${e.n}, an earlier version: only the latest one (v${e.latest}) can be edited.`,editLatest:e=>`Edit v${e.n}`,saveFromLatest:"To save your edits, go back to the version you are editing",commentSpot:"Comment a spot",commentSpotTip:"Then click a spot of the picture and write a note for the agent (P)",commentTools:"Comments",commentLayer:"Comment on layer",commentElement:"Comment on element",commentLayerTip:"Write a note for the agent about the selected layer (C)",commentElementTip:"Write a note for the agent about the selected element of the layer (C)",commentLayerNeeds:"Select a layer first, in Layers or on the picture",undoTip:e=>`Undo (${e.keys})`,redoTip:e=>`Redo (${e.keys})`,snapTip:"Snap to guides: a layer you move or resize lines up with the edges and the centre of the picture",pendingComments:e=>e.n===1?"1 comment waiting to be sent":`${e.n} comments waiting to be sent`,commentSpotLocked:e=>`Comments go on v${e.n}`,scenes:"Scenes",layers:"Layers",stage:e=>`Stage of ${e.label}`,inspector:"Inspector",chat:"Chat",panelTabs:"Side panel",timeline:"Timeline",scenesSoon:"The scenes of this composition appear here.",layersSoon:"The layers of this image appear here.",layersList:"Layers of this image",layersAsk:"Ask the agent to add layers",layersEmpty:"This image has no layers.",layerExpand:e=>`Show the elements of ${e.name}`,layerCollapse:e=>`Hide the elements of ${e.name}`,layerElements:e=>`Elements of ${e.name}`,layerSmall:"Small version",layerDark:"Negative for dark backgrounds",zoom:"Zoom",zoomFit:"Fit",zoomFitTitle:"Fit the image to the window",zoomValue:e=>`${e.pct}%`,inspectorSoon:"Select a clip to change its text, position and style.",draft:e=>e.n===1?"Draft · 1 edit":`Draft · ${e.n} edits`,noEdits:"No changes yet",saveAs:e=>`Save as v${e.n}`,saving:"Saving…",saved:e=>`✓ Saved as ${e.name} v${e.n}`,saveFailed:e=>`Couldn't save: ${e.detail}`,saveProblems:e=>`${e.count} problems stop this draft from being saved`,discard:"Discard",discardTitle:"Discard the draft?",discardBody:e=>e.n===1?"The edit you made will be lost.":`The ${e.n} edits you made will be lost.`,discardConfirm:"Discard edits",keepEditing:"Keep editing",undo:"Undo",redo:"Redo",leaveTitle:"Save your edits first?",leaveBody:e=>e.n===1?"You have 1 edit that is not saved as a version.":`You have ${e.n} edits that are not saved as a version.`,leaveBodyChat:"Your message starts from the latest saved version: edits you have not saved would not be part of it.",leaveSave:e=>`Save as v${e.n}`,leaveDiscard:"Discard",leaveKeep:"Keep editing",leaveSaveFailed:e=>`The draft was not saved, so you stay here: ${e.detail}`,baseChangedTitle:"This format changed while you were editing",baseChangedBody:e=>`${e.name} has a newer version (v${e.n}). Your draft is kept: it cannot be saved on top of it.`,reopenLatest:"Reopen on the latest version",reopenTitle:"Discard the draft and reopen?",reopenBody:"Your edits will be lost and the editor will open on the latest version.",reopenConfirm:"Discard and reopen",keysDeleteClip:"Ask the agent to remove clips",staging:e=>`Preparing ${e.file}…`,stagingLong:"Large videos are converted first: this can take a while. You can keep editing.",saveWhileStaging:"Wait for the file being added to be ready, then save.",stagedRestored:"The files added to the draft are ready again in the preview.",stagedLost:e=>`A file added to the draft is no longer available (${e.file}): choose it again.`,stageFailed:e=>`Couldn't add the file: ${e.detail}`,previewRefused:e=>`The preview can't show this draft: ${e.text}`,previewBusy:"Opening the preview…",previewFailed:e=>`The preview isn't available: ${e.detail}`,sessionRenewed:"The preview was renewed; your edits are still here.",snap:"Snap to guides and edges",locked:"Locked",lockedStage:"Locked: unlock it to move it",coords:e=>`${e.x} · ${e.y} · ${e.w} × ${e.h}`,selectionBox:e=>`Selected: ${e.clip}`,moveHandle:"Move",resizeNw:"Resize from the top left corner",resizeNe:"Resize from the top right corner",resizeSe:"Resize from the bottom right corner",resizeSw:"Resize from the bottom left corner",rotateHandle:"Rotate (Shift snaps to 15°)",sceneLength:e=>`${e.seconds} s`,scenesAria:"Scenes of this composition",inThisScene:"In this scene",inSceneNone:"No clips in this scene",reorderScene:e=>`Reorder ${e.name}: drag, or press ↑ or ↓`,reorderedTo:e=>`${e.name} moved to position ${e.n} of ${e.total}`,tlZoom:"Zoom",tlZoomValue:e=>`${e.n}×`,tlRipple:"Ripple: a clip that grows pushes the later scenes",tlRuler:"Timeline ruler: drag to move the playhead",tlPlayhead:"Playhead: drag it to scrub through the video",tlTracks:"Tracks",tlSceneAt:e=>`${e.name}, from ${e.time}`,trackName:e=>`${e.kind} ${e.n}`,kindVisual:"Visual",kindVideo:"Video",kindText:"Text",kindAudio:"Audio",kindSubtitles:"Subtitles",hideTrack:e=>`Hide ${e.name}`,showTrack:e=>`Show ${e.name}`,lockTrack:e=>`Lock ${e.name}`,unlockTrack:e=>`Unlock ${e.name}`,muteTrack:e=>`Mute ${e.name}`,unmuteTrack:e=>`Unmute ${e.name}`,clipText:"text",clipShape:"shape",clipImage:"image",clipSvg:"vector image",clipVideo:"video",clipHtml:"html",clipAudio:"audio",clipSubtitles:"subtitles",clipBar:e=>`${e.name}, ${e.kind}, from ${e.start} to ${e.end}`,clipBarHidden:"hidden",inspEmptyTitle:"Select a clip",inspEmptySub:"Click a clip in the timeline or a scene on the left to change it here.",inspLocked:"Locked: unlock it in the timeline to edit it",inspHeader:e=>`${e.name} · ${e.kind}`,secTiming:"Timing",secBox:"Box",secText:"Text",secShape:"Shape",secMedia:"Media",secAudio:"Audio",secAnimation:"Animation",secParams:"Parameters",secSvg:"SVG content",svgColors:"Colours",svgTexts:"Texts",svgElements:"Elements",svgElementList:"Elements of the SVG",svgLoading:"Reading the SVG…",svgCannot:"This SVG can’t be edited here",svgRefused:"The change was not applied",svgColorCount:e=>`${e.hex}, used ${e.n} ${e.n===1?"time":"times"}`,svgColorNew:e=>`New colour for ${e.hex}`,svgNoColors:"No colours to change",svgNoTexts:'No editable texts: lettering drawn as shapes is changed by the agent (select the element, then "Ask the agent")',svgNoElements:"No elements",svgText:e=>`Text ${e.n}`,svgTextFonts:"Text in an SVG depends on the fonts installed: where the font is missing it looks different.",svgShow:e=>`Show ${e.name}`,svgHide:e=>`Hide ${e.name}`,svgFill:"Fill",svgStroke:"Stroke",svgElementKind:"SVG element",svgCrumbs:"Layer and element",svgBackToLayer:e=>`Back to the layer ${e.name}`,secSvgElement:"Element",svgVisible:"Visible",svgPaint:"Colours of the element",svgNoFill:"No fill",svgNoStroke:"No stroke",svgFillInherited:"From its group",svgPaintOther:"Gradient or pattern",svgAddFill:"Add fill",svgAddStroke:"Add stroke",svgSetColour:"Set a colour",svgRemoveFill:"Remove the fill",svgRemoveStroke:"Remove the stroke",svgPaletteFor:e=>`Swatches for: ${e.field}`,svgOutlined:"This SVG has no editable text: its lettering is drawn as shapes. To change the words, ask the agent.",svgAskElement:"Ask the agent to change it",svgAskElementTip:e=>`Write what to change in ${e.name}: the comment goes to the agent with your next message`,svgOtherVersions:"The other versions of the logo do not change: edit them from the layer list",svgElementName:e=>`${{g:"Group",path:"Path",rect:"Rectangle",circle:"Circle",ellipse:"Ellipse",line:"Line",polyline:"Polyline",polygon:"Polygon",text:"Text",use:"Reference"}[e.tag]??e.tag} ${e.n}`,tagIn:"IN",tagDur:"DUR",tagOut:"OUT",fIn:"In point (seconds)",fDur:"Duration (seconds)",fOut:"Out point (seconds)",tagX:"X",tagY:"Y",tagW:"W",tagH:"H",tagRot:"ROT",fX:"X position",fY:"Y position",fW:"Width",fH:"Height",fRotation:"Rotation (degrees)",fOpacity:"Opacity",fOpacityField:"Opacity (0 to 1)",fContent:"Content",fFont:"Font",fWeight:"Weight",fSize:"Size",fColor:"Colour",fColorHex:"Hex colour",fAlign:"Alignment",alignLeft:"Left",alignCenter:"Centre",alignRight:"Right",fontsComposition:"In this composition",fontsBrand:"Brand kit",fontNoFile:"No font file in the brand kit",fontAdding:e=>`Adding ${e.family}…`,fFill:"Fill",fRadius:"Corner radius",fVolume:"Volume",fTrimStart:"Trim start (seconds)",fFadeIn:"Fade in (seconds)",fFadeOut:"Fade out (seconds)",fFile:"File",replace:"Replace…",swatchBrand:"Brand palette",swatchComposition:"In this composition",animIn:"In",animOut:"Out",animNone:"None",animDuration:"Duration (seconds)",animCustom:"Custom animation · ask the agent to change it",animAsk:"Ask the agent",animAskTip:e=>`Write what to change in the ${e.slot} animation of ${e.name}: the comment goes to the agent with your next message`,presetFadeIn:"Fade in",presetFadeOut:"Fade out",presetSlideUp:"Slide up",presetSlideDown:"Slide down",presetSlideLeft:"Slide left",presetSlideRight:"Slide right",presetPopIn:"Pop in",presetScaleIn:"Scale in",presetWipe:"Wipe",pickerTitle:"Choose a file",pickerFor:e=>`Choose a ${e.kind} file`,pickerEmpty:e=>`No ${e.kind} files in Assets yet. Upload one.`,pickerLoading:"Loading Assets…",pickerLoadFailed:e=>`Can’t load Assets: ${e.detail}`,pickerUpload:"Upload…",pickerUploading:"Uploading…",pickerUploadFailed:e=>`Couldn’t upload the file: ${e.detail}`,pickerUploadInput:"File to upload",pickerClose:"Close",pickerList:"Files from Assets",pickerPreparing:e=>`Preparing ${e.file}…`,shortVideo:e=>`This video lasts ${e.video} s, but the clip needs ${e.needed} s from its trim start. The end of the clip would be empty.`,fitClip:"Fit clip to video",fitNoRoom:e=>`The trim start (${e.trim} s) is at or past the end of this video (${e.video} s): lower the trim start first`,pickerWrongKind:e=>`The uploaded file is a different kind: this clip needs ${e.kind}. Nothing was replaced`,weightNotOffered:e=>`Weight ${e.weight} is not one this font declares: choose one from the list`,kindImageFile:"image",kindSvgFile:"vector image",kindVideoFile:"video",kindAudioFile:"audio"},creative:{resumeNote:e=>`Your next message continues from version ${e.n}.`,versionIncomplete:e=>`v${e.n} is incomplete:`,formatsLoadFailed:e=>`Can't load formats: ${e.detail}`},canvas:{loading:"Loading the creative…",loadFailed:e=>`Can't load this creative: ${e.detail}. Make sure Motion Studio is still running, then try again.`,tryAgain:"Try again",formats:"Formats",formatsAria:"Formats of this creative",canvasAria:"Canvas",tools:"Canvas tools",select:"Select (V)",comment:"Comment (C)",hand:"Hand (H)",zoomIn:"Zoom in",zoomOut:"Zoom out",zoomReset:e=>`Zoom ${e.pct}%, back to 100%`,safeZones:"Safe zones",safeTitle:"Safe zones",safeBody:"The shaded areas are covered by the channel’s interface. Keep text and logos out of them.",safeNone:"None of these formats has a safe zone.",safeTop:"Account name",safeBottom:"Caption and buttons",safeSide:"Buttons",commentHint:"Click a frame to comment · Esc to stop",commentStart:e=>`Comment on a spot of ${e.label}`,commentOn:e=>`Comment on ${e.label}`,openEditor:"Open editor",openEditorOf:e=>`Open the editor for ${e.label}`,rendering:"Rendering",renderingState:"Rendering…",inProgress:"In progress",boardReady:"Ready",notGenerated:"Not generated yet",seconds:e=>`${e.n} s`,largeChip:e=>`${e.size} MB · large`,largeOpen:e=>`Large file, ${e.size} MB: show the recommendation`,largeTitle:"Large file",largeDetail:e=>`${e.size} MB at ${e.mbps} Mbps. About ${e.target} Mbps is plenty for ${e.channel}.`,nothingTitle:"Nothing generated yet",nothingBody:"The brief is saved. Generate the first version when you’re ready.",generate:"Generate",generateFailed:e=>`Couldn't start the generation: ${e.detail}`,versionReady:e=>`v${e.n} is ready`,export:"Export",pin:{marker:e=>`Comment ${e.n}`,edit:e=>`Edit comment ${e.n}`,field:"Comment text",placeholder:"What should change here?",add:"Comment",save:"Save",remove:"Delete comment",atStart:"At 0:00",atStartHint:"Comments on exact frames come with the editor"},title:{rename:e=>`Rename “${e.title}” (F2)`,field:"Creative title",saveFailed:e=>`Couldn't rename the creative: ${e.detail}`},state:{needs:"Needs you",working:"Working"},panel:"Creative panel",subtitles:"Subtitles",tabs:{chat:"Chat",comments:"Comments",brief:"Brief"},comments:{emptyTitle:"No comments yet",emptySub:"Point at a format, choose Comment and click the spot.",start:"Start commenting",applied:e=>`Applied in v${e.n}`,working:"Being applied",open:"Not applied yet",noText:"No text"},brief:{goal:"Goal",message:"Key message",length:"Length",formats:"Formats",assets:"Assets",notes:"Notes",services:"Services",none:"—",edit:"Edit the brief",back:"Back to the brief"},versions:{timeline:"Versions",historyItem:"Version history",historyItemVariant:e=>`Version history of variant ${e.letter}`,timelineRow:e=>`Version ${e.n} · ${e.when} · ${e.note}`,title:"Versions",fromBrief:"From the brief",noteMore:"More",noteLess:"Less",incomplete:"Incomplete",compare:"Compare",restart:"Restart from here",restartNote:e=>`Your next change starts from v${e.n}. Later versions stay in the history.`,restarted:e=>`Next changes start from v${e.n}`,undo:"Undo",commentsOn:e=>`Comments apply to v${e.n} — use Restart from here to comment on this version.`,showInFinder:"Show in Finder",showInFolder:"Show in folder",actionFailed:e=>`That didn't work: ${e.detail}`},compare:{title:e=>`Compare ${e.label}`,label:"Compare versions",left:"Left",right:"Right",slider:"Position of the divider",noOutput:"Not in this version",view:"View",overlay:"Overlay",sideBySide:"Side by side",useForExport:e=>`★ Use v${e.n} for export`,usedForExport:e=>`★ v${e.n} is used for export`,starManual:"★ Your pick",starAuto:"★ Auto",videoFailed:e=>`Can’t play v${e.n}. The file may have been moved.`}},formatVersions:{badge:e=>`${e.label}: v${e.n} is used for export. Open its versions`,count:e=>e.n===1?"1 version":`${e.n} versions`,viewing:e=>`viewing v${e.n}`,newer:e=>`v${e.n} newer`,title:e=>`${e.label} versions`,viewRow:e=>`View v${e.n} · ${e.when} · ${e.note}`,star:e=>`Use v${e.n} for export`,starred:e=>`v${e.n} is used for export`,starToast:e=>`v${e.n} will be exported for ${e.label}`,manual:"Your pick",auto:"Auto",autoTip:"Starred automatically: the newest version without problems",resetAuto:"Reset to Auto",resetToast:e=>`${e.label} is starred automatically again`,pickedByYou:"Picked by you",automatic:"Automatic",range:e=>`v${e.n}–v${e.last}`,unchangedUntil:e=>`unchanged up to v${e.last}`,onlyChanges:"Only the versions that changed this format are listed here.",follows:e=>`follows ${e.primary}`,followsStar:e=>`follows ${e.primary} ★ v${e.n}`,followsNote:e=>`${e.label} uses the file of ${e.primary} and its ★: it has no versions of its own.`,linkedTo:e=>`Linked to ${e.primary}`,linkedMenu:e=>`Linked to ${e.primary}: open the link menu`,unlink:"Unlink — make a dedicated version",unlinked:e=>`${e.label} is unlinked: the next change makes its own version`,linkTo:e=>`Link to ${e.primary}`,linkHint:"Same size and kind: it can use the same file, at no cost.",linked:e=>`${e.label} now follows ${e.primary}`,fileMissing:e=>`The v${e.n} file is missing on disk, so Export can’t include this format. Star another version.`,followerMissing:e=>`No identical copy of ${e.primary} ★ v${e.n} to export. Star a ${e.primary} version that has it, or Unlink.`,followerMissingShort:"Not exportable",errors:{hashesPending:"Still computing versions, try again in a moment",pickFollower:e=>`${e.label} follows ${e.primary}: it is exported with the ★ of ${e.primary}.`,notInBrief:e=>`${e.label} is no longer in the brief. Reload the creative.`,pickNoFile:e=>`v${e.n} has no ${e.label} file: it can’t be used for export.`,pickFileMissing:e=>`The ${e.label} file of v${e.n} is missing on disk or is a link: it can’t be used for export.`,versionNotFound:e=>`v${e.n} no longer exists. Reload the creative and try again.`,linkSelf:"A format can’t follow itself.",linkChain:e=>`${e.label} can’t follow ${e.primary}: a linked format can’t have followers, and a format with followers can’t follow another.`,linkIncompatible:e=>`${e.label} can’t follow ${e.primary}: ${e.reason}.`,jobRunning:"Wait for the current generation to finish, then try again.",formatsNotInBrief:"None of the chosen formats is in the brief any more: choose them again.",failed:e=>`That didn’t work: ${e.detail}`}},services:{title:"Services",hint:"Which external services the agent may use for this creative. Generate in Assets is not affected.",kinds:{images:"Images",voice:"Voice",music:"Music",sfx:"Sound effects"},choices:{auto:"Auto",openai:"OpenAI",elevenlabs:"ElevenLabs",stock:"Stock only",none:"Off"},group:e=>`${e.kind}: service`,needsKey:e=>`${e.choice} needs the ${e.provider} key: add it in Settings → Paid services.`,stockProviders:"Pexels or Unsplash",missingPermission:e=>`${e.choice} is unavailable: the ${e.provider} key lacks the permission ${e.permission}. Enable it at ${e.provider}, then test the key again in Settings → Paid services.`,keyRefused:e=>`${e.choice} is unavailable: ${e.provider} refused the saved key or the request. Check the key, or a region, organization or firewall restriction, in Settings → Paid services.`,chip:"Services",chipAria:e=>`Services: ${e.summary}. Change which external services the agent may use`,summaryAuto:"all auto",summarySkipped:e=>`${e.kind}: ${e.provider} unavailable`,autoSkipped:e=>`${e.provider} ${e.kind.toLowerCase()}: ${e.why} · Auto skips it until the key is fixed.`,whyPermission:e=>`missing permission ${e.permission}`,whyKeyRefused:"the provider refused the saved key or the request",testInSettings:"Test in Settings",openSettings:"Add a key in Settings",summaryPart:e=>`${e.kind} ${e.choice}`,nextTurn:"Changes apply from the next message.",busy:"You can change the services when the generation ends.",saving:"Saving…",saveFailed:e=>`Can't save the services: ${e.detail}`},conversation:{agentAction:"Agent action",atSeconds:e=>`@ ${e.time}s`,goal:"Goal",length:"Length",lengthNone:"None",lengthFor:"Length of the video formats",assets:"Assets (comma-separated)",notes:"Notes",formats:"Formats",saveAndRegenerate:"Save and regenerate",legacyConvertNotice:"This creative was made before editable compositions. Regenerating converts every format into a composition with the agent: it costs more tokens this once, and the formats may look slightly different.",viewVersion:e=>`View v${e.n}`,helperRow:{working:"at work…",workingStep:e=>`at work · ${e.step}`,ready:e=>`v${e.n} ready`,incomplete:e=>`v${e.n} incomplete`,unchanged:"no change",failed:"did not succeed",stopped:"stopped",done:"done"},groupTurn:{workedOn:e=>`Worked on: ${e.list}`,incomplete:e=>`v${e.n} incomplete`,unchanged:"no change",unchangedAt:e=>`no change, v${e.n}`,stopped:"stopped",failed:"did not succeed",turnStopped:"Stopped"},openVariantVersion:e=>`Open ${e.letter} · v${e.n}`,removeComment:e=>`Remove comment ${e.n}`,editComment:e=>`Edit comment ${e.n}`,requestChange:"Request a change",chipClip:e=>`${e.format} · "${e.name}" clip`,chipRange:e=>`${e.format} · ${e.a}–${e.b} s`,chipClipRange:e=>`${e.format} · "${e.name}" clip · ${e.a}–${e.b} s`,chipClipAnimIn:e=>`${e.format} · "${e.name}" clip · in animation`,chipClipAnimOut:e=>`${e.format} · "${e.name}" clip · out animation`,chipClipElement:e=>`${e.format} · "${e.element}" in "${e.name}"`,noteTitleAnimIn:e=>`Comment on the in animation of "${e.name}"`,noteTitleAnimOut:e=>`Comment on the out animation of "${e.name}"`,noteTitleElement:e=>`Comment on "${e.element}" in "${e.name}"`,commentWaiting:"Comment added: it goes to the agent with your next message (Chat tab)",clipComment:"Comment on clip",clipCommentNeeds:"Select a clip to comment on it",clipPick:"Comment on a clip",clipPickNone:"No clip at this time",rangeHint:"Shift + drag on the ruler to comment on a time range",rangeSpan:e=>`Comment on ${e.a}–${e.b} s${e.note?`: ${e.note}`:""}`,onlyOnVersion:e=>`Comments apply to v${e.n}: open that version to comment.`,noteTitleClip:e=>`Comment on "${e.name}"`,noteTitleRange:e=>`Comment on ${e.a}–${e.b} s`,noteLabel:"Your comment",noteAdd:"Add comment",noteSave:"Save comment",rangeComment:"Comment on range",rangeDialogTitle:"Comment on a time range",rangeStart:"Start",rangeEnd:"End",rangeInvalid:"The end must be after the start",rangeContinue:"Continue",rangeBubble:"Range selection",rangeBubbleAction:"Comment",rangeBubbleEsc:"Esc cancels",rangeTip:e=>`Comment on range · ${e.keys} sets in and out at the playhead · drag the ruler to pick one`,noteCancel:"Cancel"},labels:{colorRoles:{primary:"Primary",secondary:"Secondary",accent:"Accent",background:"Background",text:"Text",other:"Other"},fontRoles:{heading:"Headings",body:"Body",accent:"Accent",other:"Other"},logoVariants:{primary:"Primary",secondary:"Secondary",mono:"Monochrome",icon:"Icon",other:"Other"},logoBackgrounds:{light:"Light",dark:"Dark",any:"Any"},describing:"Describing…",analyzing:"Analyzing…",describeFailed:e=>`Description failed: ${e.error??"unknown error"}`,analysisFailed:e=>`Analysis failed: ${e.error??"unknown error"}`},brand:{sections:"Brand sections",nav:{overview:"Overview",colors:"Colors",type:"Typography",logos:"Logos",voice:"Voice",sound:"Sound",photo:"Photo style",guidelines:"Guidelines"},loadFailed:e=>`Couldn't load the brand: ${e.error}`,retry:"Try again",kitUnreadable:e=>`brand/brand-kit.json is unreadable. Fix or delete it to continue. (${e.error})`,kitLocked:"Editing is off until the file is fixed.",undo:"Undo",save:{saving:"Saving…",saved:"Saved",allSaved:"All changes saved",failed:e=>`Not saved: ${e.error}`,retry:"Retry"},overview:{learnedFrom:e=>`Learned from ${e.hosts} · ${e.when}`,notAnalyzed:"Not analyzed yet",intro:"Colors, fonts, logos and rules the agent follows in every creative.",details:"Details"},colors:{hint:"Click a swatch to edit",add:"+ Add color",newName:"New color",edit:e=>`Edit color ${e.name}`,popTitle:"Edit color",name:"Name",hex:"Hex",hexInvalid:"Use 6 hex digits, e.g. 1B1913",role:"Role",remove:"Remove",removed:e=>`${e.name} removed`,contrast:e=>`Text in ${e.name}: contrast ${e.ratio}:1`,empty:"No colors yet. Add the brand palette, or analyze a website."},fonts:{hint:"Font files live in the project, so renders always match",add:"+ Add manually",addGoogle:"+ Add from Google Fonts",google:{title:"Add from Google Fonts",search:"Search fonts",searchHint:"Search by name",category:"Category",categoryAll:"All categories",categories:{"Sans Serif":"Sans serif",Serif:"Serif",Display:"Display",Handwriting:"Handwriting",Monospace:"Monospace"},results:"Matching fonts",searching:"Searching…",empty:"No font matches this search.",failed:e=>`Couldn't search fonts: ${e.error}`,fallback:"The Google Fonts catalog is not available right now. Type the exact family name to look it up.",stale:"Showing a saved copy of the catalog: it may be out of date.",previewFailed:"Preview unavailable",variable:"Variable",choose:"Choose a font on the left to pick its weights.",weights:"Weights",weight:e=>`Weight ${e.weight}`,italic:"Include italic",role:"Role",license:"Open license (OFL or Apache 2.0): free for commercial use.",add:"Add to the brand",adding:"Adding…",added:e=>`${e.family} added to the brand`,updated:e=>`${e.family} updated: weights added`,addFailed:e=>`Couldn't add the font: ${e.error}`,close:"Close"},newFamily:"New font",inProject:"✓ File in the project",noFile:"No font file",noPreview:"Preview unavailable: add the font file to the project",loadFailed:"Couldn't load the font file: preview in a system font",specimen:"Aa Bb Cc 0123",sample:"The quick brown fox jumps over the lazy dog",edit:e=>`Edit font ${e.family}`,popTitle:"Edit font",family:"Family",familyNormalized:e=>`Kept the first family of the CSS stack: ${e.family}`,familyRequired:"Enter a family name",role:"Role",weights:"Weights",weightsHint:"e.g. 400, 700",file:"Font file",noFileOption:"No file",noFontAssets:"Upload .ttf, .otf or .woff files on the Assets tab to link them here.",remove:"Remove",removed:e=>`${e.family} removed`,empty:"No fonts yet."},logos:{add:"+ Add logo",upload:"Upload a file…",fromAssets:"From Assets",noAssets:"No images in Assets yet",edit:e=>`Edit logo ${e.file}`,popTitle:"Edit logo",variant:"Variant",background:"Background",onLight:"On light",onDark:"On dark",onAny:"Any background",remove:"Remove",removed:"Logo removed",missingLight:"Missing: logo for light backgrounds",missingDark:"Missing: logo for dark backgrounds",missingLightSub:"Upload a dark version of the logo, or pick one from Assets.",missingDarkSub:"Upload a light version of the logo, or pick one from Assets.",uploadLogo:"Upload logo",uploading:"Uploading…",added:"Logo added",alt:e=>`Logo ${e.file}`},sound:{hint:"The agent follows this when it chooses music, sound effects and voices.",genre:"Genre",genrePlaceholder:"e.g. warm electronic",genreSuggestions:"Genre suggestions",genreOptions:{cinematic:"Cinematic",electronic:"Electronic",acoustic:"Acoustic",hiphop:"Hip hop",corporate:"Corporate",ambient:"Ambient",jazz:"Jazz",pop:"Pop"},energy:"Energy",energyNone:"Not set",energyLow:"Low",energyMedium:"Medium",energyHigh:"High",instruments:"Instruments",instrumentsPlaceholder:"e.g. piano",avoid:"Avoid",avoidPlaceholder:"e.g. brass",add:"Add",none:"None yet",full:"The list is full.",remove:e=>`Remove ${e.text}`,voice:"Voice",noVoice:"No brand voice chosen.",chooseVoice:"Choose a voice",changeVoice:"Change voice",clearVoice:"Remove voice",voiceOf:e=>`${e.provider} · ${e.name}`,picker:{title:"Choose the brand voice",provider:"Voice provider",providers:{elevenlabs:"ElevenLabs",openai:"OpenAI"},search:"Search voices",searchHint:"Search by name",results:"Matching voices",loading:"Loading voices…",empty:"No voice matches this search.",failed:e=>`Couldn't load the voices: ${e.error}`,noKey:e=>`${e.provider} needs an API key before you can choose a voice.`,openSettings:"Open Settings",noPreview:"No preview",play:e=>`Play preview of ${e.name}`,stop:e=>`Stop preview of ${e.name}`,previewFailed:"Couldn't play the preview.",openaiNote:"OpenAI voices have no free preview.",use:e=>`Use ${e.name}`,selected:"Selected",close:"Close"}},voice:{empty:"No tone of voice yet.",edit:"Edit",write:"Write it",save:"Save",cancel:"Cancel",placeholder:"How the brand speaks…",toneLabel:"Tone of voice",do:"Do",avoid:"Avoid",more:e=>`Show ${e.count} more`,less:"Show less",addRule:"+ Add",doPlaceholder:"Something to always do",avoidPlaceholder:"Something to avoid",doLabel:"New do rule",avoidLabel:"New avoid rule",add:"Add",removeRule:e=>`Remove rule: ${e.text}`,ruleRemoved:"Rule removed",noRules:"No rules yet."},photo:{empty:"No photo style yet.",placeholder:"Light, framing, subjects, treatment…",label:"Photo style"},guidelines:{open:"Open full document",empty:"No guidelines yet. Analyze a website, or write them yourself.",write:"Write guidelines",edit:"Edit",save:"Save",cancel:"Cancel",close:"Close",label:"Guidelines (Markdown)",discardQ:"Discard your changes to the guidelines?",discard:"Discard",keep:"Keep editing"},codebase:{kindAria:"Source type",kindSite:"From a website",kindCode:"From a codebase",emptySub:"Choose the folder of the app or site. Claude reads its code, styles and assets and proposes colors, fonts, logos and voice for you to review.",pathAria:"Codebase folder",pathPlaceholder:"/Users/yourname/dev/app",noteAria:"Note (optional)",notePlaceholder:"E.g. the design system is in /packages/ui",hint:"The agent reads the folder read-only and never opens secret files (.env, keys…).",suggestions:"Codebases of this project",suggestionTitle:e=>`Use ${e.path}`,add:"Add folder",addAndAnalyze:"Analyze",needPath:"Enter the absolute path of a folder",actions:e=>`Actions for ${e.name}`,removed:e=>`${e.name} removed`,added:"Folder added · analyze to learn from it",notesTitle:"Notes on the analysis"},sources:{title:"Sources",actions:e=>`Actions for ${e.host}`,remove:"Remove",removed:e=>`${e.host} removed`,analyzedAt:e=>`Analyzed ${e.when}`,never:"Never analyzed",inProgress:"Analysis in progress",addLabel:"Add a source",addPlaceholder:"Add a website URL",add:"Add",added:"Source added · analyze to learn from it",images:e=>e.count===1?"+ 1 image from References is included":`+ ${e.count} images from References are included`,noImages:'Check "Use for brand analysis" on References to include images.',analyze:"Analyze",analyzeAgain:"Analyze again",busyDescribe:"Assets are being described: analyze when that finishes.",needSource:"Add a website first.",empty:"No websites yet.",invalidUrl:"Enter a web address, e.g. https://www.example.com"},analysis:{title:"Learning the brand",queued:"Waiting to start…",starting:"Starting: reading the sources",phasesLabel:"Analysis phases",phases:{queued:"Starting",reading:"Reading",fonts:"Fonts",colors:"Colors",logos:"Logos",tone:"Tone",writing:"Writing",done:"Done"},phaseState:{done:"completed",current:"in progress",pending:"not started"},working:"working",progress:"Analysis progress",cancel:"Cancel",canceled:"Analysis canceled",failed:e=>`The analysis didn't finish: ${e.error}`,retry:"Try again",ready:"Brand suggestions are ready",review:"Review",readyTitle:"Suggestions ready",readySub:e=>e.count===1?"1 suggestion to review":`${e.count} suggestions to review`},health:{title:"Brand health",ok:"done",todo:"to do",palette:"Palette with roles",fonts:"Font files in the project",rules:"Do and avoid rules",lightLogo:"Logo for light backgrounds",fix:{palette:"Add colors",fonts:"Link files",rules:"Add rules",lightLogo:"Upload"}},history:{title:"Analyses",autoTitle:"Commands that ran",autoTruncated:"Only the first ones are listed.",applied:"applied",discarded:"discarded",open:"to review",undone:"undone"},empty:{title:"Teach Claude this brand",sub:"Paste the website. Claude reads it and proposes colors, fonts, logos and voice for you to review.",website:"Website",placeholder:"https://www.example.com",analyze:"Analyze",manual:"Or set it up by hand"}},brandReview:{dialog:"Review brand suggestions",title:e=>`Here's what Claude learned from ${e.hosts}`,yourSources:"your sources",sub:e=>`${e.count===1?"1 suggestion":`${e.count} suggestions`} · pick what to keep, everything stays editable afterwards`,close:"Close",groupsLabel:"Suggestion groups",groups:{colors:"Colors",fonts:"Typography",logos:"Logos",tone:"Voice",dos:"Do",donts:"Avoid",photoStyle:"Photo style",guidelines:"Guidelines"},selectAll:"Select all",deselectAll:"Deselect all",selected:e=>`${e.n} of ${e.m} selected`,assetsAdded:e=>`Also added to Assets: ${e.count===1?"1 file":`${e.count} files`}`,keep:e=>`Keep ${e.label}`,ops:{add:"New",update:"Update",remove:"Remove"},replaces:e=>`Replaces: ${e.text}`,fontNoFile:"Preview in a system font: the font file was not downloaded",fontFailed:"Preview in a system font: the font file couldn't be loaded",useGuidelines:"Use the proposed guidelines",replacesGuidelines:"Replaces the current guidelines",footnote:"Applying adds the items you keep. You can undo from the notification.",discardAll:"Discard all",confirmDiscard:e=>`Discard ${e.count===1?"the suggestion":`all ${e.count} suggestions`}? This can't be undone.`,keepReviewing:"Keep reviewing",apply:e=>`Apply ${e.n} of ${e.m}`,applied:e=>e.count===1?"Applied 1 suggestion to the brand":`Applied ${e.count} suggestions to the brand`,undo:"Undo",restored:"Brand restored",discarded:"Suggestions discarded",nothing:"Nothing new found",nothingSub:"The analysis found nothing to change in the brand."},source:{website:e=>`Website: ${e.host}`,image:e=>`Image: ${e.name}`},app:{approvalNotificationTitle:"Motion Studio: approval needed",settingsSaveFailed:e=>`Settings not saved: ${e.detail}`,readyNotificationTitle:"Motion Studio: creative ready"},welcome:{setupStep:e=>`Setup · ${e.n} of ${e.total}`,title:"Turn briefs into motion graphics with Claude Code",intro:"Everything runs on this computer. Your projects, brands and renders stay in a folder you choose.",steps:"Setup steps",stepDone:"done",checkTitle:"Check your setup",checkIntro:"Motion Studio uses Claude Code and a few tools on this computer.",checksPassed:e=>`${e.ok} of ${e.total} checks passed`,checking:"Checking…",checkingRow:"checking…",checksList:"System checks",serverUnreachable:e=>`Can't reach the Motion Studio server: ${e.detail}. Make sure Motion Studio is still running, then check again.`,serverUnreachableShort:"Can't reach the server",missing:"Missing",recommended:"Recommended",remedy:"How to fix",checkAgain:"Check again",blocked:"Fix the checks marked Missing, then check again.",installClaude:"Install Claude Code",signIn:"Sign in to Claude",installFfmpeg:"Install FFmpeg",confirmClaude:"Motion Studio will run Anthropic's official installer, downloaded from claude.ai. It installs only Claude Code, just for your user, without administrator rights.",confirmFfmpeg:e=>`Motion Studio will download FFmpeg ${e.version} (${e.size}) from ${e.source} and keep it in its own folder: nothing else on this computer changes. The download is checked before it is used. It is a ${e.license} build.`,confirmSignIn:"Your browser opens on the Claude sign-in page. Sign in there, then come back here.",confirmInstall:"Install",confirmContinue:"Continue",installingClaude:"Installing Claude Code… this can take a minute or two.",installingFfmpeg:e=>`Downloading FFmpeg… ${e.done} of ${e.total}`,signingIn:"Finish signing in in your browser…",openSignIn:"Open the sign-in page",installFailed:"The install didn't finish. Try again, or do it by hand below.",installTimeout:"The install took too long and was stopped. Try again, or do it by hand below.",signInFailed:"Sign-in didn't finish. Try again.",signInTimeout:"Sign-in took too long and was stopped. Try again.",ffmpegFailed:"FFmpeg couldn't be downloaded. Check your internet connection and try again, or install it by hand below.",taskCancelled:"Stopped.",troubleshoot:"Installation help from Anthropic",manualTitle:"Prefer to do it by hand?",manualOpenWindows:"Open PowerShell: click Start, type PowerShell and press Enter.",manualOpenOther:"Open Terminal.",manualPaste:"Paste this command and press Enter:",manualDone:"When it finishes, come back here and press Check again.",copy:"Copy",copied:"Copied",copyManual:"Select the command and copy it with Ctrl+C (Cmd+C on a Mac).",planNote:"Claude Code needs a paid Claude plan (Pro, Max, Team or Enterprise) or a Claude Console account: the free plan is not enough. The Claude desktop app alone is not enough either: Motion Studio needs Claude Code.",technicalDetails:"Technical details",note:"Note",workspaceTitle:"Choose a workspace",workspaceSub:"Where projects are saved",workspaceIntro:"Motion Studio keeps one folder per project inside it, with versioned history. You can change it later by replaying the setup from the account menu.",folder:"Folder",pathPlaceholder:"/Users/yourname/MotionStudio",pickFolderTitle:"Choose the working folder",statusCurrent:e=>e.count===0?"Current workspace · no projects yet":`Current workspace · ${e.count} ${e.count===1?"project":"projects"}`,statusChecking:"Reading the workspace…",statusNew:"Motion Studio creates the folder if it doesn't exist and checks it when you continue.",workspaceNotFound:e=>`Folder not found: ${e.path}. Choose another.`,workspaceInvalid:e=>`Invalid content in ${e.path}: ${e.detail}`,saveFailed:e=>`This folder can't be used: ${e.detail}. Choose another folder or fix its permissions.`,preview:"Folder preview",previewProject:"one folder per project",systemReady:"Your computer is ready",systemNotes:"Ready, with recommendations",recheck:"Re-check",projectTitle:"Create your first project",projectSub:"Name it, then add a website to learn the brand",projectIntro:"Add a website and Claude learns the colors, fonts, logos and voice.",projectName:"Project name",projectNamePlaceholder:"E.g. Acme",website:"Website",optional:"optional",websitePlaceholder:"https://www.example.com",websiteInvalid:"Enter a web address like https://www.example.com, or leave the field empty.",createFailed:e=>`The project wasn't created: ${e.detail}. Check the name and try again.`,created:e=>`${e.name} created`,createdLearning:e=>`${e.name} created · learning the brand from ${e.site}`,sourceFailed:e=>`The project was created, but the website wasn't added: ${e.detail}. Add it again here in Brand.`,analysisFailed:e=>`The project was created, but the brand analysis didn't start: ${e.detail}. Start it again here in Brand.`,back:"Back",continue:"Continue",create:"Create project",skip:"Skip for now",enterHint:"Press ↵ to continue"},pairing:{title:"Open Motion Studio from the link in your terminal",body:"This tab doesn't have the private key that Motion Studio printed when it started. The key keeps other apps and websites on this computer from controlling your projects.",terminal:"Terminal",terminalExample:"What the terminal shows when Motion Studio starts",running:"Motion Studio is running.",open:"Open:",lostTitle:"Closed the terminal or lost the link?",lostBody:"Run this in a new terminal window. It prints the link again without restarting anything.",copy:"Copy",copied:"Copied",copiedStatus:"Command copied to the clipboard.",desktopHint:"Using the desktop app? Open Motion Studio from Applications; it never needs this step.",copyFallback:e=>`Copying isn't available here: the command is selected, press ${e.keys} to copy it.`},projects:{title:"Projects",jumpBackIn:"Jump back in",recentCreatives:"Recent creatives",newCreativeIn:e=>`New creative in ${e.project}`,formats:e=>e.n===1?"1 format":`${e.n} formats`,waiting:"Waiting for your OK",rendering:e=>`Rendering · ${e.step}`,readyWhen:e=>`Ready · ${e.when}`,sort:"Sort projects",sortRecent:"Last edited",sortName:"Name",newProject:"New project",startTitle:"Start a new project",startBody:"Give it a name, then add its website in Brand: Claude learns the colors, fonts, logos and voice for you.",nameLabel:"Project name",create:"Create",created:e=>`Project “${e.name}” created`,open:"Open",createFailed:e=>`The project wasn't created: ${e.detail}. Check the name and try again.`,loadFailed:e=>`Can't load the projects: ${e.detail}. Make sure Motion Studio is still running, then try again.`,tryAgain:"Try again",loading:"Loading projects…",emptyTitle:"No projects yet",emptyBody:"A project holds a brand and its creatives. Name your first one to get started.",approvalsWaiting:e=>e.n===1?"1 approval waiting":`${e.n} approvals waiting`,creatives:e=>e.n===1?"creative":"creatives",assets:e=>e.n===1?"asset":"assets",colors:e=>e.n===1?"color":"colors",fonts:e=>e.n===1?"font":"fonts",unreadable:"Unreadable"},project:{sections:"Project sections",tabs:{creatives:"Creatives",brand:"Brand",assets:"Assets",references:"References",settings:"Settings"},loadFailed:e=>`Can't load the project: ${e.detail}`},integrity:{title:"This project is locked",body:"Files that configure git or the agent changed in a way Motion Studio did not make. They would run outside the sandbox, so no agent and no git run on this project until they are back as they were, or until you accept the changes as yours.",filesLabel:"Changed protected files",change:{changed:"changed",added:"added",removed:"removed"},restoreHint:"Put these files back as they were and the project unlocks by itself.",accept:"Accept these changes",gitTitle:"Git is blocked on this project",gitBody:"This setting can never be accepted: remove it as described, then the project works again.",confirmTitle:"Accept these changes?",confirmText:"Only accept if you made these changes yourself",confirmDetail:"The files listed become the new reference. If you did not change them yourself, cancel and restore them instead.",confirm:"Accept",cancel:"Cancel",changedSince:"The files changed again. Check the updated list.",acceptFailed:e=>`Couldn't accept the changes: ${e.detail}`,accepted:"Changes accepted: the project is unlocked"},common:{chooseFolder:"Choose folder…",send:"Send"},api:{httpError:e=>`Error ${e.status}`},settings:{language:"Language",languageSystem:e=>`System (${e.detected})`,languageNames:{en:"English",it:"Italiano"},languageFailed:e=>`Language not changed: ${e.detail}`},usage:{tokens:e=>`${e.count} tokens`,unknown:"—",todayButton:e=>`Tokens used today: ${e.count}. Open Usage`,today:e=>`Today · ${e.count} tokens`,todayUnknown:"Today · tokens not available yet",open:"Usage",tokensAtLeast:e=>`≥ ${e.count} tokens`,soFar:"so far",atLeast:e=>`≥ ${e.cost}`,billingSubscription:e=>`This counts toward your Claude plan. At API prices it would be about ${e.cost}.`,billingApi:e=>e.cost,billingUnknown:e=>`Estimated at API prices: ${e.cost}`,billingSubscriptionAtLeast:e=>`This counts toward your Claude plan. At API prices it would be at least ${e.cost}.`,billingUnknownAtLeast:e=>`Estimated at API prices: at least ${e.cost}`,costUnknown:"The cost of some runs is not known, so the real figure may be higher.",noCost:"Cost not available for this run.",details:"Token details",input:"Input",output:"Output",cacheWrite:"Cache write",cacheRead:"Cache read (not in the total)",creativeTotal:"Tokens",untracked:"Versions made before tracking began are not counted."},shell:{home:"Motion Studio home",search:"Search projects, creatives and pages",running:e=>`${e.count} running`,bell:e=>e.count?`Activity, ${e.count} waiting`:"Activity",account:"Account menu",settings:"Settings",systemCheck:"System check",replaySetup:"Replay setup",projects:"Projects",newProject:"New project",switchProject:e=>`Project ${e.name}, switch project`,backAllFormats:"All formats",moreActions:"More actions",newCreative:"New creative",breadcrumb:"Location",activity:{label:"Activity",sections:"Activity sections",needsYou:"Needs you",running:"Running",done:"Done",emptyNeeds:"Nothing waiting for you",emptyNeedsSub:"Requests from the agent show up here and as a banner.",emptyRunning:"Nothing running",groupPhases:{coordinator:"Reading your message",confirm:"Waiting for your confirmation",helpers:"The variants are working",report:"Writing the reply"},emptyRunningSub:"Generations and analyses show their progress here.",emptyDone:"Nothing finished yet",emptyDoneSub:"The latest results of this session show up here.",queued:"Waiting to start",open:"Open",enableNotifications:"Turn on notifications",versionReady:e=>`v${e.n} ready`,versionIncomplete:e=>`v${e.n} saved, incomplete`,versionKept:e=>`No new version: v${e.n} unchanged`},palette:{label:"Go to",placeholder:"Search projects, creatives and pages",empty:e=>`No results for “${e.query}”`,pages:"Pages",projects:"Projects",creatives:"Creatives",hint:"↑↓ to move · ↵ to open · esc to close",inProject:e=>`in ${e.project}`},attention:{waiting:e=>e.count===1?"1 request needs you":`${e.count} requests need you`,review:"Review",many:e=>`${e.count} approvals waiting`}},chat:{label:"Messages",appliesTo:"Applies to",appliesAll:"All formats",appliesHint:"The formats this change applies to: the others stay exactly as they are",appliesButton:e=>`Applies to: ${e.choice}. Choose the formats`,appliesInGroup:e=>`${e.group} · ${e.count} formats`,appliesCount:e=>`${e.count} formats`,appliesWholeGroup:e=>`${e.group}: whole group`,followsBoth:e=>`${e.follower} follows ${e.primary}: the change applies to both`,you:"You",agent:"Agent",summary:"Summary",steps:e=>e.count===1?"1 step":`${e.count} steps`,details:e=>`Activity details (${e.count})`,commandsRan:e=>{const t=e.count===1,i=e.attempted?t?"ran or was attempted":"ran or were attempted":"ran";return`${`${e.atLeast?"At least ":""}${e.count} ${t?"command":"commands"} ${i}`}${e.sandbox?" in the sandbox":""}${e.approved>0?` · ${e.approved} approved by you`:""}`},commandMarks:{approved:"You approved",denied:"Denied",notRun:"Didn’t run",error:"Ended with an error",interrupted:"Interrupted"},readFile:e=>`Read ${e.file}`,autoDetails:"Details",detailKinds:{session:"Session",text:"Message",tool:"Tool",result:"Output",error:"Error",limit:"Limit",step:"Step",log:"Log",unreadable:"Unreadable",done:"Done",failed:"Failed",stopped:"Stopped by you"},failed:e=>`The agent stopped: ${e.error}`,working:"The agent is working…",placeholder:"Describe what to change",busyPlaceholder:"The agent is working on the last request",sendHint:e=>`${e.keys} to send`,sendWithKeys:e=>`Send (${e.keys})`,attach:"Attach files",attachMenu:"Attach files to the message",attachComputer:{title:"From computer",hint:"Also saved in the project’s Assets"},attachLibrary:{title:"From Assets",hint:"Images, videos and files of the project"},attachedFiles:"Attached files",attachWait:"The attached files go with the next request, once the agent has finished.",uploading:e=>`Uploading ${e.name}…`,cancelUpload:e=>`Cancel the upload of ${e.name}`,attachmentGone:e=>e.count===1?`${e.names} is no longer in Assets: removed from the attachments. Send again.`:`${e.names} are no longer in Assets: removed from the attachments. Send again.`,pin:e=>`${e.n} · ${e.format}`,sendFailed:e=>`Couldn’t send: ${e.detail}. Your message is kept — try again.`,retried:e=>`Retried · ${e.time}`,sendBusy:"A generation is already running for this creative. Wait for it to finish, then send again.",cancelFailed:"Couldn’t stop the agent. Try again.",emptyTitle:"No messages yet",emptySub:"Ask for a change below: every request and every step of the agent shows up here."},liveUi:{send:"Send to agent",queue:"Queue for after",interruptedRow:"Interrupted by you",consoleMessage:"Message to the console turn",consoleOpen:"Message",consoleUnsupported:"Live messages aren’t supported for this Claude Code version. Send it when the turn ends.",sendMore:"More ways to send",redirect:"Redirect",cancelRedirect:"Cancel redirect",redirectNote:"Redirect stops the agent’s current step and continues in the same session with your message.",queueOnly:"The agent can’t take messages while it works. Your message waits and runs as the next request.",liveHint:"Enter sends · Shift+Enter new line",liveNote:"Send: the agent reads it as soon as the current step ends. Queue for after runs it when the agent is done.",queueHint:"Enter queues it",redirectHint:e=>`${e.keys} to redirect`,livePlaceholder:"Message to the agent…",queuePlaceholder:"Next request…",redirectPlaceholder:"What should the agent do instead?",stop:"Stop",stopMenu:"Stop options",stopAndRedirect:"Stop and redirect…",stopFailed:"Couldn’t stop the agent. Try again.",redirectFailed:e=>`Couldn’t redirect: ${e.detail}`,redirectTitleFor:e=>`Stop and redirect: ${e.label}`,redirectSend:"Redirect",redirectCancel:"Cancel",redirectFieldLabel:"What the agent should do instead",state:{sending:"Sending…",pending:"Waiting for the agent’s next step",pendingStart:"Will be included when the agent starts",sent:"Sent",delivered:"Delivered",queued:"Queued",notDelivered:"Not delivered",redirect:"Redirect"},sentHint:"The agent reads it as soon as the current step ends",deliveredHint:"The agent has started on it",notDeliveredReason:"The turn ended before the agent read it. Your words are kept above: send them again.",outcome:{"queued-unsupported":"Queued: this Claude Code can’t take messages during a turn, so it runs as the next request.","queued-after-finish":"Queued as the next request.",queued:"Queued for after.",restarted:"Redirected: the agent continues with your message.",interrupted:"Redirected: the agent’s step was interrupted.","pending-start":"Will be included when the agent starts."},queueLabel:"Queued requests",queueTitle:e=>e.count===1?"1 request queued":`${e.count} requests queued`,queuePaused:"Nothing is running: the queue waits for you.",runNext:"Run next",item:e=>`Queued request ${e.n}`,edit:e=>`Edit queued request ${e.n}`,remove:e=>`Remove queued request ${e.n}`,moveUp:e=>`Move queued request ${e.n} up`,moveDown:e=>`Move queued request ${e.n} down`,drag:e=>`Drag queued request ${e.n} to reorder`,editField:"Queued request text",save:"Save",cancelEdit:"Cancel",draftKeptLabel:"Your unsaved edit",draftKept:"This request started before your edit was saved, so it ran with its earlier text. Your edit is kept here.",draftField:"Your unsaved edit",draftQueue:"Queue as a new request",draftDiscard:"Discard",moved:e=>`Request ${e.n} moved to position ${e.to}`,pins:e=>e.count===1?"1 comment":`${e.count} comments`},render:{playerFrame:e=>`Live preview of ${e.label}`,loading:"Preparing the live preview…",busy:"Previews are busy: trying again in a moment…",failed:e=>`The live preview could not start: ${e.detail}`,retry:"Try again",runtimeIssues:"Preview problems",runtimeError:{compositionMissing:"The composition could not be read",compositionInvalid:"The composition is not valid",baseNotAllowed:"The composition points outside its folder",assetPathRejected:"A file path was refused",assetLoadFailed:"A file could not be loaded",fontMissing:"A font is missing",fontLoadFailed:"A font could not be loaded",videoSeekTimeout:"A video took too long to show its frame",layerTimeout:"An HTML layer took too long to answer",layerError:"An HTML layer reported an error",layerStalled:"An HTML layer waited on a timer that never fires while rendering",badAnimation:"An animation could not be applied",audioBlocked:"The browser blocked the sound: playing muted",unknownClipType:"A clip of an unknown type was skipped",frameTimeout:"A frame took too long to draw",videoFrameMismatch:"A video frame may be slightly off",clipAudioFailed:"A clip plays without its sound",textOverflow:"A text does not fit its box",subtitlesInvalid:"The subtitles could not be read: the video shows without them"},errorClip:e=>`${e.text} (${e.clip})`,playPreview:e=>`Play the live preview of ${e.label}`,stopPreview:e=>`Stop the live preview of ${e.label}`,queued:"Queued",queuedAhead:e=>e.count===1?"Queued · 1 render ahead":`Queued · ${e.count} renders ahead`,rendering:e=>`Rendering ${e.pct}%`,rendered:"Rendered",failedState:"Render failed",retryRender:"Retry",retryRenderOf:e=>`Retry the render of ${e.label}`,problemState:e=>e.count===1?"Render problem":`${e.count} render problems`,problemTitle:"The render has problems",problemOpen:e=>`Show the render problems of ${e.label}`,problemHint:"The platform may refuse this file. Render it again, or change the composition.",renderAgain:"Render again",renderAgainOf:e=>`Render ${e.label} again`,render:"Render",renderVersion:e=>`Render v${e.n}`,started:e=>e.count===1?"Rendering 1 format":`Rendering ${e.count} formats`,startFailed:e=>`The render could not start: ${e.detail}`,startedPartly:e=>`${e.count===1?"Rendering 1 format":`Rendering ${e.count} formats`}; not started: ${e.list} (${e.detail})`,storyboard:"Storyboard",scene:e=>`Scene ${e.n}`,sceneAt:e=>`${e.name}, at ${e.time}`,storyboardLoading:"Preparing the storyboard…",wholeVideo:"Whole video",scenesLoading:"Loading the scenes…",scenesUnavailable:"The scenes of this version could not be read",framesProgress:e=>`${e.format} · ${e.done} / ${e.total} frames`,mediaProgress:e=>`${e.format} · preparing media ${e.done}/${e.total}`,finishing:e=>`${e.format} · finishing`,starting:"Starting…",cancel:"Cancel",cancelRender:e=>`Cancel ${e.label}`,cancelFailed:e=>`Couldn’t cancel: ${e.detail}`,rendersFirst:"Rendered first",engineLabel:"Render engine",engineElectron:"Built in (Electron)",engineSystem:e=>`Google Chrome ${e.version}`,engineSystemPlain:"Google Chrome",engineCft:e=>`Chrome for Testing ${e.version}`,engineInjected:"Built in",engineNone:"Not available",engineNoneHint:"Live previews, storyboards and renders need Chrome: install Google Chrome, or download Chrome for Testing.",downloadOffer:"Download Chrome for Testing (about 100 MB)",consentTitle:"Download Chrome for Testing?",consentBody:e=>`Chrome for Testing ${e.version} (${e.size}) is downloaded from Google into Motion Studio’s data folder and used only for previews and renders. Nothing is downloaded until you agree.`,consentAgree:e=>`Download ${e.size}`,consentChecking:"Checking the download size…",consentFailed:e=>`Couldn’t read the download: ${e.detail}`,downloading:e=>`Downloading ${e.done} of ${e.total}`,downloaded:"Chrome for Testing is installed",downloadFailed:e=>`The download failed: ${e.detail}`,sizeMb:e=>`${e.n} MB`,engineLoadFailed:e=>`Couldn’t read the render engine: ${e.detail}`,pinFrame:e=>`Frame sent with comment ${e.n}`},ui:{pickColor:"Pick a colour",loading:"Loading",typing:"Typing",progress:"Progress",timeLeft:e=>`${e.time} left`,version:e=>`Version ${e.n}`,chosenVersion:e=>`Chosen version ${e.n}`,emptyTitle:"Nothing here",noPreview:"Can’t preview this file"}},explain:{complex:"Runs a complex shell command",more:e=>e.count===1?"and 1 more step":`and ${e.count} more steps`,runs:e=>`Runs ${e.cmd}`,tool:e=>`Uses ${e.tool}`,edit:e=>`Edits ${e.path}`,read:e=>`Reads ${e.path}`,webFetch:e=>`Opens ${e.host}`,webSearch:"Searches the web",cd:e=>`Moves to ${e.path}`,list:e=>`Lists the files in ${e.paths}`,show:e=>`Shows ${e.paths}`,headFile:e=>`Shows the start of ${e.paths}`,headPipe:"Keeps the first lines of the output",tailFile:e=>`Shows the end of ${e.paths}`,tailPipe:"Keeps the last lines of the output",fileType:e=>`Checks the file type of ${e.paths}`,count:e=>`Counts the lines in ${e.paths}`,countPipe:"Counts the lines of the output",readFiles:e=>`Reads ${e.paths}`,filter:e=>`Processes the text of ${e.paths}`,filterPipe:"Processes the text of the output",search:e=>`Searches for text in ${e.paths}`,searchPipe:"Filters the lines of the output",json:e=>`Reads the JSON in ${e.paths}`,jsonPipe:"Reads JSON from the output",jsonCheck:e=>`Checks the JSON file ${e.path}`,editText:e=>`Edits the text of ${e.paths}`,mkdir:e=>e.n>1?`Creates the folders: ${e.paths}`:`Creates the folder ${e.paths}`,copy:e=>`Copies ${e.sources} to ${e.dest}`,move:e=>`Moves ${e.sources} to ${e.dest}`,delete:e=>`Deletes ${e.paths}`,touch:e=>`Creates or updates ${e.paths}`,chmod:e=>`Changes the permissions of ${e.paths}`,link:e=>`Creates the link ${e.link} to ${e.target}`,find:e=>`Searches for files in ${e.paths}`,findDelete:e=>`Deletes the matching files in ${e.paths}`,findExec:e=>`Runs ${e.cmd} on the matching files in ${e.paths}`,size:e=>`Measures the size of ${e.paths}`,archiveCreate:e=>`Creates the archive ${e.archive}`,archiveExtract:e=>`Extracts ${e.archive} into ${e.dest}`,archiveList:e=>`Lists the contents of ${e.archive}`,mediaConvert:e=>`Converts ${e.inputs} into ${e.outputs}`,mediaProcess:e=>`Processes ${e.inputs} with ffmpeg`,mediaInfo:e=>`Reads the media details of ${e.paths}`,filterFiles:"Applies a filter graph that reads or writes files",imageConvert:e=>`Converts ${e.inputs} into ${e.outputs}`,imageEdit:e=>e.n>1?`Modifies the images: ${e.paths}`:`Modifies the image ${e.paths}`,imageInfo:e=>e.n>1?`Reads the details of the images: ${e.paths}`:`Reads the image details of ${e.paths}`,imageOptimize:e=>e.n>1?`Optimizes the images: ${e.paths}`:`Optimizes the image ${e.paths}`,pythonScript:e=>`Runs the Python script ${e.script}`,pythonInline:"Runs a Python snippet",pythonModule:e=>`Runs the Python module ${e.module}`,venv:e=>`Creates a Python environment in ${e.path}`,pipInstall:e=>`Installs Python packages: ${e.packages}`,pipInstallReq:e=>`Installs the Python packages listed in ${e.file}`,pipInfo:"Lists the installed Python packages",pkgRemove:e=>`Removes packages: ${e.packages}`,pkgInfo:e=>`Shows package information with ${e.tool}`,pkgOther:e=>`Runs ${e.tool} ${e.sub}`,nodeScript:e=>`Runs the Node script ${e.script}`,nodeInline:"Runs a JavaScript snippet",inlineCode:e=>`Runs a ${e.lang} snippet`,npmInstall:e=>`Installs Node packages: ${e.packages}`,npmInstallAll:"Installs the project’s Node packages",npmRun:e=>`Runs the package script ${e.script}`,npx:e=>`Runs the Node tool ${e.tool} (it may download it)`,runScript:e=>`Runs the script ${e.script}`,runsInput:"Runs the code it receives from the previous step",download:e=>`Downloads from ${e.host}`,downloadTo:e=>`Downloads from ${e.host} to ${e.path}`,upload:e=>`Sends data to ${e.host}`,openUrl:e=>`Opens ${e.host} in the browser`,gitClone:e=>`Downloads the repository ${e.url}`,gitStatus:"Shows the Git status",gitDiff:"Shows the Git changes",gitLog:"Shows the Git history",gitInfo:"Reads Git information",gitAdd:e=>`Prepares ${e.paths} for a Git commit`,gitCommit:"Saves a Git commit",gitSync:e=>`Syncs with the remote repository (git ${e.sub})`,gitChange:e=>`Changes the Git history or files (git ${e.sub})`,gitOther:e=>`Runs git ${e.sub}`,systemInstall:e=>`Installs system packages: ${e.packages}`,kill:e=>e.n>1?`Stops the processes: ${e.targets}`:`Stops the process ${e.targets}`,sleep:e=>`Waits ${e.seconds} s`,print:"Prints text",writeText:e=>`Writes text to ${e.path}`,writeFile:e=>`Writes ${e.paths}`,xargs:e=>`Runs ${e.cmd} on each line of the input`,open:e=>`Opens ${e.paths}`,which:e=>`Checks whether ${e.cmd} is installed`,pwd:"Shows the current folder",sysInfo:"Shows system information",changesSystem:"Changes system settings",printEnv:"Shows the environment variables",noop:"Does nothing",setVar:e=>`Sets the variable ${e.name}`,shellOption:"Changes a shell option",check:"Checks a condition",indicators:{deletesFiles:"Deletes files",installsPackages:"Installs packages",usesNetwork:"Uses the network",killsProcesses:"Stops processes",writesOutsideProject:"Writes outside the project",readsOutsideProject:"Reads outside the project",runsCode:"Runs code",elevated:"Administrator rights",changesGit:"Changes Git",complex:"Complex command",unknownCommand:e=>e.option?`Unrecognised option ${e.option}`:"Unknown command",outsideSandbox:"Outside the sandbox"},risk:{low:"Low risk",medium:"Medium risk",high:"High risk"}}},Pn={common:{cancel:"Annulla",save:"Salva",close:"Chiudi",loading:"Caricamento…",items:e=>e.count===1?"1 elemento":`${e.count} elementi`},errors:{toolUnavailable:"Strumento non disponibile in questo lavoro",notFound:"Non trovato",fileNotFoundShort:"File non trovato",nonLocalOrigin:"Richiesta non consentita: origine non locale",kitUnreadable:"Brand kit non leggibile",invalidBridgeAccess:"Accesso al bridge non valido",internalError:"Errore interno di Motion Studio",unknownTool:e=>`Strumento sconosciuto: ${e.tool}`,markerNotFound:"marcatore non trovato",exitCode:e=>`codice ${e.code}`,timedOut:e=>`timeout dopo ${e.seconds} s`,formatCatalogFallback:e=>`${e.detail}. Uso il catalogo predefinito.`,jobCancelled:"Il lavoro è stato annullato.",invalidProgress:"Messaggio di avanzamento non valido (1-300 caratteri)",invalidPhase:"Fase di analisi non valida: usa reading, fonts, colors, logos, tone o writing",validateOnlyCreatives:"Validazione disponibile solo nelle creatività",previewFramesLimit:e=>`preview_frames si può usare al massimo ${e.max} volte per turno: guarda i fotogrammi che hai già, poi chiudi il turno`,previewFramesTimes:e=>`Indica da 1 a ${e.max} istanti, in secondi dall'inizio della composizione`,previewBusy:"Si stanno preparando troppe anteprime: riprova tra un momento",previewSessionNotFound:"Anteprima dal vivo inesistente",chromeDownloadFailed:e=>`Il download di Chrome for Testing non è stato completato (${e.code}). I dettagli sono nel log di Motion Studio.`,chromeConsentRequired:"Chrome for Testing si scarica solo dopo che ne hai accettato la dimensione",chromeDownloadUnavailable:"Qui Chrome for Testing non si può scaricare",setupConsentRequired:"Prima conferma: senza il tuo OK non si installa nulla",setupNotLoopback:"Qui Motion Studio è aperto alla rete: per sicurezza non installa nulla. Installa a mano, oppure avvia Motion Studio solo su questo computer",setupBusy:"Già in corso",setupUnavailable:"Non disponibile su questo computer: installalo a mano",chromeInfoFailed:e=>`Impossibile leggere il download di Chrome for Testing (${e.code}). I dettagli sono nel log di Motion Studio.`,chromeSizeChanged:"Il download di Chrome for Testing è cambiato da quando hai accettato: controlla di nuovo la dimensione",renderEngineAvailable:"Un browser per i render è già disponibile",formatNotInTurn:e=>`${e.format} non è uno dei formati di questo turno: usa ${e.list}`,previewUnavailable:"Le anteprime non sono disponibili in questo Motion Studio: non c'è un Chromium con cui renderizzare",previewOrigin:"Questa finestra non può mostrare l'anteprima dal vivo (la sua origine non è ammessa)",compositionNotFound:e=>`La v${e.n} non ha una composizione per ${e.format}`,compositionUnusable:e=>`La composizione di ${e.format} nella v${e.n} ha dei problemi: non si può mostrare in anteprima`,rootPath:"(radice)",turnFailed:"Turno non riuscito",codebaseNotAbsolute:e=>`La cartella collegata deve essere un percorso assoluto: ${e.path}`,codebaseDiskRoot:"Non puoi collegare la radice del disco",codebaseHome:"Collega una cartella specifica, non l'intera home",codebaseOverlap:"La cartella collegata non può contenere il progetto né trovarsi al suo interno",codebaseOverlapNamed:e=>`La cartella collegata ${e.path} non può contenere il progetto né l'area di lavoro, né trovarsi al loro interno`,codebaseUnsafePath:"Il percorso della cartella contiene caratteri di controllo: rinomina la cartella o scegline un'altra",codebaseGlobChars:e=>`Il percorso della cartella ${e.path} contiene ( ) [ ] { } * ? o \\, che le regole sui file dell'agente non riescono a confrontare in modo sicuro: rinomina la cartella (o la cartella che la contiene e ha quei caratteri). Un collegamento simbolico non basta: si controlla anche il percorso reale della cartella`,folderGlobChars:e=>`Il percorso ${e.path} della cartella di lavoro o del progetto contiene ( ) [ ] { } * ? o \\, che le regole dell'agente a protezione dei file di Motion Studio non riescono a confrontare in modo sicuro, quindi l'agente non lavora lì: rinomina la cartella (o la cartella che la contiene e ha quei caratteri), poi scegli di nuovo la cartella di lavoro`,codebaseSourceMissing:e=>`Cartella non trovata: ${e.path}`,codebaseSourceDuplicate:e=>`Questa cartella è già una fonte del brand: ${e.path}`,codebaseSourceLimit:e=>`Al massimo ${e.max} fonti codebase per brand`,codebaseOverlapBrand:"La codebase non può contenere il progetto o il workspace, né trovarsi al loro interno",codebaseNestedBrand:"La codebase sta dentro un'altra fonte codebase o ne contiene una: aggiungine solo una",codebaseConfigBrand:"La codebase non può contenere la cartella di configurazione di Motion Studio, né trovarsi al suo interno",codebaseSensitiveBrand:"La codebase non può essere, contenere o stare dentro una cartella privata della tua home: chiavi e credenziali, .config, o qualunque cosa sotto Library (iCloud Drive compreso)",pathIsFile:e=>`Il percorso ${e.path} è un file, non una cartella`,workspaceNotFound:e=>`Cartella del workspace non trovata: ${e.path}`,notWritable:e=>`Impossibile scrivere nella cartella ${e.path}: controlla i permessi`,invalidSettings:e=>`Impostazioni non valide: ${e.fields}`,invalidProjectId:e=>`Identificativo progetto non valido: ${e.slug}`,projectNotFound:e=>`Progetto ${e.slug} non trovato`,projectNameRequired:"Il nome del progetto è obbligatorio",invalidProject:e=>`Progetto non valido: ${e.fields}`,projectIconInvalid:"L’icona del progetto deve essere un’immagine degli Asset.",fileNotFound:"file non trovato",invalidJson:e=>`JSON non valido (${e.detail})`,invalidContent:e=>`contenuto non valido — ${e.detail}`,gitNotFound:"git non trovato: installalo per usare Motion Studio",commitNotFound:e=>`Versione non trovata nel repository: ${e.commit}`,gitFailed:e=>`git ${e.command} fallito: ${e.detail}`,gitRepoUnsafe:e=>`Motion Studio si è fermato prima di eseguire git: il repository ha impostazioni che non ha creato lui e che potrebbero eseguire un comando fuori dalla sandbox (${e.detail}). Nessun commit è stato fatto. Controlla .git/config, .gitattributes e .git/info/attributes del progetto, togli ciò che non hai aggiunto tu e riprova.`,gitDirNotFolder:'Motion Studio si è fermato prima di eseguire git: il .git del progetto non è una cartella (è un file o un collegamento, per esempio un puntatore "gitdir:"), quindi git leggerebbe una configurazione da un altro posto. Nessun commit è stato fatto. Sostituisci .git con la vera cartella del repository del progetto e riprova.',gitLayoutFile:e=>`Motion Studio si è fermato prima di eseguire git: il progetto ha ${e.file}, che fa caricare a git una configurazione da un altro posto. Motion Studio non lo crea mai. Nessun commit è stato fatto. Elimina ${e.file} se non l'hai aggiunto tu di proposito e riprova.`,gitConfigOrigin:e=>`Motion Studio si è fermato prima di eseguire git: l'impostazione ${e.key} viene da ${e.origin}, non dal .git/config del progetto (per esempio tramite un include). Nessun commit è stato fatto. Togli l'include o il file che la aggiunge e riprova.`,gitConfigKeyBlocked:e=>`Motion Studio si è fermato prima di eseguire git: il .git/config del progetto ha l'impostazione ${e.key}, che Motion Studio non consente perché potrebbe eseguire un comando fuori dalla sandbox (filtri, driver di diff, include, alias, hook…). Nessun commit è stato fatto. Se non l'hai aggiunta tu di proposito, toglila con "git config --unset ${e.key}" nella cartella del progetto (o elimina la sua sezione da .git/config) e riprova.`,gitConfigValueBlocked:e=>`Motion Studio si è fermato prima di eseguire git: il valore di ${e.key} nel .git/config del progetto contiene "!", "ext::" o un'opzione --upload-pack/--receive-pack, che potrebbe eseguire un comando. Nessun commit è stato fatto. Impostalo su un indirizzo semplice con "git config ${e.key} <valore>" (o toglilo con "git config --unset ${e.key}") e riprova.`,gitAttributesBlocked:e=>`Motion Studio si è fermato prima di eseguire git: ${e.file} imposta un filtro o un driver di diff/merge ("${e.line}"), che potrebbe eseguire un comando fuori dalla sandbox. Nessun commit è stato fatto. Togli quella riga (i nomi di diff integrati come diff=python vanno bene) e riprova.`,projectQuarantined:e=>`Motion Studio ha bloccato questo progetto: alcuni file protetti sono cambiati in un modo che non ha fatto lui (${e.list}). Configurano git o l'agente e verrebbero eseguiti fuori dalla sandbox, quindi per ora sul progetto non partono né l'agente né git. Rimetti quei file com'erano (per esempio da un backup, o annullando la modifica che hai fatto); Motion Studio sblocca il progetto da solo appena tornano uguali. Se la modifica l'hai fatta tu, accettala nella pagina del progetto.`,integrityChangedSince:"I file protetti sono cambiati da quando è stata mostrata la lista: controlla la lista aggiornata prima di accettare.",integrityRecordUnreadable:"non è stato possibile leggere il registro di integrità nella cartella delle impostazioni di Motion Studio",invalidRequest:"Richiesta non valida",invalidRequestDetail:e=>`Richiesta non valida: ${e.detail}`,outputsFolderNotFound:"Cartella degli output non trovata",useAsLogoNoSvg:"Questo formato non ha un file logo da usare: fai prima il render (l’icona app non ha un SVG)",useAsLogoNotChecked:"Questa versione non ha ancora un logo controllato: fai prima il render del formato",useAsLogoMissing:"Il file del logo di questa versione manca: rifai il render del formato",useAsLogoRefused:"Il file del logo non ha passato il controllo di sicurezza degli SVG, quindi non si può aggiungere al brand",useAsLogoNotIdentity:"Questo formato non è un logo, una favicon o un’icona app",useAsLogoBadVariant:"Scegli il logo principale o l’icona",versionNotFound:"Versione non trovata",noWorkspace:"Nessun workspace configurato: scegli una cartella di lavoro",workspacePathAbsolute:"Indica un percorso assoluto per il workspace",promptRequired:"Scrivi una richiesta per l'agente",invalidSessionId:"Identificativo della sessione non valido",textMissing:"Testo mancante",imageMustBeReference:"L'immagine deve essere un riferimento del progetto",unknownProvider:e=>`Provider sconosciuto: ${e.provider}`,keyFromEnv:"La chiave arriva da una variabile d'ambiente: modificala lì",invalidDecision:"Decisione non valida",questionNeedsAnswer:"Rispondi alla domanda con una delle opzioni o con parole tue",invalidAnswer:"La risposta non corrisponde alla domanda",ruleMissing:"Regola mancante",revealFailed:"Impossibile mostrare la cartella degli output nel Finder",invalidKey:"Chiave non valida: incolla la chiave del provider su una sola riga",keychainUnavailable:e=>`Portachiavi del sistema non disponibile: ${e.detail}`,invalidPath:e=>`Percorso non valido: ${e.file}`,reservedFile:e=>`File riservato: ${e.file}`,fileNotValid:e=>`File non trovato o non valido: ${e.kind}/${e.file}`,fileInaccessible:e=>`File non accessibile: ${e.kind}/${e.file}`,fileOutsideFolder:e=>`File al di fuori della cartella: ${e.kind}/${e.file}`,folderInvalid:e=>`Cartella ${e.kind} non valida: è un collegamento o è fuori dal progetto`,assetsMetaInvalid:"Metadati degli asset non validi",referencesMetaInvalid:"Metadati dei riferimenti non validi",assetNotFound:e=>`Asset ${e.file} non trovato`,assetReferenceInUse:e=>`${e.file} è già usato da una creatività o dal brand: resta negli Asset`,referenceNotFound:e=>`Riferimento ${e.file} non trovato`,assetRenameInvalid:"Scegli un nuovo nome di file senza cartelle",assetRenameExists:e=>`Esiste già un file chiamato ${e.file}`,assetRenameKind:e=>`Il nuovo nome ${e.file} cambierebbe il tipo di file`,assetRenameFailed:"Non è stato possibile rinominare l'asset; nulla è stato modificato",waveformUnavailable:"La forma d'onda di questo file non è disponibile",fileTooLarge:e=>`File troppo grande: ${e.name}`,uploadTooLarge:"Troppi file o file troppo grandi in un solo caricamento",noFileReceived:"Nessun file ricevuto",invalidCreativeId:e=>`Identificativo creatività non valido: ${e.slug}`,invalidBrief:e=>`Brief non valido: ${e.detail}`,creativeNotFound:e=>`Creatività ${e.slug} non trovata`,invalidCreative:e=>`Creatività non valida: ${e.detail}`,formatsReorderRemoveOnly:"Un salvataggio parziale può solo riordinare o togliere formati già presenti nel brief",waitBeforeBrief:"Attendi la fine della generazione in corso prima di modificare il brief",variantRunning:e=>`La variante ${e.letter} sta lavorando: fermala prima di scartarla`,variantLastActive:e=>`La variante ${e.letter} è l'ultima attiva: tienine almeno una`,creativeBusyTurn:"Una richiesta all'agente di questa creatività è in corso o in coda: aspetta che finisca, o fermala",creativeBusyQueued:"Questa creatività ha richieste in attesa nella coda: toglile prima",creativeBusyRender:"Un render di questa creatività è in corso o in coda: aspetta che finisca",creativeGroupAll:e=>`È la variante A di un gruppo di ${e.count} varianti: archivia o elimina tutto il gruppo`,trashUnavailable:e=>`Impossibile spostare la creatività nel Cestino: ${e.detail}`,trashOtherVolume:"il progetto è su un disco diverso da quello del Cestino",trashUnsupported:"Motion Studio non può usare il Cestino di questo sistema",variantUnknown:e=>`Questa creatività non ha la variante ${e.letter}`,variantAddFanout:e=>`Questa richiesta è stata inviata a più varianti: le nuove varianti le aggiunge la variante ${e.letter}. Non aggiungerne una qui`,variantAddFirstGeneration:"La prima generazione di una variante non aggiunge varianti: l'utente può chiederne una con un messaggio",variantNoGroup:"Questa creatività non ha varianti",variantOrphan:"Il gruppo di questa variante non si trova: si apre come creatività singola",variantDiscarded:e=>`La variante ${e.letter} è scartata: prima ripristinala`,variantPickInvalid:e=>`Scelta non valida: ${e.detail}`,variantPickNotMember:e=>`${e.slug} non è una variante attiva di questo gruppo`,variantPickNoFormat:e=>`La versione ${e.n} non ha ${e.format}`,variantBaseInvalid:e=>`Non si può partire da quella versione: ${e.detail}`,variantBaseChanged:e=>`I file di ${e.format} nella versione ${e.n} sono cambiati da quando sono stati salvati`,variantFolderExists:e=>`Esiste già una cartella ${e.slug}`,variantDirections:"Al massimo una direzione per ogni nuova variante, ciascuna fino a 140 caratteri",variantDiscardedTurn:"Ripristina la variante per lavorarci",variantBusyFormats:e=>`La variante ${e.letter} sta lavorando: una richiesta limitata ad alcuni formati non può aspettare nella sua coda. Mandala a quella variante quando ha finito`,variantDirectionsFailed:"L'agente non ha proposto direzioni valide per le varianti: scrivile tu o riprova",generationRunning:"Una generazione è già in corso per questa creatività",waitBeforeRestart:"Attendi la fine della generazione in corso prima di ripartire da una versione",versionNNotFound:e=>`Versione ${e.n} non trovata`,versionNotRestorable:e=>`La versione ${e.n} non può essere ripristinata (manca commit o sessione)`,formatNotInBrief:e=>`Il formato ${e.format} non è nel brief`,waitBeforeLinks:"Attendi la fine della generazione in corso prima di collegare o scollegare i formati",formatsNotInBrief:"Nessuno dei formati richiesti è nel brief",linkSelf:"Un formato non può seguire se stesso",linkChain:e=>`${e.follower} non può seguire ${e.primary}: un formato che ne segue un altro non può avere seguaci, e un formato con seguaci non può seguirne un altro`,linkIncompatible:e=>`${e.follower} non può seguire ${e.primary}: ${e.reason}`,followReason:{kind:"uno è un video e l’altro un’immagine",size:"le dimensioni sono diverse",extension:"non accetta tutti i tipi di file che il formato principale può avere",duration:"il formato principale supera la sua durata massima",safeZone:"la sua area sicura è più piccola di quella del formato principale",self:"è lo stesso formato",chain:"i collegamenti non possono formare una catena",unknown:"il formato non è nel brief o nel catalogo",fileSize:"il file del formato principale supera la sua dimensione massima"},hashesPending:"Sto ancora leggendo i file di questo formato: riprova tra qualche secondo",pickFollower:e=>`${e.format} segue ${e.primary}: usa la ★ di ${e.primary}`,pickNoFile:e=>`La versione ${e.n} non ha un file per ${e.format}`,pickFileMissing:e=>`Il file ${e.format} della versione ${e.n} non è più sul disco o non si può usare (è un collegamento)`,approvalNotFound:"Richiesta di approvazione non trovata o già gestita",invalidRule:"Regola di permesso non valida",tooManyPermissions:"Troppi permessi salvati: revocane qualcuno nelle impostazioni del progetto",invalidPermission:"Permesso non valido",permissionNotFound:"Permesso non trovato",invalidBrandKit:e=>`Brand kit non valido: ${e.detail}`,resultingBrandKitInvalid:e=>`Brand kit risultante non valido: ${e.detail}`,guidelinesTooLong:"Linee guida troppo lunghe (massimo 200.000 caratteri)",invalidSourceUrl:"Sorgente non valida: URL non valido",privateSourceUrl:"Indirizzo locale o privato non ammesso come sorgente",invalidSource:e=>`Sorgente non valida: ${e.detail}`,sourceExists:"Sorgente già presente",sourceNotFound:e=>`Sorgente ${e.id} non trovata`,invalidProposalId:e=>`Identificativo proposta non valido: ${e.id}`,proposalNotFound:e=>`Proposta ${e.id} non trovata`,proposalInvalid:e=>`Proposta non valida: ${e.detail}`,proposalNotObject:"Proposta non valida: brand-kit.json non contiene un oggetto JSON",proposalKitFile:e=>`Proposta non valida: brand-kit.json ${e.reason}`,proposalBadJson:e=>`Proposta non valida: JSON non valido (${e.detail})`,proposalMissing:"mancante",proposedGuidelinesTooLong:"Linee guida proposte troppo lunghe",proposalClosed:"La proposta è già stata applicata o scartata",analysisRunning:"Un'analisi del brand o una descrizione degli asset è già in corso per questo progetto",addSourceFirst:"Aggiungi almeno un sito, un'immagine o una codebase da analizzare",noUsableCodebase:"Nessuna fonte si può analizzare: le cartelle delle codebase mancano o non sono utilizzabili",noAssetsToDescribe:"Nessun asset da descrivere",skipNotRegular:"non è un file regolare",skipTooLarge:"file troppo grande",skipUnreadable:"non leggibile",skipLinked:"file collegato non consentito",skipOutside:"fuori dal progetto",claudeCommandInvalidJson:e=>`MOTION_STUDIO_CLAUDE_COMMAND non è JSON valido (${e.detail}): usa un array JSON di stringhe`,claudeCommandNotArray:"MOTION_STUDIO_CLAUDE_COMMAND deve essere un array JSON di stringhe",claudeCommandEmpty:"claudeCommand vuoto",alreadyRunning:e=>`Motion Studio è già avviato (porta ${e.port})`,bootBusy:"Un altro Motion Studio si sta avviando con la stessa configurazione: riprova tra poco",formatCatalogInvalid:e=>`Catalogo formati non valido: ${e.detail}`,formatCatalogUnreadable:e=>`Il catalogo formati non si legge, quindi non è stato modificato: ${e.detail}`,customFormatNotFound:e=>`Non c'è un formato personalizzato "${e.id}"`,customFormatNotCustom:e=>`"${e.id}" non è un formato personalizzato: qui si modificano o eliminano solo quelli`,customFormatNameTaken:e=>`Un formato personalizzato si chiama già "${e.name}": scegli un altro nome`,customFormatInUse:e=>`${e.count===1?"Una creatività usa":`${e.count} creatività usano`} questo formato: tipo e dimensioni restano come sono (crea un nuovo formato per un'altra misura)`,customFormatMaybeInUse:e=>`${e.count===1?"Una creatività non si legge e potrebbe usare":`${e.count} creatività non si leggono e potrebbero usare`} questo formato: tipo e dimensioni restano come sono`,customFormatDurationShort:e=>`Una creatività usa questo formato per ${e.sec} s: la durata massima non può scendere sotto`,formatUnavailable:e=>`Il formato "${e.id}" non è più disponibile: toglilo dal brief`,invalidLanguage:"Scegli una lingua dall'elenco.",settingsNotWritable:e=>`Motion Studio non riesce a scrivere il file delle impostazioni (${e.path}). Controlla che il file e la sua cartella siano scrivibili e non bloccati (Finder: Ottieni informazioni, Bloccato), poi salva di nuovo.`,briefSessionGone:"Questa sessione del brief è finita (ricominciata o diventata una creatività altrove). Ricarica la pagina.",briefQueueFull:e=>`Al massimo ${e.max} messaggi possono aspettare l’agente: aspetta che finisca, oppure fermalo.`,briefSessionUnreadable:"La sessione del brief di questo progetto non si può leggere: inizia da capo per scartarla.",briefHandedOff:"Questa sessione del brief è stata spostata in una creatività, ma non del tutto: apri la creatività, oppure scarta la sessione.",briefSessionBusy:"L’agente sta ancora lavorando al brief: aspetta che finisca, oppure fermalo.",briefUnknownFormat:e=>`${e.id} non è un formato del catalogo: usa un id di list_formats.`,briefIdentityFormat:e=>`${e.id} è un formato di identità: l’agente del brief non può sceglierlo.`,briefFormatGap:e=>`${e.id}: le copie di un formato vanno dal suo id in su, senza salti: manca ${e.missing}.`,briefAssetOutside:e=>`${e.path} non è tra gli asset allegati a questa sessione.`,briefCodebaseOutside:e=>`${e.path} non è tra le cartelle collegate a questa sessione.`,briefFillLimit:e=>`fill_brief si può chiamare al massimo ${e.max} volte in un turno.`,briefBadField:e=>`fill_brief: ${e.field}: ${e.detail}`,briefSourceSize:e=>`${e.path}: la sua misura non è nota (solo un video o un’immagine degli Asset del progetto di cui si conosce la misura può dare un formato).`,briefSourceKind:e=>`${e.path} non è un video né un’immagine (un SVG o un altro file non ha una misura propria da usare come formato).`,briefSourceSmall:e=>`${e.path} è troppo piccolo per un formato (un lato sotto i 16 px).`,briefSourceNoName:e=>`Non c’è un nome libero per il formato di ${e.path}: rinomina uno dei formati personalizzati «Originale …» e riprova.`,briefAssetNotFound:e=>`${e.path} non è un file degli Asset del progetto.`,analysisEdited:"Questa analisi è stata modificata a mano: conferma per sostituirla con una nuova analisi.",analysisNotVideo:"Si possono analizzare solo i video degli Asset del progetto.",analysisBadWrite:e=>`write_video_analysis: ${e.detail}`,analysisNoWrite:"L'agente ha finito senza scrivere l'analisi (write_video_analysis non è stato chiamato).",analysisChanged:"Il video è cambiato durante l'analisi: verrà analizzato di nuovo.",analysisWriteLimit:"write_video_analysis si può chiamare al massimo 5 volte per esecuzione.",analysisGone:"Il video non è più negli Asset.",analysisNothingWaits:"Questa creatività non sta aspettando l'analisi di un video.",whisperNotFound:"Nessun Whisper trovato: installane uno o indicalo in Impostazioni → Trascrizione video.",whisperProbeFailed:e=>`Questo Whisper non ha funzionato su un secondo di audio di prova: ${e.detail}`,whisperModelMissing:"Il modello di Whisper non è installato.",transcriptionFailed:e=>`La trascrizione non è riuscita: ${e.reason}`,downloadSizeChanged:"La dimensione del download non è quella mostrata: riapri la scelta.",downloadBusy:"Si sta già scaricando un modello di Whisper: aspetta che finisca.",downloadHashMismatch:"Il file scaricato non è quello atteso (controllo sha256 non riuscito): è stato eliminato.",transcriptionNoKey:e=>`Non c'è una chiave ${e.provider} salvata: aggiungila in Impostazioni → Servizi.`,transcriptionNothingAsks:"Questo video non sta aspettando una scelta sulla trascrizione.",transcriptionRecheckTimeout:"La ricerca dei Whisper non ha risposto in tempo: riprova.",subtitlesRunning:"I sottotitoli di questa creatività sono già in preparazione.",subtitlesNoSet:"Non ci sono sottotitoli di cui rifare i tempi: falli prima.",subtitlesNoVideo:"L'ultima versione non ha un formato video: non c'è niente da sottotitolare.",noFfmpegSubtitles:"Per i sottotitoli serve ffmpeg, che non è stato trovato su questo Mac.",subtitlesTranscriptionOff:"La trascrizione dei video è disattivata: attivala in Impostazioni → Trascrizione video per fare i sottotitoli.",subtitlesConflict:"I sottotitoli sono stati modificati altrove: ricaricali.",subtitlesTooLarge:e=>`I sottotitoli superano ${e.maxMB} MB.`,subtitlesOncePerTurn:"I sottotitoli sono già stati chiesti in questo turno: partono quando finisce.",subtitlesNoLang:e=>`Questa creatività non ha sottotitoli in ${e.lang}.`,subtitlesUnknownCue:e=>`Nessuna riga dei sottotitoli ha questi id: ${e.ids}. Non è stato cambiato niente.`,subtitlesCueChanged:e=>`Queste righe dei sottotitoli sono cambiate da quando le hai lette: ${e.ids}. Non è stato cambiato niente: rileggile.`,subtitlesNoSource:"Non ci sono sottotitoli fatti dal parlato da tradurre: falli prima.",subtitlesSameLang:e=>`I sottotitoli sono già in ${e.lang}.`,subtitlesLangSpoken:e=>`I sottotitoli in ${e.lang} vengono dal parlato del video: non si traducono.`,subtitlesTranslating:e=>`I sottotitoli in ${e.lang} sono già in traduzione.`,subtitlesNoCues:e=>`I sottotitoli non hanno righe con questi id: ${e.ids}.`,subtitlesNoIds:"Indica almeno una riga dei sottotitoli da ritradurre.",subtitlesNothingToTranslate:e=>`Tutte le righe in ${e.lang} sono righe che hai corretto: non c'è niente da tradurre.`,subtitlesLangExists:e=>`Questa creatività ha già i sottotitoli in ${e.lang}.`,subtitlesNothingStale:e=>`Nessuna riga in ${e.lang} è da ritradurre.`,subtitlesNothingStaleCorrected:e=>`Le righe da ritradurre in ${e.lang} sono righe che hai corretto: sceglile per ritradurle.`,subtitlesFollowsSource:"Una traduzione ha i tempi dei sottotitoli da cui viene: controlla i tempi di quelli.",subtitlesSourceSet:"Questi sottotitoli vengono dal parlato del video e ci sono lingue tradotte da loro: elimina prima quelle traduzioni.",subtitlesSourceChanged:"I sottotitoli da cui traduceva non ci sono più (eliminati, o rifatti in un'altra lingua): non è stato scritto niente.",subtitlesLangTranslated:e=>`I sottotitoli in ${e.lang} sono una traduzione: per farli dal parlato del video, eliminali prima.`,subtitlesOtherSpeech:e=>`I sottotitoli dal parlato del video sono in ${e.other} e ci sono lingue tradotte da loro: per rifarli in ${e.lang} elimina prima quelle traduzioni. Per aggiungere una lingua usa «+ Lingua», che li traduce.`,subtitlesVoiceGone:e=>`Il video in ${e.lang} non ha più la sua voce tradotta: i suoi sottotitoli non si rifanno dal parlato. Eliminali e aggiungi di nuovo ${e.lang} con «+ Lingua», che li traduce.`,subtitlesTranslateBad:e=>`submit_subtitle_translation: ${e.detail}`,subtitlesTranslateLimit:"submit_subtitle_translation si può chiamare al massimo 5 volte per esecuzione.",transcriptionNoBundled:"Questa app non ha un Whisper suo: installane uno o indicalo in Impostazioni → Trascrizione video."},videoAnalysis:{waiting:e=>`Analisi del video in corso (${e.files})…`,skip:"Salta",skipped:e=>`Analisi saltata: l'agente usa il video così com'è (${e.files}).`,failed:e=>`L'analisi di ${e.file} non è riuscita: ${e.reason}`,states:{none:"Non analizzato",queued:"In coda",running:"In corso",waiting:"In attesa",ready:"Pronta",stale:"Non aggiornata",error:"Errore"},commit:e=>`Analisi video: ${e.file}`,editedCommit:e=>`Analisi video modificata: ${e.file}`,movedCommit:e=>`Analisi video spostata: ${e.from} → ${e.to}`,section:"Analisi",analyze:"Analizza",reanalyze:"Rianalizza",edit:"Modifica",stop:"Ferma",answer:"Scegli…",overwriteTitle:"L'analisi è stata modificata: sovrascriverla?",overwriteText:"Una nuova analisi sostituisce il testo che hai modificato a mano.",overwrite:"Sovrascrivi",summary:"Riepilogo",timeline:"Scene",moments:"Momenti utili",transcript:"Trascrizione",tags:"Tag",onScreenText:"Testo a schermo",seek:e=>`Vai a ${e.time}`,automatic:"Trascrizione automatica: i nomi possono essere sbagliati.",noTranscript:{skipped:"Trascrizione saltata.",noSpeech:"Nel video non si parla.",noAudio:"Il video non ha audio.",empty:"Nessun parlato riconosciuto."},edited:"Modificata a mano",raw:"Il testo è stato riscritto a mano: lo mostro così com'è.",hints:{none:"Il video si analizza quando entra in un brief, o subito con Analizza.",queued:"Parte appena finiscono le altre analisi del progetto.",checkingAudio:"Prima controlla se nell'audio si parla.",running:"L'agente sta guardando i fotogrammi del video…",stale:"Il video è cambiato dopo l'analisi.",staleEdited:"Il video è cambiato dopo la tua modifica: Rianalizza per aggiornarla.",long:"È un video lungo: scegli come analizzarlo.",transcription:"Serve una scelta sulla trascrizione del parlato."},editLabel:"Testo dell'analisi",editHint:"L'intestazione del file resta quella scritta dall'app.",actionFailed:e=>`Non riuscito: ${e.detail}`,analyzedMark:"Analizzato",longTitle:e=>`Video lungo: ${e.file}`,longText:e=>`Il video dura ${e.minutes} minuti: analizzarlo tutto usa molti token.`,longFull:"Analizza tutto",longReduced:"Analizza a densità ridotta",longEstimate:e=>`${e.frames} fotogrammi · circa ${e.tokens} token`,longReducedNote:"Un fotogramma per scena, al massimo uno ogni 30 secondi.",skipFailed:e=>`Non sono riuscito a saltare l'attesa: ${e.detail}`},transcription:{title:"Trascrizione video",why:"Con la trascrizione l'agente sa cosa viene detto e quando: può citarlo o sincronizzare i testi.",leavesMac:"L'audio lascia il Mac.",pythonCache:"Questo Whisper scarica i modelli nella sua cartella al primo uso.",dialogTitle:e=>`Trascrivere il parlato di ${e.file}?`,subtitlesTitle:e=>`Sottotitoli di ${e.title}: trascrivere il parlato?`,subtitlesWhy:"I sottotitoli si fanno dal parlato del video: per farli bisogna trascriverlo.",methods:{ask:"Chiedi ogni volta",whisper:"Whisper sul Mac",openai:"OpenAI",elevenlabs:"ElevenLabs",never:"Mai"},method:"Metodo",model:"Modello di Whisper",models:{small:"Small","large-v3-turbo":"Large v3 Turbo"},withOpenai:e=>`Trascrivi con OpenAI · ~${e.cost}`,withElevenlabs:e=>`Trascrivi con ElevenLabs · ~${e.cost}`,continueWithout:"Continua senza trascrizione",remember:"Ricorda la scelta",install:e=>`Installa · ${e.size}`,remove:"Rimuovi",installed:"Installato",notInstalled:"Non installato",downloading:e=>`Download in corso… ${e.percent}%`,useInstalled:"Usa un Whisper già installato",choose:"Scegli…",program:"Programma",modelFile:"File del modello (ggml)",test:"Prova",found:e=>`Whisper trovato: ${e.engine}, ${e.version}, ${e.model}, Metal/GPU ${e.gpu}`,gpu:{yes:"sì",no:"no",unknown:"non noto"},versionUnknown:"versione non nota",choicesLabel:"Come trascrivere il parlato",installing:"Installazione di Whisper…",installFailed:e=>`L'installazione non è riuscita: ${e.detail}`,choiceFailed:e=>`Scelta non riuscita: ${e.detail}`,chosen:"Scelta inviata: l'analisi continua.",free:"Gratis, resta sul Mac.",sub:"Quando un video con parlato entra in un brief, l'app lo trascrive con il metodo scelto. Vale per tutti i progetti.",methodSub:`Con "Chiedi ogni volta" l'app chiede per ogni video con parlato.`,modelSub:"Small è veloce e leggero; Large v3 Turbo è più preciso e più pesante.",installedSize:e=>`Installato · ${e.size}`,perMinute:e=>`circa ${e.cost} al minuto`,noKey:"Serve una chiave salvata in Impostazioni → Servizi a pagamento.",paidNote:"A pagamento: l'audio lascia il Mac.",inUse:e=>`In uso: ${e.engine} · ${e.source}`,noneInUse:"Nessun Whisper pronto: installa un modello o indica un Whisper già installato.",sources:{settings:"indicato da te",bundled:"incluso nell'app",detected:"trovato sul Mac"},detected:"Trovati su questo Mac",noneDetected:"Nessun Whisper sul PATH né nelle cartelle di Homebrew.",useThis:"Usa questo",stopUsing:"Non usarlo più",engine:"Motore",programPlaceholder:"/opt/homebrew/bin/whisper-cli",modelFilePlaceholder:"Facoltativo: un file ggml-*.bin che hai già",testAndSave:"Prova e salva",testing:"Prova in corso…",problem:e=>`Non ha funzionato: ${e.detail}`,saved:"Salvato",saveFailed:e=>`Non salvato: ${e.detail}`,removeFailed:e=>`Non rimosso: ${e.detail}`,loadFailed:e=>`Impossibile leggere le impostazioni della trascrizione: ${e.detail}`,pickFailed:e=>`Impossibile aprire la scelta del file: ${e.detail}`,searching:"Ricerca dei Whisper sul Mac…",searchAgain:"Cerca di nuovo",needsModel:"Funziona con un modello scaricato dall'app.",downloadsOwn:"Scarica da solo il suo modello al primo uso.",custom:"Indicato da te",whyTitle:"A cosa serve",whisperTitle:"Trascrivi con Whisper",recommended:"Consigliato",freeLocal:"Gratis · l'audio resta sul Mac",modelOnce:e=>`modello ${e.model}, ${e.size} una volta sola`,modelReady:e=>`modello ${e.model}`,ownModel:"scarica il suo modello al primo uso",paidHeading:"A pagamento",getWhisper:"Questa app non ha un Whisper suo: installane uno con uno di questi comandi nel Terminale, poi premi Ricontrolla.",stepBrew:"whisper.cpp con Homebrew",stepPip:"oppure Whisper per Python",copy:"Copia",copied:"Copiato",copyCommand:e=>`Copia ${e.command}`,copiedStatus:"Comando copiato.",copyFallback:e=>`Non è stato possibile copiarlo: il comando è selezionato, premi ${e.keys}.`,recheck:"Ricontrolla",rechecking:"Ricontrollo…",stillNone:"Ancora nessun Whisper trovato su questo Mac.",recheckFailed:e=>`Il controllo non è riuscito: ${e.detail}`,pickInstalled:"Già installato altrove? Indicalo in Impostazioni"},subtitles:{commit:e=>`Sottotitoli: ${e.title} (${e.lang})`,commitDeleted:e=>`Sottotitoli eliminati: ${e.title} (${e.lang})`,ready:e=>`Sottotitoli pronti (${e.lang}).`,readyOtherLang:e=>`Sottotitoli pronti in ${e.lang}: è la lingua parlata nel video, non quella del brief (${e.brief}).`,noSpeech:"Nessun parlato nel video: nessun sottotitolo.",transcriptionOff:"la trascrizione dei video è disattivata (Impostazioni → Trascrizione video).",transcriptionUnavailable:"la trascrizione non è stata fatta: il metodo scelto non è disponibile o non ha funzionato. Controlla Impostazioni → Trascrizione video.",transcriptionTimeout:"il controllo della trascrizione non ha risposto in tempo: riprova.",unsupportedUnknown:"Nessun sottotitolo: non è stato possibile riconoscere la lingua parlata nel video.",unsupported:e=>`Nessun sottotitolo: la lingua parlata nel video (${e.detected}) non è supportata.`,failed:e=>`I sottotitoli non sono riusciti: ${e.reason}`,notStarted:e=>`I sottotitoli non sono partiti: ${e.reason}`,cancelledNoTranscription:"Sottotitoli annullati: hai scelto di continuare senza trascrizione.",setUnreadable:e=>`il file ${e.file} non si legge come sottotitoli e potrebbe contenere le tue correzioni: correggilo o spostalo, poi rifai i sottotitoli.`,translated:e=>`Sottotitoli tradotti in ${e.lang}.`,translateFailed:e=>`Non è stato possibile tradurre i sottotitoli in ${e.lang}: ${e.reason}`,translateMissing:e=>e.count===1?"la traduzione ha tralasciato 1 riga":`la traduzione ha tralasciato ${e.count} righe`,translatedStale:e=>e.count===1?`Sottotitoli tradotti in ${e.lang}. 1 riga non corrisponde più alla sua riga d'origine (è cambiata nel frattempo, o l'avevi corretta): controllala.`:`Sottotitoli tradotti in ${e.lang}. ${e.count} righe non corrispondono più alla loro riga d'origine (sono cambiate nel frattempo, o le avevi corrette): controllale.`,translateNothing:e=>`Niente da tradurre in ${e.lang}: tutte le righe sono righe che hai corretto.`,notStartedTurn:"I sottotitoli non sono partiti: il turno non si è concluso. Chiedili di nuovo.",styleStarted:"Sottotitoli pronti: l'agente li disegna nel video.",styleWaiting:"Sottotitoli pronti: l'agente li disegnerà nel video appena finisce il lavoro in corso.",styleVersionRequest:"Sottotitoli disegnati nel video",styleAfterStop:"il lavoro precedente non si è concluso. Chiedi all'agente di disegnarli.",styleAskLater:"Sottotitoli pronti: chiedi all'agente di disegnarli nel video quando riprendi.",styleNotStarted:e=>`I sottotitoli non sono stati disegnati nel video: ${e.reason}`,readyTitle:"Sottotitoli pronti",download:e=>`Scarica ${e.ext}`,downloadFailed:e=>`Download non riuscito: ${e.detail}`,openEditor:"Apri l'editor",editorTitle:"Sottotitoli",backToCreative:"Torna alla creatività",backToEditor:"Torna all'editor",savedElsewhere:"Modificati altrove: ricaricati, le tue correzioni restano",saveState:"Stato del salvataggio",saving:"Salvataggio…",saved:"Salvato",saveFailed:"Salvataggio non riuscito",notSaved:"le ultime modifiche non sono salvate, il file non le avrebbe. Riprova quando il salvataggio è riuscito",retry:"Riprova",undo:"Annulla",redo:"Ripeti",loading:"Caricamento dei sottotitoli…",loadFailed:e=>`I sottotitoli non si sono caricati: ${e.detail}`,noSets:"Questa creatività non ha ancora sottotitoli: chiedili all'agente nella chat.",noPreview:"L'anteprima di questa versione non è disponibile: le righe si modificano lo stesso.",play:"Riproduci",pause:"Pausa",lines:"Righe",listLabel:"Righe dei sottotitoli",addLine:"+ Riga",noRoom:"Qui non c'è spazio per una nuova riga: porta il video in un punto senza sottotitoli.",findReplace:"Trova e sostituisci",find:"Trova",replaceWith:"Sostituisci con",matchCase:"Maiuscole/minuscole",replaceAll:"Sostituisci tutto",matches:e=>e.count===1?"1 riga":`${e.count} righe`,row:e=>`Riga ${e.n}`,start:e=>`Inizio della riga ${e.n}`,end:e=>`Fine della riga ${e.n}`,text:e=>`Testo della riga ${e.n}`,timeHint:"Scrivi il tempo come mm:ss.mmm",split:"Dividi al cursore",merge:"Unisci con la successiva",remove:"Elimina la riga",timeline:"Timeline",timelineHint:e=>`Trascina una riga o i suoi bordi per cambiarne i tempi; ${e.mod} + rotellina per lo zoom`,waveformLoading:"Carico la forma d'onda…",timingChanged:"Il video è cambiato: ricontrolla i tempi",translationTimingChanged:"I tempi di questa traduzione non sono più quelli dei sottotitoli da cui viene: rifai i tempi di quelli, o ritraduci.",timingAligned:"I tempi sono di nuovo allineati al video.",retime:"Rifai i tempi",retimed:e=>`Tempi dei sottotitoli rifatti (${e.lang}).`,retimeStarted:"Rifaccio i tempi: le righe che hai corretto tengono il loro testo.",retimeFailed:e=>`I tempi non sono ripartiti: ${e.detail}`,timingChecked:"Tempi controllati",timingCheckedHint:"I tempi vanno bene così: l'avviso sparisce finché il video non cambia di nuovo.",timingCheckedFailed:e=>`I tempi non sono stati segnati come controllati: ${e.detail}`,redoMenu:"Rifai la trascrizione…",redoTitle:"Rifai la trascrizione",redoLanguage:"Lingua parlata",redoAuto:"Riconoscila da sola",redoHint:"Le righe che hai corretto restano come sono.",redoOtherLanguage:"Il parlato del video ha un solo insieme di sottotitoli: con un'altra lingua si rifà in quella (se nessuna lingua è tradotta da lui). Per aggiungere una lingua usa «+ Lingua».",redoStart:"Rifai la trascrizione",redoStarted:"Trascrizione avviata: i sottotitoli si aggiornano quando è pronta.",redoFailed:e=>`La trascrizione non è partita: ${e.detail}`,languages:"Lingue dei sottotitoli",addLanguage:"+ Lingua",addLanguageTitle:"Aggiungi una lingua",addFromBrief:"Lingue del brief",addOthers:"Altre lingue",addHint:"Si traduce dalle righe del parlato, corrette comprese; una lingua che il video ha già con la sua voce si trascrive da quella.",addFailed:e=>`La lingua non è stata aggiunta: ${e.detail}`,notSavedSwitch:"Le modifiche non sono salvate: riprova prima di cambiare lingua.",pendingLanguage:e=>`Preparo i sottotitoli in ${e.lang}…`,pendingFailed:e=>`I sottotitoli in ${e.lang} non sono stati fatti: ${e.detail}`,noLanguage:e=>`Questa creatività non ha sottotitoli in ${e.lang}: aggiungili con «+ Lingua».`,sourceText:"Testo originale",staleMark:"Testo originale cambiato",staleHint:"La riga da cui viene questa traduzione è cambiata: «Ritraduci» la traduce di nuovo.",goneMark:"Riga originale tolta",goneHint:"La riga da cui veniva questa traduzione non c'è più: tienila o eliminala.",retranslate:"Ritraduci",retranslateAll:"Ritraduci tutto",missingTranslation:"Manca la traduzione",missingTranslationHint:"Queste righe dell'originale non hanno ancora una riga in questa lingua: «Ritraduci tutto» le traduce.",retranslateAllHint:"Ritraduce le righe il cui testo originale è cambiato e traduce quelle che mancano; quelle che hai corretto restano come sono (usa «Ritraduci» sulla riga).",retranslateStarted:"Ritraduzione avviata: le righe si aggiornano quando è pronta.",retranslateFailed:e=>`La ritraduzione non è partita: ${e.detail}`,retranslateDropped:e=>e.count===1?"Tolta 1 riga senza più il testo originale.":`Tolte ${e.count} righe senza più il testo originale.`,deleteLanguage:e=>`Elimina i sottotitoli in ${e.lang}`,deleteConfirm:e=>`I sottotitoli in ${e.lang} hanno ${e.count===1?"1 riga che hai corretto":`${e.count} righe che hai corretto`}: eliminandoli la correzione va persa.`,deleteYes:"Elimina",deleteNo:"Annulla",deleteFailed:e=>`I sottotitoli non sono stati eliminati: ${e.detail}`,translateInto:e=>`Traduci in ${e.language}`,translateIntoFailed:e=>`La traduzione non è partita: ${e.detail}`,warnings:{tooLong:"Troppo lunga",tooFast:"Troppo veloce",tooShort:"Troppo breve",tooLongOnScreen:"Troppo a lungo",overlap:"Si sovrappone",placeholder:"Da scrivere"},warningHints:{tooLong:e=>`Non sta in ${e.lines} righe: accorciala o dividila.`,tooFast:e=>`Più di ${e.cps} caratteri al secondo: troppo veloce da leggere. Accorcia il testo o allunga la riga.`,tooShort:e=>`Resta sullo schermo meno di ${e.seconds} secondo: allungala.`,tooLongOnScreen:e=>`Resta sullo schermo più di ${e.seconds} secondi: dividila.`,overlap:"Finisce dopo l'inizio della riga che segue.",placeholder:"Ha ancora il testo segnaposto «…»: scrivi la battuta o elimina la riga, se no finisce nei file."}},briefSession:{filled:e=>`Compilato il brief: ${e.parts}`,parts:{texts:"testi",length:"durata",assets:e=>`${e.count} asset`,codebases:e=>`${e.count} codebase`,formats:e=>e.count===1?"1 formato":`${e.count} formati`,variants:e=>e.count===1?"1 variante":`${e.count} varianti`},keptYours:e=>` · tenuti i tuoi: ${e.fields}`,sourceFormatName:e=>`Originale ${e.width}×${e.height}`,sourceFormatAdded:e=>`Aggiunto «${e.name}» ai formati personalizzati`,nothingWritten:"Nessun campo del brief è cambiato",reclaimed:e=>`L'agente ha riscritto ${e.fields} su tua richiesta`,fieldNames:{goal:"Cosa vuoi realizzare",message:"Messaggio chiave",durationSec:"Durata dei video",assets:"Asset da usare",linkedCodebases:"Codebase",notes:"Note per l'agente",formats:"Formati",variants:"Varianti"},creativeStarts:e=>`${e.title} · ${e.formats}. La sessione del brief resta qui sopra.`,memoryUnavailable:"La memoria della sessione del brief non è più disponibile: l'agente riparte dal suo riassunto."},brand:{droppedKeepFailed:e=>`${e.name}: versione attuale non mantenuta (troppe voci, massimo ${e.limit})`,droppedNotList:e=>`${e.label}: elenco non valido`,droppedDuplicateId:e=>`${e.name}: id duplicato`,droppedTooMany:e=>`${e.name}: troppe voci (massimo ${e.limit})`,droppedPrefix:e=>`Voci scartate: ${e.list}`,droppedMore:e=>`e altre ${e.count}`,droppedOutsideAssets:e=>`${e.label} (${e.file} fuori da assets/)`,droppedNotFound:e=>`${e.label} (${e.file} non trovato)`,droppedNotRegistered:e=>`${e.file} (non registrato)`,ignoredGuidelines:e=>`guidelines.md (ignorato: ${e.reason})`,ignoredSummary:e=>`summary.md (ignorato: ${e.reason})`,ignoredAssetList:e=>`assets.json della proposta (ignorato: ${e.reason})`,ignoredDescriptions:e=>`File delle descrizioni ignorato: ${e.reason}`,assetRemovedWhileDescribing:e=>`${e.file} eliminato durante la descrizione: saltato`,commitAnalysis:e=>`Analisi brand ${e.id}`,commitAnalysisAssets:e=>`Asset dell'analisi brand ${e.id} (non riuscita)`,commitDescribe:"Descrizione asset",commitApply:e=>`Applica proposta ${e.id}`,commitDiscard:e=>`Scarta proposta ${e.id}`,siteFontsSummary:e=>`Font del sito: ${e.count===1?"1 nota":`${e.count} note`}: ${e.list}${e.more?" · …":""}`,siteBlocked:e=>`${e.url} non letto (indirizzo non consentito)`,siteUnreachable:e=>`${e.url} non raggiungibile`,siteStatus:e=>`${e.url} ha risposto ${e.status}`,siteTooLarge:e=>`${e.url} supera ${e.mb} MB: letto solo l'inizio`,siteOffSite:e=>`${e.url} non letto (foglio di stile su un altro sito)`,siteScheme:e=>`${e.url} ignorato (solo indirizzi http e https)`,siteTooManySheets:e=>`più di ${e.max} fogli di stile: gli altri non sono stati letti`,siteImportDepth:e=>`${e.url} non letto (import annidati oltre ${e.max} livelli)`,siteImportCycle:e=>`${e.url} importa sé stesso in un ciclo: letto una volta`,siteTooManyFaces:e=>`più di ${e.max} regole @font-face: le altre sono state ignorate`,siteTimeout:e=>`interrotto al limite di tempo (${e.seconds} s): risultato parziale`,siteFontUrlsIgnored:e=>e.count===1?"1 indirizzo di font ignorato (solo http e https)":`${e.count} indirizzi di font ignorati (solo http e https)`},doctor:{supportedVersion:"Versione supportata",nodeTooOld:"Serve Node.js 22 o superiore",nodeFix:"Installa Node.js 22+ da https://nodejs.org",installed:"Installato",gitMissing:"Git non trovato",gitFix:{windows:"Scarica Git per Windows da https://git-scm.com/downloads/win, aprilo e premi Avanti in ogni schermata (le opzioni proposte vanno bene). Poi premi Ricontrolla.",mac:"Apri il Terminale, scrivi xcode-select --install e premi Invio, poi conferma l'installazione che compare. Poi premi Ricontrolla.",linux:"Installa Git con il gestore di pacchetti del sistema (per esempio: sudo apt install git), poi premi Ricontrolla."},ffmpegRecommended:"Serve per esportare i video; le immagini funzionano anche senza.",ffmpegFix:{windows:"Apri PowerShell (fai clic su Start, scrivi PowerShell, premi Invio), scrivi winget install Gyan.FFmpeg e premi Invio. Quando ha finito, premi Ricontrolla.",mac:"Con Homebrew: apri il Terminale e scrivi brew install ffmpeg. Senza Homebrew: scarica ffmpeg e ffprobe da https://ffmpeg.martin-riedl.de e mettili in /usr/local/bin. Poi premi Ricontrolla.",linux:"Installa FFmpeg con il gestore di pacchetti del sistema (per esempio: sudo apt install ffmpeg), poi premi Ricontrolla."},ffmpegArch:e=>e.translated?`${e.arch} con Rosetta: render più lenti`:e.arch,ffmpegUniversal:"universale",ffmpegWrongArch:"FFmpeg trovato ma compilato per Intel: su questo Mac non può partire. Installa la versione per Apple Silicon, es. con Homebrew in /opt/homebrew",ffmpegRosetta:"Installato: una build Intel che gira con Rosetta su Apple Silicon. I render funzionano, più lentamente; una build arm64 (Homebrew in /opt/homebrew) è più veloce",claudeMissing:"Claude Code non trovato",broken:"Installato ma non risponde correttamente",brokenDetail:e=>`Installato ma non risponde correttamente: ${e.detail}`,claudeAuthLabel:"Accesso a Claude",installClaudeFirst:"Prima installa Claude Code",claudeMustRespond:"Claude Code deve prima rispondere correttamente",authenticated:"Autenticato",notAuthenticated:"Claude Code non è autenticato",sandboxLabel:"Sandbox dell'agente",sandboxAvailable:"Disponibile: l'agente lavora isolato nella cartella del progetto",sandboxFix:"Senza sandbox Motion Studio usa permessi più ristretti; vedi il README",shellPathLabel:"PATH della shell di login",shellPathLoaded:"PATH caricato dalla shell di login",shellPathFallback:e=>`PATH di riserva: ${e.reason}`,shellPathFallbackPlain:"I programmi si cercano nelle cartelle abituali (la shell di login non si è potuta leggere)",freePlan:"Hai fatto l'accesso con il piano gratuito di Claude, che non include Claude Code. Passa a Pro o Max (oppure accedi con un account Team, Enterprise o Console), poi accedi di nuovo.",workspacePathLabel:"Percorso della cartella di lavoro",workspaceSettingsLabel:"Impostazioni dell'area di lavoro",workspacePathGlob:"Il percorso contiene [ ] * o ?: la sandbox protegge meno i registri di Motion Studio (macOS) o non li protegge affatto (Linux)",workspacePathFix:"Sposta la cartella di lavoro in un percorso senza questi caratteri, poi sceglila di nuovo",folderGlobChars:e=>`Il percorso ${e.path} contiene ( ) [ ] { } * ? o \\: le regole dell'agente a protezione dei file di Motion Studio non riescono a confrontarlo in modo sicuro, quindi ogni esecuzione dell'agente lì è rifiutata (sfogliare ed esportare funzionano ancora)`,folderGlobFix:"Rinomina la cartella con questi caratteri (per una cartella di progetto che è un collegamento: rinomina la destinazione, poi ricrea il collegamento), poi scegli di nuovo la cartella di lavoro",updatesLabel:"Aggiornamenti automatici",updatesOff:"Non attivi in questa versione",denyPathsLabel:"Percorsi della cartella home e di configurazione",denyPathsGlob:e=>e.count===1?`Il percorso ${e.paths} contiene ( ) [ ] { } * ? o \\: le regole che negano all'agente l'accesso (token, file segreti) potrebbero non valere lì`:`I percorsi ${e.paths} contengono ( ) [ ] { } * ? o \\: le regole che negano all'agente l'accesso (token, file segreti) potrebbero non valere lì`,shellPathFix:"Se mancano programmi, avvia Motion Studio dal terminale o controlla i file di avvio della shell",sandboxAvailableReason:"Disponibile",sandboxExecMissing:"sandbox-exec non trovato: la sandbox di macOS non è disponibile",sandboxLinuxMissing:e=>`Mancano ${e.tools}: installa bubblewrap e socat per isolare l'agente`,sandboxAnd:"e",sandboxWindows:"La sandbox di Claude Code non è disponibile su Windows",sandboxUnsupported:e=>`La sandbox non è supportata su ${e.platform}`,sandboxOff:"Isolamento disattivato nelle Impostazioni",liveMessagesLabel:"Messaggi durante il lavoro",liveMessagesQueued:"solo in coda (non verificati per questa versione di Claude Code)",liveMessagesSupported:"attivi (verificati per questa versione di Claude Code)",liveMessagesOff:"solo in coda (disattivati nelle impostazioni dell’area di lavoro)",interruptLabel:"Interruzione",interruptStopResume:"ferma e riprendi",interruptSupported:"attiva (verificata per questa versione di Claude Code)",interruptOff:"ferma e riprendi (disattivata nelle impostazioni dell’area di lavoro)"},approvals:{briefReadOnly:"L'agente del brief legge solo le cartelle collegate e il progetto: nient'altro si può approvare.",videoAnalysisReadOnly:"L'analisi video guarda solo i fotogrammi estratti: nient'altro si può approvare.",subtitlesTranslateOnly:"La traduzione dei sottotitoli consegna solo le righe tradotte: nient'altro si può approvare.",runCommand:"Eseguire un comando",editOutside:"Modificare un file fuori dal progetto",readOutside:"Leggere un file fuori dal progetto",openPage:"Aprire una pagina web",useTool:e=>`Usare lo strumento ${e.tool}`,editsIn:e=>`Modifiche in ${e.dir}`,readsIn:e=>`Letture in ${e.dir}`,commandsLabel:e=>`Comandi "${e.command}"`,pagesOf:e=>`Pagine di ${e.host}`,providerNoConfirm:e=>`Uso di ${e.provider} senza conferma`,toolLabel:e=>`Strumento ${e.tool}`,generateImage:"Generare un'immagine con gpt-image-2",imageDetail:e=>`${e.width}×${e.height}${e.refs?`, ${e.refs} riferimenti`:""}: ${e.prompt}`,generateVoice:e=>`Generare una voce con ${e.provider}`,readOnlyTurn:"Un turno di traduzione legge soltanto i file e invia le traduzioni: le scrive Motion Studio",coordinatorReadOnly:"L'agente con cui parli legge solo il progetto e ti fa domande: il lavoro sui file lo fanno i turni delle varianti",directionsTurnOnly:"Un turno delle direzioni propone solo le direzioni delle varianti: non usa altri strumenti",brandCodebaseToolDenied:"Un'analisi del brand da una codebase non esegue comandi né cerca nel contenuto dei file: apri i file per nome con Read",moreCalls:e=>`…e altre ${e.count}`,generateVoices:e=>`Generare ${e.count===1?"una voce tradotta":`${e.count} voci tradotte`} con ${e.provider}`,voicesBatchDetail:e=>`${e.count===1?"1 chiamata":`${e.count} chiamate`}, ${e.chars} caratteri in tutto: ${e.list}`,variantBatchTitle:e=>`Servizi a pagamento per ${e.count} varianti`,variantBatchDetail:e=>`Chiamate stimate (prezzo non noto): ${e.providers}. Per variante: ${e.variants}. Nessuna variante parte prima della tua risposta. Rifiuta avvia le varianti senza servizi a pagamento (in questa esecuzione non verrà fatta nessuna chiamata a pagamento); per annullare del tutto la generazione, ferma il lavoro.`,variantBatchItem:e=>`Variante ${e.letter} · ${e.service} (${e.provider})`,serviceNames:{images:"Immagini",voice:"Voce",music:"Musica",sfx:"Effetti sonori"},generateSfx:e=>`Generare un effetto sonoro con ${e.provider}`,generateMusic:e=>`Generare musica con ${e.provider}`,audioDetail:e=>`${e.provider}, ${e.seconds===null?"durata scelta dal servizio":`${e.seconds} s`}: ${e.prompt}`,denied:"L'utente ha negato questa azione.",expired:"Nessuna risposta entro 10 minuti: azione negata.",protectedPath:"La cartella di configurazione di Motion Studio è vietata all'agente (contiene token di accesso): richiesta negata senza chiedere all'utente.",invalidRequest:"Richiesta non valida.",unknownTool:"sconosciuto",providerNotApproved:"L'utente non ha approvato l'uso del provider",questionTitle:"L'agente ti fa una domanda",questionSkipped:"L'utente ha scelto di non rispondere. Prosegui con la scelta più ragionevole e di' cosa hai deciso.",questionExpired:"Nessuna risposta entro 10 minuti. Prosegui con la scelta più ragionevole e di' cosa hai deciso."},validation:{manifestMissing:e=>`manifest.json mancante in ${e.dir}`,manifestInvalid:e=>`manifest.json non valido: ${e.detail}`,unknownPreset:e=>`Preset sconosciuto: ${e.id} (non è nel catalogo formati)`,missingFormat:e=>`Manca il formato ${e.label} (${e.id})`,fileNotFound:e=>`File non trovato per ${e.id}: ${e.file}`,badExtension:e=>`${e.file}: estensione .${e.ext} non ammessa per ${e.id} (ammesse: ${e.allowed})`,tooLarge:e=>`${e.file}: ${e.size} MB, massimo ${e.max} MB`,notReadable:e=>`${e.file}: file non leggibile come media`,badResolution:e=>`${e.file}: risoluzione ${e.width}×${e.height}, attesa ${e.expectedWidth}×${e.expectedHeight}`,notAVideo:e=>`${e.file}: non sembra un video`,durationOverMax:e=>`${e.file}: durata ${e.duration}s oltre il massimo di ${e.max}s`,durationOffTarget:e=>`${e.file}: durata ${e.duration}s, richiesta circa ${e.target}s`,reservedName:e=>`${e.file}: questo nome appartiene a ${e.format}, che in questa versione consegna Motion Studio; rinomina il tuo file`,compositionMissing:e=>`Manca la composizione di ${e.label} (${e.id}): scrivi ${e.dir}/composition.json`,compositionProblem:e=>`${e.dir}: ${e.text}`},outputs:{largeFile:e=>`File pesante: ${e.sizeMB} MB a ${e.mbps} Mbps (circa ${e.targetMbps} Mbps bastano per ${e.channel})`,keptUnchanged:e=>`${e.format} non faceva parte di questa richiesta: il file dell’agente è stato scartato e quello precedente è rimasto invariato`,followerReplaced:e=>`${e.format}: il file dell’agente è stato scartato; Motion Studio ha copiato al suo posto ${e.primary}`},composition:{jsonEmpty:"composition.json è vuoto: scrivi la composizione come JSON UTF-8",jsonNotUtf8:"composition.json non è UTF-8 valido: salvalo in UTF-8 (non UTF-16 né Latin-1)",jsonSyntax:e=>`composition.json non è JSON valido (${e.detail}): correggi la sintassi`,jsonTooLarge:e=>`composition.json pesa ${e.sizeMB} MB, oltre il limite di ${e.maxMB} MB: sposta i contenuti lunghi in livelli html o negli asset`,limit:e=>`${e.path}: più di ${e.max} elementi, il massimo: semplifica la composizione`,moreProblems:"Altri problemi non sono elencati: correggi questi e valida di nuovo",unknownField:e=>`${e.path}: campo sconosciuto "${e.field}": toglilo o controlla il nome nello schema`,missingField:e=>`${e.path}: manca un campo obbligatorio: aggiungilo`,wrongType:e=>`${e.path}: atteso ${e.expected}: correggi il tipo del valore`,badValue:e=>`${e.path}: valore non ammesso; usa uno tra: ${e.allowed}`,tooSmall:e=>`${e.path}: deve essere almeno ${e.min}`,notAbove:e=>`${e.path}: deve essere maggiore di ${e.min}`,tooBig:e=>`${e.path}: deve essere al massimo ${e.max}`,tooLong:e=>`${e.path}: più lungo di ${e.max} caratteri: accorcialo`,invalid:e=>`${e.path}: valore non valido: controllalo con lo schema`,badId:e=>`${e.path}: id non valido: usa lettere minuscole, cifre e trattini (al massimo 64), iniziando con una lettera o una cifra`,badColor:e=>`${e.path}: colore non valido: usa l'esadecimale #rrggbb (o #rgb, #rgba, #rrggbbaa)`,badPath:e=>`${e.path}: percorso non valido: usa un percorso relativo sotto assets/ o layers/, senza "..", "\\", ":", "%", "?", "#" né schema`,badFontFamily:e=>`${e.path}: famiglia di font non valida: usa un solo nome di famiglia dichiarato in fonts[], senza virgolette né alternative`,badEase:e=>`${e.path}: easing non valido: usa un easing CSS come linear, ease-out o cubic-bezier(.2,.8,.2,1)`,badParamKey:e=>`${e.path}: nome del parametro non valido: usa lettere, cifre e _ (al massimo 64), senza iniziare con una cifra`,badAnimation:e=>`${e.path}: animazione non valida: usa {preset, duration}, {prop, from, to, duration} o {prop, keyframes, duration}`,scriptNeedsVoice:e=>`${e.path}: lo script appartiene a una clip voce: imposta role "voice" o togli lo script`,duplicateId:e=>`L'id "${e.id}" è usato più volte: dai a ogni scena, traccia e clip un id diverso`,sceneStart:e=>`La scena ${e.scene} inizia a ${e.start}s: la prima scena deve iniziare a 0`,sceneGap:e=>`Vuoto tra la scena ${e.previous} (finisce a ${e.from}s) e la scena ${e.scene} (inizia a ${e.to}s): rendi le scene contigue`,sceneOverlap:e=>`La scena ${e.scene} inizia a ${e.to}s, prima che finisca la scena ${e.previous} (${e.from}s): le scene non devono sovrapporsi; elencale in ordine di tempo`,scenesEnd:e=>`Le scene finiscono a ${e.end}s ma la composizione dura ${e.duration}s: l'ultima scena deve finire esattamente alla durata`,fontWeightUndeclared:e=>`La clip ${e.clip}: ${e.family} non dichiara il peso ${e.weight} (dichiara ${e.declared}): il testo è disegnato con un peso sintetizzato o vicino; dichiara il peso in fonts[] o usane uno dichiarato`,stillScenes:"Un fotogramma singolo (durata 0) ignora le scene: puoi svuotare scenes[]",stillAnimations:e=>`Clip ${e.clip}: un fotogramma singolo mostra solo t = 0, quindi le sue animazioni sono ignorate: puoi toglierle`,stillAudio:e=>`Traccia ${e.track}: un fotogramma singolo non ha audio, quindi le sue clip audio sono ignorate: puoi toglierle`,clipStill:e=>`Clip ${e.clip}: in un fotogramma singolo ogni clip inizia a 0`,clipZero:e=>`La clip ${e.clip} dura 0 secondi: dalle una durata positiva o toglila`,clipOutside:e=>`La clip ${e.clip} va da ${e.start}s a ${e.end}s, fuori dalla composizione (da 0 a ${e.duration}s): spostala o accorciala`,clipOutsideScene:e=>`La clip ${e.clip} è fuori dalla sua scena ${e.scene} (da ${e.start}s a ${e.end}s): spostala dentro la scena o cambiale scena`,unknownScene:e=>`La clip ${e.clip} fa riferimento alla scena ${e.scene}, che non esiste: usa un id di scenes[]`,trackKind:e=>`La clip ${e.clip} (${e.type}) non può stare sulla traccia ${e.track} (${e.kind}): le clip audio vanno sulle tracce audio, le clip sottotitoli sulla traccia sottotitoli, tutte le altre sulle tracce visual, video o text`,subtitlesTwice:()=>"Una composizione ha al massimo una traccia sottotitoli: togli le altre",subtitlesSpan:e=>`Traccia ${e.track}: una traccia sottotitoli ha una sola clip sottotitoli, da 0 a ${e.duration}s, senza scena`,subtitlesOnStill:()=>"Un fotogramma singolo non ha tempo in cui disegnare i sottotitoli: togli la traccia sottotitoli",animationOutside:e=>`Clip ${e.clip}: un'animazione finisce a ${e.end}s, dopo la clip (lunga ${e.duration}s); i tempi delle animazioni sono relativi all'inizio della clip`,keyframesOrder:e=>`Clip ${e.clip}: i tempi dei keyframe devono crescere da 0 a 1`,animationValue:e=>`Clip ${e.clip}: valori sbagliati per l'animazione di ${e.prop}: "color" vuole colori esadecimali, ogni altra proprietà vuole numeri`,fontMissing:e=>`La clip di testo ${e.clip} non ha un font e fonts[] è vuoto: metti un file di font sotto assets/, dichiaralo in fonts[] e imposta fontFamily`,unknownFont:e=>`La clip ${e.clip} usa il font "${e.family}", che non è in fonts[]: metti il file del font sotto assets/ e dichiaralo in fonts[]`,fontNotAsset:e=>`Font ${e.family}: ${e.src} deve essere un file di font (.ttf, .otf, .woff, .woff2) sotto assets/`,layerNotHtml:e=>`Clip ${e.clip}: ${e.src} deve essere un file .html sotto layers/`,mediaNotAsset:e=>`Clip ${e.clip}: ${e.src} deve essere un file sotto assets/`,assetMissing:e=>`${e.path} non è nella cartella della composizione: aggiungi il file o correggi il percorso`,assetsTooLarge:e=>`La cartella della composizione pesa ${e.sizeMB} MB, oltre il limite di ${e.maxMB} MB: comprimi, accorcia o togli dei media`,sizeMismatch:e=>`Dimensione ${e.width}×${e.height}, ma ${e.format} è ${e.expectedWidth}×${e.expectedHeight}: imposta width e height alla dimensione del formato`,durationOverMax:e=>`La durata di ${e.duration}s supera il massimo di ${e.max}s per ${e.format}: accorcia la composizione`,stillForVideo:e=>`${e.format} è un video: la durata deve essere maggiore di 0`,durationForImage:e=>`${e.format} è un'immagine: imposta la durata a 0 (fotogramma singolo), non ${e.duration}s`,layerNetwork:e=>`${e.file}, riga ${e.line}: ${e.api} non è ammesso, i livelli html non hanno rete: metti i file sotto assets/ e usali con percorsi relativi`,layerWorker:e=>`${e.file}, riga ${e.line}: ${e.api} non è ammesso nei livelli html: esegui il codice nel livello stesso`,layerAudio:e=>`${e.file}, riga ${e.line}: ${e.api} non è ammesso nei livelli html: metti il suono su una traccia audio della composizione`,layerAutoplay:e=>`${e.file}, riga ${e.line}: nei livelli html i media non devono partire da soli (${e.api}): usa una clip video o audio della composizione`,jsonMissing:"composition.json manca o non si può leggere in sicurezza: scrivi la composizione come file normale nella cartella della composizione",folderUnreadable:e=>`La cartella della composizione non si può leggere in sicurezza (${e.path}): togli link, hard link e file speciali, e resta nei limiti`,ambiguousNames:e=>`Due file della cartella della composizione hanno lo stesso nome una volta normalizzato in Unicode (${e.path}): rinominane uno`,durationOffBrief:e=>`La composizione dura ${e.duration}s, ma ne erano stati chiesti circa ${e.target}: correggi la durata e le scene`,vectorShape:e=>`Logo, favicon e icona app sono composizioni vettoriali: ${e.reason}`,logoDarkMissing:'Il logo non ha la versione negativa per sfondi scuri: aggiungi un secondo clip svg con "id": "dark", "hidden": true, a tutto quadro, "fit": "contain" e un file suo (es. assets/logo-dark.svg): lo stesso disegno con i colori per uno sfondo scuro',svgRefused:e=>`${e.file} è stato rifiutato dal controllo SVG: ${e.reason}`,svgText:e=>`${e.file} contiene testo: convertilo in tracciati, altrimenti cambia aspetto dove il font non è installato`,svgRefusedSummary:e=>`${e.file} non ha passato il controllo di sicurezza degli SVG (${e.count} ${e.count===1?"motivo":"motivi"})`,svgRefusedDetails:"Dettagli"},editor:{locked:e=>`La clip ${e.clip} è bloccata: sbloccala per modificarla`,unknownClip:e=>`Non c'è nessuna clip ${e.clip}`,unknownTrack:e=>`Non c'è nessuna traccia ${e.track}`,unknownScene:e=>`Non c'è nessuna scena ${e.scene}`,unknownParam:e=>`La clip ${e.clip} non ha il parametro ${e.key}`,badProp:e=>`Clip ${e.clip}: ${e.key} non si può modificare qui`,badValue:e=>`Clip ${e.clip}: il valore di ${e.key} non è valido`,badParam:e=>`Clip ${e.clip}: il valore di ${e.key} non è adatto al parametro`,badAsset:e=>`${e.path} non è un file di questa composizione in assets/`,badFont:e=>`${e.family}: un font deve essere un file .ttf, .otf, .woff o .woff2 in assets/`,fontExists:e=>`Il font ${e.family} è già nella composizione`,wrongType:e=>`Questa modifica non vale per una clip ${e.type} (${e.clip})`,stillTiming:"Un fotogramma singolo non ha linea del tempo: tempi, scene e animazioni non valgono",customAnimation:e=>`La clip ${e.clip} ha un'animazione personalizzata nello slot ${e.slot}: chiedi all'agente di cambiarla`,badOrder:"Il nuovo ordine delle scene deve elencare ogni scena una volta",sceneOrderBlocked:e=>`Le scene non si possono riordinare: la clip ${e.clip} non sta dentro una sola scena`,readOnly:"Qui le modifiche non sono disponibili: questa vista è di sola lettura",invalid:e=>`La modifica renderebbe la composizione non valida (${e.path})`,badWeight:e=>`Clip ${e.clip}: ${e.family} non ha il peso ${e.weight} (ha ${e.declared})`,badOp:"Questa modifica non è supportata",itemText:e=>`testo di ${e.name}`,itemStyle:e=>`stile di ${e.name}`,itemLayout:e=>`posizione di ${e.name}`,itemTiming:e=>`tempi di ${e.name}`,itemMedia:e=>`file di ${e.name}`,itemFlags:e=>`visibilità di ${e.name}`,itemSceneDuration:e=>`durata della scena ${e.n}`,itemSceneOrder:"ordine delle scene",itemAnimation:e=>`animazione di ${e.name}`,itemParam:e=>`${e.name} ${e.key}`,itemFont:e=>`font ${e.family}`,itemSvg:e=>{const t=[...e.colors>0?[e.colors===1?"1 colore cambiato":`${e.colors} colori cambiati`]:[],...e.texts>0?[e.texts===1?"1 testo":`${e.texts} testi`]:[],...e.hidden>0?[e.hidden===1?"1 elemento mostrato o nascosto":`${e.hidden} elementi mostrati o nascosti`]:[]];return t.length>0?`${e.name}: ${t.join(", ")}`:`contenuto SVG di ${e.name}`},summary:e=>`Modifiche dirette: ${e.items}${e.more>0?` e altre ${e.more}`:""}`,stageNoSession:"Quest'anteprima è terminata: riapri l'editor",stagingBusy:"Un file di questa bozza è ancora in preparazione: salva di nuovo quando è pronto.",stageTimeout:e=>`La preparazione di ${e.file} ha richiesto troppo tempo (oltre ${e.minutes} min): prova un video più corto o più piccolo.`,stageNotRegistered:e=>`${e.file} non è tra gli Asset del progetto`,stageUnreadable:e=>`${e.file} non si può leggere in modo sicuro: deve essere un file normale dentro la cartella assets del progetto`,stageUnsupported:e=>`${e.file} non si può usare in una composizione: usa un file immagine, SVG, video, audio o font`,stageNotMedia:e=>`${e.file} non è un file multimediale leggibile`,stageTooLarge:e=>`${e.file} supera i ${e.maxMB} MB`,stageTooMany:e=>`Una bozza può aggiungere al massimo ${e.max} file: salvala prima come nuova versione`,stageUnknownBrandFont:"Questo font non è nel brand kit",stageBrandFontNoFile:e=>`${e.family} non ha un file del font nel brand kit`,stagedCollision:e=>`${e.path} esiste già in questa composizione con un altro contenuto: aggiungi di nuovo il file`,stageSvgBadBase:e=>`${e.file} non è un SVG di questa composizione: riapri l'editor`,summaryNone:"Modifiche dirette",busy:"L'agente o un render sta lavorando su questa creatività: salva la bozza quando ha finito",unchanged:e=>`Nessuna modifica: ${e.format} è uguale alla v${e.n}, quindi non è stata salvata una versione nuova.`,baseChanged:e=>`${e.format} è cambiato in v${e.n} mentre lo modificavi: riapri l'editor sull'ultima versione (la bozza resta finché non la scarti)`,carryFailed:e=>`${e.format} in v${e.n} non è più la composizione registrata: chiedi all'agente di rifarlo prima di salvare`,saveInvalid:e=>`La bozza non si può salvare: ${e.text}`,srcUnavailable:e=>`Clip ${e.clip}: ${e.path} non è un file di questa versione né un file aggiunto a questa bozza`,fontUnavailable:e=>`Font ${e.family}: ${e.path} non è un file di questa versione né un file aggiunto a questa bozza`,htmlChanged:e=>`Clip ${e.clip}: il suo livello HTML può cambiarlo solo l'agente`,htmlNew:e=>`Clip ${e.clip}: le clip HTML può aggiungerle solo l'agente`,layersChanged:"I file dei livelli HTML può cambiarli solo l'agente"},render:{jobLabel:e=>`Render · ${e.title} v${e.n}`,exportJobLabel:e=>`Render per l'export · ${e.title} v${e.n} (${e.detail})`,qualityNames:{standard:"Standard",high:"Alta",max:"Massima"},fpsName:e=>`${e.fps} fps`,exportSubtitlesDrawn:e=>`sottotitoli ${e.lang}`,exportNoSubtitles:"senza sottotitoli",notV2:e=>`v${e.n} non ha composizioni da renderizzare: i suoi file media sono il risultato`,formatsNotInVersion:e=>`Formati non presenti in questa versione: ${e.list}`,noRenderer:"Il render non è disponibile in questo Motion Studio",noBrowser:"Nessun Chromium per il render: installa Google Chrome, oppure scarica Chrome for Testing dal controllo di sistema",compositionChanged:e=>`${e.format}: la composizione è cambiata dopo il salvataggio della versione, quindi non è stata renderizzata`,compositionProblems:e=>`${e.format}: la composizione ha dei problemi: ${e.list}`,formatFailed:e=>`${e.format}: ${e.reason}`,someFailed:e=>`Render non riuscito: ${e.list}`,mediaNotNormalised:e=>`${e.format}: non è stato possibile preparare ${e.src} per il render; viene usato così com'è e alcuni suoi fotogrammi potrebbero essere sfasati di uno`,hdrApproximate:e=>`${e.format}: ${e.src} è una sorgente HDR; i suoi colori sono approssimati nel render e nell'anteprima`,frameWarnings:e=>`${e.format}: ${e.count} fotogrammi video provengono da una sorgente di cui non si è potuto verificare il timing`,outputProblems:e=>`${e.format}: il render ha dei problemi: ${e.list}. Rifai il render, o correggi la composizione`,identitySvgRefused:e=>`${e.format}: l'SVG è stato rifiutato, non è stato rasterizzato nulla: ${e.list}`,identityOpaqueWhite:e=>`${e.format}: lo sfondo della composizione è trasparente e il brand non ha un colore primario, quindi le icone che non possono essere trasparenti sono su bianco`,identitySafeZone:e=>`${e.file}: il ${e.pct}% del disegno è fuori dalla zona sicura e la maschera potrebbe tagliarlo`,identitySvgText:e=>`${e.file}: l'SVG contiene testo; convertilo in tracciati, altrimenti cambia aspetto dove il font non è installato`,identitySetFailed:e=>`${e.format}: non è stato possibile creare il set di file: ${e.reason}`},export:{jobLabel:e=>`Export · ${e.title}`,invalidProfile:"Scegli una risoluzione e una qualità tra quelle offerte da Export",profileWithLanguages:"Con altre lingue i video si esportano alla dimensione del formato e in qualità Alta: scegli queste, o esporta le altre lingue a parte",absoluteDestination:"Scegli una cartella di destinazione (percorso assoluto)",outsideWorkspace:"Scegli una cartella fuori dal workspace di Motion Studio",destinationIsFile:"La destinazione è un file, non una cartella",cannotWrite:e=>`Impossibile scrivere nella cartella ${e.path}`,interrupted:e=>`Esportazione interrotta: ${e.reason}. File già copiati: ${e.count} in ${e.path}`,nothingToExport:e=>`Nessun output da esportare per v${e.n}`,invalidFormats:"Scegli almeno un formato da esportare",formatsNotInVersion:e=>`Formati non disponibili in questa versione: ${e.list}`,diskFull:"spazio su disco esaurito",permissionDenied:"permesso negato",quotaExceeded:"quota di spazio esaurita",nameTooLong:"nome del file troppo lungo",writeError:"errore di scrittura",invalidPicks:"Scegli almeno un formato da esportare, ognuno con un numero di versione",pickFollower:e=>`${e.format} segue ${e.primary}: si esporta con la versione ★ di ${e.primary}, non si può scegliere da solo`,pickNoFile:e=>`v${e.n} non ha un file ${e.format} da esportare`,filesMissing:e=>`Questi file mancano o non si possono leggere in sicurezza, non è stato esportato nulla: ${e.list}`,nameCollision:e=>`Due formati avrebbero lo stesso nome di file (${e.list}): aggiungi {format} allo schema dei nomi`,nameEmpty:"Lo schema dei nomi dà un nome di file vuoto",followMismatch:e=>`${e.format} segue ${e.primary}: non si può esportare dalla v${e.n} mentre ${e.primary} si esporta dalla v${e.p}`,invalidDestination:"Scegli una cartella di destinazione",invalidDate:"Data di esportazione non valida (AAAA-MM-GG)",invalidPattern:"Lo schema dei nomi non è valido (al massimo 200 caratteri)",subtitlesMissing:e=>`Non ci sono sottotitoli in ${e.lang} da esportare`,subtitlesPair:e=>`I sottotitoli in ${e.lang} seguono la voce del video in ${e.video}: vanno solo con quel video (esportalo, o scegli un'altra lingua)`,subtitlesStill:e=>`${e.format}: un'immagine fissa non ha sottotitoli, è stata esportata senza`,subtitlesNoTrack:e=>`${e.format}: il video non ha la traccia dei sottotitoli, quindi i sottotitoli in ${e.lang} non sono stati disegnati (chiedi all'agente di aggiungerli)`,subtitlesNoSoft:e=>`${e.format}: questo file non può contenere tracce di sottotitoli, quindi sono state tralasciate`,subtitlesSoftStore:e=>`${e.format}: un'anteprima per l'App Store non porta tracce di sottotitoli, quindi sono state tralasciate`,renderFailed:e=>`Questi formati non si sono potuti renderizzare, non è stato esportato nulla: ${e.list}`,renderProblems:e=>`${e.item} (renderizzato con problemi: ${e.list})`,renderProblemsOnly:e=>`Non è stato esportato nulla: ${e.list}`,groupSkipped:e=>`${e.format} (variante ${e.variant} v${e.n}): ${e.reason}`,groupReason:{missing:"il file manca o non si può leggere in sicurezza",notRendered:"non ha un render aggiornato",problems:"il render ha dei problemi",noTranslation:e=>`nessuna traduzione aggiornata in ${e.locale}`,renderFailed:e=>`il render non è riuscito: ${e.reason}`,renderProblems:e=>`renderizzato ora con problemi: ${e.list}`}},jobs:{regenerateRequest:"Rigenera tutti i formati partendo dal brief aggiornato.",pinsOnlyRequest:"Applica i commenti puntuali.",attachmentsOnlyRequest:"Usa i file allegati.",queuedFilesGone:"Una richiesta in coda è stata tolta: aveva solo file allegati, e non sono più negli Asset.",addFormatsRequest:e=>`Aggiungi i formati ${e.formats} riusando i sorgenti esistenti in work/ e lo stesso stile della versione ${e.n}.`,renderCommandWas:e=>`Il comando di render della versione ${e.n} era: ${e.command}.`,regenerateFormatsRequest:e=>`Rigenera ${e.formats} partendo dal brief aggiornato.`,addedFollowers:e=>`Aggiunti ${e.formats} usando ${e.primary} (v${e.n})`,noAgentNeeded:"senza agente",layerWarnings:e=>`Controlli consigliati dei livelli html: ${e.list}`,strayRemoved:e=>`L'agente ha scritto file che Motion Studio crea da sé; sono stati rimossi: ${e.list}`,followerUnlinked:e=>`${e.follower} non può più seguire ${e.primary} (${e.reason}): è scollegato, anche se questo turno viene annullato, e in questo turno riceve una versione dedicata.`,copyFailed:e=>`${e.format}: Motion Studio non è riuscito a mettere il suo file in questa versione`,carriedChanged:e=>`${e.format}: il file di v${e.n} non è quello registrato per quella versione, quindi non può essere mantenuto invariato`,copyChangedAfter:e=>`${e.format}: il file è cambiato dopo la copia di Motion Studio`,copyUnverified:e=>`${e.format}: il file copiato da Motion Studio non può essere verificato (non è leggibile come file normale)`,earlierOutputsChanged:e=>`Attenzione: durante questo turno sono cambiati file di versioni precedenti (${e.list}). La loro cronologia registrata non cambia; controllali prima di esportare.`,convertingLegacy:"Conversione al formato modificabile · costa più token questa volta",earlierLinksDetached:e=>`Attenzione: alcuni file di versioni precedenti avevano un secondo nome sul disco (un hard link) attraverso cui questo turno avrebbe potuto modificarli (${e.list}). Motion Studio li ha staccati prima dell'avvio dell'agente, quindi le versioni precedenti restano in sola lettura.`,workspacePathGlob:"Attenzione: il percorso della cartella di lavoro contiene [ ] * o ?. Su macOS la sandbox non può impedire all'agente di spostare e poi rimettere a posto le cartelle che contengono i registri di Motion Studio, quindi Motion Studio le controlla dopo ogni esecuzione; su Linux la sandbox non le protegge affatto. Sposta la cartella di lavoro in un percorso senza questi caratteri.",protectedFilesTampered:e=>`Errore: durante questa esecuzione sono stati modificati, aggiunti o eliminati file che Motion Studio non cambia mai da solo (${e.list}). Configurano git o l'agente e vengono eseguiti fuori dalla sandbox. Il turno è stato fermato prima di salvare e il progetto è bloccato (niente agente, niente git) finché quei file non tornano com'erano prima dell'esecuzione (poi si sblocca da solo), o finché non accetti la modifica nella pagina del progetto se l'hai fatta tu.`,protectedFilesChangedBetweenRuns:e=>`Errore: dall'ultima esecuzione dell'agente sono stati modificati, aggiunti o eliminati file che Motion Studio non cambia mai da solo (${e.list}), per esempio da un processo rimasto attivo. Configurano git o l'agente e vengono eseguiti fuori dalla sandbox, quindi l'agente non è stato avviato e il progetto è bloccato (niente agente, niente git) finché quei file non tornano com'erano (poi si sblocca da solo), o finché non accetti la modifica nella pagina del progetto se l'hai fatta tu.`,integrityCheckFailed:"Errore: Motion Studio non è riuscito a controllare i file protetti del progetto dopo questa esecuzione. Il turno è stato fermato prima di salvare e il progetto è bloccato (niente agente, niente git) finché i file non si possono controllare e non sono com'erano prima dell'esecuzione.",recordFoldersMoved:e=>`Avviso: dopo questa esecuzione c'è un file o una cartella inattesi nelle cartelle che contengono i registri di Motion Studio (${e.list}). Controlla di cosa si tratta; la cronologia della chat e le versioni delle creatività lì dentro sono con ogni probabilità a posto.`,logHistoryRewritten:e=>`Attenzione: durante questa esecuzione sono state modificate o rimosse righe precedenti di ${e.list}. Quella cronologia non è più quella registrata da Motion Studio.`,workspaceSettingsReverted:"Attenzione: le impostazioni dell'area di lavoro (.studio/settings.json) sono cambiate mentre l'agente lavorava senza sandbox. Motion Studio le ha rimesse com'erano. Se la modifica era tua, rifalla ora dalle impostazioni.",workspaceSettingsNotReverted:"Attenzione: le impostazioni dell'area di lavoro (.studio/settings.json) sono cambiate mentre l'agente lavorava senza sandbox, e Motion Studio non è riuscito a rimetterle com'erano. Finché non salvi di nuovo le impostazioni, Motion Studio continua a usare quelle di prima (sandbox, conferme e opzioni).",settingsHoldBroken:"Motion Studio non è riuscito a conservare la sua copia protetta delle impostazioni dell'area di lavoro: un agente potrebbe averle cambiate senza che si vedesse. Gli agenti senza sandbox sono rifiutati finché non controlli le impostazioni e le salvi nell'app.",settingsAdjusted:"Motion Studio ha reso più restrittive alcune impostazioni dell'area di lavoro dopo che un agente senza sandbox le aveva cambiate. Controllale nelle impostazioni e salva per confermarle.",settingsHeldFields:e=>`Campi interessati: ${e.fields}.`,settingsHoldStuck:e=>`Motion Studio non riesce a togliere il suo vecchio record in ${e.path}: se è bloccato, togli prima la spunta “Bloccato” da Ottieni informazioni nel Finder, poi toglilo tu e salva di nuovo le impostazioni.`,protectedLinksDetached:e=>`Attenzione: alcuni registri di Motion Studio avevano un secondo nome sul disco (un hard link), quindi potevano essere modificati a sua insaputa (${e.list}). Motion Studio li ha staccati e ne ha tenuto il contenuto così com'era, che potrebbe essere già stato modificato.`,followerNotDelivered:e=>`${e.follower} non è stato consegnato: non può seguire ${e.primary} (${e.reason}). Non è più collegato, quindi il prossimo turno ne fa una versione dedicata.`,versionFolderUnsafe:e=>`La cartella outputs/v${e.n} non è una cartella della creatività (un collegamento?): la versione non può essere salvata`,updateProjectCommit:"Progetto aggiornato",brandKitCommit:"Brand kit aggiornato",guidelinesCommit:"Linee guida aggiornate",addGoogleFontCommit:e=>`Aggiungi font Google Fonts ${e.family}`,addSourceCommit:"Aggiungi sorgente brand",removeSourceCommit:"Rimuovi sorgente brand",syncSourcesCommit:"Allinea sorgenti brand ai riferimenti",uploadAssetsCommit:e=>`Carica ${e.count} asset`,registerAssetsCommit:"Registra asset",deleteAssetCommit:e=>`Elimina asset ${e.file}`,saveReferenceCommit:e=>`Salva ${e.file} negli Asset`,referenceOnlyCommit:e=>`${e.file}: solo per la sua creatività`,deleteReferencesCommit:e=>`Elimina ${e.count===1?"1 riferimento":`${e.count} riferimenti`} delle creatività`,uploadReferencesCommit:e=>`Carica ${e.count} riferimenti`,deleteReferenceCommit:e=>`Elimina riferimento ${e.file}`,createProjectCommit:e=>`Crea progetto ${e.name}`,updateAssetCommit:e=>`Aggiorna asset ${e.file}`,renameAssetRecoveredCommit:"Completa una rinomina di asset interrotta",renameAssetCommit:e=>`Rinomina asset ${e.from} in ${e.to}`,updateReferenceCommit:e=>`Aggiorna riferimento ${e.file}`,turnLabel:e=>`Turno · ${e.name}`,briefLabel:e=>`${e.name} · brief con l'agente`,videoAnalysisLabel:e=>`Analisi video · ${e.file}`,subtitlesLabel:e=>`Sottotitoli · ${e.title}`,subtitlesTranslateLabel:e=>`Sottotitoli · ${e.title} · ${e.lang}`,creativeLabel:e=>`Creatività · ${e.title}`,localizeLabel:e=>`Traduzione · ${e.title}`,localizeStarted:e=>`Traduzione della v${e.n} in ${e.locales}`,localizeNothingToDo:e=>`v${e.n}: tutte le traduzioni richieste sono già aggiornate`,localizeChecking:e=>`${e.count===1?"1 problema di traduzione":`${e.count} problemi di traduzione`} da correggere: tentativo ${e.attempt} di ${e.max}`,localizeDone:e=>`Traduzioni della v${e.n} salvate: ${e.list}`,localizeOpenProblems:e=>`${e.count===1?"Resta aperto 1 problema di traduzione":`Restano aperti ${e.count} problemi di traduzione`}: vedi il pannello Lingue`,localizeCommit:e=>`${e.title}: traduzioni della v${e.n}`,localizeVersionChanged:e=>`Attenzione: durante il turno di traduzione sono cambiati file del progetto (${e.list}). Un turno di traduzione legge soltanto: controlla queste modifiche se non le ha fatte nessun altro.`,voicesNotGenerated:e=>`Voci tradotte non generate (${e.reason}): ${e.locales} tengono la voce originale`,brandAnalysisLabel:"Analisi brand",assetDescriptionLabel:"Descrizione asset",assetGenerationLabel:e=>`Generazione · ${e.kind}`,conflict:"Lo stesso lavoro è già in coda o in corso. Riprova quando è finito.",briefUpdatedCommit:e=>`${e.title}: brief aggiornato`,variantsAddedCommit:e=>`${e.title}: varianti ${e.letters}`,variantRequestWillStop:"Questa richiesta verrà fermata appena parte (rimozione dalla coda non riuscita)",variantsRolledBackCommit:e=>`${e.title}: aggiunta di varianti annullata`,groupChatMergedCommit:e=>`${e.title}: le chat delle varianti unite in una`,variantGroupCommit:e=>`${e.title}: varianti`,creativeArchivedCommit:e=>`${e.title}: archiviata`,creativeUnarchivedCommit:e=>`${e.title}: ripristinata dall'archivio`,creativeDeletedCommit:e=>`${e.title}: spostata nel Cestino`,variantSeedRequest:e=>`Partita dalla variante ${e.letter}, versione ${e.n}`,variantBriefDeferred:"Il brief è cambiato mentre questa variante lavorava: il brief nuovo vale dalla sua prossima richiesta",groupLabel:e=>`${e.title} · agente`,groupFailed:e=>`L'agente non ha potuto rispondere: ${e.text}`,groupReportFailed:e=>`Il lavoro sulle varianti è finito, ma l'agente non ha potuto scrivere la risposta: ${e.text}`,groupHelperNotStarted:e=>`La variante ${e.letter} non è partita: ${e.error}`,groupInterruptedQueued:"Il turno dell'agente si è interrotto alla chiusura di Motion Studio prima di partire: il messaggio è tornato in cima alla coda (Esegui il prossimo lo avvia).",groupInterrupted:"Il turno dell'agente si è interrotto alla chiusura di Motion Studio. Manda di nuovo il messaggio per continuare.",variantDirectionsLabel:e=>`Direzioni delle varianti · ${e.title}`,variantDirectionsDone:e=>`Direzioni proposte dall'agente: ${e.list}`,variantDirectionsRetry:e=>`Le direzioni proposte non erano valide: le richiedo (tentativo ${e.attempt} di ${e.max})`,restartCommit:e=>`${e.title}: ripartenza da v${e.n}`,stateCommit:e=>`${e.title}: stato`,versionStateCommit:e=>`${e.title}: v${e.n} · stato`,noOutputChanged:e=>`Nessun video o immagine è cambiato: nessuna versione nuova, resta la v${e.n}.${e.brief?" Il brief è aggiornato.":""}`,noOutputChangedCommit:e=>`${e.title}: nessuna versione nuova (v${e.n} invariata)`,removedUnsaved:e=>`Rimossi ${e.count} file non salvati in una versione`,restartedFrom:e=>`Ripartenza dalla versione ${e.n}: il prossimo messaggio lavora su quella base.`,codebaseNotRepo:e=>`Codebase ${e.path} non controllabile (non è un repository git): eventuali modifiche non verrebbero rilevate`,codebaseCheckFailed:e=>`Codebase ${e.path}: controllo delle modifiche non riuscito, eventuali modifiche non verrebbero rilevate`,codebaseChanged:e=>`Attenzione: la codebase ${e.path} risulta modificata durante il turno. Controlla le modifiche.`,checkingOutputs:e=>`Controllo output: ${e.count} problemi. Chiedo una correzione (tentativo ${e.attempt} di ${e.max}).`,requestFromBrief:"Generazione dal brief",lateCancel:e=>`Annullamento arrivato a lavoro quasi concluso: la versione v${e.n} è stata salvata.`,lateCancelKept:e=>`Annullamento arrivato a lavoro quasi concluso: nessuna versione nuova, resta la v${e.n}.`,generationFailed:e=>`Generazione non riuscita: ${e.text}`,cancelledNote:"Generazione annullata.",brandKitUnreadable:e=>`Brand kit non leggibile: ${e.detail}`,guidelinesUnreadable:e=>`Linee guida non leggibili: ${e.detail}`,assetListUnreadable:e=>`Elenco asset non leggibile: ${e.detail}`,referenceListUnreadable:e=>`Elenco riferimenti non leggibile: ${e.detail}`,codebaseIgnored:e=>`Codebase ignorata (${e.path}): ${e.reason}`,codebaseMissing:e=>`Codebase non trovata, ignorata in questo turno: ${e.path}`,codebaseSecretScanTruncated:"La codebase è molto grande: i file segreti oltre le prime 50.000 voci sono esclusi solo dai modelli dei nomi",brandCodebaseSkipped:e=>`Codebase lasciata fuori dall'analisi (${e.path}): ${e.reason}`,brandCodebaseNotCheckable:e=>`La codebase ${e.path} non si può controllare (non è un repository git): una modifica fatta dall'analisi passerebbe inosservata`,brandCodebaseCheckFailed:e=>`Codebase ${e.path}: il controllo delle modifiche non è riuscito, una modifica fatta dall'analisi passerebbe inosservata`,brandCodebaseChanged:e=>`L'analisi ha modificato la codebase ${e.path}: la proposta è stata scartata. Controlla le modifiche in quella cartella.`,brandCodebaseChangedFiles:e=>`File modificati in ${e.path}: ${e.list}`,brandCodebaseCheckFailedAfter:e=>`Il controllo della codebase ${e.path} dopo l'analisi non è riuscito: la proposta è stata scartata, perché non si può escludere una modifica.`,brandCodebaseCheckFailedBefore:e=>`La codebase ${e.path} non si poteva controllare prima dell'analisi ma ora sì: il controllo non è riuscito e la proposta è stata scartata, perché non si può escludere una modifica.`,brandCodebaseChangedUnknown:e=>`File modificati in ${e.path}: git non ha saputo dire quali`,brandSecretsToolRulesOnly:"Senza sandbox: in questa analisi l'agente non esegue comandi, e i file segreti della codebase sono esclusi solo dalle regole dei suoi strumenti sui file, non dal sistema operativo",interruptedError:"Il lavoro è stato interrotto (app chiusa durante la generazione).",interruptedNote:"Lavoro interrotto: Motion Studio è stato chiuso durante la generazione. Invia un messaggio per riprendere."},live:{tooLong:e=>`Il messaggio è troppo lungo: al massimo ${e.max} caratteri.`,tooManyLive:e=>`Al massimo ${e.max} messaggi per turno: mettilo in coda per dopo, o aspetta la fine del turno.`,queueFull:e=>`In coda possono aspettare al massimo ${e.max} richieste: togline una o aspetta che parta la prossima.`,emptyMessage:"Scrivi un messaggio o aggiungi un pin.",notQueued:"Questa richiesta non è più in coda (è partita o è stata tolta).",queueChanged:"Nel frattempo la coda è cambiata: ricaricala e riprova.",queueEmpty:"Non ci sono richieste in coda.",queuedAfterFinish:"Arrivato quando l'agente aveva finito: messo in coda come prossima richiesta.",redirectUnsupported:"Questo lavoro non si può reindirizzare: è disponibile solo Stop.",notRunning:"Il lavoro non è più in corso.",consoleLiveOff:"I messaggi durante un turno della console richiedono i messaggi dal vivo, che sono spenti: invialo a turno finito.",consoleTurnOver:"Il turno della console è già finito: invialo come nuovo messaggio.",wordsNotDelivered:"Il tuo messaggio non è arrivato all'agente.",stoppedSessionUnavailable:"La sessione del turno fermato non è più disponibile: si riprende dalla sessione dell'ultima versione.",queuedPinsVersionGone:e=>`I commenti fissati di questa richiesta erano sulla versione ${e.n}, che non esiste più: arrivano all'agente come testo, senza fotogrammi.`},formats:{"instagram-post-1x1":"Post 1:1","instagram-post-4x5":"Post 4:5","instagram-reel-9x16":"Story/Reel 9:16","instagram-image-1x1":"Immagine 1:1","instagram-image-4x5":"Immagine 4:5","tiktok-9x16":"Video 9:16","youtube-16x9":"Video 16:9","youtube-4k-16x9":"Video 4K 16:9","youtube-shorts-9x16":"Shorts 9:16","youtube-thumbnail":"Thumbnail","facebook-feed-1x1":"Feed 1:1","facebook-feed-4x5":"Feed 4:5","facebook-story-9x16":"Story 9:16","facebook-cover":"Cover","linkedin-1x1":"Post 1:1","linkedin-4x5":"Post 4:5","linkedin-16x9":"Video 16:9","linkedin-banner":"Banner","x-16x9":"Video 16:9","x-1x1":"Post 1:1","pinterest-2x3":"Pin 2:3","web-hero-16x9":"Hero 16:9","web-banner-300x250":"Banner 300×250","web-banner-728x90":"Banner 728×90","web-banner-160x600":"Banner 160×600","og-image-1200x630":"Anteprima social (Open Graph)","identity-logo":"Logo","identity-favicon":"Favicon per siti","identity-app-icon":"Icona app","appstore-iphone-69":'Screenshot iPhone 6.9"',"appstore-iphone-65":'Screenshot iPhone 6.5"',"appstore-ipad-13":'Screenshot iPad 13"',"appstore-preview":"App Preview","appstore-icon":"Icona","playstore-feature":"Feature graphic","playstore-phone-9x16":"Screenshot telefono 9:16","playstore-tablet":"Screenshot tablet","playstore-icon":"Icona","playstore-promo-16x9":"Video promo 16:9"},channels:{instagram:"Instagram",tikTok:"TikTok",youTube:"YouTube",facebook:"Facebook",linkedIn:"LinkedIn",x:"X",pinterest:"Pinterest",web:"Web",appStore:"App Store",playStore:"Play Store",identity:"Identità",custom:"Personalizzati"},variants:{rtlUnsupported:"Le lingue da destra a sinistra non sono ancora supportate: servirebbe specchiare l'impaginazione, mentre in una traduzione cambiano solo testo e voce",duplicatedRequest:e=>`Duplicato ${e.label}`,duplicateBusy:"L'agente o un render stanno lavorando su questa creatività: duplica il formato quando hanno finito",instancesFull:e=>`${e.format} ha già ${e.max} copie: rimuovine una prima di duplicarlo ancora`,formatNotInVersion:e=>`${e.format} non è nella v${e.n}: apri una versione che lo contiene per duplicarlo`,localeUnsupported:e=>`"${e.tag}" non è una delle lingue supportate`,localeRtl:e=>`"${e.tag}": le lingue da destra a sinistra non sono ancora supportate: servirebbe specchiare l'impaginazione, mentre in una traduzione cambiano solo testo e voce`,localeNotInBrief:e=>`${e.tag} non è una delle lingue di questa creatività: aggiungila prima nel brief`,instanceUnknown:e=>`${e.format} non è un formato della v${e.n}`,localizationNotFound:e=>`Nessuna traduzione ${e.locale} di ${e.format} nella v${e.n}`,localizationBusy:"L'agente sta lavorando su questa creatività: modifica la traduzione quando ha finito",localizationInvalid:e=>`Impossibile salvare la traduzione: ${e.detail}`,localizationMismatch:e=>`"${e.entry}" non è un testo traducibile di questo formato`,localizationUnusable:e=>`La traduzione ${e.locale} di ${e.format} non corrisponde più alla sua composizione`,textOverflow:e=>`La traduzione di "${e.clip}" esce dal suo riquadro, anche al ${e.fit}% della dimensione`,fallbackFontUnavailable:e=>`Font di ripiego non disponibile: impossibile scaricare ${e.family}, alcuni caratteri potrebbero apparire in un font di sistema`,tooManyFonts:"La traduzione richiede più file di font di quanti una composizione ne possa avere",voiceFileInvalid:e=>`La voce tradotta di "${e.clip}" non è un file di questa versione`,renderNeedsForce:e=>`Queste traduzioni hanno problemi aperti o testi superati: ${e.list}. Scegli "Renderizza comunque" per proseguire`,localizationMissing:e=>`Nessuna traduzione da renderizzare per: ${e.list}`,localeStale:e=>`${e.count} superati`,textOverflowMeasured:e=>`La traduzione di "${e.clip}" esce dal suo riquadro nel render, al ${e.fit}% della dimensione`,sourceLayoutOverflow:e=>`Il testo originale di "${e.clip}" esce già da qui (dal suo riquadro, dal fotogramma o dalla zona sicura): va corretto nell'originale`,sourceTextOverflow:e=>`Il testo originale di "${e.clip}" esce dal suo riquadro nel render: appare non tradotto o non aggiornato, quindi va corretto nell'originale`,renderCheckFailed:e=>`${e.file} è stato renderizzato ma non si è potuto controllare`,assetChanged:e=>`${e.file} è cambiato da quando Motion Studio l'ha creato o aggiunto per questa traduzione: traduci di nuovo (o ripristina il file) prima del render`,staleEntry:e=>`Il testo originale di "${e.clip}" è cambiato dopo la traduzione: si vede nella lingua originale finché non lo traduci di nuovo`,notTranslated:e=>`"${e.clip}" non è ancora tradotto`,voiceTooLong:e=>`La voce tradotta di "${e.clip}" dura ${e.voice.toFixed(1).replace(".",",")} s, più della sua clip (${e.clipSec.toFixed(1).replace(".",",")} s): serve un testo più corto`,voiceDurationUnknown:e=>`Non si è potuta misurare la durata della voce tradotta di "${e.clip}"`,voiceFailed:e=>`La voce tradotta di "${e.clip}" non si è potuta generare: ${e.reason}`,voiceNoScript:e=>`Impossibile tradurre la voce di "${e.clip}" (${e.format}): non ha un testo noto, quindi tiene la voce originale`,voiceFallbackReason:{off:"il servizio voce è spento per questa creatività",noKey:"manca la chiave del servizio voce",missingPermission:"la chiave non ha il permesso di sintesi vocale",declined:"la conferma è stata rifiutata",failed:"la generazione non è riuscita"},localizeNoCompositions:e=>`La v${e.n} non ha composizioni da tradurre`,submitNotInTurn:e=>`${e.locale} · ${e.format} non è richiesto in questo turno`,voiceNotTranslatable:e=>`"${e.clip}" non è una clip voce con un testo noto`,voicesNotInTurn:e=>`In questo turno le voci non si traducono per ${e.locale}: lascia vuoto voiceScripts`,fitWithoutText:e=>`Il fit di "${e.clip}" richiede il suo testo tradotto`,storePack:{title:"Pacchetto store",appStore:"App Store",googlePlay:"Google Play",goal:e=>`Screenshot App Store e Google Play per ${e.app}`,notStorePack:"Questa creatività non è un pacchetto store",foreignFormat:e=>`Non sono formati di questo pacchetto store: ${e.list}`,collision:e=>`Non c'è più posto per altre istanze di ${e.list} (al massimo 20): togli un formato di quel tipo e riprova`,badInstances:"Le istanze del pacchetto store non corrispondono ai suoi formati",second:"Una creatività ha un solo pacchetto store: per cambiarlo o toglierlo si usa il campo storePack, non il brief intero",useEntry:"Il pacchetto store si imposta con il campo storePack (la voce Pacchetto store), non con il brief intero",lastFormats:"Il pacchetto store è l'ultimo formato della creatività: aggiungi un altro formato prima di toglierlo",screenNotImage:e=>`${e.file} non è un'immagine degli Asset del progetto`,check:{notImage:"non è un file PNG o JPEG",unreadable:"il file non si può leggere",wrongSize:e=>`${e.width}×${e.height} invece di ${e.expectedWidth}×${e.expectedHeight}`,hasAlpha:"ha un canale alfa (trasparenza), che lo store rifiuta",notVideo:"non è un video leggibile",codec:e=>`codec video ${e.codec}: lo store richiede H.264`,fps:e=>`${Math.round(e.fps*100)/100} fps: l'App Store ne richiede ${e.expected}`,duration:e=>`dura ${e.seconds.toFixed(1).replace(".",",")} s: le anteprime App Store durano da ${e.min} a ${e.max} s`,noAudio:"manca la traccia audio: l'App Store la richiede",tooLarge:e=>`${e.sizeMB} MB: il limite è ${e.maxMB} MB`,noTranslation:e=>`manca la traduzione ${e.locale}`,renderFailed:e=>`il render non è riuscito: ${e.reason}`,renderProblems:e=>`il render ha problemi: ${e.list}`,copyFailed:e=>`non si è potuto copiare: ${e.reason}`,notRendered:"non renderizzato",notInVersion:e=>`non è nella versione ${e.n}`,notInGroup:"nessuna variante ha questo formato",tooFewScreenshots:e=>`${e.count} screenshot: lo store ne chiede almeno ${e.min}`,tooManyScreenshots:e=>`screenshot ${e.count}: lo store ne accetta al massimo ${e.max}`},readme:{title:e=>`${e.app}: pacchetto App Store e Google Play`,made:e=>`Creato da Motion Studio il ${e.date} dalla versione ${e.version}.`,madeGroup:e=>`Creato da Motion Studio il ${e.date} dalla selezione finale del gruppo di varianti.`,limits:e=>`Limiti degli store (controllati il ${e.date} sulle pagine pubbliche di Apple e Google):`,appStoreShots:e=>`Screenshot App Store: PNG o JPEG senza trasparenza, da ${e.min} a ${e.max} per dimensione di dispositivo (${e.sizes}).`,appStorePreview:e=>`Anteprima app App Store: H.264, esattamente ${e.fps} fps (Apple accetta fino a ${e.fps}; Motion Studio renderizza e controlla ${e.fps}), da ${e.min} a ${e.max} secondi, con traccia audio (AAC), fino a ${e.maxMB} MB, fino a ${e.perDevice} per dimensione di dispositivo.`,playShots:e=>`Screenshot Google Play: PNG senza trasparenza o JPEG, da ${e.min} a ${e.max} per tipo di dispositivo, lati da ${e.minSide} a ${e.maxSide} px (${e.sizes}).`,playFeature:e=>`Feature graphic Google Play: ${e.size}, PNG senza trasparenza o JPEG.`,sources:"Fonti:",order:"Ordine di caricamento:",orderAppStore:"App Store Connect: per ogni lingua, carica gli screenshot di ogni cartella di dispositivo nell'ordine dei nomi (01, 02, …): i primi si vedono per primi.",orderPreview:'App Store Connect: carica preview.mp4 come anteprima app del display iPhone 6.9".',orderPlay:"Google Play Console: per ogni lingua, carica gli screenshot di telefono e tablet nell'ordine dei nomi, poi feature-graphic.png.",playVideoTitle:"Video Google Play:",playVideo:"Google Play non accetta un file video: carica promo-video.mp4 su YouTube (pubblico o non in elenco, annunci disattivati) e incolla il link YouTube nella scheda dello store. Solo i primi 30 secondi partono da soli.",failedTitle:"File non esportati:",notInPackTitle:"Non fanno parte del pacchetto (formati store scelti a mano, non esportati):"}}},pairing:{openFromLink:"Apri Motion Studio dal link mostrato nel terminale"},keyChecks:{refused:"Il servizio ha rifiutato la richiesta: premi Prova di nuovo o controlla la chiave e i suoi permessi",timeout:e=>`Nessuna risposta entro ${e.seconds} s`,network:"Servizio non raggiungibile",status:e=>`Il servizio ha risposto ${e.status}`,rateLimited:"Troppe richieste: riprova più tardi"},providers:{unreachable:e=>`${e.provider} non raggiungibile: ${e.detail}`,invalidKey:e=>`Chiave ${e.provider} non valida o senza permessi`,rateLimited:e=>`Limite di richieste raggiunto per ${e.provider}: riprova più tardi`,responded:e=>`${e.provider} ha risposto ${e.status}: ${e.detail}`,fileTooLarge:e=>`File troppo grande da ${e.provider}`,invalidResponse:e=>`Risposta non valida da ${e.provider}`,blockedAddress:"Indirizzo non consentito per il download",tooManyRedirects:"Troppi reindirizzamenti",unsplashNoVideo:"Unsplash non offre video: usa Pexels",invalidStockId:"Identificativo di stock non valido",noPexelsVideo:"Nessun file video scaricabile su Pexels",photoBy:e=>`Foto di ${e.author} su ${e.provider}`,videoBy:e=>`Video di ${e.author} su ${e.provider}`,invalidFontName:"Nome del font non valido",invalidFontWeights:"Pesi del font non validi",fontNotFound:e=>`Font "${e.family}" non trovato su Google Fonts`,textTooLong:e=>`Testo troppo lungo per ${e.provider} (massimo ${e.max} caratteri)`,invalidVoice:"Voce non valida",noVoice:"Nessuna voce disponibile su ElevenLabs",invalidImageSize:"Dimensioni immagine non valide",invalidAssetsFolder:"Cartella degli asset non valida",optionInvalid:e=>`${e.label} non valido`,optionQuality:"Qualità",optionBackground:"Sfondo",optionOrientation:"Orientamento",optionProvider:"Provider",configureKey:e=>`Configura la chiave ${e.provider} nelle Impostazioni di Motion Studio`,referencesTooLarge:"Riferimenti troppo grandi",invalidReference:e=>`Riferimento non valido: ${e.file}`,describeImage:"Descrivi l'immagine da generare",nearestSize:"Dimensione supportata più vicina: ridimensiona o ritaglia l'immagine se serve",writeText:"Scrivi il testo da leggere",imageTag:"immagine",voiceTag:"voce",soundTag:"effetto sonoro",musicTag:"musica",audioAttribution:e=>`Generato con AI (${e.provider})`,promptRequired:"Descrivi il suono da generare",promptTooLong:e=>`Descrizione troppo lunga (massimo ${e.max} caratteri)`,durationOutOfRange:e=>`Durata fuori intervallo (da ${e.min} a ${e.max} secondi)`,voiceAttribution:e=>`Voce generata con AI (${e.provider})`,searchWhat:"Indica cosa cercare",fontsAttribution:"Google Fonts · OFL / Apache 2.0",fontsLicense:"Google Fonts: licenza OFL o Apache 2.0, uso commerciale consentito",invalidDestination:"Destinazione non valida: usa assets/brand/<nome> per immagini e loghi o assets/fonts/<nome> per i font (png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf)",invalidUrl:"URL non valido: indica un indirizzo http(s) completo",siteFontsLimit:e=>`inspect_site_fonts si può usare al massimo ${e.max} volte per analisi`,codebaseImport:{outside:()=>"la sorgente non è dentro una delle codebase dell'analisi (o il suo percorso reale ne esce)",secret:()=>"la sorgente è un file segreto (o sta in una cartella segreta): non viene mai aperta",notFile:()=>"la sorgente non è un file regolare (o è cambiata mentre veniva letta)",tooBig:e=>`il file supera ${e.max} MB`,extension:()=>"si copiano solo file png, jpg, jpeg, webp, gif, svg, ico, avif, woff, woff2, ttf, otf, con la stessa estensione nella destinazione",dest:()=>"destinazione non valida: usa assets/brand/<nome> per immagini e loghi o assets/fonts/<nome> per i font",limit:e=>`import_codebase_file si può usare al massimo ${e.max} volte per analisi`,missing:()=>"il file sorgente non esiste"},accessDenied:e=>`${e.host} ha negato l'accesso al file (${e.status})`,unknownAuthor:"autore sconosciuto",unrestorableEdit:e=>`L'agente ha provato a modificare direttamente ${e.file}: modifica non annullabile`,revertedEdit:e=>`L'agente ha provato a modificare direttamente ${e.file}: modifica annullata`,turnEnded:e=>`Turno terminato con esito ${e.subtype}`,claudeExited:e=>`claude è terminato con codice ${e.code} senza risultato`,claudeNotFound:e=>`Comando claude non trovato (${e.bin}). Installa Claude Code o controlla il Doctor.`,claudeCannotStart:e=>`Impossibile avviare claude: ${e.detail}`,projectFolderMissing:e=>`Cartella del progetto non trovata: ${e.path}`,serviceOff:{images:"Le immagini sono disattivate nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi",voice:"La voce è disattivata nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi",music:"La musica è disattivata nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi",sfx:"Gli effetti sonori sono disattivati nel brief di questo creativo: dillo all'utente, che può cambiarlo con il pulsante Servizi"},serviceFor:{images:"le immagini",voice:"la voce",music:"la musica",sfx:"gli effetti sonori"},serviceStockOnly:"Questo creativo usa solo immagini stock: usa stock_search e stock_download invece di generate_image",serviceNoKey:e=>`Il brief di questo creativo sceglie ${e.provider} per ${e.service}, ma la chiave ${e.provider} non è impostata: aggiungila nelle Impostazioni di Motion Studio, oppure l'utente può cambiare il servizio con il pulsante Servizi`,serviceOverridden:e=>`Il brief di questo creativo sceglie ${e.provider} per ${e.service}: usato al posto di ${e.requested}`,serviceMissingPermission:e=>`La chiave ${e.provider} non si può usare per ${e.service}: ${e.permission?`le manca il permesso ${e.permission}. Di' all'utente di sistemare la chiave nelle impostazioni di Motion Studio (e di provarla di nuovo)`:`${e.provider} ha rifiutato la chiave o la richiesta senza indicare un permesso (può essere anche una restrizione di area, organizzazione o firewall presso il fornitore). Di' all'utente di verificarlo con ${e.provider} e nelle impostazioni di Motion Studio (e di provare di nuovo la chiave)`}, oppure di cambiare il servizio con il pulsante Servizi`,serviceVoicesUnused:"Il brief di questo creativo sceglie OpenAI per la voce: le voci ElevenLabs non si possono usare, quindi non c'è nulla da elencare",voiceDropped:e=>`La voce ${e.voice} è una voce ${e.owner} e questa voce fuori campo usa ${e.provider}: non è stata usata, al suo posto c'è ${e.brand?`la voce ${e.provider} del brand`:`la voce predefinita di ${e.provider}`}`,voiceWrongProvider:e=>`La voce ${e.voice} non è una voce ${e.provider}: scegline una fra le voci ${e.provider}`},issues:{id:"identificativo non valido (minuscole, cifre e trattini)",manualRef:"le fonti manuali devono avere ref: null",websiteRefRequired:"le fonti da sito richiedono un indirizzo http(s) come ref",websiteRefInvalid:"le fonti da sito devono avere un indirizzo http(s) come ref",imageRefRequired:"le fonti da immagine richiedono un percorso relativo come ref",imageRefInvalid:"le fonti da immagine devono avere un percorso relativo come ref",weights:"pesi non validi (numeri interi da 100 a 900)",nameRequired:"nome obbligatorio",nameTooLong:"nome troppo lungo (massimo 60 caratteri)",hex:"hex non valido (usa #RRGGBB)",role:"ruolo non valido",familyRequired:"famiglia obbligatoria",familyTooLong:"famiglia troppo lunga (massimo 80 caratteri)",maxWeights:"al massimo 9 pesi",variant:"variante non valida",background:"sfondo non valido",textRequired:"testo obbligatorio",textTooLong:"testo troppo lungo (massimo 2000 caratteri)",duplicateIds:"id duplicati",siteSourceUrl:"le sorgenti da sito richiedono un indirizzo",siteSourceFile:"le sorgenti da sito devono avere file: null",imageSourceFile:"le sorgenti immagine richiedono un file",imageSourceUrl:"le sorgenti immagine devono avere url: null",codebaseRefRequired:"le fonti da codebase richiedono come ref un percorso relativo alla codebase",codebaseRefInvalid:"le fonti da codebase devono avere un percorso relativo come ref",codebaseSourcePath:"le sorgenti da codebase richiedono il percorso della cartella",codebaseSourcePathInvalid:"la cartella della codebase deve essere un percorso assoluto, non la radice del disco",codebaseSourceUrl:"le sorgenti da codebase devono avere url: null",codebaseSourceFile:"le sorgenti da codebase devono avere file: null",pathOnlyCodebase:"solo le sorgenti da codebase hanno un percorso di cartella o una nota",maxCodebaseSources:"al massimo 5 sorgenti da codebase",duplicateSourceIds:"id delle sorgenti duplicati",relativePath:'percorso non valido (deve essere relativo, senza ".." o "\\")',httpOnly:"solo indirizzi http(s)",duplicateFiles:"file duplicati",fileName:"nome file non valido",duplicatePresetIds:"id dei preset duplicati",customVideoEven:"un video vuole un numero pari di pixel per lato",customVideoMax:"un video ha al massimo 4096 pixel per lato",domain:"dominio non valido (es. api.esempio.it o *.esempio.it)",fileInvalid:"file non valido",sourceInvalid:"fonte non valida",duplicateFormats:"lo stesso formato due volte",noFormats:"almeno un formato",emptyFill:"almeno un campo da scrivere",labelNotInFormats:"un'etichetta per un formato che non è nel brief",briefWithPartial:"un brief completo non può essere inviato insieme a formati o etichette",badLocales:"lingue non valide (senza ripetizioni, e la lingua principale non è tra quelle extra)",duplicateStores:"lo stesso store due volte",storePackIphone:`l'App Store richiede gli screenshot iPhone 6.9"`,storePackPhone:"Google Play richiede gli screenshot del telefono",storePackScreenshots:"il numero di screenshot è fuori da ciò che gli store scelti accettano",badAssetPath:"percorso non valido (deve essere un file in assets/)",missingValue:"valore mancante o non valido"},brandFields:{colors:"colore",fonts:"font",logos:"logo",dos:"cosa da fare",donts:"cosa da evitare",tone:"tono di voce",photoStyle:"stile fotografico"},desktop:{menu:{edit:"Modifica",undo:"Annulla",redo:"Ripeti",cut:"Taglia",copy:"Copia",paste:"Incolla",selectAll:"Seleziona tutto",view:"Vista",reload:"Ricarica",fullScreen:"Schermo intero",resetZoom:"Zoom predefinito",zoomIn:"Ingrandisci",zoomOut:"Riduci",window:"Finestra",minimize:"Riduci a icona",close:"Chiudi",help:"Aiuto",restartToUpdate:"Riavvia per aggiornare",github:"Motion Studio su GitHub"},attachedGoneMessage:"Il Motion Studio a cui l'app era collegata si è chiuso.",attachedGoneRestart:"Riavvia",attachedGoneQuit:"Chiudi",renderRunningMessage:e=>e.count===1?"Un render è ancora in corso":`${e.count} render sono ancora in corso`,renderRunningDetail:"Uscendo li fermi: non resta nulla a metà, e potrai rifarli più tardi.",renderRunningQuit:"Ferma ed esci",renderRunningKeep:"Continua il render",draftUnsavedMessage:e=>e.count===1?"Hai modifiche non salvate nell'editor":`Hai modifiche non salvate in ${e.count} editor`,draftUnsavedDetail:"Uscendo le scarti. Continua a modificare per salvarle prima come nuova versione.",draftUnsavedQuit:"Scarta ed esci",draftUnsavedKeep:"Continua a modificare",draftReloadDetail:"Ricaricando le scarti. Continua a modificare per salvarle prima come nuova versione.",draftReloadDiscard:"Scarta e ricarica",invalidRequest:"Richiesta non valida",invalidPath:"Percorso non valido",alreadyRunning:e=>`Motion Studio è già avviato (porta ${e.port})`,updateAvailable:e=>`È disponibile Motion Studio ${e.version}: riavvia per aggiornare`,updateCheckFailed:e=>`Controllo aggiornamenti non riuscito: ${e.detail}`},cli:{help:`Uso: npx @motion-studio/cli [--port 4317] [--no-open]
8
8
  npx @motion-studio/cli --print-url
9
9
  (se installato: motion-studio [--port 4317] [--no-open])
10
10
 
11
11
  Avvia Motion Studio in locale e apre il browser.
12
12
  --print-url mostra l'indirizzo (con il codice di accesso) del Motion Studio già avviato.
13
- Variabili: MOTION_STUDIO_CONFIG_DIR, MOTION_STUDIO_CLAUDE_COMMAND (array JSON)`,invalidPort:e=>`Porta non valida: ${e.value}`,unknownOption:e=>`Opzione sconosciuta: ${e.option}`,invalidOptionValue:e=>`Valore non valido per ${e.option}`,unexpectedArgument:e=>`Argomento inatteso: ${e.arg}`,notRunning:"Motion Studio non è in esecuzione: avvialo con motion-studio",alreadyRunning:e=>`Motion Studio è già avviato: ${e.url}`,running:e=>`Motion Studio è attivo su ${e.url}`,openManually:e=>`Apri manualmente ${e.url}`,closeFailed:e=>`Chiusura non riuscita: ${e.detail}`,portInUse:e=>`La porta ${e.port} è già in uso: riprova con --port <altra>`},agentActions:{afterTurn:"dalla fine di questo turno",briefDuration:e=>`Durata del brief: ${e.from} → ${e.to}`,durationNone:"nessuna",seconds:e=>`${e.n} s`,briefGoal:"Obiettivo del brief aggiornato",briefMessage:"Messaggio chiave del brief aggiornato",briefNotes:"Note del brief aggiornate",briefServices:e=>`Servizi del brief: ${e.list}`,formatAdded:e=>`Formato aggiunto al brief: ${e.format}`,formatMadeNext:e=>`${e.formats}: si crea al prossimo turno`,languageAdded:e=>`Lingua aggiunta al brief: ${e.language} · tradotta dopo questo turno`,duplicateQueued:e=>`Dopo questo turno: duplica ${e.format}`,formatsNamed:e=>`Nomi dei formati: ${e.list}`,duplicateDone:e=>`Formato duplicato: ${e.format} (v${e.n})`,variantAdded:e=>`Nuova variante ${e.letter}: ${e.direction}`,variantDiscarded:e=>`Variante ${e.letter} scartata`,variantRestored:e=>`Variante ${e.letter} ripristinata`,pickSet:e=>`★ di ${e.format}: ${e.version}`,pickQueued:e=>`Dopo questo turno: ★ di ${e.format} sulla nuova versione`,renderStarted:e=>`Render avviato: v${e.n} · ${e.formats}`,renderQueued:e=>`Dopo questo turno: render di ${e.formats}`,allFormats:"tutti i formati",exportQueued:"Dopo questo turno: render di ciò che serve all'export ★",exportNothing:"L'export ★ non ha bisogno di render: apri Esporta per salvare i file",exportRendering:e=>`Render di ${e.count===1?"1 formato":`${e.count} formati`} per l'export ★; poi apri Esporta per salvare i file`,dropped:e=>`Non eseguito, perché il turno non ha salvato una versione o è stato fermato: ${e.list}`,failed:e=>`${e.action}: non eseguito (${e.reason})`,limit:e=>`Al massimo ${e.max} azioni sull'app per turno`,nothingToChange:"Niente da cambiare: indica almeno un campo",formatUnknown:e=>`Formato sconosciuto: ${e.format}`,formatInBrief:e=>`${e.format} è già nel brief: per un secondo usa duplicate_format`,formatIdentity:"I formati identità (logo, favicon, icona app) si scelgono quando si crea la creatività",namesRefused:e=>`Nessun nome dato ai formati: ${e.list}`,nameUserNamed:"nome dato dall'utente: è suo, non cambiarlo mai",nameNotInBrief:"non è nel brief",nameGroupNamed:"ha già un nome: in un gruppo di varianti solo l'agente con cui parla l'utente rinomina un formato",nameEmpty:"nome vuoto",primaryNeeded:"Il brief non ha ancora lingue: indica anche la lingua principale (primary)",languageInBrief:e=>`${e.language} è già nel brief`,discardNotPointed:e=>`L'utente non ha indicato la variante ${e.letter}: chiedi quale variante scartare (AskUserQuestion) prima di scartarla`,helperGroupAction:"Lavori su una variante per l'agente con cui parla l'utente: aggiungere, scartare o ripristinare varianti e la ★ di un'altra variante sono azioni sue",variantInPlan:e=>`La variante ${e.letter} ha lavoro in questo turno: resta com'è finché il turno non è finito`,groupPickNeedsVariant:"Indica la variante e una sua versione salvata (l'agente del gruppo non ha versioni proprie)",groupRenderNeedsVariant:"Indica la variante e una sua versione salvata",currentOwnOnly:'"current" è la versione che questo turno sta facendo: vale solo per la tua variante',incompleteDuration:e=>`v${e.n} è incompleta: il video dura ${e.duration} s, il brief dice ${e.target} s. Cambia la durata nel brief (la versione viene ricontrollata subito, senza un nuovo turno) oppure chiedi all'agente di accorciarlo.`,incompleteOther:e=>`v${e.n} è incompleta: ${e.count===1?"è rimasto 1 problema":`sono rimasti ${e.count} problemi`} dopo le correzioni automatiche. Sono elencati nella versione: chiedi all'agente di correggerli, oppure modifica la composizione nell'editor.`,recheckComplete:e=>`v${e.n} ricontrollata con la durata del brief (${e.target}): ora è completa.`,recheckPartial:e=>`v${e.n} ricontrollata con la durata del brief (${e.target}): ${e.formats} ora vanno bene; restano altri problemi.`,recheckCommit:e=>`${e.title}: v${e.n} ricontrollata con il brief`},web:{identity:{start:"Partenza",fromBrand:"Dal logo del brand",fromScratch:"Da zero",sourceCodebase:"da codebase",fromBrandHint:"L’agente adatta il logo del brand (margini, versione semplificata per le dimensioni piccole) senza ridisegnarlo.",noBrandLogo:"Il brand non ha ancora un logo: l’agente ne disegnerà uno nello stile del brand.",name:"Nome o sigla",namePlaceholder:"Es. Acme o AC",keywords:"Parole chiave di stile (facoltative)",keywordsPlaceholder:"Es. geometrico, amichevole, deciso",colors:"Colori",colorsBrand:"Dal brand",colorsFree:"Liberi",view:"Vista",viewImage:"Immagine",viewSizes:"Dimensioni",sizesTitle:"Dimensioni",sizesIntro:"Ogni file del set alla sua dimensione reale, e come appare l’icona dove viene usata.",zoomed:"Ingrandisci",oneToOne:"1:1",fileSize:e=>`${e.name}, ${e.w}×${e.h} px`,noPreview:"Nessuna anteprima",contexts:"In contesto",browserTab:"Scheda del browser",iosIcon:"Icona iOS",androidIcon:"Icona adattiva Android",maskableIcon:"Icona web maskable",safeZone:"Zona sicura",safeZoneNote:e=>`Il cerchio tratteggiato è la zona sicura (${e.pct}% dell’icona): tieni il segno al suo interno.`,warnings:"Avvisi",onLight:"Su chiaro",onDark:"Su scuro",noDarkLogo:"Rigenera per avere il logo negativo",noDarkLogoTip:"Questa versione del logo non ha la versione negativa per gli sfondi scuri: su scuro si vede il logo principale.",logoSides:e=>`${e.label} su sfondo chiaro e su sfondo scuro`,useAsLogo:"Usa come logo del brand",useAsLogoOf:e=>`Usa ${e.label} come logo del brand`,useAsLogoTitle:"Usare come logo del brand?",useAsLogoBody:"Il logo viene copiato negli Asset del progetto e aggiunto al kit del brand. Se il kit ha già un logo del tipo scelto, quello passa in secondo piano (da principale a secondario, da icona ad altro). Il kit cambia subito, senza una proposta da approvare.",useAsLogoDarkNote:"Insieme al logo viene aggiunta la sua versione negativa, per gli sfondi scuri.",useAsLogoAs:"Aggiungilo come",variantPrimary:"Logo principale",variantIcon:"Icona",useAsLogoConfirm:"Aggiungi al brand",useAsLogoDone:"Aggiunto al kit del brand",useAsLogoNotCommitted:"Aggiunto al kit del brand, ma la modifica non si è potuta salvare nella cronologia del progetto; si salverà con la prossima modifica",useAsLogoOpen:"Apri il brand",useAsLogoFailed:e=>`Impossibile aggiungere il logo al brand: ${e.detail}`},variantGroup:{discardedReadOnly:"Variante scartata: ripristinala per lavorarci",groupBy:"Raggruppa per",variant:"Variante",variants:"Varianti",identityVariantsHint:"Ogni variante ha logo, favicon e icona app coerenti tra loro: le confronti e ne scegli una.",format:"Formato",all:"Tutte",addVariant:"+ Variante",addVariantMenu:"Aggiungi variante",discard:"Scarta",restore:"Ripristina",showDiscarded:"Mostra scartate",viewLabel:"Vista delle varianti",viewChosen:"Scelte",viewAll:"Tutte le varianti",chosenTitle:"Scelte",noChoiceTitle:"Senza scelta",noChoiceHint:"Per questi formati la selezione finale prende la regola predefinita: sceglili in Selezione finale.",noVariantFile:"Nessuna variante ha ancora questo formato",useForAllFormats:"Usa questa variante per tutti i formati",finalSelection:"Selezione finale",missing:"mancante",letterLabel:e=>`Variante ${e.letter}`,count:e=>e.count===1?"1 variante":`${e.count} varianti`,discardRefused:{running:"Fermala prima di scartarla",lastActive:"È l'ultima variante attiva: tienine almeno una"},openVariant:"Apri questa variante",fieldHint:"Ogni variante è una direzione creativa diversa, con tutti i formati.",directionOf:e=>`Direzione della variante ${e.letter} (facoltativa)`,directionPlaceholder:"Es. minimale, molto spazio bianco",directionAuto:"Se la lasci vuota, la propone l'agente.",directionLimit:e=>`Al massimo ${e.max} caratteri`,groupFailed:e=>`La creatività è stata creata, ma non è stato possibile creare le varianti: ${e.detail}`,startFailed:e=>`La creatività è stata creata, ma le varianti non sono partite: ${e.detail}`,selectorLabel:"Invia a",singleHint:"Il messaggio va all'agente della creatività. Indica le varianti (B, «variante C», «tutte le varianti») o lascia un commento su una variante: se non le indichi, l'agente te lo chiede.",sendToHint:e=>`Il messaggio va alla variante ${e.letter}. La chat è la stessa per tutte le varianti.`,selectorAll:"Tutte",allHint:"La stessa richiesta parte in ogni variante attiva.",sentToAll:e=>e.count===1?"Richiesta inviata a 1 variante":`Richiesta inviata a ${e.count} varianti`,sentToAllRefused:e=>`Non partite: ${e.list}`,pinsNotSentToAll:"non inviati a Tutte",sendAllFailed:e=>`Impossibile inviare la richiesta alle varianti: ${e.detail}`,toolbarAria:"Varianti",groupByAria:"Raggruppa per",rowMenu:e=>`Opzioni della variante ${e.letter}`,exportVariant:"Esporta questa variante",editDirection:"Modifica direzione",directionSave:"Salva direzione",directionFailed:e=>`Impossibile salvare la direzione: ${e.detail}`,noDirection:"Ancora nessuna direzione",discarded:"Scartata",discardFailed:e=>`Impossibile scartare la variante: ${e.detail}`,restoreFailed:e=>`Impossibile ripristinare la variante: ${e.detail}`,layoutFailed:e=>`Impossibile cambiare il raggruppamento: ${e.detail}`,missingFolder:"La cartella di questa variante manca",orphanNotice:"Il gruppo di questa variante non si trova: si apre come creatività singola.",waiting:"In attesa",finalPick:e=>`${e.format} · Variante ${e.variant} · v${e.n}`,finalDefault:e=>`${e.format} · regola predefinita`,finalDefaultFrom:e=>`${e.format} · Variante ${e.variant} · v${e.n} · regola predefinita`,finalEmpty:"Nessun formato",finalHint:"Da dove arriva ogni formato dell'esportazione del gruppo. Senza ★ vale la regola predefinita della variante A.",starUse:e=>`Usa ${e.label} v${e.n} della variante ${e.variant} per l'esportazione`,starUsed:e=>`${e.label}: la variante ${e.variant} v${e.n} è scelta per l'esportazione`,choose:"Scegli",inChat:"In chat",inChatHint:"Chat, versioni e commenti sono di questa variante",chosen:"Scelta",readyBanner:e=>`${e.count} varianti pronte: scegli quella finale`,chooserHint:"Per ogni formato, clicca la variante da esportare. Un secondo clic sulla scelta torna alla regola predefinita.",chooserPick:e=>`${e.format}: variante ${e.variant}, v${e.n}`,chooserDefaultTag:"Regola predefinita",chooserNone:"Nessuna variante ha ancora questo formato.",cardFormats:e=>`Formati della variante ${e.letter}`,pickFailed:e=>`Impossibile salvare la scelta: ${e.detail}`,usedForAll:e=>`La variante ${e.letter} è ora scelta per tutti i formati`,useForAllFailed:e=>`Impossibile scegliere la variante: ${e.detail}`,addTitle:"Aggiungi una variante",addDirection:"Direzione (facoltativa)",addBase:"Parti da",addBaseBrief:"Il brief",addBaseOf:e=>`Variante ${e.letter}, versione ${e.n}`,addSubmit:"Aggiungi variante",addFailed:e=>`Impossibile aggiungere la variante: ${e.detail}`,listMissing:e=>`mancante: ${e.letters}`,stateLabel:e=>`Stato della variante ${e.letter}`,waitReasons:{"variant-directions":"in attesa delle direzioni","variant-confirm":"in attesa della conferma","variant-slot":"in coda: due varianti già al lavoro","video-long":"in attesa di conferma: video lungo","video-queue":"in coda: si sta analizzando un altro video del progetto","transcription-choice":"in attesa della scelta sulla trascrizione","transcription-check":"controllo del parlato nell'audio"}},theme:{aria:"Tema",system:"Sistema",light:"Chiaro",dark:"Scuro"},instances:{duplicate:"Duplica formato",duplicating:"Duplicazione…",duplicateHint:e=>`Duplica ${e.label} come nuovo formato di questa creatività`,duplicateFailed:e=>`Impossibile duplicare il formato: ${e.detail}`,duplicated:e=>`Duplicato: ${e.label}`,title:"Formati di questa creatività",hint:"Dai un’etichetta a ogni formato, cambia l’ordine o aggiungi di nuovo lo stesso formato.",list:"Formati scelti",labelOf:e=>`Etichetta di ${e.name}`,labelPlaceholder:"Etichetta (facoltativa)",dragHandle:e=>`Trascina per riordinare ${e.name}`,moveUp:e=>`Sposta ${e.name} su`,moveDown:e=>`Sposta ${e.name} giù`,addAnother:e=>`Aggiungi un altro ${e.name}`,addAnotherShort:"Aggiungi un altro",full:"Hai raggiunto il limite di 20 dello stesso formato",remove:e=>`Rimuovi ${e.name}`,removeTitle:e=>`Rimuovere ${e.name}?`,removeBody:"Le versioni salvate restano. Il formato non rientra nelle prossime generazioni.",removeConfirm:"Rimuovi",saveFailed:e=>`Impossibile salvare i formati: ${e.detail}`,invalidId:e=>`Il brief contiene il formato “${e.id}”, che non è più valido. Toglilo dall’elenco dei formati e salva di nuovo.`},codebase:{needAbsolute:"Indica un percorso assoluto",alreadyLinked:"Cartella già collegata",pickTitle:"Scegli la cartella da collegare",hint:"Le cartelle collegate sono in sola lettura. L'agente può leggerle; gli strumenti di modifica sono bloccati e le modifiche nei repository git vengono segnalate.",notFound:"Non trovata",noteFor:e=>`Nota per ${e.path}`,remove:e=>`Rimuovi ${e.path}`,pathAria:"Percorso assoluto della cartella",pathPlaceholder:"/Users/tuonome/dev/app",noteAria:"Nota (facoltativa)",notePlaceholder:"Es. app iOS, schermate in /Screens",link:"Collega"},questionUi:{title:"L’agente ti chiede",other:"Altro",otherPlaceholder:"Scrivi la tua risposta",multiHint:"Puoi sceglierne più di una",send:"Rispondi",skip:"Non rispondere",chooseFirst:"Scegli un’opzione o scrivi la tua risposta per ogni domanda",historyLabel:"Domanda dell’agente",yourAnswer:"La tua risposta",skipped:"Senza risposta",expired:"Scaduta senza risposta",cancelled:"Annullata: il turno è stato fermato"},approvalUi:{alreadyHandled:"Richiesta già gestita",generate:"Genera",deny:"Nega",allow:"Consenti",alwaysHere:"Sempre qui",alwaysRule:e=>`“Sempre qui” salva la regola ${e.rule}`,alwaysScope:e=>`Sempre qui consente: ${e.label} · solo in questo progetto`,alwaysSaved:e=>`Sempre consentito in questo progetto: ${e.label}`,showCommand:"Mostra il comando",hideCommand:"Nascondi il comando",showDetails:"Mostra i dettagli",hideDetails:"Nascondi i dettagli",fullCommand:"Comando completo",fullDetails:"Dettagli completi",lines:e=>e.count===1?"1 riga":`${e.count} righe`,scrollMore:"Scorri per leggerlo tutto",shortened:e=>`Accorciato da Motion Studio ai primi ${e.count} caratteri`,describe:{command:"L’agente vuole eseguire un comando su questo computer.",edit:"L’agente vuole modificare un file fuori dal progetto.",read:"L’agente vuole leggere un file fuori dal progetto.",web:"L’agente vuole aprire una pagina web.",tool:"L’agente vuole usare uno strumento che richiede il tuo permesso."},kinds:{command:"Comando",edit:"Modifica di file",read:"Lettura di file",web:"Pagina web",tool:"Strumento",provider:"Servizio esterno"},agentSays:e=>`L’agente dice: “${e.reason}”`,riskPrefix:e=>`${e.risk}:`,otherRisk:"Altro rischio",runsCommand:"Esegue un comando"},exportUi:{title:e=>`Esporta le versioni ★ di “${e.title}”`,heading:"Esporta le versioni ★",sub:e=>`“${e.title}”: ogni formato nella sua versione ★, pronto da pubblicare.`,format:"Formato",version:"Versione",include:e=>`Esporta ${e.label}`,star:e=>`★ v${e.n}`,groupHeading:"Esporta la selezione finale",groupSub:e=>`“${e.title}”: ogni formato dalla sua ★ nel gruppo, da qualunque variante.`,groupPick:e=>`Variante ${e.variant} · v${e.n}`,groupDefault:e=>`Variante ${e.variant} · v${e.n} · regola predefinita`,groupLoading:"Lettura della selezione finale…",groupLoadFailed:e=>`Impossibile leggere la selezione finale: ${e.detail}`,newer:e=>`v${e.n} più recente`,follows:e=>`segue ${e.primary}`,fileMissing:e=>`Il file di v${e.n} manca o non si può leggere in sicurezza`,noFollowerFile:e=>`La v${e.n} di ${e.primary} non ha un file per questo formato`,names:"Nomi dei file",pattern:"Schema dei nomi dei file",insertToken:e=>`Inserisci {${e.token}}`,preview:"Anteprima",previewLanguage:e=>`Anteprima, ${e.language}`,unknownVars:e=>`Le variabili sconosciute vengono omesse: ${e.list}`,emptyName:"Questo schema dà un nome di file vuoto",collision:e=>`Due formati avrebbero lo stesso nome di file (${e.list}). Aggiungi {format} allo schema.`,saveDefault:"Salva come predefinito",savedDefault:"Salvato come predefinito del workspace",saveFailed:e=>`Impossibile salvare il predefinito: ${e.detail}`,errors:{invalidPicks:"Scegli almeno un formato da esportare.",pickFollower:"Un formato che ne segue un altro si esporta con la versione ★ del suo principale: riapri Esporta e riprova.",pickNoFile:e=>`${e.detail}. Riapri Esporta per aggiornare l'elenco.`,followMismatch:e=>`${e.detail}. Riapri Esporta per aggiornare l'elenco.`,fileMissing:e=>`${e.detail}. Riapri Esporta per aggiornare l'elenco.`,nameCollision:e=>`Non è stato esportato nulla. ${e.detail}.`,nameEmpty:"Questo schema dà un nome di file vuoto.",invalidPattern:"Lo schema dei nomi non è valido (al massimo 200 caratteri).",invalidDestination:"Scegli una cartella di destinazione (un percorso assoluto).",invalidDate:"La data di esportazione non è valida: riapri Esporta e riprova."},saveTo:"Salva in",pickTitle:"Scegli la cartella di destinazione",choose:"Scegli…",folder:"Cartella di destinazione",placeholder:"/Users/tuonome/Consegna",lastUsed:"ultima usata",noFolder:"Nessuna cartella scelta",subtitles:{title:"Sottotitoli",files:"File .srt e .vtt",filesHint:"Accanto a ogni video, per YouTube, Vimeo, LinkedIn e i siti.",drawn:"Nel video",drawnHint:"Un video per lingua, con i sottotitoli disegnati nel loro stile.",soft:"Traccia nel file MP4",softHint:"Sottotitoli da attivare nel player, dentro il file del video.",cleanNote:"File e tracce vanno con un video senza sottotitoli disegnati.",previewDrawn:e=>`Nel video, ${e.language}`,previewDrawnOn:e=>`Video in ${e.video}, sottotitoli in ${e.language}`,drawnVideo:e=>`Video dei sottotitoli in ${e.language}`,voicedOnly:e=>`Segue la voce del video in ${e.language}: va solo con quel video, se lo esporti`,noTrackRow:"Non disegna i sottotitoli: non esportato"},noOverwrite:"I file esistenti non vengono mai sovrascritti",files:e=>e.count===1?"1 file":`${e.count} file`,run:e=>e.count===1?"Esporta 1 file":`Esporta ${e.count} file`,running:"Esportazione…",done:e=>e.count===1?"1 file esportato":`${e.count} file esportati`,skipped:e=>`Non esportati: ${e.list}`,renderProblems:e=>`Renderizzato con problemi: ${e.list}. Spuntalo per esportarlo comunque`,excluded:e=>`Non esportati perché il render ha dei problemi: ${e.list}`,excludedItem:e=>`${e.label} v${e.n} (${e.list})`,problemShort:{tooLarge:e=>`${e.size} MB invece di al massimo ${e.max} MB`,durationOffTarget:e=>`durata ${e.duration} s invece di ${e.target} s`,durationOverMax:e=>`durata ${e.duration} s, al massimo ${e.max} s`,badResolution:e=>`${e.size} invece di ${e.expected}`,notReadable:"il file non è leggibile",badExtension:e=>`.${e.ext} non ammessa`},resolution:"Risoluzione",resolutionOriginal:"Dimensione del formato",resolutionOption:e=>e.n===2160?"2160p (4K)":e.n===1440?"1440p (2K)":`${e.n}p`,frameRate:"Fotogrammi al secondo",frameRateOriginal:e=>e.fps===null?"Del formato":`${e.fps} fps (del formato)`,frameRateOption:e=>`${e.n} fps`,quality:"Qualità",qualityNames:{standard:"Standard",high:"Alta",max:"Massima"},qualityHints:{standard:"File più piccoli, come li faceva Motion Studio finora",high:"Testi e bordi nitidi: circa 8 Mbps a 1080p, come consiglia YouTube",max:"I file più grandi: ogni fotogramma senza perdita prima della codifica"},profileHint:"Solo i video: le immagini mantengono la loro dimensione",profileLocked:"Con altre lingue i video si esportano alla dimensione del formato e in qualità Alta",outputSize:e=>`→ ${e.size}`,background:"L’export continua in background: puoi chiudere questa finestra, ti avvisiamo quando i file sono nella cartella.",exportingPct:e=>`Esportazione ${e.pct}%`,renderingFirst:e=>`Render · ${e.pct}%`,copying:"Copia dei file…",cancelExport:"Annulla export",cancelled:"Export annullato",failed:e=>`Export non riuscito: ${e.detail}`,doneToast:e=>e.count===1?`1 file esportato in ${e.folder}`:`${e.count} file esportati in ${e.folder}`,doneNotification:"Export completato",doneLeftOut:e=>e.count===1?"1 non esportato: riapri Esporta per vedere perché.":`${e.count} non esportati: riapri Esporta per vedere perché.`,needsForceToast:e=>`Export interrotto: queste traduzioni hanno problemi aperti o testi superati: ${e.list}`,doneRow:e=>e.count===1?`1 file in ${e.folder}`:`${e.count} file in ${e.folder}`,cancelOf:e=>`Annulla ${e.label}`,showInFinder:"Mostra nel Finder",showInFolder:"Mostra nella cartella",finish:"Fatto",empty:"Ancora niente da esportare."},player:{audio:e=>`Lettore audio: ${e.name}`,video:e=>`Lettore video: ${e.name}`,play:"Riproduci",pause:"Pausa",position:"Posizione",positionText:e=>`${e.time} di ${e.total}`,waveform:"Forma d’onda",unplayable:"Questo file non si può riprodurre qui",keys:"Spazio avvia o ferma · ←/→ 5 s · Home/Fine"},library:{generate:{open:"Genera",title:"Genera un asset",tabs:"Cosa generare",kinds:{image:"Immagine",voice:"Voce narrante",sfx:"Effetto sonoro",music:"Musica"},providerLabel:"Provider",providerNames:{openai:"OpenAI",elevenlabs:"ElevenLabs"},providerLine:e=>`Prodotto da ${e.provider} (${e.model}).`,paidNote:"Ogni generazione è una chiamata a pagamento sul tuo account del provider: Motion Studio ti chiede prima la conferma e il risultato viene aggiunto agli Asset.",noKeyTitle:e=>`Aggiungi la chiave ${e.providers} per usare questa scheda.`,openSettings:"Apri le Impostazioni",noKeysAtAll:"Non c’è ancora nessuna chiave dei provider: non si può generare nulla.",prompt:"Descrizione",imagePlaceholder:"es. un’illustrazione piatta di un aeroplano di carta blu sopra una città",soundPlaceholder:"es. una porta di legno che sbatte, breve",musicPlaceholder:"es. pianoforte calmo con una crescita lenta",text:"Testo da leggere",textPlaceholder:"Le parole da dire, esattamente come scritte.",width:"Larghezza",height:"Altezza",sizeNote:"La dimensione viene portata alla più vicina supportata dal modello (fino a 3840 px).",quality:"Qualità",qualities:{auto:"Automatica",low:"Bassa",medium:"Media",high:"Alta"},voice:"Voce",voiceId:"ID della voce",voicePlaceholder:"Voce predefinita",brandVoice:e=>`Voce del brand: ${e.name}`,instructions:"Stile di lettura",instructionsPlaceholder:"es. calda e senza fretta",format:"Formato",duration:"Durata",sfxLimits:"Tra 0,5 e 30 secondi. Lascia vuoto per far scegliere al servizio.",musicLimits:"Tra 10 e 300 secondi.",seconds:"s",loop:"In loop",instrumental:"Solo strumentale",brandStyle:"Il testo parte dallo stile sonoro del brand; modificalo come vuoi.",name:"Nome del file",namePlaceholder:"Facoltativo",submit:"Genera",cancel:"Annulla",close:"Chiudi",stop:"Ferma",starting:"Avvio…",running:"Generazione in corso… Se una conferma è in attesa, la trovi nel centro attività.",done:"Aggiunto agli Asset.",failed:e=>`Generazione non riuscita: ${e.error}`,cancelled:"Generazione annullata.",errors:{promptRequired:"Descrivi cosa generare.",textRequired:"Scrivi il testo da leggere.",duration:e=>`Scegli una durata tra ${e.min} e ${e.max} secondi.`,size:"Inserisci larghezza e altezza."}},assets:{title:"Asset",filters:"Filtri degli asset",type:"Tipo",origin:"Origine",tags:"Tag",kinds:{all:"Tutti",image:"Immagini",svg:"Vettoriali",video:"Video",font:"Font",audio:"Audio",other:"Altro"},origins:{website:"Dal sito",upload:"Caricati",generated:"Generati",stock:"Stock","google-fonts":"Google Fonts",codebase:"Da codebase"},originShort:{website:"sito",upload:"caricato",generated:"generato",stock:"stock","google-fonts":"Google Fonts",codebase:"da codebase"},count:e=>`${e.shown} di ${e.total}`,selectedCount:e=>e.count===1?"1 selezionato":`${e.count} selezionati`,clearFilters:"Togli i filtri",search:"Cerca negli Asset",searchPlaceholder:"Cerca nomi, descrizioni, tag",upload:"Carica",uploadInput:"Carica file",dropTitle:"Trascina i file ovunque",dropBody:"Immagini, SVG, video, font, audio · fino a 200 MB ciascuno. Poi falli descrivere a Claude.",dropOverlay:e=>`Rilascia per aggiungere a ${e.project}`,refsGroup:"Creatività",refsFilter:"Riferimenti delle creatività",refsIntro:"File aggiunti dal computer nel brief di una creatività, solo per lei. Si eliminano con la creatività, a meno che non li salvi negli Asset.",refsEmpty:"Nessun riferimento delle creatività",refsEmptyBody:"Qui compaiono i file che aggiungi dal computer nel brief di una nuova creatività.",refsUsedBy:"Usato da",refsUnused:"Brief non ancora creato",saveToAssets:"Salva negli Asset",savedToAssets:e=>`${e.name} salvato negli Asset`,saveToAssetsFailed:e=>`Non è stato possibile salvarlo negli Asset: ${e.detail}`,uploading:"Caricamento…",uploaded:e=>e.count===1?"Caricato 1 file":`Caricati ${e.count} file`,uploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,describing:"Descrizione…",noDescription:"Ancora senza descrizione",undescribed:e=>e.count===1?"1 asset senza descrizione":`${e.count} asset senza descrizione`,describeMissing:e=>e.count===1?"Descrivilo":"Descrivili",allDescribed:"Ogni asset ha una descrizione",describeBusy:"Claude sta lavorando al brand di questo progetto. Descrivi quando ha finito.",describeFailed:e=>`La descrizione non è partita: ${e.detail}`,described:"Descrizioni aggiornate",select:e=>`Seleziona ${e.name}`,open:e=>`Apri ${e.name}`,more:e=>`+${e.count}`,selection:"Selezione",describeAgain:"Descrivi di nuovo",addTags:"Aggiungi tag",addTagsLabel:"Tag da aggiungere",addTagsPlaceholder:"Separati da virgola, es. logo, notte",addTagsApply:"Aggiungi",tagsAdded:e=>e.count===1?"Tag aggiunti a 1 asset":`Tag aggiunti a ${e.count} asset`,tagsFailed:e=>`Tag non salvati: ${e.detail}`,useInCreative:"Usa in una creatività",delete:"Elimina",clearSelection:"Annulla la selezione",deleted:e=>e.count===1?`${e.name} eliminato`:`${e.count} asset eliminati`,deleteFailed:e=>`Non eliminato: ${e.detail}`,undo:"Annulla",emptyTitle:"Ancora nessun asset",emptyBody:"Aggiungi loghi, immagini, font o video, poi falli descrivere a Claude. Ogni creatività del progetto può usarli.",noMatchTitle:"Nessun risultato",noMatchBody:"Prova un altro filtro o un’altra ricerca.",loadFailed:e=>`Impossibile caricare gli asset: ${e.detail}`,retry:"Riprova",listUnreadable:e=>`Impossibile leggere l’elenco degli asset: ${e.detail}. Correggi o rimuovi assets/assets.json nella cartella del progetto, poi riprova.`,unregistered:e=>e.count===1?"1 file nella cartella assets non è ancora negli Asset":`${e.count} file nella cartella assets non sono ancora negli Asset`,register:"Aggiungili",registerFailed:e=>`Non aggiunti: ${e.detail}`,sort:{label:"Ordina per",date:"Più recenti",name:"Nome",kind:"Tipo",duration:"Più lunghi"},durationBadge:e=>`Durata ${e.time}`,detail:{label:"Dettagli dell’asset",close:"Chiudi i dettagli",description:"Descrizione",descriptionHint:"Claude la legge · modificala liberamente",looking:"Claude lo sta guardando",descriptionPlaceholder:"Cosa mostra? Claude la legge quando sceglie gli asset.",tags:"Tag",addTag:"Aggiungi un tag",addTagPlaceholder:"+ Aggiungi",removeTag:e=>`Rimuovi ${e.tag}`,tagRules:"Fino a 30 tag di 40 caratteri",file:"File",size:"Dimensioni",added:"Aggiunto",source:"Fonte",credit:"Crediti",saved:"Salvato",rename:"Rinomina il file",renameLabel:"Nuovo nome del file",renameApply:"Rinomina",renameCancel:"Annulla",renameHint:"Stessa cartella · i riferimenti nel brand e nei brief seguono il nuovo nome",useAsProjectIcon:"Usa come icona del progetto",projectIconSet:"Icona del progetto aggiornata",projectIconFailed:e=>`Icona del progetto non cambiata: ${e.detail}`,renamed:e=>`Rinominato in ${e.name}`,renameFailed:e=>`Non rinominato: ${e.detail}`,duration:"Durata",fileSize:"Dimensione del file",waveformFailed:"La forma d’onda non è disponibile",saveFailed:e=>`Non salvato: ${e.detail}`,delete:"Elimina l’asset"}},references:{title:"Riferimenti",sub:"Ispirazione per lo stile. L’agente li legge; i render usano solo ciò che sta negli Asset.",addImages:"Aggiungi immagini",feeding:e=>e.count===1?"1 riferimento alimenta la prossima analisi del brand":`${e.count} riferimenti alimentano la prossima analisi del brand`,feedingHint:"attivalo per qualsiasi scheda con l’interruttore",analyze:"Analizza il brand con questi",analyzeFailed:e=>`L’analisi non è partita: ${e.detail}`,brandAnalysis:"Analisi del brand",useForBrand:e=>`Usa ${e.name} per l’analisi del brand`,notePlaceholder:"Aggiungi una nota per l’agente",noteFor:e=>`Nota per ${e.name}`,remove:e=>`Rimuovi ${e.name}`,removed:"Riferimento rimosso",removeFailed:e=>`Non rimosso: ${e.detail}`,saveFailed:e=>`Non salvato: ${e.detail}`,undo:"Annulla",emptyTitle:"Ancora nessun riferimento",emptyBody:"Aggiungi immagini che raccontano lo stile che vuoi. L’agente le legge e possono alimentare l’analisi del brand.",dropOverlay:"Rilascia le immagini per aggiungerle ai riferimenti",uploading:"Caricamento…",uploaded:e=>e.count===1?"Aggiunto 1 riferimento":`Aggiunti ${e.count} riferimenti`,uploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,loadFailed:e=>`Impossibile caricare i riferimenti: ${e.detail}`,retry:"Riprova",listUnreadable:e=>`Impossibile leggere l’elenco dei riferimenti: ${e.detail}. Correggi o rimuovi references/references.json nella cartella del progetto, poi riprova.`}},projectSettings:{sections:"Sezioni delle impostazioni del progetto",nav:{general:"Generali",agent:"Agente e approvazioni",internet:"Accesso a internet",code:"Codice collegato"},everyProject:"Valida per tutti i progetti",retry:"Riprova",undo:"Annulla",general:{title:"Generali",sub:"Claude legge il nome e la descrizione in ogni lavoro di questo progetto.",name:"Nome del progetto",description:"Descrizione",descriptionPlaceholder:"Di cosa parla questo progetto?",save:"Salva",saved:"Salvato",saveFailed:e=>`Non salvato: ${e.detail}`,nameRequired:"Il progetto ha bisogno di un nome",icon:{title:"Icona del progetto",sub:"Si vede nella pagina Progetti e accanto al nome del progetto. Automatica: l’icona dell’app, la favicon o un logo quadrato del brand.",label:"Icona del progetto",auto:"Automatica",initials:"Iniziali",images:"Immagini dagli Asset",saved:"Icona aggiornata",failed:e=>`Icona non cambiata: ${e.detail}`}},agent:{title:"Agente e approvazioni",sub:"Cosa può fare Claude in questo progetto senza chiederti prima.",confirmPaid:"Conferma prima di usare servizi a pagamento",confirmPaidSub:"Generazione di immagini, voce fuori campo e video stock mostrano il costo stimato e ti aspettano.",jobs:"Lavori in parallelo",jobsSub:"Più lavori in parallelo finiscono prima ma consumano più in fretta il tuo piano Claude.",fewer:"Meno lavori",more:"Più lavori",advanced:"Avanzate",isolation:"Isolamento dell’agente",isolationSub:"La sandbox tiene i comandi dell’agente nella cartella del progetto, con internet solo verso i siti consentiti.",isolationAuto:"Automatico (consigliato)",isolationOff:"Disattivato",isolationWarning:"Senza isolamento l’agente può scrivere ovunque con i comandi che autorizzi.",model:"Modello",modelSub:"Lascialo vuoto per usare il modello predefinito di Claude Code.",modelPlaceholder:"Predefinito di Claude Code",sandboxOn:"Sandbox attiva: l’agente lavora isolato nella cartella del progetto.",sandboxUnknown:"Stato della sandbox non disponibile: apri Impostazioni → Controllo di sistema.",autoApprove:"Approva in automatico i comandi nella sandbox",autoApproveSub:"I comandi che restano dentro il progetto partono senza chiedere; la rete resta limitata ai siti consentiti. Decidi sempre tu su file fuori dal progetto, servizi a pagamento e siti nuovi.",appliesNew:"Vale per i nuovi lavori",needsIsolation:"Richiede l’isolamento dell’agente",autoOn:"I comandi nella sandbox ora partono senza chiedere",autoOff:"Ogni comando chiederà il tuo OK",runningKeeps:e=>e.count===1?"1 lavoro in corso mantiene l’impostazione attuale":`${e.count} lavori in corso mantengono l’impostazione attuale`},allowed:{title:"Sempre consentiti",count:e=>`${e.count} · aggiunti dalle schede di approvazione`,revokeAll:"Revoca tutti",revoke:"Revoca",revokeLabel:e=>`Revoca ${e.label}`,revoked:e=>`Revocato: ${e.label}`,revokedAll:e=>e.count===1?"1 permesso revocato":`${e.count} permessi revocati`,revokeFailed:e=>`Non revocato: ${e.detail}`,confirm:"Revocare questa regola?",confirmAll:e=>e.count===1?"Revocare l’unica regola?":`Revocare tutte le ${e.count} regole?`,confirmAllLabel:e=>e.count===1?"Revoca l’unica regola":`Revoca tutte le ${e.count} regole`,cancel:"Annulla",emptyTitle:"Niente è sempre consentito",emptySub:"Scegli “Sempre qui” su una scheda di approvazione per aggiungere una regola.",loadFailed:e=>`Impossibile caricare i permessi: ${e.detail}`},internet:{title:"Accesso a internet per le creatività",sub:"I comandi dell’agente possono raggiungere solo questi siti. Tutto il resto è bloccato dalla sandbox.",defaults:"Sempre raggiungibili: registri dei pacchetti (npm, PyPI), GitHub, CDN e Google Fonts.",add:"Aggiungi",addLabel:"Aggiungi un sito",placeholder:"Aggiungi un sito, es. assets.example.com",invalid:"Usa un dominio come assets.example.com o *.example.com",exists:"Questo sito è già nell’elenco",remove:e=>`Rimuovi ${e.domain}`,dropped:e=>`Siti non validi ignorati: ${e.list}`,none:"Ancora nessun sito in più."},code:{title:"Codice collegato",sub:"L’agente può leggere queste cartelle per riprodurre le schermate reali della tua app. Non ci scrive mai.",readOnly:"Sola lettura",notFound:"Non trovata",link:"Collega una cartella…",pathLabel:"Percorso della cartella",pathPlaceholder:"/Users/tuonome/code/app",noteFor:e=>`Nota per ${e.path}`,notePlaceholder:"Nota (facoltativa), es. app iOS",add:"Collega",cancel:"Annulla",pickTitle:"Scegli la cartella da collegare",unlink:e=>`Scollega ${e.path}`,unlinked:e=>`${e.name} scollegata`,needAbsolute:"Inserisci un percorso assoluto",alreadyLinked:"Questa cartella è già collegata",empty:"Ancora nessuna cartella collegata.",saveFailed:e=>`Non salvato: ${e.detail}`}},appSettings:{sections:"Sezioni delle impostazioni",appName:"Motion Studio",nav:{general:"Generali",system:"Controllo di sistema",paid:"Servizi a pagamento",usage:"Utilizzo",notifications:"Notifiche",updates:"Aggiornamenti",transcription:"Trascrizione video"},usage:{title:"Utilizzo",sub:"I token usati da Claude e i servizi a pagamento, per tutti i progetti di questo computer.",week:"Claude · ultimi 7 giorni",today:"Oggi",chart:"Token al giorno, ultimi 7 giorni",day:"Giorno",tokens:"Token",cost:"Costo",barTitle:e=>`${e.day}: ${e.count} token`,byProject:"Per progetto",byKind:"Per tipo di lavoro",kinds:{creative:"Creatività","brand-analysis":"Analisi del brand",describe:"Descrizioni degli asset",console:"Console dell'agente",localize:"Traduzioni","video-analysis":"Analisi video"},none:"Nessun token usato in questi 7 giorni.",empty:"L'utilizzo compare qui dopo la prima generazione",emptySub:"Motion Studio registra ogni esecuzione da ora in poi. Le esecuzioni precedenti non vengono ricostruite.",trackedSince:e=>`Conteggio dal ${e.date}`,loading:"Caricamento dell'utilizzo…",loadFailed:e=>`Impossibile caricare l'utilizzo: ${e.detail}`,tryAgain:"Riprova",paid:{title:"Servizi a pagamento · ultimi 7 giorni",chart:"Costo stimato al giorno, ultimi 7 giorni",cost:"Costo stimato",barTitle:e=>`${e.day}: ≈ ${e.cost}`,byService:"Per servizio",byKind:"Per tipo",byProject:"Per progetto",services:{openai:"OpenAI",elevenlabs:"ElevenLabs"},kinds:{images:"Immagini",voice:"Voce",music:"Musica",sfx:"Effetti sonori",transcription:"Trascrizione"},estimate:e=>`≈ ${e.cost}`,approx:e=>`≈ ${e.text}`,units:{tokens:e=>`${e.count} token immagine`,characters:e=>`${e.count} ${e.n===1?"carattere":"caratteri"}`,seconds:e=>`${e.count} s`,minutes:e=>`${e.count} min`,images:e=>`${e.count} ${e.n===1?"immagine":"immagini"}`},note:"Costi stimati ai prezzi di listino. La spesa reale è sul tuo account di ciascun servizio.",none:"Nessun servizio a pagamento usato negli ultimi 7 giorni."}},configured:e=>`${e.n} di ${e.total}`,appliesAll:"Vale per tutti i progetti su questo computer.",general:{title:"Generali",language:"Lingua",languageSub:"È anche la lingua in cui Claude risponde e scrive le linee guida.",theme:"Tema",themeSub:"Segue il sistema, a meno che tu non ne scelga uno.",agentPointer:"Conferma dei servizi a pagamento, lavori in parallelo, accesso a internet e isolamento dell’agente sono nelle Impostazioni di qualsiasi progetto e valgono per tutti i progetti."},status:{ok:"Tutto funziona",problems:e=>e.count===1?"1 problema da risolvere":`${e.count} problemi da risolvere`,notes:e=>e.count===1?"Funziona · 1 consiglio":`Funziona · ${e.count} consigli`,checking:"Controllo in corso…",checkAgain:"Ricontrolla",details:"Vedi i dettagli"},system:{title:"Controllo di sistema",sub:"Motion Studio usa Claude Code e alcuni strumenti su questo computer."},paid:{title:"Servizi a pagamento",sub:"Le chiavi stanno nel portachiavi di sistema e l’agente non le vede mai.",uses:{openai:"immagini e voce fuori campo",elevenlabs:"voci premium",pexels:"video stock",unsplash:"foto stock"},inKeychain:"Chiave salvata nel Portachiavi",fromEnv:e=>`Dalla variabile d’ambiente ${e.env}`,notConnected:"Non collegato",addKey:"Aggiungi chiave",replace:"Sostituisci",replaceLabel:e=>`Sostituisci la chiave ${e.name}`,remove:"Rimuovi",removeLabel:e=>`Rimuovi la chiave ${e.name}`,removeConfirm:e=>`Rimuovere la chiave ${e.name}?`,keyLabel:e=>`Chiave API ${e.name}`,keyPlaceholder:"Incolla la chiave API",cancel:"Annulla",save:"Salva",saving:"Salvataggio…",saved:e=>`Chiave ${e.name} salvata nel Portachiavi`,removed:e=>`Chiave ${e.name} rimossa`,notStored:"Non è stato possibile rileggere la chiave dal Portachiavi. Riprova.",failed:e=>`Chiave non salvata: ${e.detail}`,removeFailed:e=>`Chiave non rimossa: ${e.detail}`,loadFailed:e=>`Impossibile leggere le chiavi: ${e.detail}`,test:"Prova",testLabel:e=>`Prova la chiave ${e.name}`,testing:"Prova in corso…",savedChecking:"Salvata · verifica…",checksLabel:e=>`Cosa può fare la chiave ${e.name}`,checkFailed:e=>`Prova non eseguita: ${e.detail}`,caps:{key:"Chiave",images:"Immagini",tts:"Voce fuori campo",voices:"Elenco voci",account:"Account",sfx:"Effetti sonori",music:"Musica",search:"Ricerca"},capStatus:{ok:"funziona",missing:"manca",unverified:"non verificata",error:"errore"},keyRefused:"Il servizio ha rifiutato questa chiave o la richiesta: controlla la chiave, o una restrizione di area, organizzazione o firewall presso il fornitore.",someErrors:e=>`Alcune prove non sono finite (${e.detail}). Premi Prova per riprovare.`,unverifiedNote:"Non verificata: per saperlo servirebbe una generazione a pagamento. Il primo uso reale aggiorna l’esito.",permissionsTitle:"Permessi da attivare",permissionsHelp:{openai:'Nella dashboard OpenAI (API keys), a una chiave con permessi ristretti servono "Models: Read" per provarla e "Model capabilities: Write" (model.request) per immagini e voce fuori campo. Un modello che manca può richiedere la verifica dell’organizzazione.',elevenlabs:"In ElevenLabs (Developers → API keys), modifica la chiave e attiva il permesso di ogni funzione che usi:",pexels:"Le chiavi Pexels non hanno permessi: se la chiave è rifiutata, creane una nuova su pexels.com/api.",unsplash:"Le chiavi Unsplash non hanno permessi: se la chiave è rifiutata, controlla la tua app su unsplash.com/developers."}},notifications:{title:"Notifiche",approvals:"Quando l’agente ha bisogno del tuo OK",approvalsSub:"Un banner, il badge sul Dock e una notifica, anche a finestra aperta.",approvalsLabel:"Notifica le approvazioni",ready:"Quando una creatività è pronta",readySub:"Solo quando Motion Studio è in secondo piano.",readyLabel:"Notifica quando è pronta",sound:"Riproduci un suono",soundSub:"Il suono di sistema che accompagna la notifica di un'approvazione.",soundLabel:"Riproduci un suono",test:"Verifica di vederle",testSub:"Invia subito una notifica, con l'impostazione del suono applicata.",testButton:"Invia una notifica di prova",testSent:"Inviata: il sistema ha mostrato la notifica.",testBlocked:"Il sistema ha rifiutato la notifica. macOS mostra le notifiche solo per l’app Motion Studio installata (firmata): Impostazioni di Sistema → Notifiche → Motion Studio → Consenti notifiche. Le versioni di sviluppo non possono mostrare notifiche di sistema.",testTimeout:"Nessuna risposta dal sistema. Se macOS ha chiesto il permesso, rispondi alla richiesta e riprova.",testBlockedWeb:"Il browser o il sistema non hanno mostrato la notifica. Controlla le impostazioni delle notifiche del browser e del sistema.",testReason:e=>`Messaggio di sistema: ${e.detail}`,testUnconfirmed:"Inviata, ma questa versione dell’app desktop non può confermare che sia stata mostrata.",testFailed:e=>`Impossibile mostrare la notifica: ${e.detail}`,unsupported:"Il sistema segnala di non poter mostrare notifiche.",webDenied:"Il browser blocca le notifiche per questa pagina. Consentile dalle impostazioni del sito nel browser.",webDefault:"Al browser non è ancora stato chiesto.",webAllow:"Consenti le notifiche",webUnsupported:"Questo browser non supporta le notifiche.",howTo:"macOS mostra le notifiche solo per l’app Motion Studio installata (firmata): Impostazioni di Sistema → Notifiche → Motion Studio → Consenti notifiche. Le versioni di sviluppo non possono mostrare notifiche di sistema."},updates:{title:"Aggiornamenti",version:e=>`Motion Studio ${e.version}`,off:"Aggiornamenti automatici non attivi in questa versione",automatic:"L’app desktop scarica gli aggiornamenti da sola e ti chiede di riavviare."}},status:{draft:"Bozza",working:"In lavorazione",ready:"Pronta",incomplete:"Incompleta",error:"Errore",interrupted:"Interrotta"},jobState:{queued:"In coda",running:"In lavorazione",succeeded:"Completato",failed:"Errore",cancelled:"Annullato"},creatives:{title:"Creatività",filter:"Filtra le creatività",filters:{all:"Tutte",needs:"Serve a te",running:"In corso",ready:"Pronte",drafts:"Bozze"},search:"Cerca creatività",newCreative:"Nuova creatività",loading:"Caricamento delle creatività…",loadFailed:e=>`Impossibile caricare le creatività: ${e.detail}. Verifica che Motion Studio sia ancora in esecuzione, poi riprova.`,tryAgain:"Riprova",emptyTitle:"Ancora nessuna creatività",emptyBody:"Parti dal brand, così ogni creatività avrà lo stile giusto, oppure scrivi subito il primo brief.",setUpBrand:"Imposta il brand",noMatchTitle:"Niente qui",noMatchBody:"Prova un altro filtro o un’altra ricerca.",showAll:"Mostra tutte",review:"Rivedi",queued:"In attesa di partire",working:"Al lavoro…",readyVersion:e=>`Pronta · v${e.n}`,incomplete:e=>`v${e.n} · mancano alcuni formati`,failed:"L’ultima generazione non è riuscita.",interrupted:"La generazione si è interrotta prima di finire.",retryFailed:e=>`Impossibile ripartire: ${e.detail}`,draftNote:"Brief salvato · ancora niente generato",draft:"Bozza",generate:"Genera",generateOf:e=>`Genera ${e.title}`,generateFailed:e=>`Impossibile avviare la generazione: ${e.detail}`,moreFormats:e=>`+${e.n} altri`,unreadable:"Illeggibile"},removal:{menu:e=>`Azioni per ${e.title}`,archive:"Archivia",archiveGroup:e=>`Archivia tutte le ${e.count} varianti`,archiveVariant:e=>`Archivia la variante ${e.letter}`,delete:"Elimina…",deleteGroup:e=>`Elimina tutte le ${e.count} varianti…`,deleteVariant:e=>`Elimina la variante ${e.letter}…`,checking:"Verifico se si può togliere…",archived:e=>`«${e.title}» archiviata`,undo:"Annulla",archiveFailed:e=>`Impossibile archiviare: ${e.detail}`,restore:"Ripristina",restored:e=>`«${e.title}» ripristinata`,restoreFailed:e=>`Impossibile ripristinare: ${e.detail}`,deleted:e=>`«${e.title}» spostata nel Cestino`,deleteFailed:e=>`Impossibile eliminare: ${e.detail}`,deleteTitle:e=>`Eliminare «${e.title}»?`,deleteBody:"La sua cartella, con tutte le versioni e i render, va nel Cestino. Puoi rimetterla a posto dal Cestino finché non lo svuoti.",deleteGroupBody:e=>`Tutte le ${e.count} varianti del gruppo, con le versioni e i render, vanno nel Cestino. Puoi rimetterle a posto dal Cestino finché non lo svuoti.`,deleteVariantBody:e=>`La variante ${e.letter} esce dal gruppo e la sua cartella, con le versioni e i render, va nel Cestino. Puoi rimetterla a posto dal Cestino finché non lo svuoti.`,deleteConfirm:"Sposta nel Cestino",archiveGroupTitle:e=>`Archiviare «${e.title}»?`,archiveGroupBody:e=>`Tutte le ${e.count} varianti del gruppo escono dalle liste. Puoi ripristinarle da Archiviate.`,archiveConfirm:"Archivia",cancel:"Annulla",archivedCount:e=>`Archiviate (${e.n})`,archivedTitle:"Creatività archiviate",archivedEmpty:"Nessuna creatività archiviata.",archivedOn:e=>`Archiviata ${e.when}`,backToCreatives:"Torna alle creatività"},briefSession:{goneOnCreate:"La sessione del brief è finita altrove (ricominciata o diventata una creatività): premi di nuovo Genera per creare la creatività senza.",loadFailed:e=>`La sessione del brief non si è potuta leggere: ${e.detail}`,modeLabel:"Come compilare il brief",modeYou:"Compila tu",modeAgent:"Con l'agente",cta:"Fallo compilare all'agente",resumeTitle:"Hai una sessione del brief in corso",resumeBody:"Puoi riprenderla da dove eri rimasto o ricominciare: la sessione di prima verrà eliminata.",resume:"Riprendi la sessione del brief",agentWorking:"L'agente sta compilando il brief",title:"Brief con l'agente",panelLabel:"Sessione con l'agente",state:{new:"Nuova sessione",working:"Al lavoro…",filled:"Brief compilato"},intro:"Con il + qui sotto collega le cartelle del codice e gli asset che servono, poi raccontami cosa vuoi ottenere. Il brief lo compilo io.",composerLabel:"Messaggio all'agente",placeholderFirst:"Racconta all'agente cosa vuoi ottenere",placeholderFollowUp:"Chiedi una modifica al brief…",add:"Aggiungi cartelle o asset",addMenu:"Aggiungi contesto",folder:{title:"Collega una cartella",hint:"Codice sul tuo Mac, letto in sola lettura"},library:{title:"Dagli Asset",hint:"Immagini, video e loghi del progetto"},upload:{title:"Carica dal Mac",hint:"Solo per questa creatività, se non lo salvi negli Asset"},folderPath:"Percorso della cartella",link:"Collega",cancel:"Annulla",uploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,removePin:e=>`Togli ${e.name}`,folders:e=>e.count===1?"1 cartella":`${e.count} cartelle`,noFolders:"Nessuna cartella",assets:e=>`${e.count} asset`,noAssets:"Nessun asset",foldersTitle:"Cartelle della sessione",assetsTitle:"Asset della sessione",removeContext:e=>`Togli ${e.name} dalla sessione`,startOver:"Inizia da capo",openCreative:"Apri la creatività",discard:"Scarta la sessione",agentMark:"Agente",created:"Creatività creata"},newCreative:{secondsShort:e=>`${e.n} s`,goalQuestion:"Cosa vuoi realizzare?",goalPlaceholder:"Descrivi l'idea: cosa succede, il tono, come finisce.",goalRequired:"Prima descrivi cosa vuoi realizzare",goalCount:e=>`${e.n.toLocaleString("it-IT")} / ${e.max.toLocaleString("it-IT")}`,brandKit:"Kit del brand",assetCount:e=>e.count===1?"1 asset":`${e.count} asset`,addAssets:"Aggiungi asset",tryLabel:"Prova",suggestions:{teaser:{label:"Teaser di lancio",text:"Un teaser di 6 secondi per il lancio. Apri sul prodotto in uso, tieni la palette calma, rivela il messaggio chiave per ultimo e chiudi sul logo."},feature:{label:"Annuncio di una funzione",text:"Annuncia la nuova funzione. Tono calmo e sicuro, una frase per scena, chiudi con il messaggio chiave e il logo."},screenshots:{label:"Screenshot per App Store",text:"Tre screenshot per App Store che mostrano le tre schermate principali dell'app, ciascuna con una didascalia breve."}},titleHint:"puoi rinominarla nel canvas",untitled:"Creatività senza titolo",keyMessage:"Messaggio chiave",keyMessageHint:"· mostrato a schermo",optional:"(facoltativo)",whereTo:"Dove verrà pubblicata?",videoLength:"Durata dei video",lengthFor:e=>e.count===1?"per il formato video":`per i ${e.count} formati video`,noVideo:"nessun formato video scelto",custom:"Personalizzata",customSeconds:"Durata in secondi",customInvalid:"Inserisci una durata da 1 a 600 secondi",durationMismatch:e=>`Il testo dice ${e.stated} s, la durata è ${e.current} s`,durationMismatchUnset:e=>`Il testo dice ${e.stated} s`,durationUse:e=>`Usa ${e.n} s`,overMax:e=>`Più lunga di quanto consente ${e.label} (${e.max})`,assetsToUse:"Asset da usare",browse:"Sfoglia gli Asset",libraryTitle:e=>`Asset di ${e.project}`,libraryLoading:"Caricamento degli Asset…",libraryFailed:e=>`Impossibile leggere gli Asset: ${e.detail}`,libraryEmpty:"Ancora nessun asset in questo progetto",libraryEmptyBody:"Aggiungi immagini, loghi o clip dal computer, o caricali in Asset.",openAssets:"Apri Asset",tryAgain:"Riprova",removeAsset:e=>`Rimuovi ${e.name}`,brandAuto:"Logo e font arrivano in automatico dal kit del brand.",fromComputer:"Dal computer…",fromComputerHint:"Solo per questa creatività, se non lo salvi negli Asset",fromLibrary:"Dagli Asset",fromLibraryHint:"File già negli Asset",uploadFromComputer:"Carica dal computer",uploadInput:"File da aggiungere al brief",dropHere:"Rilascia i file per aggiungerli a questo brief",uploadingAsset:e=>`Caricamento di ${e.name}…`,uploadAssetFailed:e=>`${e.name} non è stato caricato: ${e.detail}`,dismissUpload:e=>`Chiudi l'errore di ${e.name}`,referenceOnly:"Solo per questa creatività",referenceSaved:"Salvato negli Asset",referenceOnlyHint:e=>`${e.name} è solo per questa creatività: clic per salvarlo anche negli Asset`,referenceSavedHint:e=>`${e.name} è salvato negli Asset: clic per tenerlo solo per questa creatività`,referenceFailed:e=>`Non è stato possibile cambiare dove si tiene il file: ${e.detail}`,followsBrand:e=>`Segue il brand di ${e.project}`,editBrand:"Modifica il brand",noBrand:"Ancora nessun brand",noBrandBody:"Colori, font e loghi rendono coerenti tutti i formati.",setUpBrand:"Imposta il brand",brandFailed:e=>`Impossibile leggere il kit del brand: ${e.detail}`,codebases:"Codebase di questa creatività",codebasesHint:"(oltre a quelle del progetto)",notesForAgent:"Note per l'agente",moreOptions:"Altre opzioni",title:"Titolo",formatKind:"Tipo di formato",kindAll:"Tutti",kindVideo:"Video",kindImage:"Immagini",searchFormats:"Cerca formati",selectedCount:e=>e.n===1?"1 selezionato":`${e.n} selezionati`,moreChannels:"Altri canali",noMatch:"Nessun formato corrisponde",noMatchBody:"Prova con un’altra parola, o mostra tutti i tipi.",showAllFormats:"Mostra tutti i formati",formatsLoading:"Caricamento dei formati…",formatsFailed:e=>`Impossibile caricare i formati: ${e.detail}`,linkOn:e=>`Collegato: usa lo stesso file di ${e.primary}, nessun render in più. Clicca per farne una versione dedicata`,linkOff:e=>`Può usare lo stesso file di ${e.primary}, senza costi. Clicca per collegarlo`,linkToggle:e=>`Collega ${e.label} a ${e.primary}`,notLinkable:e=>`Non può usare il file di ${e.primary}: ${e.reason}`,copiesLabel:e=>`Copie di ${e.label}`,copiesLess:"Una copia in meno",copiesMore:"Una copia in più",copiesSaid:e=>`${e.label}: ${e.n===1?"1 copia":`${e.n} copie`}`,copiesPackLimit:e=>`Il pacchetto store ne usa altre ${e.n} di questo formato: 20 in tutto`,copiesTotal:e=>`${e.n} in totale`,hiddenChosen:e=>e.n===1?"1 formato scelto è nascosto dal filtro":`${e.n} formati scelti sono nascosti dal filtro`,packFull:e=>`${e.label}: le copie e il pacchetto store superano ${e.max}. Riduci le copie o gli screenshot del pacchetto.`,copiesHint:"Copie: altre immagini o altri video di questo formato con lo stesso brief, ognuno diverso (non varianti)",customTile:"Personalizzato",customTileHint:"Crea un formato",customTileAria:"Nuovo formato personalizzato",customEditAria:e=>`Modifica ${e.label}`,customNewTitle:"Nuovo formato personalizzato",customEditTitle:"Modifica formato personalizzato",customName:"Nome",customNamePlaceholder:"es. Totem ingresso",customKind:"Tipo",customKindImage:"Immagine",customKindVideo:"Video",customWidth:"Larghezza",customHeight:"Altezza",customPx:"px",customRatio:"Proporzione",customRatioAria:e=>`Proporzione ${e.ratio}: l'altezza segue la larghezza`,customRatioHint:"Una proporzione calcola l'altezza dalla larghezza.",customDuration:"Durata massima",customSecondsUnit:"secondi",customDurationHint:"Vuoto: nessun limite proprio.",customInUse:e=>`${e.count===1?"Una creatività usa":`${e.count} creatività usano`} questo formato: tipo e dimensioni restano come sono. Per cambiarli crea un nuovo formato.`,customUnreadable:e=>`${e.n===1?"Una creatività non si legge e potrebbe usare":`${e.n} creatività non si leggono e potrebbero usare`} questo formato: tipo e dimensioni restano bloccati.`,customErrName:"Dai un nome al formato",customErrNameTaken:"Un formato personalizzato ha già questo nome",customErrSize:"Un numero intero da 16 a 8192",customErrDuration:"Secondi interi da 1 a 3600, o vuoto",customErrEven:"Un video vuole un numero pari di pixel per lato",customErrVideoMax:"Un video ha al massimo 4096 px per lato",customErrDurationShort:e=>`Una creatività usa questo formato per ${e.sec} s: non meno di così`,customLongest:e=>`Le creatività lo usano fino a ${e.sec} s.`,customUsageLoading:"Controllo quali creatività usano questo formato…",customUsageFailed:"Non è stato possibile sapere quali creatività usano questo formato: tipo e dimensioni restano bloccati.",formatsDropped:e=>e.n===1?"Un formato scelto non è più disponibile ed è stato tolto":`${e.n} formati scelti non sono più disponibili e sono stati tolti`,formatGone:"non più disponibile",customCreate:"Crea formato",customSave:"Salva",customDelete:"Elimina",customDeleteAsk:e=>`Eliminare «${e.name}»? Le creatività che lo usano lo tengono.`,customDeleteConfirm:"Elimina formato",customFailed:e=>`Non è stato possibile salvare il formato: ${e.detail}`,customDeleteFailed:e=>`Non è stato possibile eliminare il formato: ${e.detail}`,customAdded:e=>`«${e.name}» aggiunto ai Personalizzati e scelto`,customDeleted:e=>`«${e.name}» eliminato`,customHidden:e=>`«${e.name}» tolto dai formati: le creatività che lo usano lo tengono`,summary:e=>[e.formats===1?"1 formato":`${e.formats} formati`,[e.videos&&(e.videos===1?"1 render video":`${e.videos} render video`),e.images&&(e.images===1?"1 immagine":`${e.images} immagini`)].filter(Boolean).join(" + ")].join(" · "),libraryPartial:e=>`Una parte degli Asset non è leggibile: ${e.detail}`,pickFormat:"Scegli almeno un formato",summaryHint:"Lavora in background: ricevi una notifica quando è pronta.",similar:e=>`Creatività simili hanno usato circa ${e.range} token`,createFailed:e=>`Impossibile creare la creatività: ${e.detail}. Controlla il brief e riprova.`,draftSaved:e=>`Bozza “${e.title}” salvata`,open:"Apri",saveDraft:"Salva bozza",generate:"Genera"},formatUi:{video:"video",image:"immagine",unknownPreset:e=>`${e.id}: preset sconosciuto`,missingIn:e=>`Mancante in v${e.n}`,unverified:"non verificato",other:"Altro"},storePack:{cardTitle:"Pacchetto App Store",cardBody:"Una serie di screenshot per App Store e Google Play, con un video di anteprima facoltativo.",cardAction:"Prepara il pacchetto",entryTitle:"Pacchetto store",entryHint:"Screenshot e anteprima per App Store e Google Play",entryOn:e=>`Pacchetto store · ${e.count} screenshot`,entryAria:e=>`Pacchetto store, ${e.count} screenshot: modifica`,entryAdd:"Aggiungi il pacchetto store ai formati",entryEdit:"Modifica",entryRemove:"Rimuovi",entryRemoveAria:"Rimuovi il pacchetto store",removeTitle:"Togliere il pacchetto store?",removeBody:"Le istanze del pacchetto escono dai formati; le versioni già fatte restano nella cronologia. I formati scelti a mano non cambiano.",removeConfirm:"Togli il pacchetto",confirmAdd:"Aggiungi ai formati",confirmUpdate:"Aggiorna il pacchetto",saveFailed:e=>`Impossibile salvare il pacchetto store: ${e.detail}`,groupTitle:"Pacchetto store",exportChoice:{title:"Cosa vuoi esportare?",pack:"Pacchetto store",packHint:"Le cartelle per App Store e Google Play, con i controlli degli store.",formats:"File dei formati",formatsHint:"Un file per ogni formato, dalle versioni ★: anche quelli fuori dal pacchetto."},title:"Pacchetto App Store",creativeTitle:e=>`${e.name} · Pacchetto App Store`,steps:{app:"App",stores:"Store e dispositivi",screens:"Screenshot",preview:"Video di anteprima",review:"Riepilogo"},stepsLabel:"Passi",stepOf:e=>`Passo ${e.n} di ${e.total}: ${e.name}`,back:"Indietro",next:"Avanti",generate:"Genera",saveDraft:"Salva bozza",appName:"Nome dell'app",tagline:"Una riga sull'app",taglineHint:"(facoltativa)",nameRequired:"Inserisci il nome dell'app",stores:"Store",devicesFor:e=>`Dispositivi per ${e.store}`,required:"Obbligatorio",optional:"Facoltativo",devices:{iphone69:"iPhone 6,9″",ipad13:"iPad 13″",phone:"Telefono",tablet:"Tablet",feature:"Feature graphic"},oneStore:"Scegli almeno uno store",count:"Numero di screenshot",countRange:e=>`Da ${e.min} a ${e.max} per gli store scelti`,screenshot:e=>`Screenshot ${e.n}`,caption:"Didascalia (facoltativa)",captionOf:e=>`Didascalia dello screenshot ${e.n}`,captionHint:"Le didascalie sono facoltative: quelle vuote le scrive l'agente dal brief. Una didascalia lunga va bene: l'agente la accorcia.",screen:"Schermata dell'app",noScreen:"Nessuna schermata",chooseScreen:e=>`Scegli la schermata dell'app per lo screenshot ${e.n}`,changeScreen:"Cambia",removeScreen:e=>`Togli la schermata dello screenshot ${e.n}`,pickerTitle:"Schermata dell'app dagli Asset",pickerUpload:"Carica un'immagine",pickerUploadInput:"File immagine da caricare",pickerUploading:"Caricamento…",pickerEmpty:"Negli Asset non ci sono ancora immagini. Carica uno screenshot dell'app.",pickerLoading:"Carico gli Asset…",pickerList:"Immagini dagli Asset",pickerLoadFailed:e=>`Impossibile caricare gli Asset: ${e.detail}`,pickerUploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,pickerWrongFile:"Solo le immagini (PNG, JPEG o WebP) possono essere la schermata dell'app",pickerClose:"Chiudi",noScreenChoice:"Nessuna schermata",noScreenOf:e=>`Screenshot ${e.n}: nessuna schermata dell'app`,screenMissing:e=>`Scegli una schermata dell'app, o «Nessuna schermata», per: ${e.list}`,reviewNoScreenRows:e=>`Senza schermata dell'app: screenshot ${e.list}`,closeTitle:"Scartare questo pacchetto?",closeBody:"Le scelte fatte in questo pacchetto andranno perse.",keepEditing:"Continua a modificare",discard:"Scarta",previewQuestion:"Aggiungere un video di anteprima?",previewYes:"Sì",previewNo:"No",previewHint:"Un breve video che racconta la stessa storia, fatto per ogni store scelto.",reviewApp:"App",reviewStores:"Store",reviewDevices:"Dispositivi",reviewShots:"Screenshot",reviewPreview:"Video di anteprima",reviewFormats:e=>e.count===1?"Verrà creato 1 formato":`Verranno creati ${e.count} formati`,reviewNoScreen:"nessuna schermata",reviewFromBrief:"didascalia dal brief",yes:"Sì",no:"No",createFailed:e=>`Impossibile creare il pacchetto: ${e.detail}`,draftSaved:e=>`«${e.title}» salvata come bozza`,export:{action:"Esporta il pacchetto",title:e=>`Esporta il pacchetto store di «${e.title}»`,heading:"Esporta il pacchetto store",sub:e=>`Versione ${e.n} · una cartella per store, lingua e dispositivo`,subGroup:"Ogni screenshot dalla selezione finale delle varianti, una cartella per store, lingua e dispositivo",saveTo:"Salva in",folder:"Cartella di destinazione",placeholder:"Percorso assoluto di una cartella",noFolder:"Nessuna cartella scelta",choose:"Scegli cartella…",pickTitle:"Scegli la cartella per il pacchetto store",lastUsed:"ultima usata",languages:"Lingue",original:e=>`${e.language} (originale)`,notTranslated:"non tradotta: fallirà",needsReview:"da rivedere (superata o con problemi): potrebbe fallire",run:e=>`Esporta ${e.count} file`,files:"File",fileOf:e=>`${e.group} · ${e.file}`,excluded:"Escluso",nav:"Store e dispositivi",selectedOf:e=>`${e.n} di ${e.of} file selezionati`,selectAll:"Seleziona tutti",selectNone:"Nessuno",shots:e=>`${e.count} screenshot`,video:e=>`video · ${e.size}`,image:e=>`immagine · ${e.size}`,size:e=>`${e.width} × ${e.height}`,noFiles:"Questa versione non ha file del pacchetto da esportare.",running:"Preparo il pacchetto…",cancel:"Annulla",finish:"Fatto",writtenTitle:e=>e.count===1?"1 file scritto":`${e.count} file scritti`,failedTitle:e=>e.count===1?"1 file non esportato":`${e.count} file non esportati`,notInPack:e=>e.count===1?"Non fa parte del pacchetto (non esportato):":`Non fanno parte del pacchetto (non esportati, ${e.count}):`,noneWritten:"Non è stato scritto nulla: ogni file ha fallito il controllo.",folderLine:e=>`Cartella: ${e.folder}`,rendered:e=>e.count===1?"Prima è stato renderizzato 1 formato":`Prima sono stati renderizzati ${e.count} formati`,reason:e=>`${e.file}: ${e.reason}`,notAPack:"Questa creatività non ha un pacchetto store da esportare.",failed:e=>`Esportazione non riuscita: ${e.detail}`}},languages:{title:"Lingue",button:"Lingue",sub:e=>`Traduzioni della v${e.n} · lingua originale: ${e.primary}`,noCompositions:e=>`La v${e.n} non ha composizioni da tradurre`,formatsLabel:"Formati",pick:e=>`Traduci in ${e.language}`,statusNone:"Non tradotta",statusOk:"Tradotta",statusStale:e=>e.count===1?"1 superata":`${e.count} superate`,statusProblems:e=>e.count===1?"1 problema":`${e.count} problemi`,voiceLabel:"Voce",voiceFor:e=>`Voce in ${e.language}`,voiceTranslate:"Traduci",voiceOriginal:"Mantieni originale",voiceMuted:"Silenzia",voiceTranslateFromPanel:"La voce si traduce quando premi Traduci nel pannello Lingue",voiceReason:{off:"il servizio voce è disattivato per questa creatività",noKey:"manca la chiave del servizio voce",missingPermission:"alla chiave manca il permesso text-to-speech",declined:"la conferma è stata rifiutata",failed:"la generazione non è riuscita"},voiceUnavailable:e=>`La voce non si può tradurre: ${e.reason}`,voiceFellBack:e=>`L'ultima volta la voce è rimasta com'era: ${e.reason}`,noScriptCount:e=>e.count===1?"Una clip voce non si può tradurre: non ha un copione noto":`${e.count} clip voce non si possono tradurre: non hanno un copione noto`,noScriptTitle:"Clip voce che non si possono tradurre",noScriptItem:e=>`${e.clip}: copione sconosciuto, mantiene la voce originale`,review:e=>`Rivedi ${e.format}`,confirmations:"Conferme",working:"L'agente sta traducendo…",loading:"Caricamento…",translate:e=>e.count===1?"Traduci 1 lingua":`Traduci ${e.count} lingue`,started:e=>e.count===1?"Traduzione avviata":`Traduzione di ${e.count} lingue avviata`,notInBrief:"Questa lingua non è più nel brief della creatività: aggiungila prima nel brief",busy:"L'agente sta lavorando su questa creatività: modifica la traduzione quando ha finito",tableTitle:e=>`${e.language} · ${e.format}`,problemsLabel:"Problemi di questa traduzione",warningsLabel:"Avvisi",nothingToTranslate:"Questo formato non ha testi da tradurre",colSource:"Originale",colTranslation:"Traduzione",colStatus:"Stato",colFit:"Adattamento",translationOf:e=>`Traduzione di ${e.clip}`,fitOf:e=>`Dimensione del testo di ${e.clip}`,rowNotTranslated:"Non tradotto",rowStale:"Superato",rowOverflow:"Fuori riquadro",rowOk:"OK",save:"Salva traduzione",saved:"Salvata",previewLanguage:"Lingua dell'anteprima",previewOriginal:e=>`Originale (${e.language})`,previewLoading:"Caricamento della traduzione…",previewFailed:e=>`La traduzione non si può mostrare: ${e.detail}`,flaggedLabel:"Clip da controllare",flagStale:"superato",flagOverflow:"fuori riquadro",flagNotTranslated:"non tradotto",flagVoice:"problema di voce",flagAsset:"file cambiato",editorPreviewNote:"Stai vedendo l'anteprima di una traduzione: la modifica lavora sul testo originale. Scegli Originale per tornare alla bozza.",briefTitle:"Lingue",briefHint:"La lingua della creatività e quelle in cui viene tradotta. Senza una lingua, la creatività non viene tradotta.",briefPrimary:"Lingua originale",briefNone:"Nessuna (una sola lingua)",briefExtra:e=>`Traduci in (${e.count} di ${e.max})`,briefExtraLabel:"Lingue in cui tradurre",briefFull:e=>`Al massimo ${e.max} lingue`,briefRtl:"Le lingue da destra a sinistra non sono ancora supportate: bisognerebbe specchiare il layout, e in una traduzione cambiano solo testo e voce",renderTitle:"Render",renderSub:e=>`Formati: ${e.formats}`,renderLanguages:"Lingue da renderizzare",renderOriginal:e=>`Originale (${e.language})`,renderAction:"Render",renderWithSubtitles:"con sottotitoli",renderAnyway:"Renderizza comunque",needsForceTitle:"Queste traduzioni hanno problemi aperti o testi superati:",exportLanguages:"Lingue"},paidBatch:{intro:e=>e.count===1?`Motion Studio farà 1 chiamata a pagamento a ${e.provider}.`:`Motion Studio farà ${e.count} chiamate a pagamento a ${e.provider}.`,provider:e=>e.provider,total:e=>`${e.chars} caratteri in tutto`,estimate:e=>`Stima ${e.estimate}`,noEstimate:"Stima non disponibile",introMixed:e=>`Motion Studio farà circa ${e.count} chiamate a pagamento: ${e.list}.`,estimatedCalls:"Chiamate stimate (prezzo non noto)",variantItems:"Chiamate per variante",itemSeconds:e=>`${e.seconds} s`,calls:"Chiamate",chars:e=>`${e.chars} caratteri`,approve:"Approva",decline:"Rifiuta"},formatView:{stage:e=>`Anteprima di ${e.label}`,briefOff:e=>`Il brief dice ${e.n} s`,briefOffBody:e=>`Questa versione dura ${e.actual} s e il brief ne chiede ${e.n}: per questo il controllo la segna incompleta. Se la durata giusta è ${e.actual} s, mettila nel brief: la versione viene ricontrollata, senza un nuovo giro.`,briefOffEdited:"La durata viene da una modifica diretta.",briefOffFix:e=>`Usa ${e.n} s nel brief`,briefOffFixed:e=>`Brief aggiornato: ${e.n} s`,briefOffFailed:e=>`Non è stato possibile aggiornare il brief: ${e.detail}`,scenes:"Scene",scenesSoon:"Modifica scene, testi e tempi direttamente — arriva con la timeline",play:"Riproduci (Spazio)",pause:"Pausa (Spazio)",prevFrame:"Fotogramma precedente (←)",nextFrame:"Fotogramma successivo (→)",transport:"Riproduzione",loop:"Ripeti",speed:"Velocità di riproduzione",speedValue:e=>`${e.n}×`,position:"Posizione",positionText:e=>`${e.time} di ${e.total}`,commentAt:e=>`Clicca il punto del fotogramma a ${e.time}`,commentFrame:e=>`Commenta il fotogramma a ${e.time}`,commentImage:"Clicca un punto dell’immagine per commentarlo",keys:"Spazio riproduce · ← → un fotogramma · clicca il fotogramma in pausa per commentare",keysLocked:"Spazio riproduce · ← → un fotogramma",marker:e=>`Commento ${e.n} a ${e.time}`,pinAt:e=>`A ${e.time}`,unknownTitle:e=>`“${e.id}” non è un formato di questa creatività`,unknownSub:"Forse è stato tolto dal brief. Torna a tutti i formati per sceglierne uno.",videoFailed:"Impossibile riprodurre questo video: potrebbe essere ancora in render, o il file è stato spostato. Riprova tra poco.",zoom:"Zoom",fit:"Adatta",actual:"Dimensione reale (100%)",chat:"Chat"},editor:{edit:"Modifica",editOf:e=>`Modifica ${e.label} direttamente`,back:"Torna all'anteprima",editing:e=>`Stai modificando ${e.name}`,editingPrimary:e=>`Stai modificando ${e.primary} · usato anche da ${e.also}`,alsoUsedBy:e=>`Usato anche da ${e.list}`,version:e=>`v${e.n}`,meta:e=>`${e.size} · ${e.seconds} s · ${e.fps} fps`,metaImage:e=>`${e.size} · immagine fissa`,loading:"Apro l'editor…",loadingVideo:"Caricamento del video…",loadFailed:e=>`Non riesco ad aprire l'editor: ${e.detail}`,legacy:"Questa versione non ha una composizione da modificare. Chiedi all'agente di rifarla, oppure torna all'anteprima.",busyAgent:"L'agente o un render sta lavorando su questa creatività: le modifiche dirette tornano disponibili quando ha finito.",olderVersion:e=>`Stai guardando la v${e.n}, una versione precedente: si modifica solo l’ultima (v${e.latest}).`,editLatest:e=>`Modifica la v${e.n}`,saveFromLatest:"Per salvare le modifiche torna alla versione che stai modificando",commentSpot:"Commenta un punto",commentSpotTip:"Poi fai clic su un punto dell’immagine e scrivi una nota per l’agente (P)",commentTools:"Commenti",commentLayer:"Commenta il livello",commentElement:"Commenta l’elemento",commentLayerTip:"Scrivi una nota per l’agente sul livello selezionato (C)",commentElementTip:"Scrivi una nota per l’agente sull’elemento selezionato del livello (C)",commentLayerNeeds:"Prima seleziona un livello, in Livelli o sull’immagine",undoTip:e=>`Annulla (${e.keys})`,redoTip:e=>`Ripristina (${e.keys})`,snapTip:"Aggancia alle guide: un livello che sposti o ridimensioni si allinea ai bordi e al centro dell’immagine",pendingComments:e=>e.n===1?"1 commento in attesa di invio":`${e.n} commenti in attesa di invio`,commentSpotLocked:e=>`I commenti vanno sulla v${e.n}`,scenes:"Scene",layers:"Livelli",stage:e=>`Palco di ${e.label}`,inspector:"Ispettore",chat:"Chat",panelTabs:"Pannello laterale",timeline:"Timeline",scenesSoon:"Qui compaiono le scene di questa composizione.",layersSoon:"Qui compaiono i livelli di questa immagine.",layersList:"Livelli di questa immagine",layersAsk:"Chiedi all’agente di aggiungere livelli",layerExpand:e=>`Mostra gli elementi di ${e.name}`,layerCollapse:e=>`Nascondi gli elementi di ${e.name}`,layerElements:e=>`Elementi di ${e.name}`,layersEmpty:"Questa immagine non ha livelli.",layerSmall:"Versione piccola",layerDark:"Negativo per sfondo scuro",zoom:"Zoom",zoomFit:"Adatta",zoomFitTitle:"Adatta l’immagine alla finestra",zoomValue:e=>`${e.pct}%`,inspectorSoon:"Seleziona una clip per cambiarne testo, posizione e stile.",draft:e=>e.n===1?"Bozza · 1 modifica":`Bozza · ${e.n} modifiche`,noEdits:"Ancora nessuna modifica",saveAs:e=>`Salva come v${e.n}`,saving:"Salvataggio…",saved:e=>`✓ Salvato come ${e.name} v${e.n}`,saveFailed:e=>`Non riesco a salvare: ${e.detail}`,saveProblems:e=>`${e.count} problemi impediscono di salvare questa bozza`,discard:"Scarta",discardTitle:"Scartare la bozza?",discardBody:e=>e.n===1?"La modifica fatta andrà persa.":`Le ${e.n} modifiche fatte andranno perse.`,discardConfirm:"Scarta le modifiche",keepEditing:"Continua a modificare",undo:"Annulla",redo:"Ripristina",leaveTitle:"Salvare prima le modifiche?",leaveBody:e=>e.n===1?"Hai 1 modifica non salvata come versione.":`Hai ${e.n} modifiche non salvate come versione.`,leaveBodyChat:"Il tuo messaggio parte dall'ultima versione salvata: le modifiche non salvate non ne farebbero parte.",leaveSave:e=>`Salva come v${e.n}`,leaveDiscard:"Scarta",leaveKeep:"Continua a modificare",leaveSaveFailed:e=>`La bozza non è stata salvata, quindi resti qui: ${e.detail}`,baseChangedTitle:"Questo formato è cambiato mentre modificavi",baseChangedBody:e=>`${e.name} ha una versione più recente (v${e.n}). La bozza resta: non si può salvare sopra di essa.`,reopenLatest:"Riapri sull'ultima versione",reopenTitle:"Scartare la bozza e riaprire?",reopenBody:"Le modifiche andranno perse e l'editor si aprirà sull'ultima versione.",reopenConfirm:"Scarta e riapri",keysDeleteClip:"Chiedi all'agente di rimuovere le clip",staging:e=>`Preparo ${e.file}…`,stagingLong:"I video grandi vengono prima convertiti: può volerci un po'. Puoi continuare a modificare.",saveWhileStaging:"Aspetta che il file che stai aggiungendo sia pronto, poi salva.",stagedRestored:"I file aggiunti alla bozza sono di nuovo pronti nell'anteprima.",stagedLost:e=>`Un file aggiunto alla bozza non è più disponibile (${e.file}): sceglilo di nuovo.`,stageFailed:e=>`Non riesco ad aggiungere il file: ${e.detail}`,previewRefused:e=>`L'anteprima non riesce a mostrare questa bozza: ${e.text}`,previewBusy:"Apro l'anteprima…",previewFailed:e=>`L'anteprima non è disponibile: ${e.detail}`,sessionRenewed:"L'anteprima è stata rinnovata; le tue modifiche sono ancora qui.",snap:"Aggancia a guide e bordi",locked:"Bloccato",lockedStage:"Bloccato: sbloccalo per spostarlo",coords:e=>`${e.x} · ${e.y} · ${e.w} × ${e.h}`,selectionBox:e=>`Selezionato: ${e.clip}`,moveHandle:"Sposta",resizeNw:"Ridimensiona dall'angolo in alto a sinistra",resizeNe:"Ridimensiona dall'angolo in alto a destra",resizeSe:"Ridimensiona dall'angolo in basso a destra",resizeSw:"Ridimensiona dall'angolo in basso a sinistra",rotateHandle:"Ruota (Maiusc aggancia a 15°)",sceneLength:e=>`${e.seconds} s`,scenesAria:"Scene di questa composizione",inThisScene:"In questa scena",inSceneNone:"Nessuna clip in questa scena",reorderScene:e=>`Riordina ${e.name}: trascina, oppure premi ↑ o ↓`,reorderedTo:e=>`${e.name} spostata alla posizione ${e.n} di ${e.total}`,tlZoom:"Zoom",tlZoomValue:e=>`${e.n}×`,tlRipple:"Ripple: una clip che si allunga sposta le scene successive",tlRuler:"Righello della timeline: trascina per spostare la testina",tlPlayhead:"Testina: trascinala per scorrere il video",tlTracks:"Tracce",tlSceneAt:e=>`${e.name}, da ${e.time}`,trackName:e=>`${e.kind} ${e.n}`,kindVisual:"Visiva",kindVideo:"Video",kindText:"Testo",kindAudio:"Audio",kindSubtitles:"Sottotitoli",hideTrack:e=>`Nascondi ${e.name}`,showTrack:e=>`Mostra ${e.name}`,lockTrack:e=>`Blocca ${e.name}`,unlockTrack:e=>`Sblocca ${e.name}`,muteTrack:e=>`Silenzia ${e.name}`,unmuteTrack:e=>`Riattiva l’audio di ${e.name}`,clipText:"testo",clipShape:"forma",clipImage:"immagine",clipSvg:"immagine vettoriale",clipVideo:"video",clipHtml:"html",clipAudio:"audio",clipSubtitles:"sottotitoli",clipBar:e=>`${e.name}, ${e.kind}, da ${e.start} a ${e.end}`,clipBarHidden:"nascosta",inspEmptyTitle:"Seleziona una clip",inspEmptySub:"Clicca una clip nella timeline o una scena a sinistra per modificarla qui.",inspLocked:"Bloccata: sbloccala nella timeline per modificarla",inspHeader:e=>`${e.name} · ${e.kind}`,secTiming:"Tempi",secBox:"Riquadro",secText:"Testo",secShape:"Forma",secMedia:"Media",secAudio:"Audio",secAnimation:"Animazione",secParams:"Parametri",secSvg:"Contenuto SVG",svgColors:"Colori",svgTexts:"Testi",svgElements:"Elementi",svgElementList:"Elementi dell’SVG",svgLoading:"Lettura dell’SVG…",svgCannot:"Questo SVG non si può modificare qui",svgRefused:"La modifica non è stata applicata",svgColorCount:e=>`${e.hex}, usato ${e.n} ${e.n===1?"volta":"volte"}`,svgColorNew:e=>`Nuovo colore al posto di ${e.hex}`,svgNoColors:"Nessun colore da cambiare",svgNoTexts:'Nessun testo modificabile: le scritte disegnate come forme le cambia l’agente (seleziona l’elemento, poi "Chiedi all’agente")',svgNoElements:"Nessun elemento",svgText:e=>`Testo ${e.n}`,svgTextFonts:"Il testo di un SVG dipende dai font installati: dove il font manca, si vede diverso.",svgShow:e=>`Mostra ${e.name}`,svgHide:e=>`Nascondi ${e.name}`,svgFill:"Riempimento",svgStroke:"Contorno",svgElementKind:"elemento SVG",svgCrumbs:"Livello ed elemento",svgBackToLayer:e=>`Torna al livello ${e.name}`,secSvgElement:"Elemento",svgVisible:"Visibile",svgPaint:"Colori dell’elemento",svgNoFill:"Nessun riempimento",svgNoStroke:"Nessun contorno",svgFillInherited:"Dal suo gruppo",svgPaintOther:"Sfumatura o motivo",svgAddFill:"Aggiungi riempimento",svgAddStroke:"Aggiungi contorno",svgSetColour:"Scegli un colore",svgRemoveFill:"Togli il riempimento",svgRemoveStroke:"Togli il contorno",svgPaletteFor:e=>`Campioni per: ${e.field}`,svgOutlined:"Questo SVG non ha testo modificabile: le sue scritte sono disegnate come forme. Per cambiare le parole, chiedi all’agente.",svgAskElement:"Chiedi all’agente di cambiarlo",svgAskElementTip:e=>`Scrivi cosa cambiare in ${e.name}: il commento va all’agente con il tuo prossimo messaggio`,svgOtherVersions:"Le altre versioni del logo non cambiano: modificale dall’elenco dei livelli",svgElementName:e=>`${{g:"Gruppo",path:"Tracciato",rect:"Rettangolo",circle:"Cerchio",ellipse:"Ellisse",line:"Linea",polyline:"Spezzata",polygon:"Poligono",text:"Testo",use:"Riferimento"}[e.tag]??e.tag} ${e.n}`,tagIn:"IN",tagDur:"DUR",tagOut:"OUT",fIn:"Punto di ingresso (secondi)",fDur:"Durata (secondi)",fOut:"Punto di uscita (secondi)",tagX:"X",tagY:"Y",tagW:"L",tagH:"A",tagRot:"ROT",fX:"Posizione X",fY:"Posizione Y",fW:"Larghezza",fH:"Altezza",fRotation:"Rotazione (gradi)",fOpacity:"Opacità",fOpacityField:"Opacità (da 0 a 1)",fContent:"Contenuto",fFont:"Carattere",fWeight:"Peso",fSize:"Dimensione",fColor:"Colore",fColorHex:"Colore esadecimale",fAlign:"Allineamento",alignLeft:"A sinistra",alignCenter:"Al centro",alignRight:"A destra",fontsComposition:"In questa composizione",fontsBrand:"Brand kit",fontNoFile:"Nessun file del carattere nel brand kit",fontAdding:e=>`Aggiungo ${e.family}…`,fFill:"Riempimento",fRadius:"Raggio degli angoli",fVolume:"Volume",fTrimStart:"Inizio del taglio (secondi)",fFadeIn:"Dissolvenza in entrata (secondi)",fFadeOut:"Dissolvenza in uscita (secondi)",fFile:"File",replace:"Sostituisci…",swatchBrand:"Palette del brand",swatchComposition:"In questa composizione",animIn:"Entrata",animOut:"Uscita",animNone:"Nessuna",animDuration:"Durata (secondi)",animCustom:"Animazione personalizzata · chiedi all’agente di cambiarla",animAsk:"Chiedi all’agente",animAskTip:e=>`Scrivi cosa cambiare nell’animazione di ${e.slot} di ${e.name}: il commento va all’agente con il tuo prossimo messaggio`,presetFadeIn:"Dissolvenza in entrata",presetFadeOut:"Dissolvenza in uscita",presetSlideUp:"Scorri verso l’alto",presetSlideDown:"Scorri verso il basso",presetSlideLeft:"Scorri a sinistra",presetSlideRight:"Scorri a destra",presetPopIn:"Comparsa con rimbalzo",presetScaleIn:"Ingrandimento",presetWipe:"Tendina",pickerTitle:"Scegli un file",pickerFor:e=>`Scegli un file ${e.kind}`,pickerEmpty:e=>`Negli Asset non ci sono ancora file ${e.kind}. Caricane uno.`,pickerLoading:"Carico gli Asset…",pickerLoadFailed:e=>`Non riesco a caricare gli Asset: ${e.detail}`,pickerUpload:"Carica…",pickerUploading:"Caricamento…",pickerUploadFailed:e=>`Non sono riuscito a caricare il file: ${e.detail}`,pickerUploadInput:"File da caricare",pickerClose:"Chiudi",pickerList:"File dagli Asset",pickerPreparing:e=>`Preparo ${e.file}…`,shortVideo:e=>`Questo video dura ${e.video} s, ma la clip ne richiede ${e.needed} dall’inizio del taglio. La fine della clip resterebbe vuota.`,fitClip:"Adatta la clip al video",fitNoRoom:e=>`L’inizio del taglio (${e.trim} s) è alla fine del video (${e.video} s) o oltre: abbassalo prima`,pickerWrongKind:e=>`Il file caricato è di un altro tipo: questa clip richiede ${e.kind}. Non è stato sostituito nulla`,weightNotOffered:e=>`Il peso ${e.weight} non è tra quelli dichiarati da questo carattere: sceglilo dall’elenco`,kindImageFile:"immagine",kindSvgFile:"immagine vettoriale",kindVideoFile:"video",kindAudioFile:"audio"},creative:{resumeNote:e=>`Il prossimo messaggio riparte dalla versione ${e.n}.`,versionIncomplete:e=>`v${e.n} incompleta:`,formatsLoadFailed:e=>`Impossibile caricare i formati: ${e.detail}`},canvas:{loading:"Caricamento della creatività…",loadFailed:e=>`Impossibile caricare questa creatività: ${e.detail}. Controlla che Motion Studio sia ancora aperto, poi riprova.`,tryAgain:"Riprova",formats:"Formati",formatsAria:"Formati di questa creatività",canvasAria:"Canvas",tools:"Strumenti del canvas",select:"Seleziona (V)",comment:"Commenta (C)",hand:"Mano (H)",zoomIn:"Ingrandisci",zoomOut:"Riduci",zoomReset:e=>`Zoom ${e.pct}%, torna al 100%`,safeZones:"Zone sicure",safeTitle:"Zone sicure",safeBody:"Le aree ombreggiate sono coperte dall’interfaccia del canale. Tieni fuori testi e loghi.",safeNone:"Nessuno di questi formati ha zone sicure.",safeTop:"Nome dell’account",safeBottom:"Didascalia e pulsanti",safeSide:"Pulsanti",commentHint:"Clicca una tavola per commentare · Esc per uscire",commentStart:e=>`Commenta un punto di ${e.label}`,commentOn:e=>`Commenta ${e.label}`,openEditor:"Apri l’editor",openEditorOf:e=>`Apri l’editor di ${e.label}`,rendering:"In render",renderingState:"In render…",inProgress:"In lavorazione",boardReady:"Pronto",notGenerated:"Non ancora generato",seconds:e=>`${e.n} s`,largeChip:e=>`${e.size} MB · pesante`,largeOpen:e=>`File pesante, ${e.size} MB: mostra il consiglio`,largeTitle:"File pesante",largeDetail:e=>`${e.size} MB a ${e.mbps} Mbps. Circa ${e.target} Mbps bastano per ${e.channel}.`,nothingTitle:"Ancora niente di generato",nothingBody:"Il brief è salvato. Genera la prima versione quando vuoi.",generate:"Genera",generateFailed:e=>`Impossibile avviare la generazione: ${e.detail}`,versionReady:e=>`v${e.n} è pronta`,export:"Esporta",pin:{marker:e=>`Commento ${e.n}`,edit:e=>`Modifica il commento ${e.n}`,field:"Testo del commento",placeholder:"Cosa deve cambiare qui?",add:"Commenta",save:"Salva",remove:"Elimina il commento",atStart:"A 0:00",atStartHint:"I commenti sui fotogrammi esatti arrivano con l’editor"},title:{rename:e=>`Rinomina “${e.title}” (F2)`,field:"Titolo della creatività",saveFailed:e=>`Impossibile rinominare la creatività: ${e.detail}`},state:{needs:"Serve a te",working:"In lavorazione"},panel:"Pannello della creatività",subtitles:"Sottotitoli",tabs:{chat:"Chat",comments:"Commenti",brief:"Brief"},comments:{emptyTitle:"Ancora nessun commento",emptySub:"Passa sopra un formato, scegli Commenta e clicca il punto.",start:"Inizia a commentare",applied:e=>`Applicato in v${e.n}`,working:"In applicazione",open:"Non ancora applicato",noText:"Senza testo"},brief:{goal:"Obiettivo",message:"Messaggio chiave",length:"Durata",formats:"Formati",assets:"Asset",notes:"Note",services:"Servizi",none:"—",edit:"Modifica il brief",back:"Torna al brief"},versions:{timeline:"Versioni",historyItem:"Cronologia delle versioni",historyItemVariant:e=>`Cronologia delle versioni della variante ${e.letter}`,timelineRow:e=>`Versione ${e.n} · ${e.when} · ${e.note}`,title:"Versioni",fromBrief:"Dal brief",noteMore:"Altro",noteLess:"Meno",incomplete:"Incompleta",compare:"Confronta",restart:"Riparti da qui",restartNote:e=>`La prossima modifica parte dalla v${e.n}. Le versioni successive restano nella cronologia.`,restarted:e=>`Le prossime modifiche partono dalla v${e.n}`,undo:"Annulla",commentsOn:e=>`I commenti valgono per la v${e.n}: usa Riparti da qui per commentare questa versione.`,showInFinder:"Mostra nel Finder",showInFolder:"Mostra nella cartella",actionFailed:e=>`Non è riuscito: ${e.detail}`},compare:{title:e=>`Confronta ${e.label}`,label:"Confronta le versioni",left:"Sinistra",right:"Destra",slider:"Posizione del divisore",noOutput:"Non presente in questa versione",view:"Vista",overlay:"Sovrapposte",sideBySide:"Affiancate",useForExport:e=>`★ Usa la v${e.n} per l’export`,usedForExport:e=>`★ Si esporta la v${e.n}`,starManual:"★ Scelta tua",starAuto:"★ Auto",videoFailed:e=>`Impossibile riprodurre la v${e.n}. Il file potrebbe essere stato spostato.`}},formatVersions:{badge:e=>`${e.label}: si esporta la v${e.n}. Apri le sue versioni`,count:e=>e.n===1?"1 versione":`${e.n} versioni`,viewing:e=>`stai guardando la v${e.n}`,newer:e=>`v${e.n} più recente`,title:e=>`Versioni di ${e.label}`,viewRow:e=>`Guarda la v${e.n} · ${e.when} · ${e.note}`,star:e=>`Usa la v${e.n} per l’export`,starred:e=>`Si esporta la v${e.n}`,starToast:e=>`Per ${e.label} si esporterà la v${e.n}`,manual:"Scelta tua",auto:"Auto",autoTip:"Stella automatica: la versione più recente senza problemi",resetAuto:"Torna ad Auto",resetToast:e=>`${e.label} torna ad avere la stella automatica`,pickedByYou:"Scelta da te",automatic:"Automatica",range:e=>`v${e.n}–v${e.last}`,unchangedUntil:e=>`invariata fino alla v${e.last}`,onlyChanges:"Qui vedi solo le versioni che hanno cambiato questo formato.",follows:e=>`segue ${e.primary}`,followsStar:e=>`segue ${e.primary} ★ v${e.n}`,followsNote:e=>`${e.label} usa il file di ${e.primary} e la sua ★: non ha versioni proprie.`,linkedTo:e=>`Collegato a ${e.primary}`,linkedMenu:e=>`Collegato a ${e.primary}: apri il menu del collegamento`,unlink:"Scollega: crea una versione dedicata",unlinked:e=>`${e.label} è scollegato: la prossima modifica ne crea una versione propria`,linkTo:e=>`Collega a ${e.primary}`,linkHint:"Stessa misura e stesso tipo: può usare lo stesso file, senza costi.",linked:e=>`Ora ${e.label} segue ${e.primary}`,fileMissing:e=>`Il file della v${e.n} manca sul disco, quindi Esporta non può includere questo formato. Metti la ★ su un’altra versione.`,followerMissing:e=>`Nessuna copia identica di ${e.primary} ★ v${e.n} da esportare. Metti la ★ su una versione di ${e.primary} che ce l’ha, oppure Scollega.`,followerMissingShort:"Non esportabile",errors:{hashesPending:"Sto ancora calcolando le versioni: riprova fra un momento",pickFollower:e=>`${e.label} segue ${e.primary}: si esporta con la ★ di ${e.primary}.`,notInBrief:e=>`${e.label} non è più nel brief. Ricarica la creatività.`,pickNoFile:e=>`La v${e.n} non ha un file ${e.label}: non si può usare per l’export.`,pickFileMissing:e=>`Il file ${e.label} della v${e.n} manca sul disco o è un collegamento: non si può usare per l’export.`,versionNotFound:e=>`La v${e.n} non esiste più. Ricarica la creatività e riprova.`,linkSelf:"Un formato non può seguire sé stesso.",linkChain:e=>`${e.label} non può seguire ${e.primary}: un formato collegato non può avere a sua volta formati collegati, e uno che li ha non può seguirne un altro.`,linkIncompatible:e=>`${e.label} non può seguire ${e.primary}: ${e.reason}.`,jobRunning:"Aspetta che finisca la generazione in corso, poi riprova.",formatsNotInBrief:"Nessuno dei formati scelti è più nel brief: sceglili di nuovo.",failed:e=>`Non è riuscito: ${e.detail}`}},services:{title:"Servizi",hint:"Quali servizi esterni l'agente può usare per questo creativo. Genera negli Asset non cambia.",kinds:{images:"Immagini",voice:"Voce",music:"Musica",sfx:"Effetti sonori"},choices:{auto:"Auto",openai:"OpenAI",elevenlabs:"ElevenLabs",stock:"Solo stock",none:"Spento"},group:e=>`${e.kind}: servizio`,needsKey:e=>`${e.choice} richiede la chiave ${e.provider}: aggiungila in Impostazioni → Servizi a pagamento.`,stockProviders:"Pexels o Unsplash",missingPermission:e=>`${e.choice} non è disponibile: alla chiave ${e.provider} manca il permesso ${e.permission}. Abilitalo su ${e.provider}, poi prova di nuovo la chiave in Impostazioni → Servizi a pagamento.`,keyRefused:e=>`${e.choice} non è disponibile: ${e.provider} ha rifiutato la chiave salvata o la richiesta. Controlla la chiave, o una restrizione di area, organizzazione o firewall, in Impostazioni → Servizi a pagamento.`,chip:"Servizi",chipAria:e=>`Servizi: ${e.summary}. Cambia quali servizi esterni l'agente può usare`,summaryAuto:"tutti auto",summarySkipped:e=>`${e.kind}: ${e.provider} non disponibile`,autoSkipped:e=>`${e.provider} ${e.kind.toLowerCase()}: ${e.why} · Auto lo salta finché la chiave non è sistemata.`,whyPermission:e=>`manca il permesso ${e.permission}`,whyKeyRefused:"il fornitore ha rifiutato la chiave salvata o la richiesta",testInSettings:"Prova in Impostazioni",openSettings:"Aggiungi una chiave in Impostazioni",summaryPart:e=>`${e.kind} ${e.choice}`,nextTurn:"Le modifiche valgono dal prossimo messaggio.",busy:"Puoi cambiare i servizi quando la generazione finisce.",saving:"Salvataggio…",saveFailed:e=>`Impossibile salvare i servizi: ${e.detail}`},conversation:{agentAction:"Azione dell'agente",atSeconds:e=>`@ ${e.time}s`,goal:"Obiettivo",length:"Durata",lengthNone:"Nessuna",lengthFor:"Durata dei formati video",assets:"Asset (separati da virgola)",notes:"Note",formats:"Formati",saveAndRegenerate:"Salva e rigenera",legacyConvertNotice:"Questa creatività è stata fatta prima delle composizioni modificabili. Rigenerare converte ogni formato in una composizione con l’agente: questa volta costa più token, e i formati potrebbero cambiare leggermente.",viewVersion:e=>`Vedi v${e.n}`,helperRow:{working:"al lavoro…",workingStep:e=>`al lavoro · ${e.step}`,ready:e=>`v${e.n} pronta`,incomplete:e=>`v${e.n} incompleta`,unchanged:"nessuna modifica",failed:"non riuscita",stopped:"fermata",done:"finito"},groupTurn:{workedOn:e=>`Ha lavorato su: ${e.list}`,incomplete:e=>`v${e.n} incompleta`,unchanged:"nessuna modifica",unchangedAt:e=>`nessuna modifica, v${e.n}`,stopped:"fermata",failed:"non riuscita",turnStopped:"Fermato"},openVariantVersion:e=>`Apri ${e.letter} · v${e.n}`,removeComment:e=>`Rimuovi commento ${e.n}`,editComment:e=>`Modifica il commento ${e.n}`,requestChange:"Chiedi una modifica",chipClip:e=>`${e.format} · clip "${e.name}"`,chipRange:e=>`${e.format} · ${e.a}–${e.b} s`,chipClipRange:e=>`${e.format} · clip "${e.name}" · ${e.a}–${e.b} s`,chipClipAnimIn:e=>`${e.format} · clip "${e.name}" · animazione di entrata`,chipClipAnimOut:e=>`${e.format} · clip "${e.name}" · animazione di uscita`,chipClipElement:e=>`${e.format} · "${e.element}" in "${e.name}"`,noteTitleAnimIn:e=>`Commento sull’animazione di entrata di "${e.name}"`,noteTitleAnimOut:e=>`Commento sull’animazione di uscita di "${e.name}"`,noteTitleElement:e=>`Commento su "${e.element}" in "${e.name}"`,commentWaiting:"Commento aggiunto: va all’agente con il tuo prossimo messaggio (scheda Chat)",clipComment:"Commenta la clip",clipCommentNeeds:"Seleziona una clip per commentarla",clipPick:"Commenta una clip",clipPickNone:"Nessuna clip in questo istante",rangeHint:"Maiusc + trascina sul righello per commentare un intervallo",rangeSpan:e=>`Commento su ${e.a}–${e.b} s${e.note?`: ${e.note}`:""}`,onlyOnVersion:e=>`I commenti valgono per la v${e.n}: apri quella versione per commentare.`,noteTitleClip:e=>`Commento su "${e.name}"`,noteTitleRange:e=>`Commento su ${e.a}–${e.b} s`,noteLabel:"Il tuo commento",noteAdd:"Aggiungi commento",noteSave:"Salva commento",rangeComment:"Commenta un intervallo",rangeDialogTitle:"Commenta un intervallo di tempo",rangeStart:"Inizio",rangeEnd:"Fine",rangeInvalid:"La fine deve essere dopo l'inizio",rangeContinue:"Continua",rangeBubble:"Intervallo selezionato",rangeBubbleAction:"Commenta",rangeBubbleEsc:"Esc annulla",rangeTip:e=>`Commenta un intervallo · ${e.keys} imposta inizio e fine sul cursore · trascina sul righello per sceglierlo`,noteCancel:"Annulla"},labels:{colorRoles:{primary:"Primario",secondary:"Secondario",accent:"Accento",background:"Sfondo",text:"Testo",other:"Altro"},fontRoles:{heading:"Titoli",body:"Testo",accent:"Accento",other:"Altro"},logoVariants:{primary:"Principale",secondary:"Secondario",mono:"Monocromatico",icon:"Icona",other:"Altro"},logoBackgrounds:{light:"Chiaro",dark:"Scuro",any:"Qualsiasi"},describing:"Descrizione in corso…",analyzing:"Analisi in corso…",describeFailed:e=>`Descrizione non riuscita: ${e.error??"errore sconosciuto"}`,analysisFailed:e=>`Analisi non riuscita: ${e.error??"errore sconosciuto"}`},brand:{sections:"Sezioni del brand",nav:{overview:"Panoramica",colors:"Colori",type:"Tipografia",logos:"Loghi",voice:"Voce",sound:"Suono",photo:"Stile delle immagini",guidelines:"Linee guida"},loadFailed:e=>`Impossibile caricare il brand: ${e.error}`,retry:"Riprova",kitUnreadable:e=>`brand/brand-kit.json non è leggibile. Correggilo o eliminalo per continuare. (${e.error})`,kitLocked:"Le modifiche sono sospese finché il file non viene corretto.",undo:"Annulla",save:{saving:"Salvataggio…",saved:"Salvato",allSaved:"Tutte le modifiche sono salvate",failed:e=>`Non salvato: ${e.error}`,retry:"Riprova"},overview:{learnedFrom:e=>`Appreso da ${e.hosts} · ${e.when}`,notAnalyzed:"Non ancora analizzato",intro:"Colori, font, loghi e regole che l'agente segue in ogni creatività.",details:"Dettagli"},colors:{hint:"Clicca un colore per modificarlo",add:"+ Aggiungi colore",newName:"Nuovo colore",edit:e=>`Modifica il colore ${e.name}`,popTitle:"Modifica colore",name:"Nome",hex:"Hex",hexInvalid:"Usa 6 cifre esadecimali, es. 1B1913",role:"Ruolo",remove:"Rimuovi",removed:e=>`${e.name} rimosso`,contrast:e=>`Testo in ${e.name}: contrasto ${e.ratio}:1`,empty:"Ancora nessun colore. Aggiungi la palette del brand o analizza un sito."},fonts:{hint:"I file dei font stanno nel progetto, così i render corrispondono sempre",add:"+ Aggiungi a mano",addGoogle:"+ Aggiungi da Google Fonts",google:{title:"Aggiungi da Google Fonts",search:"Cerca font",searchHint:"Cerca per nome",category:"Categoria",categoryAll:"Tutte le categorie",categories:{"Sans Serif":"Sans serif",Serif:"Serif",Display:"Display",Handwriting:"Corsivo a mano",Monospace:"Monospazio"},results:"Font trovati",searching:"Ricerca in corso…",empty:"Nessun font corrisponde alla ricerca.",failed:e=>`Impossibile cercare i font: ${e.error}`,fallback:"Il catalogo di Google Fonts non è disponibile in questo momento. Scrivi il nome esatto della famiglia per cercarla.",stale:"Mostro una copia salvata del catalogo: potrebbe non essere aggiornata.",previewFailed:"Anteprima non disponibile",variable:"Variabile",choose:"Scegli un font a sinistra per selezionarne i pesi.",weights:"Pesi",weight:e=>`Peso ${e.weight}`,italic:"Includi il corsivo",role:"Ruolo",license:"Licenza aperta (OFL o Apache 2.0): uso commerciale libero.",add:"Aggiungi al brand",adding:"Aggiunta in corso…",added:e=>`${e.family} aggiunto al brand`,updated:e=>`${e.family} aggiornato: pesi aggiunti`,addFailed:e=>`Impossibile aggiungere il font: ${e.error}`,close:"Chiudi"},newFamily:"Nuovo font",inProject:"✓ File nel progetto",noFile:"Nessun file del font",noPreview:"Anteprima non disponibile: aggiungi il file del font al progetto",loadFailed:"Impossibile caricare il file del font: anteprima con un font di sistema",specimen:"Aa Bb Cc 0123",sample:"Ma la volpe col suo balzo ha raggiunto il quieto Fido",edit:e=>`Modifica il font ${e.family}`,popTitle:"Modifica font",family:"Famiglia",familyNormalized:e=>`Tenuta la prima famiglia dello stack CSS: ${e.family}`,familyRequired:"Inserisci il nome della famiglia",role:"Ruolo",weights:"Pesi",weightsHint:"es. 400, 700",file:"File del font",noFileOption:"Nessun file",noFontAssets:"Carica file .ttf, .otf o .woff nella scheda Asset per collegarli qui.",remove:"Rimuovi",removed:e=>`${e.family} rimosso`,empty:"Ancora nessun font."},logos:{add:"+ Aggiungi logo",upload:"Carica un file…",fromAssets:"Dagli Asset",noAssets:"Ancora nessuna immagine negli Asset",edit:e=>`Modifica il logo ${e.file}`,popTitle:"Modifica logo",variant:"Variante",background:"Sfondo",onLight:"Su chiaro",onDark:"Su scuro",onAny:"Qualsiasi sfondo",remove:"Rimuovi",removed:"Logo rimosso",missingLight:"Manca: logo per sfondi chiari",missingDark:"Manca: logo per sfondi scuri",missingLightSub:"Carica una versione scura del logo o sceglila dagli Asset.",missingDarkSub:"Carica una versione chiara del logo o sceglila dagli Asset.",uploadLogo:"Carica logo",uploading:"Caricamento…",added:"Logo aggiunto",alt:e=>`Logo ${e.file}`},sound:{hint:"L'agente lo segue quando sceglie musica, effetti sonori e voci.",genre:"Genere",genrePlaceholder:"es. elettronica calda",genreSuggestions:"Suggerimenti di genere",genreOptions:{cinematic:"Cinematografico",electronic:"Elettronica",acoustic:"Acustico",hiphop:"Hip hop",corporate:"Aziendale",ambient:"Ambient",jazz:"Jazz",pop:"Pop"},energy:"Energia",energyNone:"Non impostata",energyLow:"Bassa",energyMedium:"Media",energyHigh:"Alta",instruments:"Strumenti",instrumentsPlaceholder:"es. pianoforte",avoid:"Da evitare",avoidPlaceholder:"es. ottoni",add:"Aggiungi",none:"Ancora nessuno",full:"L'elenco è pieno.",remove:e=>`Rimuovi ${e.text}`,voice:"Voce",noVoice:"Nessuna voce del brand scelta.",chooseVoice:"Scegli una voce",changeVoice:"Cambia voce",clearVoice:"Rimuovi la voce",voiceOf:e=>`${e.provider} · ${e.name}`,picker:{title:"Scegli la voce del brand",provider:"Servizio delle voci",providers:{elevenlabs:"ElevenLabs",openai:"OpenAI"},search:"Cerca voci",searchHint:"Cerca per nome",results:"Voci trovate",loading:"Carico le voci…",empty:"Nessuna voce corrisponde alla ricerca.",failed:e=>`Non riesco a caricare le voci: ${e.error}`,noKey:e=>`${e.provider} richiede una chiave API prima di poter scegliere una voce.`,openSettings:"Apri le Impostazioni",noPreview:"Nessuna anteprima",play:e=>`Ascolta l'anteprima di ${e.name}`,stop:e=>`Ferma l'anteprima di ${e.name}`,previewFailed:"Non riesco a riprodurre l'anteprima.",openaiNote:"Le voci OpenAI non hanno un'anteprima gratuita.",use:e=>`Usa ${e.name}`,selected:"Scelta",close:"Chiudi"}},voice:{empty:"Ancora nessun tono di voce.",edit:"Modifica",write:"Scrivilo",save:"Salva",cancel:"Annulla",placeholder:"Come parla il brand…",toneLabel:"Tono di voce",do:"Da fare",avoid:"Da evitare",more:e=>`Mostra altre ${e.count}`,less:"Mostra meno",addRule:"+ Aggiungi",doPlaceholder:"Qualcosa da fare sempre",avoidPlaceholder:"Qualcosa da evitare",doLabel:"Nuova regola da fare",avoidLabel:"Nuova regola da evitare",add:"Aggiungi",removeRule:e=>`Rimuovi la regola: ${e.text}`,ruleRemoved:"Regola rimossa",noRules:"Ancora nessuna regola."},photo:{empty:"Ancora nessuno stile delle immagini.",placeholder:"Luce, inquadrature, soggetti, trattamento…",label:"Stile delle immagini"},guidelines:{open:"Apri il documento completo",empty:"Ancora nessuna linea guida. Analizza un sito o scrivile tu.",write:"Scrivi le linee guida",edit:"Modifica",save:"Salva",cancel:"Annulla",close:"Chiudi",label:"Linee guida (Markdown)",discardQ:"Scartare le modifiche alle linee guida?",discard:"Scarta",keep:"Continua a modificare"},codebase:{kindAria:"Tipo di fonte",kindSite:"Da un sito",kindCode:"Da una codebase",emptySub:"Scegli la cartella dell'app o del sito. Claude ne legge codice, stili e risorse e ti propone colori, font, loghi e voce da rivedere.",pathAria:"Cartella della codebase",pathPlaceholder:"/Users/tuonome/dev/app",noteAria:"Nota (facoltativa)",notePlaceholder:"Es. il design system è in /packages/ui",hint:"L'agente legge la cartella in sola lettura e non apre file segreti (.env, chiavi…).",suggestions:"Codebase di questo progetto",suggestionTitle:e=>`Usa ${e.path}`,add:"Aggiungi cartella",addAndAnalyze:"Analizza",needPath:"Inserisci il percorso assoluto di una cartella",actions:e=>`Azioni per ${e.name}`,removed:e=>`${e.name} rimossa`,added:"Cartella aggiunta · analizza per imparare da essa",notesTitle:"Note sull'analisi"},sources:{title:"Fonti",actions:e=>`Azioni per ${e.host}`,remove:"Rimuovi",removed:e=>`${e.host} rimosso`,analyzedAt:e=>`Analizzato ${e.when}`,never:"Mai analizzato",inProgress:"Analisi in corso",addLabel:"Aggiungi una fonte",addPlaceholder:"Aggiungi l'indirizzo di un sito",add:"Aggiungi",added:"Fonte aggiunta · analizza per imparare da lei",images:e=>e.count===1?"+ 1 immagine dai riferimenti è inclusa":`+ ${e.count} immagini dai riferimenti sono incluse`,noImages:`Spunta "Usa per l'analisi del brand" nei riferimenti per includere immagini.`,analyze:"Analizza",analyzeAgain:"Analizza di nuovo",busyDescribe:"Gli asset sono in descrizione: analizza quando finisce.",needSource:"Aggiungi prima un sito.",empty:"Ancora nessun sito.",invalidUrl:"Inserisci un indirizzo web, es. https://www.example.com"},analysis:{title:"Sto imparando il brand",queued:"In attesa di partire…",starting:"Avvio: lettura delle fonti",phasesLabel:"Fasi dell'analisi",phases:{queued:"Avvio",reading:"Lettura",fonts:"Font",colors:"Colori",logos:"Loghi",tone:"Tono",writing:"Scrittura",done:"Fatto"},phaseState:{done:"completata",current:"in corso",pending:"da fare"},working:"al lavoro",progress:"Avanzamento dell'analisi",cancel:"Annulla",canceled:"Analisi annullata",failed:e=>`L'analisi non è terminata: ${e.error}`,retry:"Riprova",ready:"I suggerimenti per il brand sono pronti",review:"Rivedi",readyTitle:"Suggerimenti pronti",readySub:e=>e.count===1?"1 suggerimento da rivedere":`${e.count} suggerimenti da rivedere`},health:{title:"Salute del brand",ok:"fatto",todo:"da fare",palette:"Palette con i ruoli",fonts:"File dei font nel progetto",rules:"Regole da fare e da evitare",lightLogo:"Logo per sfondi chiari",fix:{palette:"Aggiungi colori",fonts:"Collega i file",rules:"Aggiungi regole",lightLogo:"Carica"}},history:{title:"Analisi",autoTitle:"Comandi eseguiti",autoTruncated:"Sono elencati solo i primi.",applied:"applicata",discarded:"scartata",open:"da rivedere",undone:"annullata"},empty:{title:"Insegna a Claude questo brand",sub:"Incolla il sito. Claude lo legge e ti propone colori, font, loghi e voce da rivedere.",website:"Sito web",placeholder:"https://www.example.com",analyze:"Analizza",manual:"Oppure impostalo a mano"}},brandReview:{dialog:"Rivedi i suggerimenti per il brand",title:e=>`Ecco cosa ha imparato Claude da ${e.hosts}`,yourSources:"le tue fonti",sub:e=>`${e.count===1?"1 suggerimento":`${e.count} suggerimenti`} · scegli cosa tenere, tutto resta modificabile dopo`,close:"Chiudi",groupsLabel:"Gruppi di suggerimenti",groups:{colors:"Colori",fonts:"Tipografia",logos:"Loghi",tone:"Voce",dos:"Da fare",donts:"Da evitare",photoStyle:"Stile delle immagini",guidelines:"Linee guida"},selectAll:"Seleziona tutto",deselectAll:"Deseleziona tutto",selected:e=>`${e.n} di ${e.m} selezionati`,assetsAdded:e=>`Aggiunti anche agli asset: ${e.count===1?"1 file":`${e.count} file`}`,keep:e=>`Tieni ${e.label}`,ops:{add:"Nuovo",update:"Aggiorna",remove:"Rimuovi"},replaces:e=>`Sostituisce: ${e.text}`,fontNoFile:"Anteprima con un font di sistema: il file del font non è stato scaricato",fontFailed:"Anteprima con un font di sistema: impossibile caricare il file del font",useGuidelines:"Usa le linee guida proposte",replacesGuidelines:"Sostituiscono le linee guida attuali",footnote:"Applicando aggiungi gli elementi che tieni. Puoi annullare dalla notifica.",discardAll:"Scarta tutto",confirmDiscard:e=>`Scartare ${e.count===1?"il suggerimento":`tutti i ${e.count} suggerimenti`}? Non si può annullare.`,keepReviewing:"Continua a rivedere",apply:e=>`Applica ${e.n} di ${e.m}`,applied:e=>e.count===1?"Applicato 1 suggerimento al brand":`Applicati ${e.count} suggerimenti al brand`,undo:"Annulla",restored:"Brand ripristinato",discarded:"Suggerimenti scartati",nothing:"Nessuna novità",nothingSub:"L'analisi non ha trovato nulla da cambiare nel brand."},source:{website:e=>`Sito: ${e.host}`,image:e=>`Immagine: ${e.name}`},app:{approvalNotificationTitle:"Motion Studio: serve la tua approvazione",settingsSaveFailed:e=>`Impossibile salvare le impostazioni: ${e.detail}`,readyNotificationTitle:"Motion Studio: creatività pronta"},welcome:{setupStep:e=>`Configurazione · ${e.n} di ${e.total}`,title:"Trasforma i brief in motion graphics con Claude Code",intro:"Tutto gira su questo computer. Progetti, brand e render restano in una cartella che scegli tu.",steps:"Passi della configurazione",stepDone:"fatto",checkTitle:"Controlla il sistema",checkIntro:"Motion Studio usa Claude Code e alcuni strumenti su questo computer.",checksPassed:e=>`${e.ok} controlli superati su ${e.total}`,checking:"Controllo in corso…",checkingRow:"controllo…",checksList:"Controlli di sistema",serverUnreachable:e=>`Impossibile contattare il server di Motion Studio: ${e.detail}. Verifica che Motion Studio sia ancora in esecuzione, poi ricontrolla.`,serverUnreachableShort:"Server non raggiungibile",missing:"Manca",recommended:"Consigliato",remedy:"Come risolvere",checkAgain:"Ricontrolla",blocked:"Risolvi i controlli segnati con Manca, poi ricontrolla.",workspaceTitle:"Scegli il workspace",workspaceSub:"Dove si salvano i progetti",workspaceIntro:"Motion Studio tiene al suo interno una cartella per progetto, con la cronologia delle versioni. Puoi cambiarlo in seguito rifacendo la configurazione dal menu dell'account.",folder:"Cartella",pathPlaceholder:"/Users/tuonome/MotionStudio",pickFolderTitle:"Scegli la cartella di lavoro",statusCurrent:e=>e.count===0?"Workspace attuale · ancora nessun progetto":`Workspace attuale · ${e.count} ${e.count===1?"progetto":"progetti"}`,statusChecking:"Lettura del workspace…",statusNew:"Se la cartella non esiste Motion Studio la crea, e la verifica quando prosegui.",workspaceNotFound:e=>`Cartella non trovata: ${e.path}, scegline un'altra`,workspaceInvalid:e=>`Contenuto non valido in ${e.path}: ${e.detail}`,saveFailed:e=>`Questa cartella non si può usare: ${e.detail}. Scegline un'altra o correggi i permessi.`,preview:"Anteprima della cartella",previewProject:"una cartella per progetto",systemReady:"Il computer è pronto",systemNotes:"Pronto, con alcuni consigli",recheck:"Ricontrolla",projectTitle:"Crea il primo progetto",projectSub:"Dagli un nome, poi aggiungi un sito per imparare il brand",projectIntro:"Aggiungi un sito e Claude impara colori, font, loghi e tono di voce.",projectName:"Nome del progetto",projectNamePlaceholder:"Es. Acme",website:"Sito web",optional:"facoltativo",websitePlaceholder:"https://www.esempio.it",websiteInvalid:"Inserisci un indirizzo web come https://www.esempio.it, oppure lascia il campo vuoto.",createFailed:e=>`Il progetto non è stato creato: ${e.detail}. Controlla il nome e riprova.`,created:e=>`${e.name} creato`,createdLearning:e=>`${e.name} creato · sto imparando il brand da ${e.site}`,sourceFailed:e=>`Il progetto è stato creato, ma il sito non è stato aggiunto: ${e.detail}. Aggiungilo di nuovo qui in Brand.`,analysisFailed:e=>`Il progetto è stato creato, ma l'analisi del brand non è partita: ${e.detail}. Avviala di nuovo qui in Brand.`,back:"Indietro",continue:"Continua",create:"Crea progetto",skip:"Salta per ora",enterHint:"Premi ↵ per continuare"},pairing:{title:"Apri Motion Studio dal link nel terminale",body:"Questa scheda non ha la chiave privata che Motion Studio ha stampato all'avvio. La chiave impedisce ad altre app e siti web su questo computer di controllare i tuoi progetti.",terminal:"Terminale",terminalExample:"Cosa mostra il terminale quando Motion Studio parte",running:"Motion Studio è in esecuzione.",open:"Apri:",lostTitle:"Hai chiuso il terminale o perso il link?",lostBody:"Esegui questo comando in una nuova finestra del terminale. Stampa di nuovo il link senza riavviare nulla.",copy:"Copia",copied:"Copiato",copiedStatus:"Comando copiato negli appunti.",desktopHint:"Usi l'app desktop? Apri Motion Studio da Applicazioni: non ha mai bisogno di questo passaggio.",copyFallback:e=>`Qui non si può copiare in automatico: il comando è selezionato, premi ${e.keys} per copiarlo.`},projects:{title:"Progetti",jumpBackIn:"Riprendi da qui",recentCreatives:"Creatività recenti",newCreativeIn:e=>`Nuova creatività in ${e.project}`,formats:e=>e.n===1?"1 formato":`${e.n} formati`,waiting:"Aspetta il tuo OK",rendering:e=>`Render · ${e.step}`,readyWhen:e=>`Pronta · ${e.when}`,sort:"Ordina i progetti",sortRecent:"Ultima modifica",sortName:"Nome",newProject:"Nuovo progetto",startTitle:"Inizia un nuovo progetto",startBody:"Dagli un nome, poi aggiungi il sito in Brand: Claude impara colori, font, loghi e tono di voce al posto tuo.",nameLabel:"Nome del progetto",create:"Crea",created:e=>`Progetto “${e.name}” creato`,open:"Apri",createFailed:e=>`Il progetto non è stato creato: ${e.detail}. Controlla il nome e riprova.`,loadFailed:e=>`Impossibile caricare i progetti: ${e.detail}. Verifica che Motion Studio sia ancora in esecuzione, poi riprova.`,tryAgain:"Riprova",loading:"Caricamento dei progetti…",emptyTitle:"Ancora nessun progetto",emptyBody:"Un progetto raccoglie un brand e le sue creatività. Dai un nome al primo per iniziare.",approvalsWaiting:e=>e.n===1?"1 approvazione in attesa":`${e.n} approvazioni in attesa`,creatives:()=>"creatività",assets:()=>"asset",colors:e=>e.n===1?"colore":"colori",fonts:()=>"font",unreadable:"Illeggibile"},project:{sections:"Sezioni progetto",tabs:{creatives:"Creatività",brand:"Brand",assets:"Asset",references:"Riferimenti",settings:"Impostazioni"},loadFailed:e=>`Impossibile caricare il progetto: ${e.detail}`},integrity:{title:"Questo progetto è bloccato",body:"Alcuni file che configurano git o l'agente sono cambiati in un modo che Motion Studio non ha fatto. Verrebbero eseguiti fuori dalla sandbox, quindi sul progetto non partono né l'agente né git finché non tornano com'erano, o finché non accetti le modifiche come tue.",filesLabel:"File protetti cambiati",change:{changed:"modificato",added:"aggiunto",removed:"eliminato"},restoreHint:"Rimetti questi file com'erano e il progetto si sblocca da solo.",accept:"Accetta queste modifiche",gitTitle:"Git è bloccato su questo progetto",gitBody:"Questa impostazione non si può mai accettare: toglila come indicato e il progetto torna a funzionare.",confirmTitle:"Accettare queste modifiche?",confirmText:"Accetta solo se hai fatto tu queste modifiche",confirmDetail:"I file elencati diventano il nuovo riferimento. Se non li hai cambiati tu, annulla e ripristinali.",confirm:"Accetta",cancel:"Annulla",changedSince:"I file sono cambiati di nuovo. Controlla la lista aggiornata.",acceptFailed:e=>`Impossibile accettare le modifiche: ${e.detail}`,accepted:"Modifiche accettate: il progetto è sbloccato"},common:{chooseFolder:"Scegli cartella…",send:"Invia"},api:{httpError:e=>`Errore ${e.status}`},settings:{language:"Lingua",languageSystem:e=>`Sistema (${e.detected})`,languageNames:{en:"English",it:"Italiano"},languageFailed:e=>`Lingua non cambiata: ${e.detail}`},usage:{tokens:e=>`${e.count} token`,unknown:"—",todayButton:e=>`Token usati oggi: ${e.count}. Apri Utilizzo`,today:e=>`Oggi · ${e.count} token`,todayUnknown:"Oggi · token non ancora disponibili",open:"Utilizzo",tokensAtLeast:e=>`≥ ${e.count} token`,soFar:"finora",atLeast:e=>`≥ ${e.cost}`,billingSubscription:e=>`Rientra nel tuo piano Claude. A prezzi API sarebbe circa ${e.cost}.`,billingApi:e=>e.cost,billingUnknown:e=>`Stima a prezzi API: ${e.cost}`,billingSubscriptionAtLeast:e=>`Rientra nel tuo piano Claude. A prezzi API sarebbe almeno ${e.cost}.`,billingUnknownAtLeast:e=>`Stima a prezzi API: almeno ${e.cost}`,costUnknown:"Il costo di alcune esecuzioni non è noto: la cifra reale può essere più alta.",noCost:"Costo non disponibile per questa esecuzione.",details:"Dettaglio dei token",input:"Input",output:"Output",cacheWrite:"Scrittura in cache",cacheRead:"Lettura dalla cache (esclusa dal totale)",creativeTotal:"Token",untracked:"Le versioni create prima dell'inizio del conteggio non sono incluse."},shell:{home:"Home di Motion Studio",search:"Cerca progetti, creatività e pagine",running:e=>`${e.count} in corso`,bell:e=>e.count?`Attività, ${e.count} in attesa`:"Attività",account:"Menu account",settings:"Impostazioni",systemCheck:"Controllo di sistema",replaySetup:"Rifai la configurazione",projects:"Progetti",newProject:"Nuovo progetto",switchProject:e=>`Progetto ${e.name}, cambia progetto`,backAllFormats:"Tutti i formati",moreActions:"Altre azioni",newCreative:"Nuova creatività",breadcrumb:"Posizione",activity:{label:"Attività",sections:"Sezioni attività",needsYou:"Serve a te",running:"In corso",done:"Finiti",emptyNeeds:"Niente in attesa",emptyNeedsSub:"Le richieste dell'agente compaiono qui e come avviso.",emptyRunning:"Niente in corso",groupPhases:{coordinator:"Legge il tuo messaggio",confirm:"In attesa della tua conferma",helpers:"Le varianti sono al lavoro",report:"Scrive la risposta"},emptyRunningSub:"Generazioni e analisi mostrano qui il loro avanzamento.",emptyDone:"Ancora niente di finito",emptyDoneSub:"Qui compaiono gli ultimi esiti di questa sessione.",queued:"In attesa di partire",open:"Apri",enableNotifications:"Attiva le notifiche",versionReady:e=>`v${e.n} pronta`,versionIncomplete:e=>`v${e.n} salvata, incompleta`,versionKept:e=>`Nessuna versione nuova: v${e.n} invariata`},palette:{label:"Vai a",placeholder:"Cerca progetti, creatività e pagine",empty:e=>`Nessun risultato per “${e.query}”`,pages:"Pagine",projects:"Progetti",creatives:"Creatività",hint:"↑↓ per muoverti · ↵ per aprire · esc per chiudere",inProject:e=>`in ${e.project}`},attention:{waiting:e=>e.count===1?"1 richiesta ha bisogno di te":`${e.count} richieste hanno bisogno di te`,review:"Rivedi",many:e=>`${e.count} approvazioni in attesa`}},chat:{label:"Messaggi",appliesTo:"Si applica a",appliesAll:"Tutti i formati",appliesHint:"I formati a cui si applica la modifica: gli altri restano identici",appliesButton:e=>`Si applica a: ${e.choice}. Scegli i formati`,appliesInGroup:e=>`${e.group} · ${e.count} formati`,appliesCount:e=>`${e.count} formati`,appliesWholeGroup:e=>`${e.group}: tutto il gruppo`,followsBoth:e=>`${e.follower} segue ${e.primary}: la modifica vale per entrambi`,you:"Tu",agent:"Agente",summary:"Riepilogo",steps:e=>e.count===1?"1 passo":`${e.count} passi`,details:e=>`Dettagli dell’attività (${e.count})`,commandsRan:e=>{const t=e.count===1,i=e.attempted?t?"eseguito o tentato":"eseguiti o tentati":t?"eseguito":"eseguiti";return`${`${e.atLeast?"Almeno ":""}${e.count} ${t?"comando":"comandi"} ${i}`}${e.sandbox?" nella sandbox":""}${e.approved>0?` · ${e.approved===1?"1 approvato da te":`${e.approved} approvati da te`}`:""}`},commandMarks:{approved:"Approvato da te",denied:"Negato",notRun:"Non eseguito",error:"Terminato con un errore",interrupted:"Interrotto"},readFile:e=>`Letto ${e.file}`,autoDetails:"Dettagli",detailKinds:{session:"Sessione",text:"Messaggio",tool:"Strumento",result:"Output",error:"Errore",limit:"Limite",step:"Passo",log:"Log",unreadable:"Illeggibile",done:"Fatto",failed:"Non riuscito",stopped:"Fermato da te"},failed:e=>`L’agente si è fermato: ${e.error}`,working:"L’agente sta lavorando…",placeholder:"Descrivi cosa cambiare",busyPlaceholder:"L’agente sta lavorando all’ultima richiesta",sendHint:e=>`${e.keys} per inviare`,sendWithKeys:e=>`Invia (${e.keys})`,attach:"Allega file",attachMenu:"Allega file al messaggio",attachComputer:{title:"Dal computer",hint:"Lo salva anche negli Asset del progetto"},attachLibrary:{title:"Dagli Asset",hint:"Immagini, video e file del progetto"},attachedFiles:"File allegati",attachWait:"I file allegati partono con la prossima richiesta, quando l’agente ha finito.",uploading:e=>`Caricamento di ${e.name}…`,cancelUpload:e=>`Annulla il caricamento di ${e.name}`,attachmentGone:e=>e.count===1?`${e.names} non è più negli Asset: tolto dagli allegati. Invia di nuovo.`:`${e.names} non sono più negli Asset: tolti dagli allegati. Invia di nuovo.`,pin:e=>`${e.n} · ${e.format}`,sendFailed:e=>`Invio non riuscito: ${e.detail}. Il messaggio è ancora qui: riprova.`,retried:e=>`Riprovato · ${e.time}`,sendBusy:"Una generazione è già in corso per questa creatività. Attendi che finisca, poi invia di nuovo.",cancelFailed:"Non è stato possibile fermare l’agente. Riprova.",emptyTitle:"Ancora nessun messaggio",emptySub:"Chiedi una modifica qui sotto: ogni richiesta e ogni passo dell’agente compaiono qui."},liveUi:{send:"Invia all’agente",queue:"Metti in coda per dopo",interruptedRow:"Interrotto da te",consoleMessage:"Messaggio al turno della console",consoleOpen:"Messaggio",consoleUnsupported:"I messaggi dal vivo non sono supportati da questa versione di Claude Code. Invialo quando il turno finisce.",sendMore:"Altri modi di inviare",redirect:"Reindirizza",cancelRedirect:"Annulla il reindirizzamento",redirectNote:"Reindirizza ferma il passo in corso dell’agente e prosegue nella stessa sessione con il tuo messaggio.",queueOnly:"L’agente non può ricevere messaggi mentre lavora. Il messaggio aspetta e parte come richiesta successiva.",liveHint:"Invio invia · Maiusc+Invio a capo",liveNote:"Invia: l’agente lo legge appena finisce il passo in corso. Metti in coda per dopo parte quando l’agente ha finito.",queueHint:"Invio la mette in coda",redirectHint:e=>`${e.keys} per reindirizzare`,livePlaceholder:"Messaggio all’agente…",queuePlaceholder:"Prossima richiesta…",redirectPlaceholder:"Che cosa deve fare invece l’agente?",stop:"Ferma",stopMenu:"Opzioni di arresto",stopAndRedirect:"Ferma e reindirizza…",stopFailed:"Non è stato possibile fermare l’agente. Riprova.",redirectFailed:e=>`Impossibile reindirizzare: ${e.detail}`,redirectTitleFor:e=>`Ferma e reindirizza: ${e.label}`,redirectSend:"Reindirizza",redirectCancel:"Annulla",redirectFieldLabel:"Che cosa deve fare invece l’agente",state:{sending:"Invio…",pending:"In attesa del prossimo passo dell’agente",pendingStart:"Sarà incluso quando l’agente parte",sent:"Inviato",delivered:"Consegnato",queued:"In coda",notDelivered:"Non consegnato",redirect:"Reindirizzamento"},sentHint:"L’agente lo legge appena finisce il passo in corso",deliveredHint:"L’agente ci ha iniziato a lavorare",notDeliveredReason:"Il turno è finito prima che l’agente lo leggesse. Le tue parole restano qui sopra: inviale di nuovo.",outcome:{"queued-unsupported":"In coda: questo Claude Code non riceve messaggi durante un turno, quindi parte come richiesta successiva.","queued-after-finish":"In coda come richiesta successiva.",queued:"In coda per dopo.",restarted:"Reindirizzato: l’agente prosegue con il tuo messaggio.",interrupted:"Reindirizzato: il passo dell’agente è stato interrotto.","pending-start":"Sarà incluso quando l’agente parte."},queueLabel:"Richieste in coda",queueTitle:e=>e.count===1?"1 richiesta in coda":`${e.count} richieste in coda`,queuePaused:"Nulla è in esecuzione: la coda aspetta te.",runNext:"Avvia la prossima",item:e=>`Richiesta in coda ${e.n}`,edit:e=>`Modifica la richiesta in coda ${e.n}`,remove:e=>`Togli la richiesta in coda ${e.n}`,moveUp:e=>`Sposta su la richiesta in coda ${e.n}`,moveDown:e=>`Sposta giù la richiesta in coda ${e.n}`,drag:e=>`Trascina la richiesta in coda ${e.n} per riordinare`,editField:"Testo della richiesta in coda",save:"Salva",cancelEdit:"Annulla",draftKeptLabel:"La tua modifica non salvata",draftKept:"Questa richiesta è partita prima che la tua modifica fosse salvata, quindi è stata eseguita con il testo di prima. La tua modifica è conservata qui.",draftField:"La tua modifica non salvata",draftQueue:"Metti in coda come nuova richiesta",draftDiscard:"Scarta",moved:e=>`Richiesta ${e.n} spostata in posizione ${e.to}`,pins:e=>e.count===1?"1 commento":`${e.count} commenti`},render:{playerFrame:e=>`Anteprima dal vivo di ${e.label}`,loading:"Preparo l’anteprima dal vivo…",busy:"Le anteprime sono occupate: riprovo tra un momento…",failed:e=>`L’anteprima dal vivo non è partita: ${e.detail}`,retry:"Riprova",runtimeIssues:"Problemi dell’anteprima",runtimeError:{compositionMissing:"Impossibile leggere la composizione",compositionInvalid:"La composizione non è valida",baseNotAllowed:"La composizione punta fuori dalla sua cartella",assetPathRejected:"Un percorso di file è stato rifiutato",assetLoadFailed:"Un file non si è caricato",fontMissing:"Manca un font",fontLoadFailed:"Un font non si è caricato",videoSeekTimeout:"Un video ha impiegato troppo a mostrare il fotogramma",layerTimeout:"Un livello HTML ha impiegato troppo a rispondere",layerError:"Un livello HTML ha segnalato un errore",layerStalled:"Un livello HTML ha aspettato un timer che durante il render non scatta mai",badAnimation:"Un’animazione non si è potuta applicare",audioBlocked:"Il browser ha bloccato l’audio: riproduco senza suono",unknownClipType:"Una clip di tipo sconosciuto è stata saltata",frameTimeout:"Un fotogramma ha impiegato troppo a disegnarsi",videoFrameMismatch:"Un fotogramma video potrebbe essere leggermente sfasato",clipAudioFailed:"Una clip si sente senza audio",textOverflow:"Un testo esce dal suo riquadro",subtitlesInvalid:"Non riesco a leggere i sottotitoli: il video si vede senza"},errorClip:e=>`${e.text} (${e.clip})`,playPreview:e=>`Riproduci l’anteprima dal vivo di ${e.label}`,stopPreview:e=>`Ferma l’anteprima dal vivo di ${e.label}`,queued:"In coda",queuedAhead:e=>e.count===1?"In coda · 1 render prima":`In coda · ${e.count} render prima`,rendering:e=>`Render ${e.pct}%`,rendered:"Renderizzato",failedState:"Render non riuscito",retryRender:"Riprova",retryRenderOf:e=>`Riprova il render di ${e.label}`,problemState:e=>e.count===1?"Problema nel render":`${e.count} problemi nel render`,problemTitle:"Il render ha dei problemi",problemOpen:e=>`Mostra i problemi del render di ${e.label}`,problemHint:"La piattaforma potrebbe rifiutare questo file. Rifai il render, o modifica la composizione.",renderAgain:"Rifai il render",renderAgainOf:e=>`Rifai il render di ${e.label}`,render:"Render",renderVersion:e=>`Render v${e.n}`,started:e=>e.count===1?"Render di 1 formato":`Render di ${e.count} formati`,startFailed:e=>`Il render non è partito: ${e.detail}`,startedPartly:e=>`${e.count===1?"Render di 1 formato":`Render di ${e.count} formati`}; non partiti: ${e.list} (${e.detail})`,storyboard:"Storyboard",scene:e=>`Scena ${e.n}`,sceneAt:e=>`${e.name}, a ${e.time}`,storyboardLoading:"Preparo lo storyboard…",wholeVideo:"Tutto il video",scenesLoading:"Carico le scene…",scenesUnavailable:"Non riesco a leggere le scene di questa versione",framesProgress:e=>`${e.format} · ${e.done} / ${e.total} fotogrammi`,mediaProgress:e=>`${e.format} · preparo i media ${e.done}/${e.total}`,finishing:e=>`${e.format} · ultimo passaggio`,starting:"Avvio…",cancel:"Annulla",cancelRender:e=>`Annulla ${e.label}`,cancelFailed:e=>`Impossibile annullare: ${e.detail}`,rendersFirst:"Prima il render",engineLabel:"Motore di render",engineElectron:"Integrato (Electron)",engineSystem:e=>`Google Chrome ${e.version}`,engineSystemPlain:"Google Chrome",engineCft:e=>`Chrome for Testing ${e.version}`,engineInjected:"Integrato",engineNone:"Non disponibile",engineNoneHint:"Anteprime dal vivo, storyboard e render richiedono Chrome: installa Google Chrome, oppure scarica Chrome for Testing.",downloadOffer:"Scarica Chrome for Testing (circa 100 MB)",consentTitle:"Scaricare Chrome for Testing?",consentBody:e=>`Chrome for Testing ${e.version} (${e.size}) viene scaricato da Google nella cartella dei dati di Motion Studio e usato solo per anteprime e render. Non si scarica nulla finché non accetti.`,consentAgree:e=>`Scarica ${e.size}`,consentChecking:"Controllo la dimensione del download…",consentFailed:e=>`Impossibile leggere il download: ${e.detail}`,downloading:e=>`Scaricati ${e.done} di ${e.total}`,downloaded:"Chrome for Testing è installato",downloadFailed:e=>`Il download non è riuscito: ${e.detail}`,sizeMb:e=>`${e.n} MB`,engineLoadFailed:e=>`Impossibile leggere il motore di render: ${e.detail}`,pinFrame:e=>`Fotogramma inviato con il commento ${e.n}`},ui:{pickColor:"Scegli un colore",loading:"Caricamento",typing:"Sta scrivendo",progress:"Avanzamento",timeLeft:e=>`${e.time} rimanenti`,version:e=>`Versione ${e.n}`,chosenVersion:e=>`Versione scelta ${e.n}`,emptyTitle:"Niente da mostrare",noPreview:"Anteprima non disponibile"}},explain:{complex:"Esegue un comando shell complesso",more:e=>e.count===1?"e un altro passaggio":`e altri ${e.count} passaggi`,runs:e=>`Esegue ${e.cmd}`,tool:e=>`Usa ${e.tool}`,edit:e=>`Modifica ${e.path}`,read:e=>`Legge ${e.path}`,webFetch:e=>`Apre ${e.host}`,webSearch:"Cerca sul web",cd:e=>`Passa alla cartella ${e.path}`,list:e=>`Elenca i file in ${e.paths}`,show:e=>`Mostra ${e.paths}`,headFile:e=>`Mostra l’inizio di ${e.paths}`,headPipe:"Tiene le prime righe dell’output",tailFile:e=>`Mostra la fine di ${e.paths}`,tailPipe:"Tiene le ultime righe dell’output",fileType:e=>`Controlla il tipo di file di ${e.paths}`,count:e=>`Conta le righe di ${e.paths}`,countPipe:"Conta le righe dell’output",readFiles:e=>`Legge ${e.paths}`,filter:e=>`Elabora il testo di ${e.paths}`,filterPipe:"Elabora il testo dell’output",search:e=>`Cerca del testo in ${e.paths}`,searchPipe:"Filtra le righe dell’output",json:e=>`Legge il JSON in ${e.paths}`,jsonPipe:"Legge il JSON dall’output",jsonCheck:e=>`Controlla il file JSON ${e.path}`,editText:e=>`Modifica il testo di ${e.paths}`,mkdir:e=>e.n>1?`Crea le cartelle: ${e.paths}`:`Crea la cartella ${e.paths}`,copy:e=>`Copia ${e.sources} in ${e.dest}`,move:e=>`Sposta ${e.sources} in ${e.dest}`,delete:e=>`Elimina ${e.paths}`,touch:e=>`Crea o aggiorna ${e.paths}`,chmod:e=>`Cambia i permessi di ${e.paths}`,link:e=>`Crea il collegamento ${e.link} a ${e.target}`,find:e=>`Cerca file in ${e.paths}`,findDelete:e=>`Elimina i file trovati in ${e.paths}`,findExec:e=>`Esegue ${e.cmd} sui file trovati in ${e.paths}`,size:e=>`Misura la dimensione di ${e.paths}`,archiveCreate:e=>`Crea l’archivio ${e.archive}`,archiveExtract:e=>`Estrae ${e.archive} in ${e.dest}`,archiveList:e=>`Elenca il contenuto di ${e.archive}`,mediaConvert:e=>`Converte ${e.inputs} in ${e.outputs}`,mediaProcess:e=>`Elabora ${e.inputs} con ffmpeg`,mediaInfo:e=>`Legge le informazioni multimediali di ${e.paths}`,filterFiles:"Applica un grafo di filtri che legge o scrive file",imageConvert:e=>`Converte ${e.inputs} in ${e.outputs}`,imageEdit:e=>e.n>1?`Modifica le immagini: ${e.paths}`:`Modifica l’immagine ${e.paths}`,imageInfo:e=>e.n>1?`Legge le informazioni delle immagini: ${e.paths}`:`Legge le informazioni dell’immagine ${e.paths}`,imageOptimize:e=>e.n>1?`Ottimizza le immagini: ${e.paths}`:`Ottimizza l’immagine ${e.paths}`,pythonScript:e=>`Esegue lo script Python ${e.script}`,pythonInline:"Esegue un frammento di codice Python",pythonModule:e=>`Esegue il modulo Python ${e.module}`,venv:e=>`Crea un ambiente Python in ${e.path}`,pipInstall:e=>`Installa i pacchetti Python: ${e.packages}`,pipInstallReq:e=>`Installa i pacchetti Python elencati in ${e.file}`,pipInfo:"Elenca i pacchetti Python installati",pkgRemove:e=>`Rimuove i pacchetti: ${e.packages}`,pkgInfo:e=>`Mostra informazioni sui pacchetti con ${e.tool}`,pkgOther:e=>`Esegue ${e.tool} ${e.sub}`,nodeScript:e=>`Esegue lo script Node ${e.script}`,nodeInline:"Esegue un frammento di codice JavaScript",inlineCode:e=>`Esegue un frammento di codice ${e.lang}`,npmInstall:e=>`Installa i pacchetti Node: ${e.packages}`,npmInstallAll:"Installa i pacchetti Node del progetto",npmRun:e=>`Esegue lo script del pacchetto ${e.script}`,npx:e=>`Esegue lo strumento Node ${e.tool} (potrebbe scaricarlo)`,runScript:e=>`Esegue lo script ${e.script}`,runsInput:"Esegue il codice che riceve dal passaggio precedente",download:e=>`Scarica da ${e.host}`,downloadTo:e=>`Scarica da ${e.host} in ${e.path}`,upload:e=>`Invia dati a ${e.host}`,openUrl:e=>`Apre ${e.host} nel browser`,gitClone:e=>`Scarica il repository ${e.url}`,gitStatus:"Mostra lo stato di Git",gitDiff:"Mostra le modifiche in Git",gitLog:"Mostra la cronologia di Git",gitInfo:"Legge informazioni da Git",gitAdd:e=>`Prepara ${e.paths} per un commit Git`,gitCommit:"Salva un commit Git",gitSync:e=>`Si sincronizza con il repository remoto (git ${e.sub})`,gitChange:e=>`Cambia la cronologia o i file di Git (git ${e.sub})`,gitOther:e=>`Esegue git ${e.sub}`,systemInstall:e=>`Installa i pacchetti di sistema: ${e.packages}`,kill:e=>e.n>1?`Arresta i processi: ${e.targets}`:`Arresta il processo ${e.targets}`,sleep:e=>`Attende ${e.seconds} s`,print:"Stampa del testo",writeText:e=>`Scrive del testo in ${e.path}`,writeFile:e=>`Scrive ${e.paths}`,xargs:e=>`Esegue ${e.cmd} su ogni riga dell’input`,open:e=>`Apre ${e.paths}`,which:e=>`Controlla se ${e.cmd} è installato`,pwd:"Mostra la cartella corrente",sysInfo:"Mostra informazioni sul sistema",changesSystem:"Modifica le impostazioni di sistema",printEnv:"Mostra le variabili d’ambiente",noop:"Non fa nulla",setVar:e=>`Imposta la variabile ${e.name}`,shellOption:"Cambia un’opzione della shell",check:"Verifica una condizione",indicators:{deletesFiles:"Elimina file",installsPackages:"Installa pacchetti",usesNetwork:"Usa la rete",killsProcesses:"Arresta processi",writesOutsideProject:"Scrive fuori dal progetto",readsOutsideProject:"Legge fuori dal progetto",runsCode:"Esegue codice",elevated:"Permessi di amministratore",changesGit:"Modifica Git",complex:"Comando complesso",unknownCommand:e=>e.option?`Opzione non riconosciuta ${e.option}`:"Comando sconosciuto",outsideSandbox:"Fuori dalla sandbox"},risk:{low:"Rischio basso",medium:"Rischio medio",high:"Rischio alto"}}},xi=["en","it"];function oo(e){return typeof e=="string"&&xi.includes(e)}const Pn={en:Nn,it:Rn};function On(e){const t=e.trim().toLowerCase().replace(/_/g,"-").split(/[-.@]/)[0]??"";return/^[a-z]{2,3}$/.test(t)?t:null}function Xc(e,t){if(oo(e))return e;for(const i of t){const o=On(i);if(oo(o))return o}return"en"}function Ee(e){return Pn[e]}const we=m().min(1).max(300).refine(e=>!e.startsWith("/")&&!e.includes("\\")&&!e.split("/").some(t=>t===".."||t==="."||t==="")&&!e.includes("\0"),"issue.relativePath"),Ai=m().url().refine(e=>/^https?:\/\//i.test(e),"issue.httpOnly"),ao={png:"image",jpg:"image",jpeg:"image",webp:"image",gif:"image",avif:"image",heic:"image",svg:"svg",mp4:"video",mov:"video",webm:"video",m4v:"video",woff:"font",woff2:"font",ttf:"font",otf:"font",mp3:"audio",wav:"audio",m4a:"audio",aac:"audio",ogg:"audio"};function Zc(e){const t=e.split(".").pop()?.toLowerCase()??"";return Object.hasOwn(ao,t)?ao[t]:"other"}const Mn=y({file:we,kind:z(["image","video","svg","font","audio","other"]),origin:z(["upload","website","generated","stock","google-fonts","codebase"]),sourceUrl:Ai.nullable(),description:m().max(2e3),tags:k(m().min(1).max(40)).max(30),width:v().int().positive().nullable(),height:v().int().positive().nullable(),addedAt:Z(),attribution:m().max(500).nullable().default(null),provider:m().min(1).max(60).optional(),model:m().min(1).max(100).optional(),durationSec:v().nonnegative().nullable().optional(),bytes:v().int().nonnegative().optional(),loop:B().optional(),referenceFor:k(m().min(1).max(200)).max(500).optional()}),Zo=e=>new Set(e.map(t=>t.file)).size===e.length;y({schemaVersion:E(1),assets:k(Mn).default([])}).refine(e=>Zo(e.assets),{message:"issue.duplicateFiles",path:["assets"]});const Jc=e=>e.referenceFor!==void 0,En=y({file:we,note:m().max(2e3),useForBrand:B(),addedAt:Z()});y({schemaVersion:E(1),references:k(En).default([])}).refine(e=>Zo(e.references),{message:"issue.duplicateFiles",path:["references"]});const qn="motion-studio-video-analysis/1",Jo=z(["whisper-small","whisper-large-v3-turbo","openai","elevenlabs","none-skipped","none-no-speech"]);y({format:E(qn),asset:m().regex(/^assets\//),sha256:m().regex(/^[0-9a-f]{64}$/),bytes:v().int().min(0),durationSec:v().min(0),width:v().int().min(0),height:v().int().min(0),fps:v().min(0).nullable(),hasAudio:B(),transcript:Jo,language:m().max(32).nullable(),generator:m().max(200),createdAt:m().max(64),edited:B()}).strict();y({from:v().min(0),to:v().min(0),text:m().min(1).max(2e3)}).strict().refine(e=>e.to>=e.from,{message:"to must not be before from"});y({from:v().min(0),to:v().min(0),text:m().min(1).max(200)}).strict().refine(e=>e.to>=e.from,{message:"to must not be before from"});const Dn=m().regex(/^#[0-9a-fA-F]{6}$/),Un=y({from:v().min(0),to:v(),onScreen:m().min(1).max(1e3),onScreenText:k(m().max(300)).max(20).optional(),frame:m().max(64).optional()}).strict(),_n=y({from:v().min(0),to:v(),why:m().min(1).max(300)}).strict(),Bn=y({colours:k(Dn).max(12),typography:m().max(300),framing:m().max(300),audio:m().max(300)}).strict();y({summary:m().min(1).max(2e3).optional(),timeline:k(Un).max(200).optional(),usableMoments:k(_n).max(30).optional(),look:Bn.optional(),tags:k(m().min(1).max(40)).max(30).optional()}).strict().refine(e=>Object.keys(e).length>0,{message:"write at least one field"});const Wn=z(["whisper.cpp","openai-whisper","faster-whisper"]),ea=z(["small","large-v3-turbo"]),ta=z(["ask","whisper","openai","elevenlabs","never"]),no=m().min(2).max(4096).refine(e=>/^(\/|[A-Za-z]:[\\/])/.test(e)&&!e.includes("\0"),{message:"must be an absolute path"}),ia=y({program:no,engine:Wn,modelFile:no.optional()}).strict(),jn=y({method:ta.default("ask"),model:ea.default("small"),custom:ia.nullable().default(null)}).strict();y({method:ta.optional(),model:ea.optional(),custom:ia.nullable().optional()}).strict();y({file:m().min(1).max(1024),choice:z(["whisper","openai","elevenlabs","none"]),remember:B(),sizeBytes:v().int().positive().optional()}).strict();y({schemaVersion:E(1),workspacePath:m().min(1).nullable().default(null),language:z(["system",...xi]).default("system"),transcription:jn.optional()});const so="issue.domain",Vn=["localhost","local","internal","home.arpa"],Gn=new Set(["co.uk","org.uk","com.au","co.jp","com.br","co.nz"]),Hn=/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/,oa=m().trim().toLowerCase().max(253,so).refine(e=>{const t=e.startsWith("*."),i=t?e.slice(2):e,o=i.split(".");return!(o.length<2||!o.every(a=>Hn.test(a))||!/^[a-z]{2,}$/.test(o.at(-1))||Vn.some(a=>i===a||i.endsWith(`.${a}`))||t&&Gn.has(i))},so),Kn=y({schemaVersion:E(1),maxConcurrentJobs:v().int().min(1).max(8).default(2),expertMode:B().default(!1),theme:z(["system","light","dark"]).default("system"),model:m().min(1).nullable().default(null),sandboxMode:z(["auto","off"]).default("auto"),extraAllowedDomains:k(oa).max(100).default([]),confirmPaidProviders:B().default(!0),autoApproveSandboxed:B().default(!0),exportNamePattern:m().min(1).max(200).default("{title}-{format}-v{v}"),agentLiveInput:B().default(!0),agentInterrupt:B().default(!0),agentLiveDefaults:E(804).optional(),singleAgent:B().optional()}),Qn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.agentLiveDefaults===void 0?{...e,agentLiveInput:!0,agentInterrupt:!0,agentLiveDefaults:804}:e;Fn(Qn,Kn.extend({extraAllowedDomains:k(pi()).max(100).default([])}).transform(({extraAllowedDomains:e,...t})=>{const i=[],o=[];for(const a of e){const n=oa.safeParse(a);n.success?i.includes(n.data)||i.push(n.data):o.push(typeof a=="string"?a:JSON.stringify(a))}return{...t,extraAllowedDomains:i,...o.length?{droppedDomains:o}:{}}}));const Ci=y({path:m().min(1),note:m().optional()}),Yn=Ie([y({asset:we}).strict(),E("initials")]);y({schemaVersion:E(1),name:m().trim().min(1),description:m(),createdAt:Z(),updatedAt:Z(),linkedCodebases:k(Ci),icon:Yn.optional().catch(void 0)});const aa="(@([2-9]|1[0-9]|20))?",Je=new RegExp(`^[a-z0-9][a-z0-9-]*${aa}$`),Xn=`[a-z0-9][a-z0-9-]{0,62}${aa}`,Zn=20;function _e(e){const t=e.lastIndexOf("@");return t===-1?e:e.slice(0,t)}function Rt(e,t){if(!Je.test(t)||!t.includes("@"))return e.find(o=>o.id===t);const i=e.find(o=>o.id===_e(t));return i?{...i,id:t}:void 0}function na(e){const t=e.lastIndexOf("@");if(t===-1)return 1;const i=Number(e.slice(t+1));return Number.isInteger(i)&&i>=2?i:1}const sa=(e,t)=>t<=1?e:`${e}@${t}`;function Jn(e,t){const i=new Set(t);for(let o=1;o<=Zn;o++){const a=sa(e,o);if(!i.has(a))return a}return null}function es(e,t,i){const o=i?.[e];if(o!==void 0&&o!=="")return o;const a=na(e);return a>1?`${t} #${a}`:t}const ra=/^[a-z0-9][a-z0-9-]{0,62}$/,ts=5e3,is=y({id:m().regex(ra),channel:m().min(1),name:m().min(1),width:v().int().min(16).max(8192),height:v().int().min(16).max(8192),kind:z(["video","image"]),extensions:k(m().regex(/^[a-z0-9]{2,5}$/)).min(1),maxDurationSec:v().positive().optional(),safeZone:y({top:v().min(0),bottom:v().min(0),left:v().min(0),right:v().min(0)}).optional(),maxFileMB:v().positive().optional(),targetBitrateKbps:v().positive().optional(),identity:z(["logo","favicon","app-icon"]).optional(),hidden:E(!0).optional(),createdAt:Z().optional()});y({schemaVersion:E(1),presets:k(is).min(1),seenDefaults:k(m().min(1).max(200)).max(1e3).optional(),deletedCustom:k(m().regex(ra)).max(ts).optional()}).refine(e=>new Set(e.presets.map(t=>t.id)).size===e.presets.length,{message:"issue.duplicatePresetIds",path:["presets"]});function os(e,t){const i=o=>Ee(o).formats;return Object.hasOwn(i(t),e.id)&&xi.some(o=>i(o)[e.id]===e.name)?i(t)[e.id]:e.name}function la(e,t){const i=e.replace(/^./,a=>a.toLowerCase()).replace(/\s+(\w)/g,(a,n)=>n.toUpperCase()),o=Ee(t).channels;return Object.hasOwn(o,i)?o[i]:e}const as=(e,t)=>`${la(e.channel,t)} · ${os(e,t)}`;function ns(e,t,i,o){const a=Rt(e,t);return a?es(t,as({...a,id:_e(t)},i),o):t}const ss={portrait:[{w:1080,h:1920,kbps:4e3},{w:1080,h:1350,kbps:4e3}],square:[{w:1080,h:1080,kbps:3500}],landscape:[{w:1920,h:1080,kbps:5e3},{w:3840,h:2160,kbps:2e4}]};function rs(e,t,i=30){const o=ss[t>e?"portrait":e>t?"landscape":"square"],a=e*t,n=o.reduce((r,l)=>Math.abs(Math.log(a/(l.w*l.h)))<Math.abs(Math.log(a/(r.w*r.h)))?l:r),s=n.kbps*a/(n.w*n.h)*(i>45?1.5:1);return Math.max(100,Math.round(s/100)*100)}const ls=["mp4","webm","mov","gif"],ds=["png","jpg","jpeg","webp"],ie=(e,t,i,o,a,n={})=>({id:e,channel:t,name:i,width:o,height:a,kind:"video",extensions:ls,targetBitrateKbps:rs(o,a),...n}),Q=(e,t,i,o,a,n={})=>({id:e,channel:t,name:i,width:o,height:a,kind:"image",extensions:ds,...n}),vt={top:220,bottom:420,left:60,right:120},et=[ie("instagram-post-1x1","Instagram","Post 1:1",1080,1080,{maxDurationSec:60}),ie("instagram-post-4x5","Instagram","Post 4:5",1080,1350,{maxDurationSec:60}),ie("instagram-reel-9x16","Instagram","Story/Reel 9:16",1080,1920,{maxDurationSec:90,safeZone:vt}),Q("instagram-image-1x1","Instagram","Image 1:1",1080,1080),Q("instagram-image-4x5","Instagram","Image 4:5",1080,1350),ie("tiktok-9x16","TikTok","Video 9:16",1080,1920,{maxDurationSec:180,safeZone:vt}),ie("youtube-16x9","YouTube","Video 16:9",1920,1080),ie("youtube-4k-16x9","YouTube","Video 4K 16:9",3840,2160),ie("youtube-shorts-9x16","YouTube","Shorts 9:16",1080,1920,{maxDurationSec:60,safeZone:vt}),Q("youtube-thumbnail","YouTube","Thumbnail",1280,720,{maxFileMB:2}),ie("facebook-feed-1x1","Facebook","Feed 1:1",1080,1080),ie("facebook-feed-4x5","Facebook","Feed 4:5",1080,1350),ie("facebook-story-9x16","Facebook","Story 9:16",1080,1920,{maxDurationSec:60,safeZone:vt}),Q("facebook-cover","Facebook","Cover",1640,624),ie("linkedin-1x1","LinkedIn","Post 1:1",1080,1080),ie("linkedin-4x5","LinkedIn","Post 4:5",1080,1350),ie("linkedin-16x9","LinkedIn","Video 16:9",1920,1080),Q("linkedin-banner","LinkedIn","Banner",1584,396),ie("x-16x9","X","Video 16:9",1600,900,{maxFileMB:512}),ie("x-1x1","X","Post 1:1",1080,1080,{maxFileMB:512}),Q("pinterest-2x3","Pinterest","Pin 2:3",1e3,1500),Q("web-hero-16x9","Web","Hero 16:9",1920,1080),Q("web-banner-300x250","Web","Banner 300×250",300,250),Q("web-banner-728x90","Web","Banner 728×90",728,90),Q("web-banner-160x600","Web","Banner 160×600",160,600),Q("og-image-1200x630","Web","Social preview (Open Graph)",1200,630,{extensions:["png","jpg","jpeg"],maxFileMB:5}),Q("identity-logo","Identity","Logo",1024,1024,{extensions:["png"],identity:"logo"}),Q("identity-favicon","Identity","Website favicon",1024,1024,{extensions:["png"],identity:"favicon"}),Q("identity-app-icon","Identity","App icon",1024,1024,{extensions:["png"],identity:"app-icon"}),Q("appstore-iphone-69","App Store",'Screenshot iPhone 6.9"',1320,2868),Q("appstore-iphone-65","App Store",'Screenshot iPhone 6.5"',1284,2778),Q("appstore-ipad-13","App Store",'Screenshot iPad 13"',2064,2752),ie("appstore-preview","App Store","App Preview",886,1920,{maxDurationSec:30,extensions:["mp4","mov"],maxFileMB:500}),Q("appstore-icon","App Store","Icona",1024,1024),Q("playstore-feature","Play Store","Feature graphic",1024,500),Q("playstore-phone-9x16","Play Store","Screenshot telefono 9:16",1080,1920),Q("playstore-tablet","Play Store","Screenshot tablet",1600,2560),Q("playstore-icon","Play Store","Icona",512,512),ie("playstore-promo-16x9","Play Store","Video promo 16:9",1920,1080)],da="custom",cs=60,us=3600,ms=4096,ca=e=>e.trim().toLowerCase()===da,eu=e=>ca(e.channel),tu=e=>ca(e)?da:e,iu=(e,t)=>e.normalize("NFC").trim().toLocaleLowerCase()===t.normalize("NFC").trim().toLocaleLowerCase();y({name:m().trim().min(1).max(cs),kind:z(["video","image"]),width:v().int().min(16).max(8192),height:v().int().min(16).max(8192),maxDurationSec:v().int().min(1).max(us).optional()}).strict().superRefine((e,t)=>{if(e.kind==="video")for(const i of["width","height"])e[i]>ms?t.addIssue({code:"custom",path:[i],message:"issue.customVideoMax"}):e[i]%2!==0&&t.addIssue({code:"custom",path:[i],message:"issue.customVideoEven"})});function ps(e,t,i){return ua(e,t,i??null,i!==void 0)}function ua(e,t,i,o){if(e.kind!==t.kind)return{ok:!1,reason:"kind"};if(e.identity!==void 0||t.identity!==void 0)return{ok:!1,reason:"kind"};if(e.width!==t.width||e.height!==t.height)return{ok:!1,reason:"size"};if(!e.extensions.every(s=>t.extensions.includes(s)))return{ok:!1,reason:"extension"};if(o&&t.kind==="video"&&t.maxDurationSec!==void 0&&(i===null||i>t.maxDurationSec))return{ok:!1,reason:"duration"};const a=e.safeZone??{top:0,bottom:0,left:0,right:0},n=t.safeZone;return n&&(n.top>a.top||n.bottom>a.bottom||n.left>a.left||n.right>a.right)?{ok:!1,reason:"safeZone"}:{ok:!0}}function fs(e,t){const i={},o=[];for(const a of e){if(o.some(s=>s.id===a.id)||Object.hasOwn(i,a.id))continue;const n=o.find(s=>_e(s.id)!==_e(a.id)&&ua(s,a,null,t!==void 0).ok);n?i[a.id]=n.id:o.push(a)}return i}function ou(e,t,i){const o=t.filter(d=>!e.formats.includes(d));if(o.length===0)return e.links;const a=pt(e.links,e.formats),s=[...e.formats.filter(d=>t.includes(d)&&!Object.hasOwn(a,d)),...o].map(d=>Rt(i,d)).filter(d=>d!==void 0),r=fs(s,void 0),l={...e.links};for(const d of o)delete l[d],Object.hasOwn(r,d)&&(l[d]=r[d]);return l}const hs=e=>e!==void 0&&e.compositions===void 0&&e.outputs.length>0;function au(e,t){if(!hs(e))return"normal";const i=pt(t.links,t.formats),o=t.formats.filter(a=>!zi(e,a));return o.length>0&&o.every(a=>Object.hasOwn(i,a))?"followers":"convert"}function pt(e,t){const i=n=>t===void 0||t.includes(n),o=Object.entries(e??{}).filter(([n,s])=>n!==s&&i(n)&&i(s)),a=new Set(o.map(([n])=>n));return Object.fromEntries(o.filter(([,n])=>!a.has(n)))}const ft=e=>[...e].sort((t,i)=>t.n-i.n);function ut(e,t){if(!e)return null;const i=e.compositions?.find(a=>a.format===t);if(i)return{kind:"composition",hash:i.hash,followsFormat:i.followsFormat};const o=e.outputs.find(a=>a.format===t);return o?{kind:"file",sha256:o.sha256}:null}function Ti(e,t){return e.kind==="composition"&&t.kind==="composition"?e.hash===t.hash:e.kind==="file"&&t.kind==="file"?e.sha256!==void 0&&e.sha256===t.sha256:!1}function zi(e,t){return ut(e,t)!==null}function gs(e,t){const i=[];let o=null;for(const a of ft(e)){const n=ut(a,t);if(!n){o=null;continue}(o===null||!Ti(o,n))&&i.push(a.n),o=n}return i}function vs(e,t){const i=[];let o=null;for(const a of ft(e)){const n=ut(a,t);if(!n){o=null;continue}o===null||!Ti(o,n)?i.push({n:a.n,last:a.n}):i.at(-1).last=a.n,o=n}return i}function bs(e,t,i){const o=vs(e,t).find(r=>r.n===i)?.last??i,a=r=>(r.compositions?.find(l=>l.format===t)?.problems??r.outputs.find(l=>l.format===t)?.problems)!==void 0,n=ft(e).filter(r=>r.n>i&&r.n<=o&&a(r)).at(-1),s=e.find(r=>r.n===i);return s?ws(n??s,t)||ys(s,t).length>0:!1}function ma(e,t,i){const o=e.compositions?.find(n=>n.format===t),a=e.outputs.find(n=>n.format===t);return o?!a||a.sha256===void 0?"none":a.fromComposition!==o.hash?"stale":$s(a.subtitles,i)?"rendered":"stale":a?"rendered":"none"}function $s(e,t){if(!e||!t)return!0;const i=a=>Object.hasOwn(t,a)?t[a]:void 0;if(e.hash!==null)return e.lang!==null&&i(e.lang)===e.hash;if(e.lang!==null)return i(e.lang)===void 0;const o=new Set(e.seen??[]);return Object.keys(t).every(a=>o.has(a))}function nu(e){return Object.fromEntries((e??[]).map(t=>[t.lang,t.cuesHash??t.hash]))}function ys(e,t){return!e.compositions?.some(i=>i.format===t)||ma(e,t)!=="rendered"?[]:e.outputs.find(i=>i.format===t)?.problems??[]}function ws(e,t){const i=e.compositions?.find(o=>o.format===t)?.problems??e.outputs.find(o=>o.format===t)?.problems;return i!==void 0?i.length>0:e.problems.length>0}function su(e,t,i,o){const a=pt(o),n=Object.hasOwn(a,t)?a[t]:null;if(n!==null)return{version:null,manual:!1,newer:null,follows:n};const s=gs(e,t),r=s.at(-1)??null,l=i&&Object.hasOwn(i,t)?i[t]:void 0;return l!==void 0&&e.some(c=>c.n===l&&zi(c,t))?{version:l,manual:!0,newer:r!==null&&r>l?r:null,follows:null}:{version:[...s].reverse().find(c=>!bs(e,t,c))??r,manual:!1,newer:null,follows:null}}function ru(e,t,i,o){if(i===null)return null;for(const a of ft(e).reverse())if(ks(e,t,a.n,i,o))return a.n;return null}function ks(e,t,i,o,a){const n=pt(a);if(!Object.hasOwn(n,t))return!1;const s=n[t],r=c=>e.find(u=>u.n===c),l=ut(r(o),s),d=ut(r(i),t);return!l||!d||d.kind==="composition"&&d.followsFormat!==s?!1:Ti(l,d)}function Ss(e,t){for(const i of ft(e).reverse()){if(!zi(i,t))continue;const o=i.outputs.find(a=>a.format===t);return!o||ma(i,t)!=="rendered"?void 0:typeof o.durationSec=="number"&&Number.isFinite(o.durationSec)&&o.durationSec>0?o.durationSec:void 0}}function lu(e,t,i,o,a){if(o===a)return{ok:!1,reason:"self"};const n=e.formats.includes(o)?Rt(i,o):void 0,s=e.formats.includes(a)?Rt(i,a):void 0;if(!n||!s)return{ok:!1,reason:"unknown"};const r=pt(e.links,e.formats);return Object.hasOwn(r,a)||Object.entries(r).some(([l,d])=>d===o&&l!==o)?{ok:!1,reason:"chain"}:ps(s,n,Ss(t,a))}const du=["images","voice","music","sfx"],bt={images:["auto","openai","stock","none"],voice:["auto","openai","elevenlabs","none"],music:["auto","elevenlabs","none"],sfx:["auto","elevenlabs","none"]};function cu(e){const t=e.services??{};return{images:t.images??"auto",voice:t.voice??"auto",music:t.music??"auto",sfx:t.sfx??"auto"}}const uu={elevenlabs:["key","account","voices","tts","sfx","music"]},mu={elevenlabs:{account:"user_read",voices:"voices_read",tts:"text_to_speech",sfx:"sound_generation",music:"music_generation"}};function pu(e,t){return t==="pexels"||t==="unsplash"?"search":e==="voice"?"tts":e}function fu(e,t){if(!e)return null;const i=e.capabilities.find(o=>o.capability===t);return i?.status==="missing"?i.permission?{permission:i.permission}:{}:e.capabilities.find(o=>o.capability==="key")?.status==="missing"?{}:null}const hu=["queued","reading","fonts","colors","logos","tone","writing","done"],xs=[".env*","*.pem","*.key","*.p12","*.keystore","*.jks","id_rsa*",".npmrc",".netrc",".pypirc","credentials*","secrets*","*.mobileprovision","google-services.json","GoogleService-Info.plist",".git/**"],As=e=>new RegExp(`^${e.split("*").map(t=>t.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join("[^/]*")}$`,"i");xs.map(e=>As(e.replace(/\/\*\*$/,"")));const Cs=y({start:z(["brand","scratch"]),name:m().trim().min(1).max(80).optional(),keywords:m().trim().max(300).optional(),colors:z(["brand","free"]).default("brand"),concepts:v().int().min(1).max(5).default(3)}),Ts=y({path:m().min(1).max(200),width:v().int().positive().optional(),height:v().int().positive().optional(),alpha:B().optional(),role:m().max(40)}),zs=y({dir:m().min(1).max(200),files:k(Ts).max(50),warnings:k(m().max(1e3)).max(50)}),gu=66/108,$t=v().int().min(0),Ii=y({input:$t,output:$t,cacheRead:$t,cacheWrite:$t}),ro=y({model:m().min(1),tokens:Ii,costUsd:v().min(0).nullable()}),pa=y({tokens:Ii,costUsd:v().min(0).nullable(),estimated:B().optional()}),fa=z(["creative","brand-analysis","describe","console","localize","video-analysis","transcription","paid"]);fa.options.filter(e=>e!=="transcription"&&e!=="paid");const Is=z(["openai","elevenlabs"]),Fs=z(["images","voice","music","sfx","transcription"]),Ls=z(["tokens","characters","seconds","minutes","images"]),Ns=y({provider:Is,service:Fs,model:m().min(1),units:y({amount:v().min(0),unit:Ls,estimated:E(!0).optional()})});y({at:m(),jobId:m(),kind:fa,creativeSlug:m().nullable(),version:v().int().nullable(),attempt:v().int().nullable(),tokens:Ii,costUsd:v().min(0).nullable(),models:k(ro),durationMs:v().min(0).nullable(),outcome:z(["ok","error","cancelled"]),estimated:B().optional(),sessionId:m().nullable().default(null),cumulativeCostUsd:v().min(0).nullable().default(null),cumulativeModels:k(ro).default([]),paid:Ns.optional()});function vu(e){return e.input+e.output+e.cacheWrite}function bu(e,t){return{input:e.input+t.input,output:e.output+t.output,cacheRead:e.cacheRead+t.cacheRead,cacheWrite:e.cacheWrite+t.cacheWrite}}const Qt=512;function Fi(e){if(typeof e!="string"||e.length>Qt||!e.startsWith("assets/")&&!e.startsWith("layers/"))return!1;let t=0;for(let i=0;i<=e.length;i++){if(i===e.length||e.charCodeAt(i)===47){const a=e.slice(t,i);if(a.trim()===""||a==="."||a==="..")return!1;t=i+1;continue}const o=e.charCodeAt(i);if(o<32||o>=127&&o<=159||o===8232||o===8233||o>=8203&&o<=8207||o>=8234&&o<=8238||o>=8288&&o<=8303||o===65279||o===1564||o===6158)return!1;if(o>=55296&&o<=56319){const a=e.charCodeAt(i+1);if(!(a>=56320&&a<=57343))return!1;i++;continue}if(o>=56320&&o<=57343||o===92||o===58||o===37||o===63||o===35)return!1}return!0}const Rs="motion-studio/composition@1",D={jsonBytes:5*1024*1024,tracks:64,scenes:200,fonts:32,clipsPerTrack:500,clips:2e3,animations:32,keyframes:64,params:32,text:2e3,name:200,id:64,family:80,durationSec:600,problems:100},ke=1e5,Be={coord:ke,size:ke,rotation:3600,fontSize:2e3,trimStart:36e3,volume:2},ha=["left","center","right"],Ps=/^[a-z0-9][a-z0-9-]{0,63}$/,Os=/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Ms=/^[A-Za-z0-9][A-Za-z0-9 _-]{0,79}$/,Es=/^[a-z][a-z0-9(),. -]{0,63}$/,qs=/^[A-Za-z_][A-Za-z0-9_]{0,63}$/,Ds=/^(?!.*(?:^|\/)\.{1,2}(?:\/|$))(?!.*\/\/)(?!.*\/$)(?![\s\S]*[\u0000-\u001f\u007f-\u009f])(?:assets|layers)\/[^\\:%?#]+$/,Pt=m().max(D.id).regex(Ps,"composition.badId").describe("Lowercase letters, digits and hyphens; unique in the composition."),Ce=m().max(9).regex(Os,"composition.badColor").describe("Hex colour: #rgb, #rgba, #rrggbb or #rrggbbaa."),Re=m().max(Qt).regex(Ds,"composition.badPath").refine(Fi,"composition.badPath").describe('Relative to the composition folder, under assets/ or layers/; no scheme, no "..", no backslash.'),Yt=m().max(D.family).regex(Ms,"composition.badFontFamily").describe("A family declared in fonts[] (no fallbacks or generic families)."),Me=m().max(D.name),Li=m().max(64).regex(Es,"composition.badEase").describe("CSS easing: linear, ease-out, cubic-bezier(...), steps(...)."),Ot=v().min(-ke).max(ke),ze=v().min(0).max(D.durationSec),Ni=Ie([v().int().min(1).max(1e3),z(["normal","bold"])]),ga=U({family:Yt,src:Re.describe("A font file (.ttf, .otf, .woff, .woff2) under assets/."),weight:Ni.optional(),style:z(["normal","italic"]).optional()}),Us=U({id:Pt,name:Me.optional(),start:ze,duration:v().gt(0).max(D.durationSec)}).describe("A named time range. Scenes are listed in order, contiguous, and cover the whole duration."),va=["fadeIn","fadeOut","slideUp","slideDown","slideLeft","slideRight","popIn","scaleIn","wipe"],ba=["opacity","x","y","scale","rotation","color","blur"],fi=Ie([v().min(-ke).max(ke),Ce]).describe('A number, or a hex colour for prop "color".'),Ri=v().gt(0).max(D.durationSec),_s=U({preset:z(va),start:ze.optional(),duration:Ri,ease:Li.optional()}),Bs=U({prop:z(ba),from:fi,to:fi,start:ze.optional(),duration:Ri,ease:Li.optional()}),Ws=U({prop:z(ba),keyframes:k(U({t:v().min(0).max(1),v:fi,ease:Li.optional()})).min(2).max(D.keyframes),start:ze.optional(),duration:Ri}),js=Ie([_s,Bs,Ws]).describe("Times relative to the clip start. A preset, a from/to tween of one prop, or keyframes (t from 0 to 1, ascending) of one prop."),Xt={x:Ot.optional(),y:Ot.optional(),width:v().min(0).max(ke).optional(),height:v().min(0).max(ke).optional(),rotation:v().min(-3600).max(Be.rotation).optional(),scale:v().min(0).max(100).optional(),opacity:v().min(0).max(1).optional()},$a=U(Xt).describe("Composition pixels; rotation (degrees) and scale apply around the box centre."),Pe={id:Pt,name:Me.optional(),scene:Pt.optional().describe("The scene this clip belongs to: moving the scene moves the clip. The clip must lie inside it."),start:ze.describe("Seconds, absolute on the composition timeline."),duration:ze,hidden:B().optional().describe("The editor hides the clip: it is not rendered. Set by the user; leave it as it is."),locked:B().optional().describe("The user locked the clip against direct edits in the editor. Set by the user; leave it as it is.")},tt=k(js).max(D.animations).optional(),lo=U({scale:v().min(0).max(100).optional(),x:Ot.optional(),y:Ot.optional()}),Vs=U({...Pe,type:E("text"),props:U({...Xt,text:m().max(D.text),fontFamily:Yt.optional(),fontSize:v().gt(0).max(Be.fontSize).optional(),fontWeight:Ni.optional(),color:Ce.optional(),align:z(ha).optional()}),animations:tt}),Gs=U({...Pe,type:E("shape"),props:U({...Xt,fill:Ce.optional(),radius:v().min(0).max(ke).optional()}),animations:tt}),ya=U({...Xt,fit:z(["cover","contain","fill"]).optional(),kenBurns:U({from:lo,to:lo}).optional()}),Hs=U({...Pe,type:E("image"),src:Re,props:ya,animations:tt}),Ks=U({...Pe,type:E("svg"),src:Re,props:ya,animations:tt}),Qs=U({...Pe,type:E("video"),src:Re,trimStart:v().min(0).max(Be.trimStart).optional().describe("Seconds skipped at the start of the source."),sourceFps:v().gt(0).max(240).optional(),volume:v().min(0).max(Be.volume).optional(),props:$a,animations:tt}),Ys=Kt("type",[U({type:E("text"),value:m().max(D.text),label:Me.optional()}),U({type:E("color"),value:Ce,label:Me.optional()}),U({type:E("number"),value:v().min(-1e9).max(1e9),label:Me.optional()}),U({type:E("image"),value:Re,label:Me.optional()})]),Xs=U({...Pe,type:E("html"),src:Re.describe("An .html file under layers/."),params:re(m().regex(qs,"composition.badParamKey"),Ys).optional().describe("The only values the editor exposes for a free layer; the layer reads them from window.msParams."),props:$a,animations:tt}),Zs=U({...Pe,type:E("audio"),src:Re,trimStart:v().min(0).max(Be.trimStart).optional(),volume:v().min(0).max(Be.volume).optional(),fadeIn:ze.optional(),fadeOut:ze.optional(),role:z(["voice","music","sfx"]).optional().describe("Lets the mixer duck music under voice."),script:m().max(5e3).optional().describe('The spoken text of a voice clip (role "voice" only); used to translate the voice.')}).refine(e=>e.script===void 0||e.role==="voice",{message:"composition.scriptNeedsVoice",path:["script"]}),Js=["bottom","middle","top"],er=["none","fade","pop","slideUp"],tr=U({...Pe,type:E("subtitles"),template:Re.optional().describe("An .html file under layers/ that draws the line instead of the built-in look; it reads the subtitle set from window.msSubtitles and the line at a time from window.msActiveCue(ms)."),props:U({fontFamily:Yt.optional(),fontSize:v().gt(0).max(Be.fontSize),fontWeight:Ni.optional(),color:Ce,lineHeight:v().min(.8).max(3).optional().describe("A multiple of the font size."),align:z(ha).optional(),position:z(Js),margin:v().min(0).max(ke).describe("Pixels from the edge of the safe zone."),maxWidth:v().min(.2).max(1).describe("A fraction of the frame width."),background:Ce.optional().describe("A box behind the line."),boxPadding:v().min(0).max(200).optional(),boxRadius:v().min(0).max(200).optional(),outlineColor:Ce.optional(),outlineWidth:v().min(0).max(20).optional(),shadow:B().optional(),entrance:z(er).optional(),entranceSec:v().min(0).max(1).optional(),highlight:U({color:Ce}).optional().describe("Colours the word being spoken.")})}).describe("Draws the active subtitle line of the creative's subtitle set; one per composition, on the one subtitles track, from 0 to the end; the text is not here."),ir=Kt("type",[Vs,Gs,Hs,Ks,Qs,Xs,Zs,tr]),or=U({id:Pt,kind:z(["visual","video","text","audio","subtitles"]),name:Me.optional(),muted:B().optional(),hidden:B().optional(),locked:B().optional(),clips:k(ir).max(D.clipsPerTrack)}),wa=U({$schema:E(Rs),width:v().int().min(16).max(8192),height:v().int().min(16).max(8192),fps:E([24,25,30,50,60]),duration:ze.describe("Seconds. 0 for a still (image formats): one frame at t = 0."),background:Ce,fonts:k(ga).max(D.fonts),fontFallbacks:k(Yt).max(3).optional().describe("Declared families tried after a text clip's own family, before the generic fallback (per character). Set by localization for scripts the font lacks; leave it as it is."),scenes:k(Us).max(D.scenes),tracks:k(or).max(D.tracks).describe("Stacking order: the first track is at the bottom. Audio tracks do not render. At most one subtitles track, holding one subtitles clip.")}),Ct=e=>!!e.locked||e.kind==="subtitles";function $u(e){return e.tracks.some(t=>t.kind==="subtitles"&&!t.hidden&&t.clips.some(i=>i.type==="subtitles"&&!i.hidden))}const G=(e,t,i)=>({tag:e,name:t,script:i,rtl:!1}),Pi=[G("en","English","latin"),G("it","Italian","latin"),G("fr","French","latin"),G("de","German","latin"),G("es","Spanish","latin"),G("pt","Portuguese","latin"),G("nl","Dutch","latin"),G("sv","Swedish","latin"),G("da","Danish","latin"),G("nb","Norwegian","latin"),G("fi","Finnish","latin"),G("pl","Polish","latin"),G("cs","Czech","latin"),G("hu","Hungarian","latin"),G("ro","Romanian","latin"),G("ca","Catalan","latin"),G("el","Greek","greek"),G("ru","Russian","cyrillic"),G("uk","Ukrainian","cyrillic"),G("tr","Turkish","latin"),G("id","Indonesian","latin"),G("vi","Vietnamese","latin"),G("zh-Hans","Chinese (Simplified)","han-sc"),G("zh-Hant","Chinese (Traditional)","han-tc"),G("ja","Japanese","jp"),G("ko","Korean","kr"),G("hi","Hindi","devanagari"),G("th","Thai","thai")],yu=["ar","he","fa","ur"],ar=new Set(Pi.map(e=>e.tag)),wu=e=>typeof e=="string"&&ar.has(e),nr="motion-studio/localization@1",$e=z(Pi.map(e=>e.tag)),ii=m().max(D.id).regex(/^[a-z0-9][a-z0-9-]*$/),hi=m().max(Qt).refine(e=>e.startsWith("assets/")&&Fi(e),"issue.badAssetPath"),yt=m().max(D.text);y({$schema:E(nr),locale:$e,instanceId:m().regex(Je),texts:re(ii,y({source:yt,text:yt}).strict()),params:re(m().regex(/^[a-z0-9-]+\.[A-Za-z0-9_-]+$/),y({source:yt,text:yt}).strict()),voices:re(ii,y({src:hi,sourceScript:m().max(5e3),script:m().max(5e3)}).strict()),fit:re(ii,v().min(.7).max(1)),fonts:k(y({family:m().regex(/^[A-Za-z0-9][A-Za-z0-9 _-]{0,79}$/),files:k(hi).min(1).max(8)}).strict()).max(3)}).strict();const sr=["appstore","playstore"],ka=["iphone-69","ipad-13"],Sa=["phone","tablet","feature"],co={appstore:{min:1,max:10},playstore:{min:2,max:8}},ku=20,Mt={appstore:{"iphone-69":"appstore-iphone-69","ipad-13":"appstore-ipad-13"},playstore:{phone:"playstore-phone-9x16",tablet:"playstore-tablet",feature:"playstore-feature"}},xa={appstore:"appstore-preview",playstore:"playstore-promo-16x9"};function Aa(e){const t=_e(e);return Object.values(Mt).some(i=>Object.values(i).includes(t))||Object.values(xa).includes(t)}const rr=2e3,lr=60;function dr(e,t){const i=t.replace(/\s+/g," ").trim();return i?cr(`${e} · ${i}`):String(e)}function cr(e,t=lr){if(e.length<=t)return e;let i="";for(const o of e){if(i.length+o.length+1>t)break;i+=o}return`${i.trimEnd()}…`}const ur=y({app:y({name:m().trim().min(1).max(60),tagline:m().trim().max(120)}).strict(),stores:k(z(sr)).min(1).max(2).refine(e=>new Set(e).size===e.length,"issue.duplicateStores"),devices:y({appstore:k(z(ka)).max(2).optional(),playstore:k(z(Sa)).max(3).optional()}).strict(),screenshots:k(y({caption:m().trim().max(rr),screen:hi.nullable()}).strict()).min(1).max(10),preview:B(),instances:k(m().regex(Je)).max(80).optional()}).strict().superRefine((e,t)=>{const i=(r,l)=>t.addIssue({code:"custom",message:r,path:l}),o=r=>e.stores.includes(r);o("appstore")&&!e.devices.appstore?.includes("iphone-69")&&i("issue.storePackIphone",["devices","appstore"]),o("playstore")&&!e.devices.playstore?.includes("phone")&&i("issue.storePackPhone",["devices","playstore"]);const a=e.screenshots.length,n=Math.max(...e.stores.map(r=>co[r].min)),s=Math.min(...e.stores.map(r=>co[r].max));(a<n||a>s)&&i("issue.storePackScreenshots",["screenshots"])});function Oi(e,t=et){const i=l=>{const d=t.find(c=>c.id===l);return d?`${d.width}x${d.height}`:l},o=[],a={},n={},s=new Map,r=l=>{if(!e.preview)return;const d=xa[l];o.push(d)};for(const l of e.stores){const d=e.devices[l]??[],c=l==="appstore"?ka:Sa;for(const u of c.filter(p=>d.includes(p))){const p=Mt[l][u];if(u==="feature"){o.push(p);continue}const h=i(p),b=s.get(h),g=[];e.screenshots.forEach((S,L)=>{const A=sa(p,L+1);o.push(A),g.push(A),a[A]=dr(L+1,S.caption),b?.[L]&&(n[A]=b[L])}),b||s.set(h,g)}r(l)}return{formats:o,formatLabels:a,links:n}}function mr(e,t=et){const i=Oi(e,t).formats;return e.instances&&e.instances.length===i.length?[...e.instances]:i}function pr(e,t=et){const i=Oi(e,t).formats;return new Map(mr(e,t).map((o,a)=>[o,i[a]]))}function Su(e,t=et){if(!e.storePack)return[];const i=pr(e.storePack,t);return e.formats.filter(o=>i.has(o)&&Aa(i.get(o)))}function xu(e,t,i,o=et){const a=Oi(e,o),n=[...i],s=[],r=[],l=new Map;for(const u of a.formats){let p=t.get(u);if(p===void 0){if(p=n.includes(u)?Jn(_e(u),n)??void 0:u,p===void 0)return{full:_e(u)};n.push(p),r.push(p)}l.set(u,p),s.push(p)}const d={};for(const[u,p]of Object.entries(a.formatLabels))d[l.get(u)]=p;const c={};for(const[u,p]of Object.entries(a.links))c[l.get(u)]=l.get(p);return{instances:s,added:r,formatLabels:d,links:c}}const fr=["standard","high","max"],Au="high",Cu=[480,720,1080,1440,2160],hr=[24,25,30,50,60],uo=e=>Math.max(2,Math.round(e/2)*2);function Tu(e,t){const i=Math.min(e.width,e.height);if(t===void 0||t===i)return{width:e.width,height:e.height};const o=t/i;return e.width<=e.height?{width:t,height:uo(e.height*o)}:{width:uo(e.width*o),height:t}}function zu(e,t){return e?.kind==="video"&&!e.identity&&!Aa(t)}const Ca=y({quality:z(fr),width:v().int().positive(),height:v().int().positive(),encoder:z(["libx264","h264_videotoolbox"]).nullable(),fps:E(hr).optional()}),Ta=/^[a-z]{1,3}$/,Iu=e=>{let t=Math.floor(e)+1,i="";for(;t>0;){const o=(t-1)%26;i=String.fromCharCode(97+o)+i,t=Math.floor((t-1)/26)}return i},mo=e=>{if(!Ta.test(e))return-1;let t=0;for(const i of e)t=t*26+(i.charCodeAt(0)-96);return t-1},Fu=(e,t)=>mo(e)-mo(t),za=m().regex(/^[a-z0-9][a-z0-9-]{0,79}$/),gr=m().regex(/^[a-z0-9][a-z0-9-]{0,79}~(?!a$)[a-z]{1,3}$/),Et=Ie([za,gr]),Ze=m().regex(Ta),vr=y({slug:Et,letter:Ze,direction:m().nullable(),directionSource:z(["agent","user"]).nullable(),status:z(["active","discarded"]),createdAt:Z()}),br=y({slug:Et,version:v().int().min(1)}),$r=y({members:k(vr).min(1),picks:re(m().min(1),br),layout:z(["variant","format"]),chat:E("single").optional(),chatMerge:y({sha256:m().regex(/^[0-9a-f]{64}$/),size:v().int().min(0),copies:k(y({slug:Et,file:m().regex(/^conversation\.premerge(?:-[0-9a-z]+)?\.jsonl$/),letter:Ze,own:B()})),retire:k(Et)}).optional()}).superRefine((e,t)=>{const i=a=>t.addIssue({code:"custom",message:a});e.members[0]?.letter!=="a"&&i("variant.hostNotFirst"),new Set(e.members.map(a=>a.letter)).size!==e.members.length&&i("variant.duplicateLetter"),new Set(e.members.map(a=>a.slug)).size!==e.members.length&&i("variant.duplicateSlug"),e.members.some(a=>a.status==="active")||i("variant.noActiveMember");const o=new Set(e.members.map(a=>a.slug));for(const[a,n]of Object.entries(e.picks))o.has(n.slug)||t.addIssue({code:"custom",message:"variant.unknownPick",path:["picks",a]})}),Lu=e=>e.includes("~"),Nu=e=>{const t=e.indexOf("~");return t<0?e:e.slice(0,t)},Ru=e=>{const t=e.indexOf("~");return t<0?"a":e.slice(t+1)},yr=e=>e.members.filter(t=>t.status==="active"),Pu=(e,t,i)=>{const o=e.members.find(a=>a.letter===t);return o?i?{ok:!1,reason:"running"}:o.status==="active"&&yr(e).length===1?{ok:!1,reason:"last-active"}:{ok:!0}:{ok:!1,reason:"unknown"}},wr={un:1,una:1,uno:1,a:1,an:1,one:1,due:2,two:2,tre:3,three:3,quattro:4,four:4,cinque:5,five:5,sei:6,six:6,sette:7,seven:7,otto:8,eight:8,nove:9,nine:9,dieci:10,ten:10};`${Object.keys(wr).join("|")}`;const kr=z(["draft","working","ready","incomplete","error","interrupted"]),Tt=1e5,Ia=e=>({goal:m().trim().min(1),message:m(),formats:e,formatLabels:re(m(),m().min(1).max(60)).optional(),durationSec:v().int().min(1).max(600).nullable(),assets:k(m()),notes:m(),links:re(m().min(1),m().min(1)).optional(),services:y({images:z(bt.images),voice:z(bt.voice),music:z(bt.music),sfx:z(bt.sfx)}).partial().optional(),locales:y({primary:$e,extra:k($e).max(10)}).refine(t=>new Set(t.extra).size===t.extra.length&&!t.extra.includes(t.primary),"issue.badLocales").optional(),storePack:ur.optional(),identity:Cs.optional()}),Fa=e=>Object.keys(e.formatLabels??{}).every(t=>e.formats.includes(t)),La={message:"issue.labelNotInFormats",path:["formatLabels"]},Sr=y({...Ia(k(m().min(1)).min(1).transform(e=>[...new Set(e)])),agentFormatLabels:re(m(),m()).optional()}).refine(Fa,La);y(Ia(k(m().regex(Je)).min(1).refine(e=>new Set(e).size===e.length,"issue.duplicateFormats"))).refine(Fa,La);y({schemaVersion:E(1),title:m().trim().min(1),brief:Sr,status:kr,error:m().nullable(),createdAt:Z(),updatedAt:Z(),resumeFrom:y({version:v().int().min(1),sessionId:m().min(1)}).nullable(),linkedCodebases:k(Ci).default([]),exportPicks:re(m().min(1),v().int().min(1)).optional(),freedInstances:re(m().min(1),v().int().min(0)).optional(),queued:k(Ln(()=>Pr)).optional(),stoppedSession:y({sessionId:m().min(1),at:Z(),jobId:m().min(1)}).optional(),variantGroup:$r.optional(),variantOf:za.optional(),variantNext:v().int().min(1).optional(),archivedAt:Z().optional(),subtitlesDrawn:B().optional()});const me=/^[0-9a-f]{64}$/,Mi=/^[^/\\]+$/,xr=new RegExp(`^compositions/${Xn}$`),Ar=y({key:m(),params:re(m(),Ie([m(),v()]))}),Cr=y({code:z(["tooLarge","durationOffTarget","durationOverMax","badResolution","notReadable","badExtension"]),params:re(m(),Ie([m(),v()]))}),Ei=y({lang:$e.nullable(),hash:m().regex(me).nullable(),seen:k($e).max(64).optional()}).strict().refine(e=>e.hash===null||e.lang!==null,"a drawn set has a language").refine(e=>e.seen===void 0||e.lang===null,"only a marker with no language lists the sets it saw"),Tr=y({format:m(),file:m(),width:v(),height:v(),durationSec:v().nullable(),verified:B(),preview:m().nullable(),warnings:k(Ar).optional(),sha256:m().regex(me).optional(),problems:k(m()).optional(),issues:k(Cr).optional(),fromComposition:m().regex(me).optional(),identitySet:zs.optional(),render:Ca.optional(),subtitles:Ei.optional()}),Na=y({format:m().min(1),dir:m().regex(xr),hash:m().regex(me),followsFormat:m().min(1).optional(),problems:k(m()).optional(),userDuration:y({durationSec:v().positive(),briefDurationSec:v().positive()}).optional()}),zr=["textOverflow","textOverflowMeasured","notTranslated","stale","voiceTooLong","voiceFailed","voiceDurationUnknown","voiceFileInvalid","assetChanged","fallbackFontUnavailable","renderCheckFailed","invalid","sourceTextOverflow"],Ir=y({code:z(zr),clipId:m().max(200).optional(),message:m().max(1e3)}),Fr=y({n:v().int().min(1),commit:m().nullable(),sessionId:m().nullable(),status:z(["complete","incomplete"]),createdAt:Z(),request:m(),outputs:k(Tr),problems:k(m()),tools:k(m()),renderCommand:m().nullable(),basedOn:v().int().nullable(),usage:pa.optional(),compositions:k(Na).optional(),origin:z(["agent","editor"]).optional(),localizations:k(y({locale:$e,instanceId:m().regex(Je),hash:m().regex(me),origin:z(["agent","editor"]),stale:k(m()),voice:z(["translated","original","muted"]),problems:k(m()).optional(),issues:k(Ir).max(400).optional(),voiceFallback:z(["off","noKey","missingPermission","declined","failed"]).optional(),noScript:k(m().max(200)).max(200).optional(),assetHashes:re(m().max(1024),m().regex(me)).optional(),render:y({file:m().regex(Mi).refine(e=>e!=="."&&e!=="..","issue.fileName"),width:v().int().positive(),height:v().int().positive(),durationSec:v().positive().nullable(),sha256:m().regex(me),fromComposition:m().regex(me),overlayHash:m().regex(me),forced:B(),stale:k(m()),problems:k(m()).optional(),renderedAt:Z(),subtitles:Ei.optional()}).optional()})).optional()});y({schemaVersion:E(1),versions:k(Fr).default([])});const Lr=y({schemaVersion:E(1),files:k(y({format:m().min(1),file:m().regex(Mi).refine(e=>e!=="."&&e!=="..","issue.fileName"),width:v().int().positive(),height:v().int().positive(),durationSec:v().positive().nullish(),followsFormat:m().min(1).optional()})),tools:k(m()).default([]),renderCommand:m().nullish()}),Nr=y({schemaVersion:E(2),compositions:k(Na),renders:k(y({format:m().min(1),file:m().regex(Mi).refine(e=>e!=="."&&e!=="..","issue.fileName"),width:v().int().positive(),height:v().int().positive(),durationSec:v().positive().nullable(),sha256:m().regex(me),renderedAt:Z(),fromComposition:m().regex(me).optional(),render:Ca.optional(),locale:$e.optional(),forced:B().optional(),stale:k(m()).optional(),subtitles:Ei.optional()}))});Kt("schemaVersion",[Lr,Nr]);function Ou(e,t){return t!=null&&e>0&&Math.abs(e-t)>Math.max(1,t*.1)}const Ra=/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/,Mu=e=>e.replace(new RegExp(Ra.source,"g")," ").slice(0,200),oi=e=>m().max(e).refine(t=>!Ra.test(t),{message:"control characters are not allowed"}),Rr=y({format:m().min(1),x:v().min(0).max(1),y:v().min(0).max(1),timeSec:v().min(0).nullable(),note:m().optional(),clipId:oi(64).optional(),clipName:oi(200).optional(),range:y({start:v().min(0),end:v()}).refine(e=>e.start<e.end).optional(),animation:z(["in","out"]).optional(),element:y({path:m().max(120).regex(/^(?:\d{1,6}(?:\/\d{1,6})*)?$/),name:oi(200)}).optional(),variant:Ze.optional()}),Pr=y({clientId:m().min(1).max(100),text:m().max(1e4),pins:k(Rr).max(50).default([]),at:Z(),pinsVersion:v().int().min(1).optional(),bootId:m().min(1).max(100).optional(),fanout:y({id:m().min(1).max(100),lead:Ze}).optional(),variants:k(Ze).max(1e3).optional(),attachments:k(m().min(1).max(1024)).max(20).optional()});function Eu(e,t){return e.filter(i=>!i.group&&(i.variant??"a")===t)}function qu(e){return e.type==="version"?{n:e.n,status:e.status,kept:!1}:e.type==="system"&&typeof e.keptVersion=="number"?{n:e.keptVersion,status:null,kept:!0}:null}function Du(e,t){if(e.key==="outputs.largeFile"){const o=Number(e.params.sizeMB),a=Number(e.params.mbps),n=Number(e.params.targetMbps);return[o,a,n].every(Number.isFinite)?Ee(t).outputs.largeFile({sizeMB:o,mbps:a,targetMbps:n,channel:la(String(e.params.channel??""),t)}):e.key}const i=o=>ns(et,String(o??""),t);return e.key==="outputs.keptUnchanged"?Ee(t).outputs.keptUnchanged({format:i(e.params.format)}):e.key==="outputs.followerReplaced"?Ee(t).outputs.followerReplaced({format:i(e.params.format),primary:i(e.params.primary)}):e.key}Object.values(Mt).flatMap(e=>Object.values(e)).filter(e=>e!==Mt.playstore.feature);const Or=48;function*Mr(e){for(const t of e.tracks)yield*t.clips}const Er=e=>e.type==="audio"&&e.role==="voice";function Uu(e){const t=[],i=[],o=[];for(const a of Mr(e))if(a.type==="text"){const n=a.props.fontSize??Or;t.push({clipId:a.id,...a.name!==void 0?{name:a.name}:{},...a.scene!==void 0?{scene:a.scene}:{},text:a.props.text,box:{w:a.props.width??e.width,h:a.props.height??Math.round(n*1.2)},size:n})}else if(a.type==="html")for(const[n,s]of Object.entries(a.params??{}))s.type==="text"&&i.push({key:`${a.id}.${n}`,...s.label!==void 0?{label:s.label}:{},text:s.value});else Er(a)&&o.push({clipId:a.id,script:a.script??null,duration:a.duration});return{texts:t,params:i,voices:o}}const qr=/^creative:[a-z0-9][a-z0-9-]{0,79}(?:~(?!a\/)[a-z]{1,3})?\/v[1-9]\d{0,5}$/,We=m().regex(/^[a-z0-9][a-z0-9-]{0,62}$/,"issue.id"),Zt=y({kind:z(["manual","website","image","codebase"]),ref:m().nullable()}).superRefine((e,t)=>{e.kind==="manual"&&e.ref!==null&&!qr.test(e.ref)&&t.addIssue({code:ae.custom,message:"issue.manualRef",path:["ref"]}),e.kind==="website"&&(e.ref===null?t.addIssue({code:ae.custom,message:"issue.websiteRefRequired",path:["ref"]}):Ai.safeParse(e.ref).success||t.addIssue({code:ae.custom,message:"issue.websiteRefInvalid",path:["ref"]})),e.kind==="image"&&(e.ref===null?t.addIssue({code:ae.custom,message:"issue.imageRefRequired",path:["ref"]}):we.safeParse(e.ref).success||t.addIssue({code:ae.custom,message:"issue.imageRefInvalid",path:["ref"]})),e.kind==="codebase"&&(e.ref===null?t.addIssue({code:ae.custom,message:"issue.codebaseRefRequired",path:["ref"]}):we.safeParse(e.ref).success||t.addIssue({code:ae.custom,message:"issue.codebaseRefInvalid",path:["ref"]}))}),wt="issue.weights",Dr=y({id:We,name:m().trim().min(1,"issue.nameRequired").max(60,"issue.nameTooLong"),hex:m().regex(/^#[0-9a-fA-F]{6}$/,"issue.hex").transform(e=>e.toUpperCase()),role:z(["primary","secondary","accent","background","text","other"],{message:"issue.role"}),source:Zt}),Ur=y({id:We,family:m().trim().min(1,"issue.familyRequired").max(80,"issue.familyTooLong"),role:z(["heading","body","accent","other"],{message:"issue.role"}),weights:k(v({message:wt}).int(wt).min(100,wt).max(900,wt)).max(9,"issue.maxWeights"),file:we.nullable(),source:Zt}),_r=y({id:We,file:we,variant:z(["primary","secondary","mono","icon","other"],{message:"issue.variant"}),background:z(["light","dark","any"],{message:"issue.background"}),source:Zt}),kt=y({id:We,text:m().trim().min(1,"issue.textRequired").max(2e3,"issue.textTooLong"),source:Zt}),Br=y({genre:m().max(200),energy:z(["low","medium","high"]).nullable(),instruments:k(m().min(1).max(60)).max(20),avoid:k(m().min(1).max(60)).max(20),voice:y({provider:z(["openai","elevenlabs"]),id:m().min(1).max(200),name:m().max(200).optional()}).nullable()}),_u={genre:"",energy:null,instruments:[],avoid:[],voice:null},Qe={colors:40,fonts:20,logos:30,dos:50,donts:50,codebaseSources:5},Pa=e=>new Set(e.map(t=>t.id)).size===e.length;y({schemaVersion:E(1),colors:k(Dr).max(Qe.colors).default([]),fonts:k(Ur).max(Qe.fonts).default([]),logos:k(_r).max(Qe.logos).default([]),tone:kt.nullable().default(null),dos:k(kt).max(Qe.dos).default([]),donts:k(kt).max(Qe.donts).default([]),photoStyle:kt.nullable().default(null),sound:Br.optional()}).refine(e=>[e.colors,e.fonts,e.logos,e.dos,e.donts].every(Pa),{message:"issue.duplicateIds"});function Wr(e){if(e.includes("\0")||e.split(/[\\/]/).includes(".."))return!1;const t=e.startsWith("/")?e.replace(/\/+$/,""):null;if(t!==null)return t!=="";const i=/^[A-Za-z]:[\\/]/.test(e)?e.slice(3).replace(/[\\/]+$/,""):null;return i!==null&&i!==""}const jr=y({id:We,kind:z(["website","image","codebase"]),url:Ai.nullable(),file:we.nullable(),path:m().min(1).max(4096).optional(),note:m().max(500).optional(),addedAt:Z(),lastAnalyzedAt:Z().nullable()}).superRefine((e,t)=>{e.kind==="website"&&(e.url===null&&t.addIssue({code:ae.custom,message:"issue.siteSourceUrl",path:["url"]}),e.file!==null&&t.addIssue({code:ae.custom,message:"issue.siteSourceFile",path:["file"]})),e.kind==="image"&&(e.file===null&&t.addIssue({code:ae.custom,message:"issue.imageSourceFile",path:["file"]}),e.url!==null&&t.addIssue({code:ae.custom,message:"issue.imageSourceUrl",path:["url"]})),e.kind==="codebase"?(e.path===void 0?t.addIssue({code:ae.custom,message:"issue.codebaseSourcePath",path:["path"]}):Wr(e.path)||t.addIssue({code:ae.custom,message:"issue.codebaseSourcePathInvalid",path:["path"]}),e.url!==null&&t.addIssue({code:ae.custom,message:"issue.codebaseSourceUrl",path:["url"]}),e.file!==null&&t.addIssue({code:ae.custom,message:"issue.codebaseSourceFile",path:["file"]})):(e.path!==void 0||e.note!==void 0)&&t.addIssue({code:ae.custom,message:"issue.pathOnlyCodebase",path:["path"]})});y({schemaVersion:E(1),sources:k(jr).default([])}).refine(e=>Pa(e.sources),{message:"issue.duplicateSourceIds",path:["sources"]}).refine(e=>e.sources.filter(t=>t.kind==="codebase").length<=Qe.codebaseSources,{message:"issue.maxCodebaseSources",path:["sources"]});const Vr=z(["colors","fonts","logos","dos","donts","tone","photoStyle"]),Gr=y({id:m().min(1),field:Vr,op:z(["add","update","remove"]),itemId:m().nullable(),before:pi(),after:pi()});y({schemaVersion:E(1),id:We,createdAt:Z(),sourceIds:k(We).max(100),status:z(["open","applied","discarded"]),summary:m().max(5e3),changes:k(Gr).max(500),guidelines:y({current:m().max(2e5),proposed:m().max(2e5)}).nullable(),assetsAdded:k(we).max(1e3),importedFiles:k(we).max(1e3).optional(),usage:pa.optional()});const ai=["openai","elevenlabs","pexels","unsplash"];y({schemaVersion:E(1),allow:k(y({rule:m().min(1).max(500),label:m().max(300),addedAt:Z()})).max(200).default([])});y({provider:z(ai),calls:k(y({label:m().max(300),chars:v().int().min(0)})).min(1),estimate:m().max(100).optional(),items:k(y({variant:Ze,provider:z(ai),capability:z(["images","voice","music","sfx"]),chars:v().int().min(0).optional(),seconds:v().min(0).optional(),estimate:m().max(100).optional()})).min(1).optional(),total:y({variants:v().int().min(1),calls:v().int().min(1),providers:k(y({provider:z(ai),calls:v().int().min(1)})).min(1).max(4).optional(),chars:v().int().min(0).optional(),seconds:v().min(0).optional(),estimate:m().max(100).optional()}).optional()});const pe={questions:4,minOptions:2,options:4,question:4e3,header:200,label:500,description:4e3,other:2e3},Bu={question:600,header:40,label:120,description:300},Hr=y({label:m().min(1).max(pe.label).refine(e=>e.trim()!==""),description:m().max(pe.description).optional().default("")}),Kr=new Set(["__proto__","constructor","prototype"]),Qr=y({question:m().min(1).max(pe.question).refine(e=>e.trim()!==""&&!Kr.has(e.trim())),header:m().max(pe.header).optional().default(""),options:k(Hr).min(pe.minOptions).max(pe.options).refine(e=>new Set(e.map(t=>t.label)).size===e.length),multiSelect:B().optional().default(!1)});y({questions:k(Qr).min(1).max(pe.questions).refine(e=>new Set(e.map(t=>t.question)).size===e.length)});k(y({selected:k(v().int().min(0).max(pe.options-1)).max(pe.options),other:m().max(pe.other).optional()}).strict()).min(1).max(pe.questions);let ni=0;const ue={add(e){ni+=e},reset(){ni=0},get(){return ni}},Yr=50,Xr=1e3,W=()=>({commands:[],parsed:!1,separators:[]});function Oa(e){return e<32?e!==9&&e!==10:e>=127&&e<=159?!0:e===173||e===847||e===1564||e===4447||e===4448||e===6068||e===6069||e===6158||e>=8203&&e<=8207||e>=8232&&e<=8238||e>=8288&&e<=8303||e===12644||e>=65024&&e<=65039||e===65279||e===65440||e>=65529&&e<=65531||e===56128}const qi=e=>e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_",zt=e=>qi(e)||e>="0"&&e<="9",It=e=>{if(e.length===0)return!1;for(let t=0;t<e.length;t++){const i=e[t];if(i<"0"||i>"9")return!1}return!0};function po(e){const t=e.text.indexOf("=");if(t<=0||e.quotedAt!==-1&&e.quotedAt<t||!qi(e.text[0]))return null;for(let i=1;i<t;i++)if(!zt(e.text[i]))return null;return[e.text.slice(0,t),e.text.slice(t+1)]}const Zr=new Set(["sh","bash","zsh","dash","ksh","mksh","fish","csh","tcsh","ash"]),fo=new Set(["eval","source",".","exec","trap","alias","unalias","function","coproc","select","let","if","then","else","elif","fi","for","while","until","do","done","case","esac","in","{","}","[[","]]","!","((","))","su","runuser","watch","parallel","flock","chroot","sandbox-exec","unbuffer","stdbuf","ionice","taskpolicy","dtruss","strace","ltrace","lldb","gdb","expect","at","batch","emacs","vim","vi","nvim","ex","ed"]),Jr=["/bin","/usr/bin","/usr/local/bin","/opt/homebrew/bin","/sbin","/usr/sbin","/opt/local/bin","/usr/local/sbin"];function Di(e){let t="";for(const i of e.split("/"))i===""||i==="."||(t+=`/${i}`);return e.startsWith("/")?t||"/":t.slice(1)}function Ma(e){if(!e.includes("/"))return e;const t=Di(e),i=t.lastIndexOf("/");return Jr.includes(t.slice(0,i))?t.slice(i+1):null}const Ea=e=>(Ma(e)??e).toLowerCase();function Ui(e){const t=e[0];if(t===void 0)return!1;const i=Ea(t);if(fo.has(i)||fo.has(t))return!0;const o=i.slice(i.lastIndexOf("/")+1);if(!Zr.has(o))return!1;for(let a=1;a<e.length;a++){const n=e[a];if(n==="--")return!1;if(n.startsWith("--")){if(n==="--command"||n.startsWith("--command=")||n==="--init-file"||n==="--rcfile")return!0;continue}if(n.startsWith("-")||n.startsWith("+")){if(n.includes("c")||n.includes("O")||n.includes("o"))return!0;continue}return!1}return!1}const ho=new Set(["-u","-g","-C","-p","-h","-r","-t","-U","-D","-R","-T","--user","--group","--prompt","--host","--role","--type","--other-user","--chdir","--chroot","--close-from","--command-timeout"]);function qa(e,t){const i={},o=[];let a=0;const n=()=>{for(;a<e.length;a++){const d=po(e[a]);if(!d)break;i[d[0]]=d[1]}},s=d=>e[d]?.text;for(n();;){const d=s(a);if(d===void 0)break;const c=Ea(d);if(c==="time"){for(o.push("time"),a++;a<e.length;a++){const u=s(a);if(u==="--"){a++;break}if(!u.startsWith("-")||u==="-")break;if(![...u.slice(1)].every(p=>"plha".includes(p)))return null}n()}else if(c==="nohup"||c==="builtin"||c==="noglob"||c==="nocorrect"||c==="busybox")o.push(c),a++;else if(c==="command"){const u=s(a+1);if(u==="-v"||u==="-V")break;for(o.push(c),a++;s(a)==="-p"||s(a)==="--";)a++}else if(c==="sudo"||c==="doas"){for(o.push(c),a++;a<e.length;a++){const u=s(a);if(u==="--"){a++;break}if(!u.startsWith("-")||u==="-")break;if(c==="doas"){if(u==="-u"){a++;continue}if(u==="-n")continue;return null}if(u==="-s"||u==="-i"||u==="-e"||u==="--shell"||u==="--login"||u==="--edit"||u==="-l"||u==="--list"||u==="-v"||u==="--validate")return null;if(ho.has(u)){a++;continue}if(u.startsWith("--"))continue;const p=`-${u[u.length-1]}`;u.length>2&&ho.has(p)&&a++;for(const h of u.slice(1))if(h==="s"||h==="i"||h==="e"||h==="l"||h==="v")return null}if(n(),a>=e.length)return null}else if(c==="env"){for(o.push("env"),a++;a<e.length;a++){const u=s(a);if(u==="--"){a++;break}if(!(u==="-i"||u==="-"||u==="--ignore-environment"||u==="-0"||u==="--null"||u==="-v")){if(u==="-u"||u==="--unset"){a++;continue}if(!u.startsWith("--unset=")){if(u.startsWith("-"))return null;break}}}n()}else if(c==="nice")for(o.push("nice"),a++;a<e.length;a++){const u=s(a);if(u==="-n"||u==="--adjustment"){a++;continue}if(!(u.startsWith("--adjustment=")||u.startsWith("-")&&u.length>1&&It(u.slice(u[1]==="-"?2:1)))){if(u.startsWith("-"))return null;break}}else if(c==="timeout"||c==="gtimeout"){for(o.push("timeout"),a++;a<e.length;a++){const u=s(a);if(u==="-s"||u==="-k"||u==="--signal"||u==="--kill-after"){a++;continue}if(!(u==="--preserve-status"||u==="--foreground"||u==="-v"||u==="--verbose"||u.startsWith("--signal=")||u.startsWith("--kill-after="))){if(u.startsWith("-"))return null;break}}if(a++,a>=e.length)return null}else if(c==="caffeinate"||c==="arch"||c==="xcrun"||c==="script"){let u=a+1;const p={caffeinate:["-t","-w"],arch:["-arch","-d","-e"],xcrun:["-sdk","--sdk","--toolchain"],script:["-t","-T"]},h={caffeinate:["-d","-i","-m","-s","-u","-di","-dims","-dimsu","-is","-im","-ims"],arch:["-x86_64","-x86_64h","-arm64","-arm64e","-i386","-32","-64","-c","-h"],xcrun:["-l","--log","-v","--verbose","-n","--no-cache","-k","--kill-cache","-r","--run"],script:["-a","-d","-e","-F","-k","-p","-q","-r","-aq","-qa","-q","-qF"]};let b=!1;for(;u<e.length;u++){const g=s(u);if(!g.startsWith("-"))break;if(p[c].includes(g)){if(c==="arch"&&g==="-e"){const S=e[u+1]&&po(e[u+1]);S&&(i[S[0]]=S[1])}u++;continue}if(!h[c].includes(g)){if(c==="xcrun"&&(g==="-f"||g==="--find"||g.startsWith("--show"))){b=!0;break}return null}}if(b||u>=e.length)break;if(c==="script"&&(s(u)!=="/dev/null"||(u++,u>=e.length)))return null;o.push(c),a=u}else break}const r=e[a];r&&r.text.length>1&&r.text.startsWith("=")&&r.quotedAt===-1&&(e[a]={text:r.text.slice(1),quotedAt:-1});const l=e.slice(a).map(d=>d.text);return Ui(l)?null:{argv:l,env:i,redirects:t,wrappers:o}}function Da(e){for(let t=1;t<e.length;t++){if(e[t]!=="[")continue;const i=e[t-1];if(!(i>="a"&&i<="z"||i>="A"&&i<="Z"||i>="0"&&i<="9"||i==="_"))continue;let o=0,a=t;for(;a<e.length;a++){const n=e[a];if(n==="[")o++;else if(n==="]"){if(o--,o===0)break}else if(n==="`"||n==="$"&&e[a+1]==="(")return!0}t=a}return!1}function Ua(e){return e.some(Da)?null:qa(e.map(t=>({text:t,quotedAt:-1})),[])}function el(e){let t=0;try{return i()}finally{ue.add(t)}function i(){const o=e,a=o.length;t+=a;for(let N=0;N<a;N++)if(Oa(o.charCodeAt(N)))return W();const n=[],s=[];let r=[],l=[],d="",c=!1,u=-1,p=null,h=!1,b=0;const g=()=>{u===-1&&(u=d.length),c=!0},S=()=>{if(!c)return!0;if(Da(d))return!1;const N={text:d,quotedAt:u};if(d="",c=!1,u=-1,p!==null){const x=p;return p=null,x==="dup>"||x==="dup<"?N.text==="-"||It(N.text)||N.text.endsWith("-")&&It(N.text.slice(0,-1))?!0:x==="dup<"?!1:(l.push({op:"&>",target:N.text}),!0):(l.push({op:x,target:N.text}),!0)}return r.push(N),++b<=Xr},L=N=>{if(!S()||p!==null)return!1;if(r.length===0&&l.length===0)return N===null?!h:N===`
13
+ Variabili: MOTION_STUDIO_CONFIG_DIR, MOTION_STUDIO_CLAUDE_COMMAND (array JSON)`,invalidPort:e=>`Porta non valida: ${e.value}`,unknownOption:e=>`Opzione sconosciuta: ${e.option}`,invalidOptionValue:e=>`Valore non valido per ${e.option}`,unexpectedArgument:e=>`Argomento inatteso: ${e.arg}`,notRunning:"Motion Studio non è in esecuzione: avvialo con motion-studio",alreadyRunning:e=>`Motion Studio è già avviato: ${e.url}`,running:e=>`Motion Studio è attivo su ${e.url}`,openManually:e=>`Apri manualmente ${e.url}`,closeFailed:e=>`Chiusura non riuscita: ${e.detail}`,portInUse:e=>`La porta ${e.port} è già in uso: riprova con --port <altra>`},agentActions:{afterTurn:"dalla fine di questo turno",briefDuration:e=>`Durata del brief: ${e.from} → ${e.to}`,durationNone:"nessuna",seconds:e=>`${e.n} s`,briefGoal:"Obiettivo del brief aggiornato",briefMessage:"Messaggio chiave del brief aggiornato",briefNotes:"Note del brief aggiornate",briefServices:e=>`Servizi del brief: ${e.list}`,formatAdded:e=>`Formato aggiunto al brief: ${e.format}`,formatMadeNext:e=>`${e.formats}: si crea al prossimo turno`,languageAdded:e=>`Lingua aggiunta al brief: ${e.language} · tradotta dopo questo turno`,duplicateQueued:e=>`Dopo questo turno: duplica ${e.format}`,formatsNamed:e=>`Nomi dei formati: ${e.list}`,duplicateDone:e=>`Formato duplicato: ${e.format} (v${e.n})`,variantAdded:e=>`Nuova variante ${e.letter}: ${e.direction}`,variantDiscarded:e=>`Variante ${e.letter} scartata`,variantRestored:e=>`Variante ${e.letter} ripristinata`,pickSet:e=>`★ di ${e.format}: ${e.version}`,pickQueued:e=>`Dopo questo turno: ★ di ${e.format} sulla nuova versione`,renderStarted:e=>`Render avviato: v${e.n} · ${e.formats}`,renderQueued:e=>`Dopo questo turno: render di ${e.formats}`,allFormats:"tutti i formati",exportQueued:"Dopo questo turno: render di ciò che serve all'export ★",exportNothing:"L'export ★ non ha bisogno di render: apri Esporta per salvare i file",exportRendering:e=>`Render di ${e.count===1?"1 formato":`${e.count} formati`} per l'export ★; poi apri Esporta per salvare i file`,dropped:e=>`Non eseguito, perché il turno non ha salvato una versione o è stato fermato: ${e.list}`,failed:e=>`${e.action}: non eseguito (${e.reason})`,limit:e=>`Al massimo ${e.max} azioni sull'app per turno`,nothingToChange:"Niente da cambiare: indica almeno un campo",formatUnknown:e=>`Formato sconosciuto: ${e.format}`,formatInBrief:e=>`${e.format} è già nel brief: per un secondo usa duplicate_format`,formatIdentity:"I formati identità (logo, favicon, icona app) si scelgono quando si crea la creatività",namesRefused:e=>`Nessun nome dato ai formati: ${e.list}`,nameUserNamed:"nome dato dall'utente: è suo, non cambiarlo mai",nameNotInBrief:"non è nel brief",nameGroupNamed:"ha già un nome: in un gruppo di varianti solo l'agente con cui parla l'utente rinomina un formato",nameEmpty:"nome vuoto",primaryNeeded:"Il brief non ha ancora lingue: indica anche la lingua principale (primary)",languageInBrief:e=>`${e.language} è già nel brief`,discardNotPointed:e=>`L'utente non ha indicato la variante ${e.letter}: chiedi quale variante scartare (AskUserQuestion) prima di scartarla`,helperGroupAction:"Lavori su una variante per l'agente con cui parla l'utente: aggiungere, scartare o ripristinare varianti e la ★ di un'altra variante sono azioni sue",variantInPlan:e=>`La variante ${e.letter} ha lavoro in questo turno: resta com'è finché il turno non è finito`,groupPickNeedsVariant:"Indica la variante e una sua versione salvata (l'agente del gruppo non ha versioni proprie)",groupRenderNeedsVariant:"Indica la variante e una sua versione salvata",currentOwnOnly:'"current" è la versione che questo turno sta facendo: vale solo per la tua variante',incompleteDuration:e=>`v${e.n} è incompleta: il video dura ${e.duration} s, il brief dice ${e.target} s. Cambia la durata nel brief (la versione viene ricontrollata subito, senza un nuovo turno) oppure chiedi all'agente di accorciarlo.`,incompleteOther:e=>`v${e.n} è incompleta: ${e.count===1?"è rimasto 1 problema":`sono rimasti ${e.count} problemi`} dopo le correzioni automatiche. Sono elencati nella versione: chiedi all'agente di correggerli, oppure modifica la composizione nell'editor.`,recheckComplete:e=>`v${e.n} ricontrollata con la durata del brief (${e.target}): ora è completa.`,recheckPartial:e=>`v${e.n} ricontrollata con la durata del brief (${e.target}): ${e.formats} ora vanno bene; restano altri problemi.`,recheckCommit:e=>`${e.title}: v${e.n} ricontrollata con il brief`},web:{identity:{start:"Partenza",fromBrand:"Dal logo del brand",fromScratch:"Da zero",sourceCodebase:"da codebase",fromBrandHint:"L’agente adatta il logo del brand (margini, versione semplificata per le dimensioni piccole) senza ridisegnarlo.",noBrandLogo:"Il brand non ha ancora un logo: l’agente ne disegnerà uno nello stile del brand.",name:"Nome o sigla",namePlaceholder:"Es. Acme o AC",keywords:"Parole chiave di stile (facoltative)",keywordsPlaceholder:"Es. geometrico, amichevole, deciso",colors:"Colori",colorsBrand:"Dal brand",colorsFree:"Liberi",view:"Vista",viewImage:"Immagine",viewSizes:"Dimensioni",sizesTitle:"Dimensioni",sizesIntro:"Ogni file del set alla sua dimensione reale, e come appare l’icona dove viene usata.",zoomed:"Ingrandisci",oneToOne:"1:1",fileSize:e=>`${e.name}, ${e.w}×${e.h} px`,noPreview:"Nessuna anteprima",contexts:"In contesto",browserTab:"Scheda del browser",iosIcon:"Icona iOS",androidIcon:"Icona adattiva Android",maskableIcon:"Icona web maskable",safeZone:"Zona sicura",safeZoneNote:e=>`Il cerchio tratteggiato è la zona sicura (${e.pct}% dell’icona): tieni il segno al suo interno.`,warnings:"Avvisi",onLight:"Su chiaro",onDark:"Su scuro",noDarkLogo:"Rigenera per avere il logo negativo",noDarkLogoTip:"Questa versione del logo non ha la versione negativa per gli sfondi scuri: su scuro si vede il logo principale.",logoSides:e=>`${e.label} su sfondo chiaro e su sfondo scuro`,useAsLogo:"Usa come logo del brand",useAsLogoOf:e=>`Usa ${e.label} come logo del brand`,useAsLogoTitle:"Usare come logo del brand?",useAsLogoBody:"Il logo viene copiato negli Asset del progetto e aggiunto al kit del brand. Se il kit ha già un logo del tipo scelto, quello passa in secondo piano (da principale a secondario, da icona ad altro). Il kit cambia subito, senza una proposta da approvare.",useAsLogoDarkNote:"Insieme al logo viene aggiunta la sua versione negativa, per gli sfondi scuri.",useAsLogoAs:"Aggiungilo come",variantPrimary:"Logo principale",variantIcon:"Icona",useAsLogoConfirm:"Aggiungi al brand",useAsLogoDone:"Aggiunto al kit del brand",useAsLogoNotCommitted:"Aggiunto al kit del brand, ma la modifica non si è potuta salvare nella cronologia del progetto; si salverà con la prossima modifica",useAsLogoOpen:"Apri il brand",useAsLogoFailed:e=>`Impossibile aggiungere il logo al brand: ${e.detail}`},variantGroup:{discardedReadOnly:"Variante scartata: ripristinala per lavorarci",groupBy:"Raggruppa per",variant:"Variante",variants:"Varianti",identityVariantsHint:"Ogni variante ha logo, favicon e icona app coerenti tra loro: le confronti e ne scegli una.",format:"Formato",all:"Tutte",addVariant:"+ Variante",addVariantMenu:"Aggiungi variante",discard:"Scarta",restore:"Ripristina",showDiscarded:"Mostra scartate",viewLabel:"Vista delle varianti",viewChosen:"Scelte",viewAll:"Tutte le varianti",chosenTitle:"Scelte",noChoiceTitle:"Senza scelta",noChoiceHint:"Per questi formati la selezione finale prende la regola predefinita: sceglili in Selezione finale.",noVariantFile:"Nessuna variante ha ancora questo formato",useForAllFormats:"Usa questa variante per tutti i formati",finalSelection:"Selezione finale",missing:"mancante",letterLabel:e=>`Variante ${e.letter}`,count:e=>e.count===1?"1 variante":`${e.count} varianti`,discardRefused:{running:"Fermala prima di scartarla",lastActive:"È l'ultima variante attiva: tienine almeno una"},openVariant:"Apri questa variante",fieldHint:"Ogni variante è una direzione creativa diversa, con tutti i formati.",directionOf:e=>`Direzione della variante ${e.letter} (facoltativa)`,directionPlaceholder:"Es. minimale, molto spazio bianco",directionAuto:"Se la lasci vuota, la propone l'agente.",directionLimit:e=>`Al massimo ${e.max} caratteri`,groupFailed:e=>`La creatività è stata creata, ma non è stato possibile creare le varianti: ${e.detail}`,startFailed:e=>`La creatività è stata creata, ma le varianti non sono partite: ${e.detail}`,selectorLabel:"Invia a",singleHint:"Il messaggio va all'agente della creatività. Indica le varianti (B, «variante C», «tutte le varianti») o lascia un commento su una variante: se non le indichi, l'agente te lo chiede.",sendToHint:e=>`Il messaggio va alla variante ${e.letter}. La chat è la stessa per tutte le varianti.`,selectorAll:"Tutte",allHint:"La stessa richiesta parte in ogni variante attiva.",sentToAll:e=>e.count===1?"Richiesta inviata a 1 variante":`Richiesta inviata a ${e.count} varianti`,sentToAllRefused:e=>`Non partite: ${e.list}`,pinsNotSentToAll:"non inviati a Tutte",sendAllFailed:e=>`Impossibile inviare la richiesta alle varianti: ${e.detail}`,toolbarAria:"Varianti",groupByAria:"Raggruppa per",rowMenu:e=>`Opzioni della variante ${e.letter}`,exportVariant:"Esporta questa variante",editDirection:"Modifica direzione",directionSave:"Salva direzione",directionFailed:e=>`Impossibile salvare la direzione: ${e.detail}`,noDirection:"Ancora nessuna direzione",discarded:"Scartata",discardFailed:e=>`Impossibile scartare la variante: ${e.detail}`,restoreFailed:e=>`Impossibile ripristinare la variante: ${e.detail}`,layoutFailed:e=>`Impossibile cambiare il raggruppamento: ${e.detail}`,missingFolder:"La cartella di questa variante manca",orphanNotice:"Il gruppo di questa variante non si trova: si apre come creatività singola.",waiting:"In attesa",finalPick:e=>`${e.format} · Variante ${e.variant} · v${e.n}`,finalDefault:e=>`${e.format} · regola predefinita`,finalDefaultFrom:e=>`${e.format} · Variante ${e.variant} · v${e.n} · regola predefinita`,finalEmpty:"Nessun formato",finalHint:"Da dove arriva ogni formato dell'esportazione del gruppo. Senza ★ vale la regola predefinita della variante A.",starUse:e=>`Usa ${e.label} v${e.n} della variante ${e.variant} per l'esportazione`,starUsed:e=>`${e.label}: la variante ${e.variant} v${e.n} è scelta per l'esportazione`,choose:"Scegli",inChat:"In chat",inChatHint:"Chat, versioni e commenti sono di questa variante",chosen:"Scelta",readyBanner:e=>`${e.count} varianti pronte: scegli quella finale`,chooserHint:"Per ogni formato, clicca la variante da esportare. Un secondo clic sulla scelta torna alla regola predefinita.",chooserPick:e=>`${e.format}: variante ${e.variant}, v${e.n}`,chooserDefaultTag:"Regola predefinita",chooserNone:"Nessuna variante ha ancora questo formato.",cardFormats:e=>`Formati della variante ${e.letter}`,pickFailed:e=>`Impossibile salvare la scelta: ${e.detail}`,usedForAll:e=>`La variante ${e.letter} è ora scelta per tutti i formati`,useForAllFailed:e=>`Impossibile scegliere la variante: ${e.detail}`,addTitle:"Aggiungi una variante",addDirection:"Direzione (facoltativa)",addBase:"Parti da",addBaseBrief:"Il brief",addBaseOf:e=>`Variante ${e.letter}, versione ${e.n}`,addSubmit:"Aggiungi variante",addFailed:e=>`Impossibile aggiungere la variante: ${e.detail}`,listMissing:e=>`mancante: ${e.letters}`,stateLabel:e=>`Stato della variante ${e.letter}`,waitReasons:{"variant-directions":"in attesa delle direzioni","variant-confirm":"in attesa della conferma","variant-slot":"in coda: due varianti già al lavoro","video-long":"in attesa di conferma: video lungo","video-queue":"in coda: si sta analizzando un altro video del progetto","transcription-choice":"in attesa della scelta sulla trascrizione","transcription-check":"controllo del parlato nell'audio"}},theme:{aria:"Tema",system:"Sistema",light:"Chiaro",dark:"Scuro"},instances:{duplicate:"Duplica formato",duplicating:"Duplicazione…",duplicateHint:e=>`Duplica ${e.label} come nuovo formato di questa creatività`,duplicateFailed:e=>`Impossibile duplicare il formato: ${e.detail}`,duplicated:e=>`Duplicato: ${e.label}`,title:"Formati di questa creatività",hint:"Dai un’etichetta a ogni formato, cambia l’ordine o aggiungi di nuovo lo stesso formato.",list:"Formati scelti",labelOf:e=>`Etichetta di ${e.name}`,labelPlaceholder:"Etichetta (facoltativa)",dragHandle:e=>`Trascina per riordinare ${e.name}`,moveUp:e=>`Sposta ${e.name} su`,moveDown:e=>`Sposta ${e.name} giù`,addAnother:e=>`Aggiungi un altro ${e.name}`,addAnotherShort:"Aggiungi un altro",full:"Hai raggiunto il limite di 20 dello stesso formato",remove:e=>`Rimuovi ${e.name}`,removeTitle:e=>`Rimuovere ${e.name}?`,removeBody:"Le versioni salvate restano. Il formato non rientra nelle prossime generazioni.",removeConfirm:"Rimuovi",saveFailed:e=>`Impossibile salvare i formati: ${e.detail}`,invalidId:e=>`Il brief contiene il formato “${e.id}”, che non è più valido. Toglilo dall’elenco dei formati e salva di nuovo.`},codebase:{needAbsolute:"Indica un percorso assoluto",alreadyLinked:"Cartella già collegata",pickTitle:"Scegli la cartella da collegare",hint:"Le cartelle collegate sono in sola lettura. L'agente può leggerle; gli strumenti di modifica sono bloccati e le modifiche nei repository git vengono segnalate.",notFound:"Non trovata",noteFor:e=>`Nota per ${e.path}`,remove:e=>`Rimuovi ${e.path}`,pathAria:"Percorso assoluto della cartella",pathPlaceholder:"/Users/tuonome/dev/app",noteAria:"Nota (facoltativa)",notePlaceholder:"Es. app iOS, schermate in /Screens",link:"Collega"},questionUi:{title:"L’agente ti chiede",other:"Altro",otherPlaceholder:"Scrivi la tua risposta",multiHint:"Puoi sceglierne più di una",send:"Rispondi",skip:"Non rispondere",chooseFirst:"Scegli un’opzione o scrivi la tua risposta per ogni domanda",historyLabel:"Domanda dell’agente",yourAnswer:"La tua risposta",skipped:"Senza risposta",expired:"Scaduta senza risposta",cancelled:"Annullata: il turno è stato fermato"},approvalUi:{alreadyHandled:"Richiesta già gestita",generate:"Genera",deny:"Nega",allow:"Consenti",alwaysHere:"Sempre qui",alwaysRule:e=>`“Sempre qui” salva la regola ${e.rule}`,alwaysScope:e=>`Sempre qui consente: ${e.label} · solo in questo progetto`,alwaysSaved:e=>`Sempre consentito in questo progetto: ${e.label}`,showCommand:"Mostra il comando",hideCommand:"Nascondi il comando",showDetails:"Mostra i dettagli",hideDetails:"Nascondi i dettagli",fullCommand:"Comando completo",fullDetails:"Dettagli completi",lines:e=>e.count===1?"1 riga":`${e.count} righe`,scrollMore:"Scorri per leggerlo tutto",shortened:e=>`Accorciato da Motion Studio ai primi ${e.count} caratteri`,describe:{command:"L’agente vuole eseguire un comando su questo computer.",edit:"L’agente vuole modificare un file fuori dal progetto.",read:"L’agente vuole leggere un file fuori dal progetto.",web:"L’agente vuole aprire una pagina web.",tool:"L’agente vuole usare uno strumento che richiede il tuo permesso."},kinds:{command:"Comando",edit:"Modifica di file",read:"Lettura di file",web:"Pagina web",tool:"Strumento",provider:"Servizio esterno"},agentSays:e=>`L’agente dice: “${e.reason}”`,riskPrefix:e=>`${e.risk}:`,otherRisk:"Altro rischio",runsCommand:"Esegue un comando"},exportUi:{title:e=>`Esporta le versioni ★ di “${e.title}”`,heading:"Esporta le versioni ★",sub:e=>`“${e.title}”: ogni formato nella sua versione ★, pronto da pubblicare.`,format:"Formato",version:"Versione",include:e=>`Esporta ${e.label}`,star:e=>`★ v${e.n}`,groupHeading:"Esporta la selezione finale",groupSub:e=>`“${e.title}”: ogni formato dalla sua ★ nel gruppo, da qualunque variante.`,groupPick:e=>`Variante ${e.variant} · v${e.n}`,groupDefault:e=>`Variante ${e.variant} · v${e.n} · regola predefinita`,groupLoading:"Lettura della selezione finale…",groupLoadFailed:e=>`Impossibile leggere la selezione finale: ${e.detail}`,newer:e=>`v${e.n} più recente`,follows:e=>`segue ${e.primary}`,fileMissing:e=>`Il file di v${e.n} manca o non si può leggere in sicurezza`,noFollowerFile:e=>`La v${e.n} di ${e.primary} non ha un file per questo formato`,names:"Nomi dei file",pattern:"Schema dei nomi dei file",insertToken:e=>`Inserisci {${e.token}}`,preview:"Anteprima",previewLanguage:e=>`Anteprima, ${e.language}`,unknownVars:e=>`Le variabili sconosciute vengono omesse: ${e.list}`,emptyName:"Questo schema dà un nome di file vuoto",collision:e=>`Due formati avrebbero lo stesso nome di file (${e.list}). Aggiungi {format} allo schema.`,saveDefault:"Salva come predefinito",savedDefault:"Salvato come predefinito del workspace",saveFailed:e=>`Impossibile salvare il predefinito: ${e.detail}`,errors:{invalidPicks:"Scegli almeno un formato da esportare.",pickFollower:"Un formato che ne segue un altro si esporta con la versione ★ del suo principale: riapri Esporta e riprova.",pickNoFile:e=>`${e.detail}. Riapri Esporta per aggiornare l'elenco.`,followMismatch:e=>`${e.detail}. Riapri Esporta per aggiornare l'elenco.`,fileMissing:e=>`${e.detail}. Riapri Esporta per aggiornare l'elenco.`,nameCollision:e=>`Non è stato esportato nulla. ${e.detail}.`,nameEmpty:"Questo schema dà un nome di file vuoto.",invalidPattern:"Lo schema dei nomi non è valido (al massimo 200 caratteri).",invalidDestination:"Scegli una cartella di destinazione (un percorso assoluto).",invalidDate:"La data di esportazione non è valida: riapri Esporta e riprova."},saveTo:"Salva in",pickTitle:"Scegli la cartella di destinazione",choose:"Scegli…",folder:"Cartella di destinazione",placeholder:"/Users/tuonome/Consegna",lastUsed:"ultima usata",noFolder:"Nessuna cartella scelta",subtitles:{title:"Sottotitoli",files:"File .srt e .vtt",filesHint:"Accanto a ogni video, per YouTube, Vimeo, LinkedIn e i siti.",drawn:"Nel video",drawnHint:"Un video per lingua, con i sottotitoli disegnati nel loro stile.",soft:"Traccia nel file MP4",softHint:"Sottotitoli da attivare nel player, dentro il file del video.",cleanNote:"File e tracce vanno con un video senza sottotitoli disegnati.",previewDrawn:e=>`Nel video, ${e.language}`,previewDrawnOn:e=>`Video in ${e.video}, sottotitoli in ${e.language}`,drawnVideo:e=>`Video dei sottotitoli in ${e.language}`,voicedOnly:e=>`Segue la voce del video in ${e.language}: va solo con quel video, se lo esporti`,noTrackRow:"Non disegna i sottotitoli: non esportato"},noOverwrite:"I file esistenti non vengono mai sovrascritti",files:e=>e.count===1?"1 file":`${e.count} file`,run:e=>e.count===1?"Esporta 1 file":`Esporta ${e.count} file`,running:"Esportazione…",done:e=>e.count===1?"1 file esportato":`${e.count} file esportati`,skipped:e=>`Non esportati: ${e.list}`,renderProblems:e=>`Renderizzato con problemi: ${e.list}. Spuntalo per esportarlo comunque`,excluded:e=>`Non esportati perché il render ha dei problemi: ${e.list}`,excludedItem:e=>`${e.label} v${e.n} (${e.list})`,problemShort:{tooLarge:e=>`${e.size} MB invece di al massimo ${e.max} MB`,durationOffTarget:e=>`durata ${e.duration} s invece di ${e.target} s`,durationOverMax:e=>`durata ${e.duration} s, al massimo ${e.max} s`,badResolution:e=>`${e.size} invece di ${e.expected}`,notReadable:"il file non è leggibile",badExtension:e=>`.${e.ext} non ammessa`},resolution:"Risoluzione",resolutionOriginal:"Dimensione del formato",resolutionOption:e=>e.n===2160?"2160p (4K)":e.n===1440?"1440p (2K)":`${e.n}p`,frameRate:"Fotogrammi al secondo",frameRateOriginal:e=>e.fps===null?"Del formato":`${e.fps} fps (del formato)`,frameRateOption:e=>`${e.n} fps`,quality:"Qualità",qualityNames:{standard:"Standard",high:"Alta",max:"Massima"},qualityHints:{standard:"File più piccoli, come li faceva Motion Studio finora",high:"Testi e bordi nitidi: circa 8 Mbps a 1080p, come consiglia YouTube",max:"I file più grandi: ogni fotogramma senza perdita prima della codifica"},profileHint:"Solo i video: le immagini mantengono la loro dimensione",profileLocked:"Con altre lingue i video si esportano alla dimensione del formato e in qualità Alta",outputSize:e=>`→ ${e.size}`,background:"L’export continua in background: puoi chiudere questa finestra, ti avvisiamo quando i file sono nella cartella.",exportingPct:e=>`Esportazione ${e.pct}%`,renderingFirst:e=>`Render · ${e.pct}%`,copying:"Copia dei file…",cancelExport:"Annulla export",cancelled:"Export annullato",failed:e=>`Export non riuscito: ${e.detail}`,doneToast:e=>e.count===1?`1 file esportato in ${e.folder}`:`${e.count} file esportati in ${e.folder}`,doneNotification:"Export completato",doneLeftOut:e=>e.count===1?"1 non esportato: riapri Esporta per vedere perché.":`${e.count} non esportati: riapri Esporta per vedere perché.`,needsForceToast:e=>`Export interrotto: queste traduzioni hanno problemi aperti o testi superati: ${e.list}`,doneRow:e=>e.count===1?`1 file in ${e.folder}`:`${e.count} file in ${e.folder}`,cancelOf:e=>`Annulla ${e.label}`,showInFinder:"Mostra nel Finder",showInFolder:"Mostra nella cartella",finish:"Fatto",empty:"Ancora niente da esportare."},player:{audio:e=>`Lettore audio: ${e.name}`,video:e=>`Lettore video: ${e.name}`,play:"Riproduci",pause:"Pausa",position:"Posizione",positionText:e=>`${e.time} di ${e.total}`,waveform:"Forma d’onda",unplayable:"Questo file non si può riprodurre qui",keys:"Spazio avvia o ferma · ←/→ 5 s · Home/Fine"},library:{generate:{open:"Genera",title:"Genera un asset",tabs:"Cosa generare",kinds:{image:"Immagine",voice:"Voce narrante",sfx:"Effetto sonoro",music:"Musica"},providerLabel:"Provider",providerNames:{openai:"OpenAI",elevenlabs:"ElevenLabs"},providerLine:e=>`Prodotto da ${e.provider} (${e.model}).`,paidNote:"Ogni generazione è una chiamata a pagamento sul tuo account del provider: Motion Studio ti chiede prima la conferma e il risultato viene aggiunto agli Asset.",noKeyTitle:e=>`Aggiungi la chiave ${e.providers} per usare questa scheda.`,openSettings:"Apri le Impostazioni",noKeysAtAll:"Non c’è ancora nessuna chiave dei provider: non si può generare nulla.",prompt:"Descrizione",imagePlaceholder:"es. un’illustrazione piatta di un aeroplano di carta blu sopra una città",soundPlaceholder:"es. una porta di legno che sbatte, breve",musicPlaceholder:"es. pianoforte calmo con una crescita lenta",text:"Testo da leggere",textPlaceholder:"Le parole da dire, esattamente come scritte.",width:"Larghezza",height:"Altezza",sizeNote:"La dimensione viene portata alla più vicina supportata dal modello (fino a 3840 px).",quality:"Qualità",qualities:{auto:"Automatica",low:"Bassa",medium:"Media",high:"Alta"},voice:"Voce",voiceId:"ID della voce",voicePlaceholder:"Voce predefinita",brandVoice:e=>`Voce del brand: ${e.name}`,instructions:"Stile di lettura",instructionsPlaceholder:"es. calda e senza fretta",format:"Formato",duration:"Durata",sfxLimits:"Tra 0,5 e 30 secondi. Lascia vuoto per far scegliere al servizio.",musicLimits:"Tra 10 e 300 secondi.",seconds:"s",loop:"In loop",instrumental:"Solo strumentale",brandStyle:"Il testo parte dallo stile sonoro del brand; modificalo come vuoi.",name:"Nome del file",namePlaceholder:"Facoltativo",submit:"Genera",cancel:"Annulla",close:"Chiudi",stop:"Ferma",starting:"Avvio…",running:"Generazione in corso… Se una conferma è in attesa, la trovi nel centro attività.",done:"Aggiunto agli Asset.",failed:e=>`Generazione non riuscita: ${e.error}`,cancelled:"Generazione annullata.",errors:{promptRequired:"Descrivi cosa generare.",textRequired:"Scrivi il testo da leggere.",duration:e=>`Scegli una durata tra ${e.min} e ${e.max} secondi.`,size:"Inserisci larghezza e altezza."}},assets:{title:"Asset",filters:"Filtri degli asset",type:"Tipo",origin:"Origine",tags:"Tag",kinds:{all:"Tutti",image:"Immagini",svg:"Vettoriali",video:"Video",font:"Font",audio:"Audio",other:"Altro"},origins:{website:"Dal sito",upload:"Caricati",generated:"Generati",stock:"Stock","google-fonts":"Google Fonts",codebase:"Da codebase"},originShort:{website:"sito",upload:"caricato",generated:"generato",stock:"stock","google-fonts":"Google Fonts",codebase:"da codebase"},count:e=>`${e.shown} di ${e.total}`,selectedCount:e=>e.count===1?"1 selezionato":`${e.count} selezionati`,clearFilters:"Togli i filtri",search:"Cerca negli Asset",searchPlaceholder:"Cerca nomi, descrizioni, tag",upload:"Carica",uploadInput:"Carica file",dropTitle:"Trascina i file ovunque",dropBody:"Immagini, SVG, video, font, audio · fino a 200 MB ciascuno. Poi falli descrivere a Claude.",dropOverlay:e=>`Rilascia per aggiungere a ${e.project}`,refsGroup:"Creatività",refsFilter:"Riferimenti delle creatività",refsIntro:"File aggiunti dal computer nel brief di una creatività, solo per lei. Si eliminano con la creatività, a meno che non li salvi negli Asset.",refsEmpty:"Nessun riferimento delle creatività",refsEmptyBody:"Qui compaiono i file che aggiungi dal computer nel brief di una nuova creatività.",refsUsedBy:"Usato da",refsUnused:"Brief non ancora creato",saveToAssets:"Salva negli Asset",savedToAssets:e=>`${e.name} salvato negli Asset`,saveToAssetsFailed:e=>`Non è stato possibile salvarlo negli Asset: ${e.detail}`,uploading:"Caricamento…",uploaded:e=>e.count===1?"Caricato 1 file":`Caricati ${e.count} file`,uploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,describing:"Descrizione…",noDescription:"Ancora senza descrizione",undescribed:e=>e.count===1?"1 asset senza descrizione":`${e.count} asset senza descrizione`,describeMissing:e=>e.count===1?"Descrivilo":"Descrivili",allDescribed:"Ogni asset ha una descrizione",describeBusy:"Claude sta lavorando al brand di questo progetto. Descrivi quando ha finito.",describeFailed:e=>`La descrizione non è partita: ${e.detail}`,described:"Descrizioni aggiornate",select:e=>`Seleziona ${e.name}`,open:e=>`Apri ${e.name}`,more:e=>`+${e.count}`,selection:"Selezione",describeAgain:"Descrivi di nuovo",addTags:"Aggiungi tag",addTagsLabel:"Tag da aggiungere",addTagsPlaceholder:"Separati da virgola, es. logo, notte",addTagsApply:"Aggiungi",tagsAdded:e=>e.count===1?"Tag aggiunti a 1 asset":`Tag aggiunti a ${e.count} asset`,tagsFailed:e=>`Tag non salvati: ${e.detail}`,useInCreative:"Usa in una creatività",delete:"Elimina",clearSelection:"Annulla la selezione",deleted:e=>e.count===1?`${e.name} eliminato`:`${e.count} asset eliminati`,deleteFailed:e=>`Non eliminato: ${e.detail}`,undo:"Annulla",emptyTitle:"Ancora nessun asset",emptyBody:"Aggiungi loghi, immagini, font o video, poi falli descrivere a Claude. Ogni creatività del progetto può usarli.",noMatchTitle:"Nessun risultato",noMatchBody:"Prova un altro filtro o un’altra ricerca.",loadFailed:e=>`Impossibile caricare gli asset: ${e.detail}`,retry:"Riprova",listUnreadable:e=>`Impossibile leggere l’elenco degli asset: ${e.detail}. Correggi o rimuovi assets/assets.json nella cartella del progetto, poi riprova.`,unregistered:e=>e.count===1?"1 file nella cartella assets non è ancora negli Asset":`${e.count} file nella cartella assets non sono ancora negli Asset`,register:"Aggiungili",registerFailed:e=>`Non aggiunti: ${e.detail}`,sort:{label:"Ordina per",date:"Più recenti",name:"Nome",kind:"Tipo",duration:"Più lunghi"},durationBadge:e=>`Durata ${e.time}`,detail:{label:"Dettagli dell’asset",close:"Chiudi i dettagli",description:"Descrizione",descriptionHint:"Claude la legge · modificala liberamente",looking:"Claude lo sta guardando",descriptionPlaceholder:"Cosa mostra? Claude la legge quando sceglie gli asset.",tags:"Tag",addTag:"Aggiungi un tag",addTagPlaceholder:"+ Aggiungi",removeTag:e=>`Rimuovi ${e.tag}`,tagRules:"Fino a 30 tag di 40 caratteri",file:"File",size:"Dimensioni",added:"Aggiunto",source:"Fonte",credit:"Crediti",saved:"Salvato",rename:"Rinomina il file",renameLabel:"Nuovo nome del file",renameApply:"Rinomina",renameCancel:"Annulla",renameHint:"Stessa cartella · i riferimenti nel brand e nei brief seguono il nuovo nome",useAsProjectIcon:"Usa come icona del progetto",projectIconSet:"Icona del progetto aggiornata",projectIconFailed:e=>`Icona del progetto non cambiata: ${e.detail}`,renamed:e=>`Rinominato in ${e.name}`,renameFailed:e=>`Non rinominato: ${e.detail}`,duration:"Durata",fileSize:"Dimensione del file",waveformFailed:"La forma d’onda non è disponibile",saveFailed:e=>`Non salvato: ${e.detail}`,delete:"Elimina l’asset"}},references:{title:"Riferimenti",sub:"Ispirazione per lo stile. L’agente li legge; i render usano solo ciò che sta negli Asset.",addImages:"Aggiungi immagini",feeding:e=>e.count===1?"1 riferimento alimenta la prossima analisi del brand":`${e.count} riferimenti alimentano la prossima analisi del brand`,feedingHint:"attivalo per qualsiasi scheda con l’interruttore",analyze:"Analizza il brand con questi",analyzeFailed:e=>`L’analisi non è partita: ${e.detail}`,brandAnalysis:"Analisi del brand",useForBrand:e=>`Usa ${e.name} per l’analisi del brand`,notePlaceholder:"Aggiungi una nota per l’agente",noteFor:e=>`Nota per ${e.name}`,remove:e=>`Rimuovi ${e.name}`,removed:"Riferimento rimosso",removeFailed:e=>`Non rimosso: ${e.detail}`,saveFailed:e=>`Non salvato: ${e.detail}`,undo:"Annulla",emptyTitle:"Ancora nessun riferimento",emptyBody:"Aggiungi immagini che raccontano lo stile che vuoi. L’agente le legge e possono alimentare l’analisi del brand.",dropOverlay:"Rilascia le immagini per aggiungerle ai riferimenti",uploading:"Caricamento…",uploaded:e=>e.count===1?"Aggiunto 1 riferimento":`Aggiunti ${e.count} riferimenti`,uploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,loadFailed:e=>`Impossibile caricare i riferimenti: ${e.detail}`,retry:"Riprova",listUnreadable:e=>`Impossibile leggere l’elenco dei riferimenti: ${e.detail}. Correggi o rimuovi references/references.json nella cartella del progetto, poi riprova.`}},projectSettings:{sections:"Sezioni delle impostazioni del progetto",nav:{general:"Generali",agent:"Agente e approvazioni",internet:"Accesso a internet",code:"Codice collegato"},everyProject:"Valida per tutti i progetti",retry:"Riprova",undo:"Annulla",general:{title:"Generali",sub:"Claude legge il nome e la descrizione in ogni lavoro di questo progetto.",name:"Nome del progetto",description:"Descrizione",descriptionPlaceholder:"Di cosa parla questo progetto?",save:"Salva",saved:"Salvato",saveFailed:e=>`Non salvato: ${e.detail}`,nameRequired:"Il progetto ha bisogno di un nome",icon:{title:"Icona del progetto",sub:"Si vede nella pagina Progetti e accanto al nome del progetto. Automatica: l’icona dell’app, la favicon o un logo quadrato del brand.",label:"Icona del progetto",auto:"Automatica",initials:"Iniziali",images:"Immagini dagli Asset",saved:"Icona aggiornata",failed:e=>`Icona non cambiata: ${e.detail}`}},agent:{title:"Agente e approvazioni",sub:"Cosa può fare Claude in questo progetto senza chiederti prima.",confirmPaid:"Conferma prima di usare servizi a pagamento",confirmPaidSub:"Generazione di immagini, voce fuori campo e video stock mostrano il costo stimato e ti aspettano.",jobs:"Lavori in parallelo",jobsSub:"Più lavori in parallelo finiscono prima ma consumano più in fretta il tuo piano Claude.",fewer:"Meno lavori",more:"Più lavori",advanced:"Avanzate",isolation:"Isolamento dell’agente",isolationSub:"La sandbox tiene i comandi dell’agente nella cartella del progetto, con internet solo verso i siti consentiti.",isolationAuto:"Automatico (consigliato)",isolationOff:"Disattivato",isolationWarning:"Senza isolamento l’agente può scrivere ovunque con i comandi che autorizzi.",model:"Modello",modelSub:"Lascialo vuoto per usare il modello predefinito di Claude Code.",modelPlaceholder:"Predefinito di Claude Code",sandboxOn:"Sandbox attiva: l’agente lavora isolato nella cartella del progetto.",sandboxUnknown:"Stato della sandbox non disponibile: apri Impostazioni → Controllo di sistema.",autoApprove:"Approva in automatico i comandi nella sandbox",autoApproveSub:"I comandi che restano dentro il progetto partono senza chiedere; la rete resta limitata ai siti consentiti. Decidi sempre tu su file fuori dal progetto, servizi a pagamento e siti nuovi.",appliesNew:"Vale per i nuovi lavori",needsIsolation:"Richiede l’isolamento dell’agente",autoOn:"I comandi nella sandbox ora partono senza chiedere",autoOff:"Ogni comando chiederà il tuo OK",runningKeeps:e=>e.count===1?"1 lavoro in corso mantiene l’impostazione attuale":`${e.count} lavori in corso mantengono l’impostazione attuale`},allowed:{title:"Sempre consentiti",count:e=>`${e.count} · aggiunti dalle schede di approvazione`,revokeAll:"Revoca tutti",revoke:"Revoca",revokeLabel:e=>`Revoca ${e.label}`,revoked:e=>`Revocato: ${e.label}`,revokedAll:e=>e.count===1?"1 permesso revocato":`${e.count} permessi revocati`,revokeFailed:e=>`Non revocato: ${e.detail}`,confirm:"Revocare questa regola?",confirmAll:e=>e.count===1?"Revocare l’unica regola?":`Revocare tutte le ${e.count} regole?`,confirmAllLabel:e=>e.count===1?"Revoca l’unica regola":`Revoca tutte le ${e.count} regole`,cancel:"Annulla",emptyTitle:"Niente è sempre consentito",emptySub:"Scegli “Sempre qui” su una scheda di approvazione per aggiungere una regola.",loadFailed:e=>`Impossibile caricare i permessi: ${e.detail}`},internet:{title:"Accesso a internet per le creatività",sub:"I comandi dell’agente possono raggiungere solo questi siti. Tutto il resto è bloccato dalla sandbox.",defaults:"Sempre raggiungibili: registri dei pacchetti (npm, PyPI), GitHub, CDN e Google Fonts.",add:"Aggiungi",addLabel:"Aggiungi un sito",placeholder:"Aggiungi un sito, es. assets.example.com",invalid:"Usa un dominio come assets.example.com o *.example.com",exists:"Questo sito è già nell’elenco",remove:e=>`Rimuovi ${e.domain}`,dropped:e=>`Siti non validi ignorati: ${e.list}`,none:"Ancora nessun sito in più."},code:{title:"Codice collegato",sub:"L’agente può leggere queste cartelle per riprodurre le schermate reali della tua app. Non ci scrive mai.",readOnly:"Sola lettura",notFound:"Non trovata",link:"Collega una cartella…",pathLabel:"Percorso della cartella",pathPlaceholder:"/Users/tuonome/code/app",noteFor:e=>`Nota per ${e.path}`,notePlaceholder:"Nota (facoltativa), es. app iOS",add:"Collega",cancel:"Annulla",pickTitle:"Scegli la cartella da collegare",unlink:e=>`Scollega ${e.path}`,unlinked:e=>`${e.name} scollegata`,needAbsolute:"Inserisci un percorso assoluto",alreadyLinked:"Questa cartella è già collegata",empty:"Ancora nessuna cartella collegata.",saveFailed:e=>`Non salvato: ${e.detail}`}},appSettings:{sections:"Sezioni delle impostazioni",appName:"Motion Studio",nav:{general:"Generali",system:"Controllo di sistema",paid:"Servizi a pagamento",usage:"Utilizzo",notifications:"Notifiche",updates:"Aggiornamenti",transcription:"Trascrizione video"},usage:{title:"Utilizzo",sub:"I token usati da Claude e i servizi a pagamento, per tutti i progetti di questo computer.",week:"Claude · ultimi 7 giorni",today:"Oggi",chart:"Token al giorno, ultimi 7 giorni",day:"Giorno",tokens:"Token",cost:"Costo",barTitle:e=>`${e.day}: ${e.count} token`,byProject:"Per progetto",byKind:"Per tipo di lavoro",kinds:{creative:"Creatività","brand-analysis":"Analisi del brand",describe:"Descrizioni degli asset",console:"Console dell'agente",localize:"Traduzioni","video-analysis":"Analisi video"},none:"Nessun token usato in questi 7 giorni.",empty:"L'utilizzo compare qui dopo la prima generazione",emptySub:"Motion Studio registra ogni esecuzione da ora in poi. Le esecuzioni precedenti non vengono ricostruite.",trackedSince:e=>`Conteggio dal ${e.date}`,loading:"Caricamento dell'utilizzo…",loadFailed:e=>`Impossibile caricare l'utilizzo: ${e.detail}`,tryAgain:"Riprova",paid:{title:"Servizi a pagamento · ultimi 7 giorni",chart:"Costo stimato al giorno, ultimi 7 giorni",cost:"Costo stimato",barTitle:e=>`${e.day}: ≈ ${e.cost}`,byService:"Per servizio",byKind:"Per tipo",byProject:"Per progetto",services:{openai:"OpenAI",elevenlabs:"ElevenLabs"},kinds:{images:"Immagini",voice:"Voce",music:"Musica",sfx:"Effetti sonori",transcription:"Trascrizione"},estimate:e=>`≈ ${e.cost}`,approx:e=>`≈ ${e.text}`,units:{tokens:e=>`${e.count} token immagine`,characters:e=>`${e.count} ${e.n===1?"carattere":"caratteri"}`,seconds:e=>`${e.count} s`,minutes:e=>`${e.count} min`,images:e=>`${e.count} ${e.n===1?"immagine":"immagini"}`},note:"Costi stimati ai prezzi di listino. La spesa reale è sul tuo account di ciascun servizio.",none:"Nessun servizio a pagamento usato negli ultimi 7 giorni."}},configured:e=>`${e.n} di ${e.total}`,appliesAll:"Vale per tutti i progetti su questo computer.",general:{title:"Generali",language:"Lingua",languageSub:"È anche la lingua in cui Claude risponde e scrive le linee guida.",theme:"Tema",themeSub:"Segue il sistema, a meno che tu non ne scelga uno.",agentPointer:"Conferma dei servizi a pagamento, lavori in parallelo, accesso a internet e isolamento dell’agente sono nelle Impostazioni di qualsiasi progetto e valgono per tutti i progetti."},status:{ok:"Tutto funziona",problems:e=>e.count===1?"1 problema da risolvere":`${e.count} problemi da risolvere`,notes:e=>e.count===1?"Funziona · 1 consiglio":`Funziona · ${e.count} consigli`,checking:"Controllo in corso…",checkAgain:"Ricontrolla",details:"Vedi i dettagli"},system:{title:"Controllo di sistema",sub:"Motion Studio usa Claude Code e alcuni strumenti su questo computer."},paid:{title:"Servizi a pagamento",sub:"Le chiavi stanno nel portachiavi di sistema e l’agente non le vede mai.",uses:{openai:"immagini e voce fuori campo",elevenlabs:"voci premium",pexels:"video stock",unsplash:"foto stock"},inKeychain:"Chiave salvata nel Portachiavi",fromEnv:e=>`Dalla variabile d’ambiente ${e.env}`,notConnected:"Non collegato",addKey:"Aggiungi chiave",replace:"Sostituisci",replaceLabel:e=>`Sostituisci la chiave ${e.name}`,remove:"Rimuovi",removeLabel:e=>`Rimuovi la chiave ${e.name}`,removeConfirm:e=>`Rimuovere la chiave ${e.name}?`,keyLabel:e=>`Chiave API ${e.name}`,keyPlaceholder:"Incolla la chiave API",cancel:"Annulla",save:"Salva",saving:"Salvataggio…",saved:e=>`Chiave ${e.name} salvata nel Portachiavi`,removed:e=>`Chiave ${e.name} rimossa`,notStored:"Non è stato possibile rileggere la chiave dal Portachiavi. Riprova.",failed:e=>`Chiave non salvata: ${e.detail}`,removeFailed:e=>`Chiave non rimossa: ${e.detail}`,loadFailed:e=>`Impossibile leggere le chiavi: ${e.detail}`,test:"Prova",testLabel:e=>`Prova la chiave ${e.name}`,testing:"Prova in corso…",savedChecking:"Salvata · verifica…",checksLabel:e=>`Cosa può fare la chiave ${e.name}`,checkFailed:e=>`Prova non eseguita: ${e.detail}`,caps:{key:"Chiave",images:"Immagini",tts:"Voce fuori campo",voices:"Elenco voci",account:"Account",sfx:"Effetti sonori",music:"Musica",search:"Ricerca"},capStatus:{ok:"funziona",missing:"manca",unverified:"non verificata",error:"errore"},keyRefused:"Il servizio ha rifiutato questa chiave o la richiesta: controlla la chiave, o una restrizione di area, organizzazione o firewall presso il fornitore.",someErrors:e=>`Alcune prove non sono finite (${e.detail}). Premi Prova per riprovare.`,unverifiedNote:"Non verificata: per saperlo servirebbe una generazione a pagamento. Il primo uso reale aggiorna l’esito.",permissionsTitle:"Permessi da attivare",permissionsHelp:{openai:'Nella dashboard OpenAI (API keys), a una chiave con permessi ristretti servono "Models: Read" per provarla e "Model capabilities: Write" (model.request) per immagini e voce fuori campo. Un modello che manca può richiedere la verifica dell’organizzazione.',elevenlabs:"In ElevenLabs (Developers → API keys), modifica la chiave e attiva il permesso di ogni funzione che usi:",pexels:"Le chiavi Pexels non hanno permessi: se la chiave è rifiutata, creane una nuova su pexels.com/api.",unsplash:"Le chiavi Unsplash non hanno permessi: se la chiave è rifiutata, controlla la tua app su unsplash.com/developers."}},notifications:{title:"Notifiche",approvals:"Quando l’agente ha bisogno del tuo OK",approvalsSub:"Un banner, il badge sul Dock e una notifica, anche a finestra aperta.",approvalsLabel:"Notifica le approvazioni",ready:"Quando una creatività è pronta",readySub:"Solo quando Motion Studio è in secondo piano.",readyLabel:"Notifica quando è pronta",sound:"Riproduci un suono",soundSub:"Il suono di sistema che accompagna la notifica di un'approvazione.",soundLabel:"Riproduci un suono",test:"Verifica di vederle",testSub:"Invia subito una notifica, con l'impostazione del suono applicata.",testButton:"Invia una notifica di prova",testSent:"Inviata: il sistema ha mostrato la notifica.",testBlocked:"Il sistema ha rifiutato la notifica. macOS mostra le notifiche solo per l’app Motion Studio installata (firmata): Impostazioni di Sistema → Notifiche → Motion Studio → Consenti notifiche. Le versioni di sviluppo non possono mostrare notifiche di sistema.",testTimeout:"Nessuna risposta dal sistema. Se macOS ha chiesto il permesso, rispondi alla richiesta e riprova.",testBlockedWeb:"Il browser o il sistema non hanno mostrato la notifica. Controlla le impostazioni delle notifiche del browser e del sistema.",testReason:e=>`Messaggio di sistema: ${e.detail}`,testUnconfirmed:"Inviata, ma questa versione dell’app desktop non può confermare che sia stata mostrata.",testFailed:e=>`Impossibile mostrare la notifica: ${e.detail}`,unsupported:"Il sistema segnala di non poter mostrare notifiche.",webDenied:"Il browser blocca le notifiche per questa pagina. Consentile dalle impostazioni del sito nel browser.",webDefault:"Al browser non è ancora stato chiesto.",webAllow:"Consenti le notifiche",webUnsupported:"Questo browser non supporta le notifiche.",howTo:"macOS mostra le notifiche solo per l’app Motion Studio installata (firmata): Impostazioni di Sistema → Notifiche → Motion Studio → Consenti notifiche. Le versioni di sviluppo non possono mostrare notifiche di sistema."},updates:{title:"Aggiornamenti",version:e=>`Motion Studio ${e.version}`,off:"Aggiornamenti automatici non attivi in questa versione",automatic:"L’app desktop scarica gli aggiornamenti da sola e ti chiede di riavviare."}},status:{draft:"Bozza",working:"In lavorazione",ready:"Pronta",incomplete:"Incompleta",error:"Errore",interrupted:"Interrotta"},jobState:{queued:"In coda",running:"In lavorazione",succeeded:"Completato",failed:"Errore",cancelled:"Annullato"},creatives:{title:"Creatività",filter:"Filtra le creatività",filters:{all:"Tutte",needs:"Serve a te",running:"In corso",ready:"Pronte",drafts:"Bozze"},search:"Cerca creatività",newCreative:"Nuova creatività",loading:"Caricamento delle creatività…",loadFailed:e=>`Impossibile caricare le creatività: ${e.detail}. Verifica che Motion Studio sia ancora in esecuzione, poi riprova.`,tryAgain:"Riprova",emptyTitle:"Ancora nessuna creatività",emptyBody:"Parti dal brand, così ogni creatività avrà lo stile giusto, oppure scrivi subito il primo brief.",setUpBrand:"Imposta il brand",noMatchTitle:"Niente qui",noMatchBody:"Prova un altro filtro o un’altra ricerca.",showAll:"Mostra tutte",review:"Rivedi",queued:"In attesa di partire",working:"Al lavoro…",readyVersion:e=>`Pronta · v${e.n}`,incomplete:e=>`v${e.n} · mancano alcuni formati`,failed:"L’ultima generazione non è riuscita.",interrupted:"La generazione si è interrotta prima di finire.",retryFailed:e=>`Impossibile ripartire: ${e.detail}`,draftNote:"Brief salvato · ancora niente generato",draft:"Bozza",generate:"Genera",generateOf:e=>`Genera ${e.title}`,generateFailed:e=>`Impossibile avviare la generazione: ${e.detail}`,moreFormats:e=>`+${e.n} altri`,unreadable:"Illeggibile"},removal:{menu:e=>`Azioni per ${e.title}`,archive:"Archivia",archiveGroup:e=>`Archivia tutte le ${e.count} varianti`,archiveVariant:e=>`Archivia la variante ${e.letter}`,delete:"Elimina…",deleteGroup:e=>`Elimina tutte le ${e.count} varianti…`,deleteVariant:e=>`Elimina la variante ${e.letter}…`,checking:"Verifico se si può togliere…",archived:e=>`«${e.title}» archiviata`,undo:"Annulla",archiveFailed:e=>`Impossibile archiviare: ${e.detail}`,restore:"Ripristina",restored:e=>`«${e.title}» ripristinata`,restoreFailed:e=>`Impossibile ripristinare: ${e.detail}`,deleted:e=>`«${e.title}» spostata nel Cestino`,deleteFailed:e=>`Impossibile eliminare: ${e.detail}`,deleteTitle:e=>`Eliminare «${e.title}»?`,deleteBody:"La sua cartella, con tutte le versioni e i render, va nel Cestino. Puoi rimetterla a posto dal Cestino finché non lo svuoti.",deleteGroupBody:e=>`Tutte le ${e.count} varianti del gruppo, con le versioni e i render, vanno nel Cestino. Puoi rimetterle a posto dal Cestino finché non lo svuoti.`,deleteVariantBody:e=>`La variante ${e.letter} esce dal gruppo e la sua cartella, con le versioni e i render, va nel Cestino. Puoi rimetterla a posto dal Cestino finché non lo svuoti.`,deleteConfirm:"Sposta nel Cestino",archiveGroupTitle:e=>`Archiviare «${e.title}»?`,archiveGroupBody:e=>`Tutte le ${e.count} varianti del gruppo escono dalle liste. Puoi ripristinarle da Archiviate.`,archiveConfirm:"Archivia",cancel:"Annulla",archivedCount:e=>`Archiviate (${e.n})`,archivedTitle:"Creatività archiviate",archivedEmpty:"Nessuna creatività archiviata.",archivedOn:e=>`Archiviata ${e.when}`,backToCreatives:"Torna alle creatività"},briefSession:{goneOnCreate:"La sessione del brief è finita altrove (ricominciata o diventata una creatività): premi di nuovo Genera per creare la creatività senza.",loadFailed:e=>`La sessione del brief non si è potuta leggere: ${e.detail}`,modeLabel:"Come compilare il brief",modeYou:"Compila tu",modeAgent:"Con l'agente",cta:"Fallo compilare all'agente",resumeTitle:"Hai una sessione del brief in corso",resumeBody:"Puoi riprenderla da dove eri rimasto o ricominciare: la sessione di prima verrà eliminata.",resume:"Riprendi la sessione del brief",agentWorking:"L'agente sta compilando il brief",title:"Brief con l'agente",panelLabel:"Sessione con l'agente",state:{new:"Nuova sessione",working:"Al lavoro…",filled:"Brief compilato"},intro:"Con il + qui sotto collega le cartelle del codice e gli asset che servono, poi raccontami cosa vuoi ottenere. Il brief lo compilo io.",composerLabel:"Messaggio all'agente",placeholderFirst:"Racconta all'agente cosa vuoi ottenere",placeholderFollowUp:"Chiedi una modifica al brief…",add:"Aggiungi cartelle o asset",addMenu:"Aggiungi contesto",folder:{title:"Collega una cartella",hint:"Codice sul tuo Mac, letto in sola lettura"},library:{title:"Dagli Asset",hint:"Immagini, video e loghi del progetto"},upload:{title:"Carica dal Mac",hint:"Solo per questa creatività, se non lo salvi negli Asset"},folderPath:"Percorso della cartella",link:"Collega",cancel:"Annulla",uploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,removePin:e=>`Togli ${e.name}`,folders:e=>e.count===1?"1 cartella":`${e.count} cartelle`,noFolders:"Nessuna cartella",assets:e=>`${e.count} asset`,noAssets:"Nessun asset",foldersTitle:"Cartelle della sessione",assetsTitle:"Asset della sessione",removeContext:e=>`Togli ${e.name} dalla sessione`,startOver:"Inizia da capo",openCreative:"Apri la creatività",discard:"Scarta la sessione",agentMark:"Agente",created:"Creatività creata"},newCreative:{secondsShort:e=>`${e.n} s`,goalQuestion:"Cosa vuoi realizzare?",goalPlaceholder:"Descrivi l'idea: cosa succede, il tono, come finisce.",goalRequired:"Prima descrivi cosa vuoi realizzare",goalCount:e=>`${e.n.toLocaleString("it-IT")} / ${e.max.toLocaleString("it-IT")}`,brandKit:"Kit del brand",assetCount:e=>e.count===1?"1 asset":`${e.count} asset`,addAssets:"Aggiungi asset",tryLabel:"Prova",suggestions:{teaser:{label:"Teaser di lancio",text:"Un teaser di 6 secondi per il lancio. Apri sul prodotto in uso, tieni la palette calma, rivela il messaggio chiave per ultimo e chiudi sul logo."},feature:{label:"Annuncio di una funzione",text:"Annuncia la nuova funzione. Tono calmo e sicuro, una frase per scena, chiudi con il messaggio chiave e il logo."},screenshots:{label:"Screenshot per App Store",text:"Tre screenshot per App Store che mostrano le tre schermate principali dell'app, ciascuna con una didascalia breve."}},titleHint:"puoi rinominarla nel canvas",untitled:"Creatività senza titolo",keyMessage:"Messaggio chiave",keyMessageHint:"· mostrato a schermo",optional:"(facoltativo)",whereTo:"Dove verrà pubblicata?",videoLength:"Durata dei video",lengthFor:e=>e.count===1?"per il formato video":`per i ${e.count} formati video`,noVideo:"nessun formato video scelto",custom:"Personalizzata",customSeconds:"Durata in secondi",customInvalid:"Inserisci una durata da 1 a 600 secondi",durationMismatch:e=>`Il testo dice ${e.stated} s, la durata è ${e.current} s`,durationMismatchUnset:e=>`Il testo dice ${e.stated} s`,durationUse:e=>`Usa ${e.n} s`,overMax:e=>`Più lunga di quanto consente ${e.label} (${e.max})`,assetsToUse:"Asset da usare",browse:"Sfoglia gli Asset",libraryTitle:e=>`Asset di ${e.project}`,libraryLoading:"Caricamento degli Asset…",libraryFailed:e=>`Impossibile leggere gli Asset: ${e.detail}`,libraryEmpty:"Ancora nessun asset in questo progetto",libraryEmptyBody:"Aggiungi immagini, loghi o clip dal computer, o caricali in Asset.",openAssets:"Apri Asset",tryAgain:"Riprova",removeAsset:e=>`Rimuovi ${e.name}`,brandAuto:"Logo e font arrivano in automatico dal kit del brand.",fromComputer:"Dal computer…",fromComputerHint:"Solo per questa creatività, se non lo salvi negli Asset",fromLibrary:"Dagli Asset",fromLibraryHint:"File già negli Asset",uploadFromComputer:"Carica dal computer",uploadInput:"File da aggiungere al brief",dropHere:"Rilascia i file per aggiungerli a questo brief",uploadingAsset:e=>`Caricamento di ${e.name}…`,uploadAssetFailed:e=>`${e.name} non è stato caricato: ${e.detail}`,dismissUpload:e=>`Chiudi l'errore di ${e.name}`,referenceOnly:"Solo per questa creatività",referenceSaved:"Salvato negli Asset",referenceOnlyHint:e=>`${e.name} è solo per questa creatività: clic per salvarlo anche negli Asset`,referenceSavedHint:e=>`${e.name} è salvato negli Asset: clic per tenerlo solo per questa creatività`,referenceFailed:e=>`Non è stato possibile cambiare dove si tiene il file: ${e.detail}`,followsBrand:e=>`Segue il brand di ${e.project}`,editBrand:"Modifica il brand",noBrand:"Ancora nessun brand",noBrandBody:"Colori, font e loghi rendono coerenti tutti i formati.",setUpBrand:"Imposta il brand",brandFailed:e=>`Impossibile leggere il kit del brand: ${e.detail}`,codebases:"Codebase di questa creatività",codebasesHint:"(oltre a quelle del progetto)",notesForAgent:"Note per l'agente",moreOptions:"Altre opzioni",title:"Titolo",formatKind:"Tipo di formato",kindAll:"Tutti",kindVideo:"Video",kindImage:"Immagini",searchFormats:"Cerca formati",selectedCount:e=>e.n===1?"1 selezionato":`${e.n} selezionati`,moreChannels:"Altri canali",noMatch:"Nessun formato corrisponde",noMatchBody:"Prova con un’altra parola, o mostra tutti i tipi.",showAllFormats:"Mostra tutti i formati",formatsLoading:"Caricamento dei formati…",formatsFailed:e=>`Impossibile caricare i formati: ${e.detail}`,linkOn:e=>`Collegato: usa lo stesso file di ${e.primary}, nessun render in più. Clicca per farne una versione dedicata`,linkOff:e=>`Può usare lo stesso file di ${e.primary}, senza costi. Clicca per collegarlo`,linkToggle:e=>`Collega ${e.label} a ${e.primary}`,notLinkable:e=>`Non può usare il file di ${e.primary}: ${e.reason}`,copiesLabel:e=>`Copie di ${e.label}`,copiesLess:"Una copia in meno",copiesMore:"Una copia in più",copiesSaid:e=>`${e.label}: ${e.n===1?"1 copia":`${e.n} copie`}`,copiesPackLimit:e=>`Il pacchetto store ne usa altre ${e.n} di questo formato: 20 in tutto`,copiesTotal:e=>`${e.n} in totale`,hiddenChosen:e=>e.n===1?"1 formato scelto è nascosto dal filtro":`${e.n} formati scelti sono nascosti dal filtro`,packFull:e=>`${e.label}: le copie e il pacchetto store superano ${e.max}. Riduci le copie o gli screenshot del pacchetto.`,copiesHint:"Copie: altre immagini o altri video di questo formato con lo stesso brief, ognuno diverso (non varianti)",customTile:"Personalizzato",customTileHint:"Crea un formato",customTileAria:"Nuovo formato personalizzato",customEditAria:e=>`Modifica ${e.label}`,customNewTitle:"Nuovo formato personalizzato",customEditTitle:"Modifica formato personalizzato",customName:"Nome",customNamePlaceholder:"es. Totem ingresso",customKind:"Tipo",customKindImage:"Immagine",customKindVideo:"Video",customWidth:"Larghezza",customHeight:"Altezza",customPx:"px",customRatio:"Proporzione",customRatioAria:e=>`Proporzione ${e.ratio}: l'altezza segue la larghezza`,customRatioHint:"Una proporzione calcola l'altezza dalla larghezza.",customDuration:"Durata massima",customSecondsUnit:"secondi",customDurationHint:"Vuoto: nessun limite proprio.",customInUse:e=>`${e.count===1?"Una creatività usa":`${e.count} creatività usano`} questo formato: tipo e dimensioni restano come sono. Per cambiarli crea un nuovo formato.`,customUnreadable:e=>`${e.n===1?"Una creatività non si legge e potrebbe usare":`${e.n} creatività non si leggono e potrebbero usare`} questo formato: tipo e dimensioni restano bloccati.`,customErrName:"Dai un nome al formato",customErrNameTaken:"Un formato personalizzato ha già questo nome",customErrSize:"Un numero intero da 16 a 8192",customErrDuration:"Secondi interi da 1 a 3600, o vuoto",customErrEven:"Un video vuole un numero pari di pixel per lato",customErrVideoMax:"Un video ha al massimo 4096 px per lato",customErrDurationShort:e=>`Una creatività usa questo formato per ${e.sec} s: non meno di così`,customLongest:e=>`Le creatività lo usano fino a ${e.sec} s.`,customUsageLoading:"Controllo quali creatività usano questo formato…",customUsageFailed:"Non è stato possibile sapere quali creatività usano questo formato: tipo e dimensioni restano bloccati.",formatsDropped:e=>e.n===1?"Un formato scelto non è più disponibile ed è stato tolto":`${e.n} formati scelti non sono più disponibili e sono stati tolti`,formatGone:"non più disponibile",customCreate:"Crea formato",customSave:"Salva",customDelete:"Elimina",customDeleteAsk:e=>`Eliminare «${e.name}»? Le creatività che lo usano lo tengono.`,customDeleteConfirm:"Elimina formato",customFailed:e=>`Non è stato possibile salvare il formato: ${e.detail}`,customDeleteFailed:e=>`Non è stato possibile eliminare il formato: ${e.detail}`,customAdded:e=>`«${e.name}» aggiunto ai Personalizzati e scelto`,customDeleted:e=>`«${e.name}» eliminato`,customHidden:e=>`«${e.name}» tolto dai formati: le creatività che lo usano lo tengono`,summary:e=>[e.formats===1?"1 formato":`${e.formats} formati`,[e.videos&&(e.videos===1?"1 render video":`${e.videos} render video`),e.images&&(e.images===1?"1 immagine":`${e.images} immagini`)].filter(Boolean).join(" + ")].join(" · "),libraryPartial:e=>`Una parte degli Asset non è leggibile: ${e.detail}`,pickFormat:"Scegli almeno un formato",summaryHint:"Lavora in background: ricevi una notifica quando è pronta.",similar:e=>`Creatività simili hanno usato circa ${e.range} token`,createFailed:e=>`Impossibile creare la creatività: ${e.detail}. Controlla il brief e riprova.`,draftSaved:e=>`Bozza “${e.title}” salvata`,open:"Apri",saveDraft:"Salva bozza",generate:"Genera"},formatUi:{video:"video",image:"immagine",unknownPreset:e=>`${e.id}: preset sconosciuto`,missingIn:e=>`Mancante in v${e.n}`,unverified:"non verificato",other:"Altro"},storePack:{cardTitle:"Pacchetto App Store",cardBody:"Una serie di screenshot per App Store e Google Play, con un video di anteprima facoltativo.",cardAction:"Prepara il pacchetto",entryTitle:"Pacchetto store",entryHint:"Screenshot e anteprima per App Store e Google Play",entryOn:e=>`Pacchetto store · ${e.count} screenshot`,entryAria:e=>`Pacchetto store, ${e.count} screenshot: modifica`,entryAdd:"Aggiungi il pacchetto store ai formati",entryEdit:"Modifica",entryRemove:"Rimuovi",entryRemoveAria:"Rimuovi il pacchetto store",removeTitle:"Togliere il pacchetto store?",removeBody:"Le istanze del pacchetto escono dai formati; le versioni già fatte restano nella cronologia. I formati scelti a mano non cambiano.",removeConfirm:"Togli il pacchetto",confirmAdd:"Aggiungi ai formati",confirmUpdate:"Aggiorna il pacchetto",saveFailed:e=>`Impossibile salvare il pacchetto store: ${e.detail}`,groupTitle:"Pacchetto store",exportChoice:{title:"Cosa vuoi esportare?",pack:"Pacchetto store",packHint:"Le cartelle per App Store e Google Play, con i controlli degli store.",formats:"File dei formati",formatsHint:"Un file per ogni formato, dalle versioni ★: anche quelli fuori dal pacchetto."},title:"Pacchetto App Store",creativeTitle:e=>`${e.name} · Pacchetto App Store`,steps:{app:"App",stores:"Store e dispositivi",screens:"Screenshot",preview:"Video di anteprima",review:"Riepilogo"},stepsLabel:"Passi",stepOf:e=>`Passo ${e.n} di ${e.total}: ${e.name}`,back:"Indietro",next:"Avanti",generate:"Genera",saveDraft:"Salva bozza",appName:"Nome dell'app",tagline:"Una riga sull'app",taglineHint:"(facoltativa)",nameRequired:"Inserisci il nome dell'app",stores:"Store",devicesFor:e=>`Dispositivi per ${e.store}`,required:"Obbligatorio",optional:"Facoltativo",devices:{iphone69:"iPhone 6,9″",ipad13:"iPad 13″",phone:"Telefono",tablet:"Tablet",feature:"Feature graphic"},oneStore:"Scegli almeno uno store",count:"Numero di screenshot",countRange:e=>`Da ${e.min} a ${e.max} per gli store scelti`,screenshot:e=>`Screenshot ${e.n}`,caption:"Didascalia (facoltativa)",captionOf:e=>`Didascalia dello screenshot ${e.n}`,captionHint:"Le didascalie sono facoltative: quelle vuote le scrive l'agente dal brief. Una didascalia lunga va bene: l'agente la accorcia.",screen:"Schermata dell'app",noScreen:"Nessuna schermata",chooseScreen:e=>`Scegli la schermata dell'app per lo screenshot ${e.n}`,changeScreen:"Cambia",removeScreen:e=>`Togli la schermata dello screenshot ${e.n}`,pickerTitle:"Schermata dell'app dagli Asset",pickerUpload:"Carica un'immagine",pickerUploadInput:"File immagine da caricare",pickerUploading:"Caricamento…",pickerEmpty:"Negli Asset non ci sono ancora immagini. Carica uno screenshot dell'app.",pickerLoading:"Carico gli Asset…",pickerList:"Immagini dagli Asset",pickerLoadFailed:e=>`Impossibile caricare gli Asset: ${e.detail}`,pickerUploadFailed:e=>`Caricamento non riuscito: ${e.detail}`,pickerWrongFile:"Solo le immagini (PNG, JPEG o WebP) possono essere la schermata dell'app",pickerClose:"Chiudi",noScreenChoice:"Nessuna schermata",noScreenOf:e=>`Screenshot ${e.n}: nessuna schermata dell'app`,screenMissing:e=>`Scegli una schermata dell'app, o «Nessuna schermata», per: ${e.list}`,reviewNoScreenRows:e=>`Senza schermata dell'app: screenshot ${e.list}`,closeTitle:"Scartare questo pacchetto?",closeBody:"Le scelte fatte in questo pacchetto andranno perse.",keepEditing:"Continua a modificare",discard:"Scarta",previewQuestion:"Aggiungere un video di anteprima?",previewYes:"Sì",previewNo:"No",previewHint:"Un breve video che racconta la stessa storia, fatto per ogni store scelto.",reviewApp:"App",reviewStores:"Store",reviewDevices:"Dispositivi",reviewShots:"Screenshot",reviewPreview:"Video di anteprima",reviewFormats:e=>e.count===1?"Verrà creato 1 formato":`Verranno creati ${e.count} formati`,reviewNoScreen:"nessuna schermata",reviewFromBrief:"didascalia dal brief",yes:"Sì",no:"No",createFailed:e=>`Impossibile creare il pacchetto: ${e.detail}`,draftSaved:e=>`«${e.title}» salvata come bozza`,export:{action:"Esporta il pacchetto",title:e=>`Esporta il pacchetto store di «${e.title}»`,heading:"Esporta il pacchetto store",sub:e=>`Versione ${e.n} · una cartella per store, lingua e dispositivo`,subGroup:"Ogni screenshot dalla selezione finale delle varianti, una cartella per store, lingua e dispositivo",saveTo:"Salva in",folder:"Cartella di destinazione",placeholder:"Percorso assoluto di una cartella",noFolder:"Nessuna cartella scelta",choose:"Scegli cartella…",pickTitle:"Scegli la cartella per il pacchetto store",lastUsed:"ultima usata",languages:"Lingue",original:e=>`${e.language} (originale)`,notTranslated:"non tradotta: fallirà",needsReview:"da rivedere (superata o con problemi): potrebbe fallire",run:e=>`Esporta ${e.count} file`,files:"File",fileOf:e=>`${e.group} · ${e.file}`,excluded:"Escluso",nav:"Store e dispositivi",selectedOf:e=>`${e.n} di ${e.of} file selezionati`,selectAll:"Seleziona tutti",selectNone:"Nessuno",shots:e=>`${e.count} screenshot`,video:e=>`video · ${e.size}`,image:e=>`immagine · ${e.size}`,size:e=>`${e.width} × ${e.height}`,noFiles:"Questa versione non ha file del pacchetto da esportare.",running:"Preparo il pacchetto…",cancel:"Annulla",finish:"Fatto",writtenTitle:e=>e.count===1?"1 file scritto":`${e.count} file scritti`,failedTitle:e=>e.count===1?"1 file non esportato":`${e.count} file non esportati`,notInPack:e=>e.count===1?"Non fa parte del pacchetto (non esportato):":`Non fanno parte del pacchetto (non esportati, ${e.count}):`,noneWritten:"Non è stato scritto nulla: ogni file ha fallito il controllo.",folderLine:e=>`Cartella: ${e.folder}`,rendered:e=>e.count===1?"Prima è stato renderizzato 1 formato":`Prima sono stati renderizzati ${e.count} formati`,reason:e=>`${e.file}: ${e.reason}`,notAPack:"Questa creatività non ha un pacchetto store da esportare.",failed:e=>`Esportazione non riuscita: ${e.detail}`}},languages:{title:"Lingue",button:"Lingue",sub:e=>`Traduzioni della v${e.n} · lingua originale: ${e.primary}`,noCompositions:e=>`La v${e.n} non ha composizioni da tradurre`,formatsLabel:"Formati",pick:e=>`Traduci in ${e.language}`,statusNone:"Non tradotta",statusOk:"Tradotta",statusStale:e=>e.count===1?"1 superata":`${e.count} superate`,statusProblems:e=>e.count===1?"1 problema":`${e.count} problemi`,voiceLabel:"Voce",voiceFor:e=>`Voce in ${e.language}`,voiceTranslate:"Traduci",voiceOriginal:"Mantieni originale",voiceMuted:"Silenzia",voiceTranslateFromPanel:"La voce si traduce quando premi Traduci nel pannello Lingue",voiceReason:{off:"il servizio voce è disattivato per questa creatività",noKey:"manca la chiave del servizio voce",missingPermission:"alla chiave manca il permesso text-to-speech",declined:"la conferma è stata rifiutata",failed:"la generazione non è riuscita"},voiceUnavailable:e=>`La voce non si può tradurre: ${e.reason}`,voiceFellBack:e=>`L'ultima volta la voce è rimasta com'era: ${e.reason}`,noScriptCount:e=>e.count===1?"Una clip voce non si può tradurre: non ha un copione noto":`${e.count} clip voce non si possono tradurre: non hanno un copione noto`,noScriptTitle:"Clip voce che non si possono tradurre",noScriptItem:e=>`${e.clip}: copione sconosciuto, mantiene la voce originale`,review:e=>`Rivedi ${e.format}`,confirmations:"Conferme",working:"L'agente sta traducendo…",loading:"Caricamento…",translate:e=>e.count===1?"Traduci 1 lingua":`Traduci ${e.count} lingue`,started:e=>e.count===1?"Traduzione avviata":`Traduzione di ${e.count} lingue avviata`,notInBrief:"Questa lingua non è più nel brief della creatività: aggiungila prima nel brief",busy:"L'agente sta lavorando su questa creatività: modifica la traduzione quando ha finito",tableTitle:e=>`${e.language} · ${e.format}`,problemsLabel:"Problemi di questa traduzione",warningsLabel:"Avvisi",nothingToTranslate:"Questo formato non ha testi da tradurre",colSource:"Originale",colTranslation:"Traduzione",colStatus:"Stato",colFit:"Adattamento",translationOf:e=>`Traduzione di ${e.clip}`,fitOf:e=>`Dimensione del testo di ${e.clip}`,rowNotTranslated:"Non tradotto",rowStale:"Superato",rowOverflow:"Fuori riquadro",rowOk:"OK",save:"Salva traduzione",saved:"Salvata",previewLanguage:"Lingua dell'anteprima",previewOriginal:e=>`Originale (${e.language})`,previewLoading:"Caricamento della traduzione…",previewFailed:e=>`La traduzione non si può mostrare: ${e.detail}`,flaggedLabel:"Clip da controllare",flagStale:"superato",flagOverflow:"fuori riquadro",flagNotTranslated:"non tradotto",flagVoice:"problema di voce",flagAsset:"file cambiato",editorPreviewNote:"Stai vedendo l'anteprima di una traduzione: la modifica lavora sul testo originale. Scegli Originale per tornare alla bozza.",briefTitle:"Lingue",briefHint:"La lingua della creatività e quelle in cui viene tradotta. Senza una lingua, la creatività non viene tradotta.",briefPrimary:"Lingua originale",briefNone:"Nessuna (una sola lingua)",briefExtra:e=>`Traduci in (${e.count} di ${e.max})`,briefExtraLabel:"Lingue in cui tradurre",briefFull:e=>`Al massimo ${e.max} lingue`,briefRtl:"Le lingue da destra a sinistra non sono ancora supportate: bisognerebbe specchiare il layout, e in una traduzione cambiano solo testo e voce",renderTitle:"Render",renderSub:e=>`Formati: ${e.formats}`,renderLanguages:"Lingue da renderizzare",renderOriginal:e=>`Originale (${e.language})`,renderAction:"Render",renderWithSubtitles:"con sottotitoli",renderAnyway:"Renderizza comunque",needsForceTitle:"Queste traduzioni hanno problemi aperti o testi superati:",exportLanguages:"Lingue"},paidBatch:{intro:e=>e.count===1?`Motion Studio farà 1 chiamata a pagamento a ${e.provider}.`:`Motion Studio farà ${e.count} chiamate a pagamento a ${e.provider}.`,provider:e=>e.provider,total:e=>`${e.chars} caratteri in tutto`,estimate:e=>`Stima ${e.estimate}`,noEstimate:"Stima non disponibile",introMixed:e=>`Motion Studio farà circa ${e.count} chiamate a pagamento: ${e.list}.`,estimatedCalls:"Chiamate stimate (prezzo non noto)",variantItems:"Chiamate per variante",itemSeconds:e=>`${e.seconds} s`,calls:"Chiamate",chars:e=>`${e.chars} caratteri`,approve:"Approva",decline:"Rifiuta"},formatView:{stage:e=>`Anteprima di ${e.label}`,briefOff:e=>`Il brief dice ${e.n} s`,briefOffBody:e=>`Questa versione dura ${e.actual} s e il brief ne chiede ${e.n}: per questo il controllo la segna incompleta. Se la durata giusta è ${e.actual} s, mettila nel brief: la versione viene ricontrollata, senza un nuovo giro.`,briefOffEdited:"La durata viene da una modifica diretta.",briefOffFix:e=>`Usa ${e.n} s nel brief`,briefOffFixed:e=>`Brief aggiornato: ${e.n} s`,briefOffFailed:e=>`Non è stato possibile aggiornare il brief: ${e.detail}`,scenes:"Scene",scenesSoon:"Modifica scene, testi e tempi direttamente — arriva con la timeline",play:"Riproduci (Spazio)",pause:"Pausa (Spazio)",prevFrame:"Fotogramma precedente (←)",nextFrame:"Fotogramma successivo (→)",transport:"Riproduzione",loop:"Ripeti",speed:"Velocità di riproduzione",speedValue:e=>`${e.n}×`,position:"Posizione",positionText:e=>`${e.time} di ${e.total}`,commentAt:e=>`Clicca il punto del fotogramma a ${e.time}`,commentFrame:e=>`Commenta il fotogramma a ${e.time}`,commentImage:"Clicca un punto dell’immagine per commentarlo",keys:"Spazio riproduce · ← → un fotogramma · clicca il fotogramma in pausa per commentare",keysLocked:"Spazio riproduce · ← → un fotogramma",marker:e=>`Commento ${e.n} a ${e.time}`,pinAt:e=>`A ${e.time}`,unknownTitle:e=>`“${e.id}” non è un formato di questa creatività`,unknownSub:"Forse è stato tolto dal brief. Torna a tutti i formati per sceglierne uno.",videoFailed:"Impossibile riprodurre questo video: potrebbe essere ancora in render, o il file è stato spostato. Riprova tra poco.",zoom:"Zoom",fit:"Adatta",actual:"Dimensione reale (100%)",chat:"Chat"},editor:{edit:"Modifica",editOf:e=>`Modifica ${e.label} direttamente`,back:"Torna all'anteprima",editing:e=>`Stai modificando ${e.name}`,editingPrimary:e=>`Stai modificando ${e.primary} · usato anche da ${e.also}`,alsoUsedBy:e=>`Usato anche da ${e.list}`,version:e=>`v${e.n}`,meta:e=>`${e.size} · ${e.seconds} s · ${e.fps} fps`,metaImage:e=>`${e.size} · immagine fissa`,loading:"Apro l'editor…",loadingVideo:"Caricamento del video…",loadFailed:e=>`Non riesco ad aprire l'editor: ${e.detail}`,legacy:"Questa versione non ha una composizione da modificare. Chiedi all'agente di rifarla, oppure torna all'anteprima.",busyAgent:"L'agente o un render sta lavorando su questa creatività: le modifiche dirette tornano disponibili quando ha finito.",olderVersion:e=>`Stai guardando la v${e.n}, una versione precedente: si modifica solo l’ultima (v${e.latest}).`,editLatest:e=>`Modifica la v${e.n}`,saveFromLatest:"Per salvare le modifiche torna alla versione che stai modificando",commentSpot:"Commenta un punto",commentSpotTip:"Poi fai clic su un punto dell’immagine e scrivi una nota per l’agente (P)",commentTools:"Commenti",commentLayer:"Commenta il livello",commentElement:"Commenta l’elemento",commentLayerTip:"Scrivi una nota per l’agente sul livello selezionato (C)",commentElementTip:"Scrivi una nota per l’agente sull’elemento selezionato del livello (C)",commentLayerNeeds:"Prima seleziona un livello, in Livelli o sull’immagine",undoTip:e=>`Annulla (${e.keys})`,redoTip:e=>`Ripristina (${e.keys})`,snapTip:"Aggancia alle guide: un livello che sposti o ridimensioni si allinea ai bordi e al centro dell’immagine",pendingComments:e=>e.n===1?"1 commento in attesa di invio":`${e.n} commenti in attesa di invio`,commentSpotLocked:e=>`I commenti vanno sulla v${e.n}`,scenes:"Scene",layers:"Livelli",stage:e=>`Palco di ${e.label}`,inspector:"Ispettore",chat:"Chat",panelTabs:"Pannello laterale",timeline:"Timeline",scenesSoon:"Qui compaiono le scene di questa composizione.",layersSoon:"Qui compaiono i livelli di questa immagine.",layersList:"Livelli di questa immagine",layersAsk:"Chiedi all’agente di aggiungere livelli",layerExpand:e=>`Mostra gli elementi di ${e.name}`,layerCollapse:e=>`Nascondi gli elementi di ${e.name}`,layerElements:e=>`Elementi di ${e.name}`,layersEmpty:"Questa immagine non ha livelli.",layerSmall:"Versione piccola",layerDark:"Negativo per sfondo scuro",zoom:"Zoom",zoomFit:"Adatta",zoomFitTitle:"Adatta l’immagine alla finestra",zoomValue:e=>`${e.pct}%`,inspectorSoon:"Seleziona una clip per cambiarne testo, posizione e stile.",draft:e=>e.n===1?"Bozza · 1 modifica":`Bozza · ${e.n} modifiche`,noEdits:"Ancora nessuna modifica",saveAs:e=>`Salva come v${e.n}`,saving:"Salvataggio…",saved:e=>`✓ Salvato come ${e.name} v${e.n}`,saveFailed:e=>`Non riesco a salvare: ${e.detail}`,saveProblems:e=>`${e.count} problemi impediscono di salvare questa bozza`,discard:"Scarta",discardTitle:"Scartare la bozza?",discardBody:e=>e.n===1?"La modifica fatta andrà persa.":`Le ${e.n} modifiche fatte andranno perse.`,discardConfirm:"Scarta le modifiche",keepEditing:"Continua a modificare",undo:"Annulla",redo:"Ripristina",leaveTitle:"Salvare prima le modifiche?",leaveBody:e=>e.n===1?"Hai 1 modifica non salvata come versione.":`Hai ${e.n} modifiche non salvate come versione.`,leaveBodyChat:"Il tuo messaggio parte dall'ultima versione salvata: le modifiche non salvate non ne farebbero parte.",leaveSave:e=>`Salva come v${e.n}`,leaveDiscard:"Scarta",leaveKeep:"Continua a modificare",leaveSaveFailed:e=>`La bozza non è stata salvata, quindi resti qui: ${e.detail}`,baseChangedTitle:"Questo formato è cambiato mentre modificavi",baseChangedBody:e=>`${e.name} ha una versione più recente (v${e.n}). La bozza resta: non si può salvare sopra di essa.`,reopenLatest:"Riapri sull'ultima versione",reopenTitle:"Scartare la bozza e riaprire?",reopenBody:"Le modifiche andranno perse e l'editor si aprirà sull'ultima versione.",reopenConfirm:"Scarta e riapri",keysDeleteClip:"Chiedi all'agente di rimuovere le clip",staging:e=>`Preparo ${e.file}…`,stagingLong:"I video grandi vengono prima convertiti: può volerci un po'. Puoi continuare a modificare.",saveWhileStaging:"Aspetta che il file che stai aggiungendo sia pronto, poi salva.",stagedRestored:"I file aggiunti alla bozza sono di nuovo pronti nell'anteprima.",stagedLost:e=>`Un file aggiunto alla bozza non è più disponibile (${e.file}): sceglilo di nuovo.`,stageFailed:e=>`Non riesco ad aggiungere il file: ${e.detail}`,previewRefused:e=>`L'anteprima non riesce a mostrare questa bozza: ${e.text}`,previewBusy:"Apro l'anteprima…",previewFailed:e=>`L'anteprima non è disponibile: ${e.detail}`,sessionRenewed:"L'anteprima è stata rinnovata; le tue modifiche sono ancora qui.",snap:"Aggancia a guide e bordi",locked:"Bloccato",lockedStage:"Bloccato: sbloccalo per spostarlo",coords:e=>`${e.x} · ${e.y} · ${e.w} × ${e.h}`,selectionBox:e=>`Selezionato: ${e.clip}`,moveHandle:"Sposta",resizeNw:"Ridimensiona dall'angolo in alto a sinistra",resizeNe:"Ridimensiona dall'angolo in alto a destra",resizeSe:"Ridimensiona dall'angolo in basso a destra",resizeSw:"Ridimensiona dall'angolo in basso a sinistra",rotateHandle:"Ruota (Maiusc aggancia a 15°)",sceneLength:e=>`${e.seconds} s`,scenesAria:"Scene di questa composizione",inThisScene:"In questa scena",inSceneNone:"Nessuna clip in questa scena",reorderScene:e=>`Riordina ${e.name}: trascina, oppure premi ↑ o ↓`,reorderedTo:e=>`${e.name} spostata alla posizione ${e.n} di ${e.total}`,tlZoom:"Zoom",tlZoomValue:e=>`${e.n}×`,tlRipple:"Ripple: una clip che si allunga sposta le scene successive",tlRuler:"Righello della timeline: trascina per spostare la testina",tlPlayhead:"Testina: trascinala per scorrere il video",tlTracks:"Tracce",tlSceneAt:e=>`${e.name}, da ${e.time}`,trackName:e=>`${e.kind} ${e.n}`,kindVisual:"Visiva",kindVideo:"Video",kindText:"Testo",kindAudio:"Audio",kindSubtitles:"Sottotitoli",hideTrack:e=>`Nascondi ${e.name}`,showTrack:e=>`Mostra ${e.name}`,lockTrack:e=>`Blocca ${e.name}`,unlockTrack:e=>`Sblocca ${e.name}`,muteTrack:e=>`Silenzia ${e.name}`,unmuteTrack:e=>`Riattiva l’audio di ${e.name}`,clipText:"testo",clipShape:"forma",clipImage:"immagine",clipSvg:"immagine vettoriale",clipVideo:"video",clipHtml:"html",clipAudio:"audio",clipSubtitles:"sottotitoli",clipBar:e=>`${e.name}, ${e.kind}, da ${e.start} a ${e.end}`,clipBarHidden:"nascosta",inspEmptyTitle:"Seleziona una clip",inspEmptySub:"Clicca una clip nella timeline o una scena a sinistra per modificarla qui.",inspLocked:"Bloccata: sbloccala nella timeline per modificarla",inspHeader:e=>`${e.name} · ${e.kind}`,secTiming:"Tempi",secBox:"Riquadro",secText:"Testo",secShape:"Forma",secMedia:"Media",secAudio:"Audio",secAnimation:"Animazione",secParams:"Parametri",secSvg:"Contenuto SVG",svgColors:"Colori",svgTexts:"Testi",svgElements:"Elementi",svgElementList:"Elementi dell’SVG",svgLoading:"Lettura dell’SVG…",svgCannot:"Questo SVG non si può modificare qui",svgRefused:"La modifica non è stata applicata",svgColorCount:e=>`${e.hex}, usato ${e.n} ${e.n===1?"volta":"volte"}`,svgColorNew:e=>`Nuovo colore al posto di ${e.hex}`,svgNoColors:"Nessun colore da cambiare",svgNoTexts:'Nessun testo modificabile: le scritte disegnate come forme le cambia l’agente (seleziona l’elemento, poi "Chiedi all’agente")',svgNoElements:"Nessun elemento",svgText:e=>`Testo ${e.n}`,svgTextFonts:"Il testo di un SVG dipende dai font installati: dove il font manca, si vede diverso.",svgShow:e=>`Mostra ${e.name}`,svgHide:e=>`Nascondi ${e.name}`,svgFill:"Riempimento",svgStroke:"Contorno",svgElementKind:"elemento SVG",svgCrumbs:"Livello ed elemento",svgBackToLayer:e=>`Torna al livello ${e.name}`,secSvgElement:"Elemento",svgVisible:"Visibile",svgPaint:"Colori dell’elemento",svgNoFill:"Nessun riempimento",svgNoStroke:"Nessun contorno",svgFillInherited:"Dal suo gruppo",svgPaintOther:"Sfumatura o motivo",svgAddFill:"Aggiungi riempimento",svgAddStroke:"Aggiungi contorno",svgSetColour:"Scegli un colore",svgRemoveFill:"Togli il riempimento",svgRemoveStroke:"Togli il contorno",svgPaletteFor:e=>`Campioni per: ${e.field}`,svgOutlined:"Questo SVG non ha testo modificabile: le sue scritte sono disegnate come forme. Per cambiare le parole, chiedi all’agente.",svgAskElement:"Chiedi all’agente di cambiarlo",svgAskElementTip:e=>`Scrivi cosa cambiare in ${e.name}: il commento va all’agente con il tuo prossimo messaggio`,svgOtherVersions:"Le altre versioni del logo non cambiano: modificale dall’elenco dei livelli",svgElementName:e=>`${{g:"Gruppo",path:"Tracciato",rect:"Rettangolo",circle:"Cerchio",ellipse:"Ellisse",line:"Linea",polyline:"Spezzata",polygon:"Poligono",text:"Testo",use:"Riferimento"}[e.tag]??e.tag} ${e.n}`,tagIn:"IN",tagDur:"DUR",tagOut:"OUT",fIn:"Punto di ingresso (secondi)",fDur:"Durata (secondi)",fOut:"Punto di uscita (secondi)",tagX:"X",tagY:"Y",tagW:"L",tagH:"A",tagRot:"ROT",fX:"Posizione X",fY:"Posizione Y",fW:"Larghezza",fH:"Altezza",fRotation:"Rotazione (gradi)",fOpacity:"Opacità",fOpacityField:"Opacità (da 0 a 1)",fContent:"Contenuto",fFont:"Carattere",fWeight:"Peso",fSize:"Dimensione",fColor:"Colore",fColorHex:"Colore esadecimale",fAlign:"Allineamento",alignLeft:"A sinistra",alignCenter:"Al centro",alignRight:"A destra",fontsComposition:"In questa composizione",fontsBrand:"Brand kit",fontNoFile:"Nessun file del carattere nel brand kit",fontAdding:e=>`Aggiungo ${e.family}…`,fFill:"Riempimento",fRadius:"Raggio degli angoli",fVolume:"Volume",fTrimStart:"Inizio del taglio (secondi)",fFadeIn:"Dissolvenza in entrata (secondi)",fFadeOut:"Dissolvenza in uscita (secondi)",fFile:"File",replace:"Sostituisci…",swatchBrand:"Palette del brand",swatchComposition:"In questa composizione",animIn:"Entrata",animOut:"Uscita",animNone:"Nessuna",animDuration:"Durata (secondi)",animCustom:"Animazione personalizzata · chiedi all’agente di cambiarla",animAsk:"Chiedi all’agente",animAskTip:e=>`Scrivi cosa cambiare nell’animazione di ${e.slot} di ${e.name}: il commento va all’agente con il tuo prossimo messaggio`,presetFadeIn:"Dissolvenza in entrata",presetFadeOut:"Dissolvenza in uscita",presetSlideUp:"Scorri verso l’alto",presetSlideDown:"Scorri verso il basso",presetSlideLeft:"Scorri a sinistra",presetSlideRight:"Scorri a destra",presetPopIn:"Comparsa con rimbalzo",presetScaleIn:"Ingrandimento",presetWipe:"Tendina",pickerTitle:"Scegli un file",pickerFor:e=>`Scegli un file ${e.kind}`,pickerEmpty:e=>`Negli Asset non ci sono ancora file ${e.kind}. Caricane uno.`,pickerLoading:"Carico gli Asset…",pickerLoadFailed:e=>`Non riesco a caricare gli Asset: ${e.detail}`,pickerUpload:"Carica…",pickerUploading:"Caricamento…",pickerUploadFailed:e=>`Non sono riuscito a caricare il file: ${e.detail}`,pickerUploadInput:"File da caricare",pickerClose:"Chiudi",pickerList:"File dagli Asset",pickerPreparing:e=>`Preparo ${e.file}…`,shortVideo:e=>`Questo video dura ${e.video} s, ma la clip ne richiede ${e.needed} dall’inizio del taglio. La fine della clip resterebbe vuota.`,fitClip:"Adatta la clip al video",fitNoRoom:e=>`L’inizio del taglio (${e.trim} s) è alla fine del video (${e.video} s) o oltre: abbassalo prima`,pickerWrongKind:e=>`Il file caricato è di un altro tipo: questa clip richiede ${e.kind}. Non è stato sostituito nulla`,weightNotOffered:e=>`Il peso ${e.weight} non è tra quelli dichiarati da questo carattere: sceglilo dall’elenco`,kindImageFile:"immagine",kindSvgFile:"immagine vettoriale",kindVideoFile:"video",kindAudioFile:"audio"},creative:{resumeNote:e=>`Il prossimo messaggio riparte dalla versione ${e.n}.`,versionIncomplete:e=>`v${e.n} incompleta:`,formatsLoadFailed:e=>`Impossibile caricare i formati: ${e.detail}`},canvas:{loading:"Caricamento della creatività…",loadFailed:e=>`Impossibile caricare questa creatività: ${e.detail}. Controlla che Motion Studio sia ancora aperto, poi riprova.`,tryAgain:"Riprova",formats:"Formati",formatsAria:"Formati di questa creatività",canvasAria:"Canvas",tools:"Strumenti del canvas",select:"Seleziona (V)",comment:"Commenta (C)",hand:"Mano (H)",zoomIn:"Ingrandisci",zoomOut:"Riduci",zoomReset:e=>`Zoom ${e.pct}%, torna al 100%`,safeZones:"Zone sicure",safeTitle:"Zone sicure",safeBody:"Le aree ombreggiate sono coperte dall’interfaccia del canale. Tieni fuori testi e loghi.",safeNone:"Nessuno di questi formati ha zone sicure.",safeTop:"Nome dell’account",safeBottom:"Didascalia e pulsanti",safeSide:"Pulsanti",commentHint:"Clicca una tavola per commentare · Esc per uscire",commentStart:e=>`Commenta un punto di ${e.label}`,commentOn:e=>`Commenta ${e.label}`,openEditor:"Apri l’editor",openEditorOf:e=>`Apri l’editor di ${e.label}`,rendering:"In render",renderingState:"In render…",inProgress:"In lavorazione",boardReady:"Pronto",notGenerated:"Non ancora generato",seconds:e=>`${e.n} s`,largeChip:e=>`${e.size} MB · pesante`,largeOpen:e=>`File pesante, ${e.size} MB: mostra il consiglio`,largeTitle:"File pesante",largeDetail:e=>`${e.size} MB a ${e.mbps} Mbps. Circa ${e.target} Mbps bastano per ${e.channel}.`,nothingTitle:"Ancora niente di generato",nothingBody:"Il brief è salvato. Genera la prima versione quando vuoi.",generate:"Genera",generateFailed:e=>`Impossibile avviare la generazione: ${e.detail}`,versionReady:e=>`v${e.n} è pronta`,export:"Esporta",pin:{marker:e=>`Commento ${e.n}`,edit:e=>`Modifica il commento ${e.n}`,field:"Testo del commento",placeholder:"Cosa deve cambiare qui?",add:"Commenta",save:"Salva",remove:"Elimina il commento",atStart:"A 0:00",atStartHint:"I commenti sui fotogrammi esatti arrivano con l’editor"},title:{rename:e=>`Rinomina “${e.title}” (F2)`,field:"Titolo della creatività",saveFailed:e=>`Impossibile rinominare la creatività: ${e.detail}`},state:{needs:"Serve a te",working:"In lavorazione"},panel:"Pannello della creatività",subtitles:"Sottotitoli",tabs:{chat:"Chat",comments:"Commenti",brief:"Brief"},comments:{emptyTitle:"Ancora nessun commento",emptySub:"Passa sopra un formato, scegli Commenta e clicca il punto.",start:"Inizia a commentare",applied:e=>`Applicato in v${e.n}`,working:"In applicazione",open:"Non ancora applicato",noText:"Senza testo"},brief:{goal:"Obiettivo",message:"Messaggio chiave",length:"Durata",formats:"Formati",assets:"Asset",notes:"Note",services:"Servizi",none:"—",edit:"Modifica il brief",back:"Torna al brief"},versions:{timeline:"Versioni",historyItem:"Cronologia delle versioni",historyItemVariant:e=>`Cronologia delle versioni della variante ${e.letter}`,timelineRow:e=>`Versione ${e.n} · ${e.when} · ${e.note}`,title:"Versioni",fromBrief:"Dal brief",noteMore:"Altro",noteLess:"Meno",incomplete:"Incompleta",compare:"Confronta",restart:"Riparti da qui",restartNote:e=>`La prossima modifica parte dalla v${e.n}. Le versioni successive restano nella cronologia.`,restarted:e=>`Le prossime modifiche partono dalla v${e.n}`,undo:"Annulla",commentsOn:e=>`I commenti valgono per la v${e.n}: usa Riparti da qui per commentare questa versione.`,showInFinder:"Mostra nel Finder",showInFolder:"Mostra nella cartella",actionFailed:e=>`Non è riuscito: ${e.detail}`},compare:{title:e=>`Confronta ${e.label}`,label:"Confronta le versioni",left:"Sinistra",right:"Destra",slider:"Posizione del divisore",noOutput:"Non presente in questa versione",view:"Vista",overlay:"Sovrapposte",sideBySide:"Affiancate",useForExport:e=>`★ Usa la v${e.n} per l’export`,usedForExport:e=>`★ Si esporta la v${e.n}`,starManual:"★ Scelta tua",starAuto:"★ Auto",videoFailed:e=>`Impossibile riprodurre la v${e.n}. Il file potrebbe essere stato spostato.`}},formatVersions:{badge:e=>`${e.label}: si esporta la v${e.n}. Apri le sue versioni`,count:e=>e.n===1?"1 versione":`${e.n} versioni`,viewing:e=>`stai guardando la v${e.n}`,newer:e=>`v${e.n} più recente`,title:e=>`Versioni di ${e.label}`,viewRow:e=>`Guarda la v${e.n} · ${e.when} · ${e.note}`,star:e=>`Usa la v${e.n} per l’export`,starred:e=>`Si esporta la v${e.n}`,starToast:e=>`Per ${e.label} si esporterà la v${e.n}`,manual:"Scelta tua",auto:"Auto",autoTip:"Stella automatica: la versione più recente senza problemi",resetAuto:"Torna ad Auto",resetToast:e=>`${e.label} torna ad avere la stella automatica`,pickedByYou:"Scelta da te",automatic:"Automatica",range:e=>`v${e.n}–v${e.last}`,unchangedUntil:e=>`invariata fino alla v${e.last}`,onlyChanges:"Qui vedi solo le versioni che hanno cambiato questo formato.",follows:e=>`segue ${e.primary}`,followsStar:e=>`segue ${e.primary} ★ v${e.n}`,followsNote:e=>`${e.label} usa il file di ${e.primary} e la sua ★: non ha versioni proprie.`,linkedTo:e=>`Collegato a ${e.primary}`,linkedMenu:e=>`Collegato a ${e.primary}: apri il menu del collegamento`,unlink:"Scollega: crea una versione dedicata",unlinked:e=>`${e.label} è scollegato: la prossima modifica ne crea una versione propria`,linkTo:e=>`Collega a ${e.primary}`,linkHint:"Stessa misura e stesso tipo: può usare lo stesso file, senza costi.",linked:e=>`Ora ${e.label} segue ${e.primary}`,fileMissing:e=>`Il file della v${e.n} manca sul disco, quindi Esporta non può includere questo formato. Metti la ★ su un’altra versione.`,followerMissing:e=>`Nessuna copia identica di ${e.primary} ★ v${e.n} da esportare. Metti la ★ su una versione di ${e.primary} che ce l’ha, oppure Scollega.`,followerMissingShort:"Non esportabile",errors:{hashesPending:"Sto ancora calcolando le versioni: riprova fra un momento",pickFollower:e=>`${e.label} segue ${e.primary}: si esporta con la ★ di ${e.primary}.`,notInBrief:e=>`${e.label} non è più nel brief. Ricarica la creatività.`,pickNoFile:e=>`La v${e.n} non ha un file ${e.label}: non si può usare per l’export.`,pickFileMissing:e=>`Il file ${e.label} della v${e.n} manca sul disco o è un collegamento: non si può usare per l’export.`,versionNotFound:e=>`La v${e.n} non esiste più. Ricarica la creatività e riprova.`,linkSelf:"Un formato non può seguire sé stesso.",linkChain:e=>`${e.label} non può seguire ${e.primary}: un formato collegato non può avere a sua volta formati collegati, e uno che li ha non può seguirne un altro.`,linkIncompatible:e=>`${e.label} non può seguire ${e.primary}: ${e.reason}.`,jobRunning:"Aspetta che finisca la generazione in corso, poi riprova.",formatsNotInBrief:"Nessuno dei formati scelti è più nel brief: sceglili di nuovo.",failed:e=>`Non è riuscito: ${e.detail}`}},services:{title:"Servizi",hint:"Quali servizi esterni l'agente può usare per questo creativo. Genera negli Asset non cambia.",kinds:{images:"Immagini",voice:"Voce",music:"Musica",sfx:"Effetti sonori"},choices:{auto:"Auto",openai:"OpenAI",elevenlabs:"ElevenLabs",stock:"Solo stock",none:"Spento"},group:e=>`${e.kind}: servizio`,needsKey:e=>`${e.choice} richiede la chiave ${e.provider}: aggiungila in Impostazioni → Servizi a pagamento.`,stockProviders:"Pexels o Unsplash",missingPermission:e=>`${e.choice} non è disponibile: alla chiave ${e.provider} manca il permesso ${e.permission}. Abilitalo su ${e.provider}, poi prova di nuovo la chiave in Impostazioni → Servizi a pagamento.`,keyRefused:e=>`${e.choice} non è disponibile: ${e.provider} ha rifiutato la chiave salvata o la richiesta. Controlla la chiave, o una restrizione di area, organizzazione o firewall, in Impostazioni → Servizi a pagamento.`,chip:"Servizi",chipAria:e=>`Servizi: ${e.summary}. Cambia quali servizi esterni l'agente può usare`,summaryAuto:"tutti auto",summarySkipped:e=>`${e.kind}: ${e.provider} non disponibile`,autoSkipped:e=>`${e.provider} ${e.kind.toLowerCase()}: ${e.why} · Auto lo salta finché la chiave non è sistemata.`,whyPermission:e=>`manca il permesso ${e.permission}`,whyKeyRefused:"il fornitore ha rifiutato la chiave salvata o la richiesta",testInSettings:"Prova in Impostazioni",openSettings:"Aggiungi una chiave in Impostazioni",summaryPart:e=>`${e.kind} ${e.choice}`,nextTurn:"Le modifiche valgono dal prossimo messaggio.",busy:"Puoi cambiare i servizi quando la generazione finisce.",saving:"Salvataggio…",saveFailed:e=>`Impossibile salvare i servizi: ${e.detail}`},conversation:{agentAction:"Azione dell'agente",atSeconds:e=>`@ ${e.time}s`,goal:"Obiettivo",length:"Durata",lengthNone:"Nessuna",lengthFor:"Durata dei formati video",assets:"Asset (separati da virgola)",notes:"Note",formats:"Formati",saveAndRegenerate:"Salva e rigenera",legacyConvertNotice:"Questa creatività è stata fatta prima delle composizioni modificabili. Rigenerare converte ogni formato in una composizione con l’agente: questa volta costa più token, e i formati potrebbero cambiare leggermente.",viewVersion:e=>`Vedi v${e.n}`,helperRow:{working:"al lavoro…",workingStep:e=>`al lavoro · ${e.step}`,ready:e=>`v${e.n} pronta`,incomplete:e=>`v${e.n} incompleta`,unchanged:"nessuna modifica",failed:"non riuscita",stopped:"fermata",done:"finito"},groupTurn:{workedOn:e=>`Ha lavorato su: ${e.list}`,incomplete:e=>`v${e.n} incompleta`,unchanged:"nessuna modifica",unchangedAt:e=>`nessuna modifica, v${e.n}`,stopped:"fermata",failed:"non riuscita",turnStopped:"Fermato"},openVariantVersion:e=>`Apri ${e.letter} · v${e.n}`,removeComment:e=>`Rimuovi commento ${e.n}`,editComment:e=>`Modifica il commento ${e.n}`,requestChange:"Chiedi una modifica",chipClip:e=>`${e.format} · clip "${e.name}"`,chipRange:e=>`${e.format} · ${e.a}–${e.b} s`,chipClipRange:e=>`${e.format} · clip "${e.name}" · ${e.a}–${e.b} s`,chipClipAnimIn:e=>`${e.format} · clip "${e.name}" · animazione di entrata`,chipClipAnimOut:e=>`${e.format} · clip "${e.name}" · animazione di uscita`,chipClipElement:e=>`${e.format} · "${e.element}" in "${e.name}"`,noteTitleAnimIn:e=>`Commento sull’animazione di entrata di "${e.name}"`,noteTitleAnimOut:e=>`Commento sull’animazione di uscita di "${e.name}"`,noteTitleElement:e=>`Commento su "${e.element}" in "${e.name}"`,commentWaiting:"Commento aggiunto: va all’agente con il tuo prossimo messaggio (scheda Chat)",clipComment:"Commenta la clip",clipCommentNeeds:"Seleziona una clip per commentarla",clipPick:"Commenta una clip",clipPickNone:"Nessuna clip in questo istante",rangeHint:"Maiusc + trascina sul righello per commentare un intervallo",rangeSpan:e=>`Commento su ${e.a}–${e.b} s${e.note?`: ${e.note}`:""}`,onlyOnVersion:e=>`I commenti valgono per la v${e.n}: apri quella versione per commentare.`,noteTitleClip:e=>`Commento su "${e.name}"`,noteTitleRange:e=>`Commento su ${e.a}–${e.b} s`,noteLabel:"Il tuo commento",noteAdd:"Aggiungi commento",noteSave:"Salva commento",rangeComment:"Commenta un intervallo",rangeDialogTitle:"Commenta un intervallo di tempo",rangeStart:"Inizio",rangeEnd:"Fine",rangeInvalid:"La fine deve essere dopo l'inizio",rangeContinue:"Continua",rangeBubble:"Intervallo selezionato",rangeBubbleAction:"Commenta",rangeBubbleEsc:"Esc annulla",rangeTip:e=>`Commenta un intervallo · ${e.keys} imposta inizio e fine sul cursore · trascina sul righello per sceglierlo`,noteCancel:"Annulla"},labels:{colorRoles:{primary:"Primario",secondary:"Secondario",accent:"Accento",background:"Sfondo",text:"Testo",other:"Altro"},fontRoles:{heading:"Titoli",body:"Testo",accent:"Accento",other:"Altro"},logoVariants:{primary:"Principale",secondary:"Secondario",mono:"Monocromatico",icon:"Icona",other:"Altro"},logoBackgrounds:{light:"Chiaro",dark:"Scuro",any:"Qualsiasi"},describing:"Descrizione in corso…",analyzing:"Analisi in corso…",describeFailed:e=>`Descrizione non riuscita: ${e.error??"errore sconosciuto"}`,analysisFailed:e=>`Analisi non riuscita: ${e.error??"errore sconosciuto"}`},brand:{sections:"Sezioni del brand",nav:{overview:"Panoramica",colors:"Colori",type:"Tipografia",logos:"Loghi",voice:"Voce",sound:"Suono",photo:"Stile delle immagini",guidelines:"Linee guida"},loadFailed:e=>`Impossibile caricare il brand: ${e.error}`,retry:"Riprova",kitUnreadable:e=>`brand/brand-kit.json non è leggibile. Correggilo o eliminalo per continuare. (${e.error})`,kitLocked:"Le modifiche sono sospese finché il file non viene corretto.",undo:"Annulla",save:{saving:"Salvataggio…",saved:"Salvato",allSaved:"Tutte le modifiche sono salvate",failed:e=>`Non salvato: ${e.error}`,retry:"Riprova"},overview:{learnedFrom:e=>`Appreso da ${e.hosts} · ${e.when}`,notAnalyzed:"Non ancora analizzato",intro:"Colori, font, loghi e regole che l'agente segue in ogni creatività.",details:"Dettagli"},colors:{hint:"Clicca un colore per modificarlo",add:"+ Aggiungi colore",newName:"Nuovo colore",edit:e=>`Modifica il colore ${e.name}`,popTitle:"Modifica colore",name:"Nome",hex:"Hex",hexInvalid:"Usa 6 cifre esadecimali, es. 1B1913",role:"Ruolo",remove:"Rimuovi",removed:e=>`${e.name} rimosso`,contrast:e=>`Testo in ${e.name}: contrasto ${e.ratio}:1`,empty:"Ancora nessun colore. Aggiungi la palette del brand o analizza un sito."},fonts:{hint:"I file dei font stanno nel progetto, così i render corrispondono sempre",add:"+ Aggiungi a mano",addGoogle:"+ Aggiungi da Google Fonts",google:{title:"Aggiungi da Google Fonts",search:"Cerca font",searchHint:"Cerca per nome",category:"Categoria",categoryAll:"Tutte le categorie",categories:{"Sans Serif":"Sans serif",Serif:"Serif",Display:"Display",Handwriting:"Corsivo a mano",Monospace:"Monospazio"},results:"Font trovati",searching:"Ricerca in corso…",empty:"Nessun font corrisponde alla ricerca.",failed:e=>`Impossibile cercare i font: ${e.error}`,fallback:"Il catalogo di Google Fonts non è disponibile in questo momento. Scrivi il nome esatto della famiglia per cercarla.",stale:"Mostro una copia salvata del catalogo: potrebbe non essere aggiornata.",previewFailed:"Anteprima non disponibile",variable:"Variabile",choose:"Scegli un font a sinistra per selezionarne i pesi.",weights:"Pesi",weight:e=>`Peso ${e.weight}`,italic:"Includi il corsivo",role:"Ruolo",license:"Licenza aperta (OFL o Apache 2.0): uso commerciale libero.",add:"Aggiungi al brand",adding:"Aggiunta in corso…",added:e=>`${e.family} aggiunto al brand`,updated:e=>`${e.family} aggiornato: pesi aggiunti`,addFailed:e=>`Impossibile aggiungere il font: ${e.error}`,close:"Chiudi"},newFamily:"Nuovo font",inProject:"✓ File nel progetto",noFile:"Nessun file del font",noPreview:"Anteprima non disponibile: aggiungi il file del font al progetto",loadFailed:"Impossibile caricare il file del font: anteprima con un font di sistema",specimen:"Aa Bb Cc 0123",sample:"Ma la volpe col suo balzo ha raggiunto il quieto Fido",edit:e=>`Modifica il font ${e.family}`,popTitle:"Modifica font",family:"Famiglia",familyNormalized:e=>`Tenuta la prima famiglia dello stack CSS: ${e.family}`,familyRequired:"Inserisci il nome della famiglia",role:"Ruolo",weights:"Pesi",weightsHint:"es. 400, 700",file:"File del font",noFileOption:"Nessun file",noFontAssets:"Carica file .ttf, .otf o .woff nella scheda Asset per collegarli qui.",remove:"Rimuovi",removed:e=>`${e.family} rimosso`,empty:"Ancora nessun font."},logos:{add:"+ Aggiungi logo",upload:"Carica un file…",fromAssets:"Dagli Asset",noAssets:"Ancora nessuna immagine negli Asset",edit:e=>`Modifica il logo ${e.file}`,popTitle:"Modifica logo",variant:"Variante",background:"Sfondo",onLight:"Su chiaro",onDark:"Su scuro",onAny:"Qualsiasi sfondo",remove:"Rimuovi",removed:"Logo rimosso",missingLight:"Manca: logo per sfondi chiari",missingDark:"Manca: logo per sfondi scuri",missingLightSub:"Carica una versione scura del logo o sceglila dagli Asset.",missingDarkSub:"Carica una versione chiara del logo o sceglila dagli Asset.",uploadLogo:"Carica logo",uploading:"Caricamento…",added:"Logo aggiunto",alt:e=>`Logo ${e.file}`},sound:{hint:"L'agente lo segue quando sceglie musica, effetti sonori e voci.",genre:"Genere",genrePlaceholder:"es. elettronica calda",genreSuggestions:"Suggerimenti di genere",genreOptions:{cinematic:"Cinematografico",electronic:"Elettronica",acoustic:"Acustico",hiphop:"Hip hop",corporate:"Aziendale",ambient:"Ambient",jazz:"Jazz",pop:"Pop"},energy:"Energia",energyNone:"Non impostata",energyLow:"Bassa",energyMedium:"Media",energyHigh:"Alta",instruments:"Strumenti",instrumentsPlaceholder:"es. pianoforte",avoid:"Da evitare",avoidPlaceholder:"es. ottoni",add:"Aggiungi",none:"Ancora nessuno",full:"L'elenco è pieno.",remove:e=>`Rimuovi ${e.text}`,voice:"Voce",noVoice:"Nessuna voce del brand scelta.",chooseVoice:"Scegli una voce",changeVoice:"Cambia voce",clearVoice:"Rimuovi la voce",voiceOf:e=>`${e.provider} · ${e.name}`,picker:{title:"Scegli la voce del brand",provider:"Servizio delle voci",providers:{elevenlabs:"ElevenLabs",openai:"OpenAI"},search:"Cerca voci",searchHint:"Cerca per nome",results:"Voci trovate",loading:"Carico le voci…",empty:"Nessuna voce corrisponde alla ricerca.",failed:e=>`Non riesco a caricare le voci: ${e.error}`,noKey:e=>`${e.provider} richiede una chiave API prima di poter scegliere una voce.`,openSettings:"Apri le Impostazioni",noPreview:"Nessuna anteprima",play:e=>`Ascolta l'anteprima di ${e.name}`,stop:e=>`Ferma l'anteprima di ${e.name}`,previewFailed:"Non riesco a riprodurre l'anteprima.",openaiNote:"Le voci OpenAI non hanno un'anteprima gratuita.",use:e=>`Usa ${e.name}`,selected:"Scelta",close:"Chiudi"}},voice:{empty:"Ancora nessun tono di voce.",edit:"Modifica",write:"Scrivilo",save:"Salva",cancel:"Annulla",placeholder:"Come parla il brand…",toneLabel:"Tono di voce",do:"Da fare",avoid:"Da evitare",more:e=>`Mostra altre ${e.count}`,less:"Mostra meno",addRule:"+ Aggiungi",doPlaceholder:"Qualcosa da fare sempre",avoidPlaceholder:"Qualcosa da evitare",doLabel:"Nuova regola da fare",avoidLabel:"Nuova regola da evitare",add:"Aggiungi",removeRule:e=>`Rimuovi la regola: ${e.text}`,ruleRemoved:"Regola rimossa",noRules:"Ancora nessuna regola."},photo:{empty:"Ancora nessuno stile delle immagini.",placeholder:"Luce, inquadrature, soggetti, trattamento…",label:"Stile delle immagini"},guidelines:{open:"Apri il documento completo",empty:"Ancora nessuna linea guida. Analizza un sito o scrivile tu.",write:"Scrivi le linee guida",edit:"Modifica",save:"Salva",cancel:"Annulla",close:"Chiudi",label:"Linee guida (Markdown)",discardQ:"Scartare le modifiche alle linee guida?",discard:"Scarta",keep:"Continua a modificare"},codebase:{kindAria:"Tipo di fonte",kindSite:"Da un sito",kindCode:"Da una codebase",emptySub:"Scegli la cartella dell'app o del sito. Claude ne legge codice, stili e risorse e ti propone colori, font, loghi e voce da rivedere.",pathAria:"Cartella della codebase",pathPlaceholder:"/Users/tuonome/dev/app",noteAria:"Nota (facoltativa)",notePlaceholder:"Es. il design system è in /packages/ui",hint:"L'agente legge la cartella in sola lettura e non apre file segreti (.env, chiavi…).",suggestions:"Codebase di questo progetto",suggestionTitle:e=>`Usa ${e.path}`,add:"Aggiungi cartella",addAndAnalyze:"Analizza",needPath:"Inserisci il percorso assoluto di una cartella",actions:e=>`Azioni per ${e.name}`,removed:e=>`${e.name} rimossa`,added:"Cartella aggiunta · analizza per imparare da essa",notesTitle:"Note sull'analisi"},sources:{title:"Fonti",actions:e=>`Azioni per ${e.host}`,remove:"Rimuovi",removed:e=>`${e.host} rimosso`,analyzedAt:e=>`Analizzato ${e.when}`,never:"Mai analizzato",inProgress:"Analisi in corso",addLabel:"Aggiungi una fonte",addPlaceholder:"Aggiungi l'indirizzo di un sito",add:"Aggiungi",added:"Fonte aggiunta · analizza per imparare da lei",images:e=>e.count===1?"+ 1 immagine dai riferimenti è inclusa":`+ ${e.count} immagini dai riferimenti sono incluse`,noImages:`Spunta "Usa per l'analisi del brand" nei riferimenti per includere immagini.`,analyze:"Analizza",analyzeAgain:"Analizza di nuovo",busyDescribe:"Gli asset sono in descrizione: analizza quando finisce.",needSource:"Aggiungi prima un sito.",empty:"Ancora nessun sito.",invalidUrl:"Inserisci un indirizzo web, es. https://www.example.com"},analysis:{title:"Sto imparando il brand",queued:"In attesa di partire…",starting:"Avvio: lettura delle fonti",phasesLabel:"Fasi dell'analisi",phases:{queued:"Avvio",reading:"Lettura",fonts:"Font",colors:"Colori",logos:"Loghi",tone:"Tono",writing:"Scrittura",done:"Fatto"},phaseState:{done:"completata",current:"in corso",pending:"da fare"},working:"al lavoro",progress:"Avanzamento dell'analisi",cancel:"Annulla",canceled:"Analisi annullata",failed:e=>`L'analisi non è terminata: ${e.error}`,retry:"Riprova",ready:"I suggerimenti per il brand sono pronti",review:"Rivedi",readyTitle:"Suggerimenti pronti",readySub:e=>e.count===1?"1 suggerimento da rivedere":`${e.count} suggerimenti da rivedere`},health:{title:"Salute del brand",ok:"fatto",todo:"da fare",palette:"Palette con i ruoli",fonts:"File dei font nel progetto",rules:"Regole da fare e da evitare",lightLogo:"Logo per sfondi chiari",fix:{palette:"Aggiungi colori",fonts:"Collega i file",rules:"Aggiungi regole",lightLogo:"Carica"}},history:{title:"Analisi",autoTitle:"Comandi eseguiti",autoTruncated:"Sono elencati solo i primi.",applied:"applicata",discarded:"scartata",open:"da rivedere",undone:"annullata"},empty:{title:"Insegna a Claude questo brand",sub:"Incolla il sito. Claude lo legge e ti propone colori, font, loghi e voce da rivedere.",website:"Sito web",placeholder:"https://www.example.com",analyze:"Analizza",manual:"Oppure impostalo a mano"}},brandReview:{dialog:"Rivedi i suggerimenti per il brand",title:e=>`Ecco cosa ha imparato Claude da ${e.hosts}`,yourSources:"le tue fonti",sub:e=>`${e.count===1?"1 suggerimento":`${e.count} suggerimenti`} · scegli cosa tenere, tutto resta modificabile dopo`,close:"Chiudi",groupsLabel:"Gruppi di suggerimenti",groups:{colors:"Colori",fonts:"Tipografia",logos:"Loghi",tone:"Voce",dos:"Da fare",donts:"Da evitare",photoStyle:"Stile delle immagini",guidelines:"Linee guida"},selectAll:"Seleziona tutto",deselectAll:"Deseleziona tutto",selected:e=>`${e.n} di ${e.m} selezionati`,assetsAdded:e=>`Aggiunti anche agli asset: ${e.count===1?"1 file":`${e.count} file`}`,keep:e=>`Tieni ${e.label}`,ops:{add:"Nuovo",update:"Aggiorna",remove:"Rimuovi"},replaces:e=>`Sostituisce: ${e.text}`,fontNoFile:"Anteprima con un font di sistema: il file del font non è stato scaricato",fontFailed:"Anteprima con un font di sistema: impossibile caricare il file del font",useGuidelines:"Usa le linee guida proposte",replacesGuidelines:"Sostituiscono le linee guida attuali",footnote:"Applicando aggiungi gli elementi che tieni. Puoi annullare dalla notifica.",discardAll:"Scarta tutto",confirmDiscard:e=>`Scartare ${e.count===1?"il suggerimento":`tutti i ${e.count} suggerimenti`}? Non si può annullare.`,keepReviewing:"Continua a rivedere",apply:e=>`Applica ${e.n} di ${e.m}`,applied:e=>e.count===1?"Applicato 1 suggerimento al brand":`Applicati ${e.count} suggerimenti al brand`,undo:"Annulla",restored:"Brand ripristinato",discarded:"Suggerimenti scartati",nothing:"Nessuna novità",nothingSub:"L'analisi non ha trovato nulla da cambiare nel brand."},source:{website:e=>`Sito: ${e.host}`,image:e=>`Immagine: ${e.name}`},app:{approvalNotificationTitle:"Motion Studio: serve la tua approvazione",settingsSaveFailed:e=>`Impossibile salvare le impostazioni: ${e.detail}`,readyNotificationTitle:"Motion Studio: creatività pronta"},welcome:{setupStep:e=>`Configurazione · ${e.n} di ${e.total}`,title:"Trasforma i brief in motion graphics con Claude Code",intro:"Tutto gira su questo computer. Progetti, brand e render restano in una cartella che scegli tu.",steps:"Passi della configurazione",stepDone:"fatto",checkTitle:"Controlla il sistema",checkIntro:"Motion Studio usa Claude Code e alcuni strumenti su questo computer.",checksPassed:e=>`${e.ok} controlli superati su ${e.total}`,checking:"Controllo in corso…",checkingRow:"controllo…",checksList:"Controlli di sistema",serverUnreachable:e=>`Impossibile contattare il server di Motion Studio: ${e.detail}. Verifica che Motion Studio sia ancora in esecuzione, poi ricontrolla.`,serverUnreachableShort:"Server non raggiungibile",missing:"Manca",recommended:"Consigliato",remedy:"Come risolvere",checkAgain:"Ricontrolla",blocked:"Risolvi i controlli segnati con Manca, poi ricontrolla.",installClaude:"Installa Claude Code",signIn:"Accedi a Claude",installFfmpeg:"Installa FFmpeg",confirmClaude:"Motion Studio avvierà il programma di installazione ufficiale di Anthropic, scaricato da claude.ai. Installa solo Claude Code, solo per il tuo utente, senza permessi di amministratore.",confirmFfmpeg:e=>`Motion Studio scaricherà FFmpeg ${e.version} (${e.size}) da ${e.source} e lo terrà nella sua cartella: nient'altro cambia su questo computer. Il file scaricato viene verificato prima di usarlo. È una build ${e.license}.`,confirmSignIn:"Il browser si apre sulla pagina di accesso di Claude. Accedi lì, poi torna qui.",confirmInstall:"Installa",confirmContinue:"Continua",installingClaude:"Installazione di Claude Code in corso… può volerci un minuto o due.",installingFfmpeg:e=>`Download di FFmpeg… ${e.done} di ${e.total}`,signingIn:"Completa l'accesso nel browser…",openSignIn:"Apri la pagina di accesso",installFailed:"L'installazione non è andata a buon fine. Riprova, oppure falla a mano qui sotto.",installTimeout:"L'installazione ci ha messo troppo ed è stata fermata. Riprova, oppure falla a mano qui sotto.",signInFailed:"L'accesso non è stato completato. Riprova.",signInTimeout:"L'accesso ci ha messo troppo ed è stato fermato. Riprova.",ffmpegFailed:"Non è stato possibile scaricare FFmpeg. Controlla la connessione a internet e riprova, oppure installalo a mano qui sotto.",taskCancelled:"Fermato.",troubleshoot:"Aiuto di Anthropic per l'installazione",manualTitle:"Preferisci farlo a mano?",manualOpenWindows:"Apri PowerShell: fai clic su Start, scrivi PowerShell e premi Invio.",manualOpenOther:"Apri il Terminale.",manualPaste:"Incolla questo comando e premi Invio:",manualDone:"Quando ha finito, torna qui e premi Ricontrolla.",copy:"Copia",copied:"Copiato",copyManual:"Seleziona il comando e copialo con Ctrl+C (Cmd+C su Mac).",planNote:"Claude Code richiede un piano Claude a pagamento (Pro, Max, Team o Enterprise) o un account Claude Console: il piano gratuito non basta. Anche la sola app desktop di Claude non basta: Motion Studio ha bisogno di Claude Code.",technicalDetails:"Dettagli tecnici",note:"Da sapere",workspaceTitle:"Scegli il workspace",workspaceSub:"Dove si salvano i progetti",workspaceIntro:"Motion Studio tiene al suo interno una cartella per progetto, con la cronologia delle versioni. Puoi cambiarlo in seguito rifacendo la configurazione dal menu dell'account.",folder:"Cartella",pathPlaceholder:"/Users/tuonome/MotionStudio",pickFolderTitle:"Scegli la cartella di lavoro",statusCurrent:e=>e.count===0?"Workspace attuale · ancora nessun progetto":`Workspace attuale · ${e.count} ${e.count===1?"progetto":"progetti"}`,statusChecking:"Lettura del workspace…",statusNew:"Se la cartella non esiste Motion Studio la crea, e la verifica quando prosegui.",workspaceNotFound:e=>`Cartella non trovata: ${e.path}, scegline un'altra`,workspaceInvalid:e=>`Contenuto non valido in ${e.path}: ${e.detail}`,saveFailed:e=>`Questa cartella non si può usare: ${e.detail}. Scegline un'altra o correggi i permessi.`,preview:"Anteprima della cartella",previewProject:"una cartella per progetto",systemReady:"Il computer è pronto",systemNotes:"Pronto, con alcuni consigli",recheck:"Ricontrolla",projectTitle:"Crea il primo progetto",projectSub:"Dagli un nome, poi aggiungi un sito per imparare il brand",projectIntro:"Aggiungi un sito e Claude impara colori, font, loghi e tono di voce.",projectName:"Nome del progetto",projectNamePlaceholder:"Es. Acme",website:"Sito web",optional:"facoltativo",websitePlaceholder:"https://www.esempio.it",websiteInvalid:"Inserisci un indirizzo web come https://www.esempio.it, oppure lascia il campo vuoto.",createFailed:e=>`Il progetto non è stato creato: ${e.detail}. Controlla il nome e riprova.`,created:e=>`${e.name} creato`,createdLearning:e=>`${e.name} creato · sto imparando il brand da ${e.site}`,sourceFailed:e=>`Il progetto è stato creato, ma il sito non è stato aggiunto: ${e.detail}. Aggiungilo di nuovo qui in Brand.`,analysisFailed:e=>`Il progetto è stato creato, ma l'analisi del brand non è partita: ${e.detail}. Avviala di nuovo qui in Brand.`,back:"Indietro",continue:"Continua",create:"Crea progetto",skip:"Salta per ora",enterHint:"Premi ↵ per continuare"},pairing:{title:"Apri Motion Studio dal link nel terminale",body:"Questa scheda non ha la chiave privata che Motion Studio ha stampato all'avvio. La chiave impedisce ad altre app e siti web su questo computer di controllare i tuoi progetti.",terminal:"Terminale",terminalExample:"Cosa mostra il terminale quando Motion Studio parte",running:"Motion Studio è in esecuzione.",open:"Apri:",lostTitle:"Hai chiuso il terminale o perso il link?",lostBody:"Esegui questo comando in una nuova finestra del terminale. Stampa di nuovo il link senza riavviare nulla.",copy:"Copia",copied:"Copiato",copiedStatus:"Comando copiato negli appunti.",desktopHint:"Usi l'app desktop? Apri Motion Studio da Applicazioni: non ha mai bisogno di questo passaggio.",copyFallback:e=>`Qui non si può copiare in automatico: il comando è selezionato, premi ${e.keys} per copiarlo.`},projects:{title:"Progetti",jumpBackIn:"Riprendi da qui",recentCreatives:"Creatività recenti",newCreativeIn:e=>`Nuova creatività in ${e.project}`,formats:e=>e.n===1?"1 formato":`${e.n} formati`,waiting:"Aspetta il tuo OK",rendering:e=>`Render · ${e.step}`,readyWhen:e=>`Pronta · ${e.when}`,sort:"Ordina i progetti",sortRecent:"Ultima modifica",sortName:"Nome",newProject:"Nuovo progetto",startTitle:"Inizia un nuovo progetto",startBody:"Dagli un nome, poi aggiungi il sito in Brand: Claude impara colori, font, loghi e tono di voce al posto tuo.",nameLabel:"Nome del progetto",create:"Crea",created:e=>`Progetto “${e.name}” creato`,open:"Apri",createFailed:e=>`Il progetto non è stato creato: ${e.detail}. Controlla il nome e riprova.`,loadFailed:e=>`Impossibile caricare i progetti: ${e.detail}. Verifica che Motion Studio sia ancora in esecuzione, poi riprova.`,tryAgain:"Riprova",loading:"Caricamento dei progetti…",emptyTitle:"Ancora nessun progetto",emptyBody:"Un progetto raccoglie un brand e le sue creatività. Dai un nome al primo per iniziare.",approvalsWaiting:e=>e.n===1?"1 approvazione in attesa":`${e.n} approvazioni in attesa`,creatives:()=>"creatività",assets:()=>"asset",colors:e=>e.n===1?"colore":"colori",fonts:()=>"font",unreadable:"Illeggibile"},project:{sections:"Sezioni progetto",tabs:{creatives:"Creatività",brand:"Brand",assets:"Asset",references:"Riferimenti",settings:"Impostazioni"},loadFailed:e=>`Impossibile caricare il progetto: ${e.detail}`},integrity:{title:"Questo progetto è bloccato",body:"Alcuni file che configurano git o l'agente sono cambiati in un modo che Motion Studio non ha fatto. Verrebbero eseguiti fuori dalla sandbox, quindi sul progetto non partono né l'agente né git finché non tornano com'erano, o finché non accetti le modifiche come tue.",filesLabel:"File protetti cambiati",change:{changed:"modificato",added:"aggiunto",removed:"eliminato"},restoreHint:"Rimetti questi file com'erano e il progetto si sblocca da solo.",accept:"Accetta queste modifiche",gitTitle:"Git è bloccato su questo progetto",gitBody:"Questa impostazione non si può mai accettare: toglila come indicato e il progetto torna a funzionare.",confirmTitle:"Accettare queste modifiche?",confirmText:"Accetta solo se hai fatto tu queste modifiche",confirmDetail:"I file elencati diventano il nuovo riferimento. Se non li hai cambiati tu, annulla e ripristinali.",confirm:"Accetta",cancel:"Annulla",changedSince:"I file sono cambiati di nuovo. Controlla la lista aggiornata.",acceptFailed:e=>`Impossibile accettare le modifiche: ${e.detail}`,accepted:"Modifiche accettate: il progetto è sbloccato"},common:{chooseFolder:"Scegli cartella…",send:"Invia"},api:{httpError:e=>`Errore ${e.status}`},settings:{language:"Lingua",languageSystem:e=>`Sistema (${e.detected})`,languageNames:{en:"English",it:"Italiano"},languageFailed:e=>`Lingua non cambiata: ${e.detail}`},usage:{tokens:e=>`${e.count} token`,unknown:"—",todayButton:e=>`Token usati oggi: ${e.count}. Apri Utilizzo`,today:e=>`Oggi · ${e.count} token`,todayUnknown:"Oggi · token non ancora disponibili",open:"Utilizzo",tokensAtLeast:e=>`≥ ${e.count} token`,soFar:"finora",atLeast:e=>`≥ ${e.cost}`,billingSubscription:e=>`Rientra nel tuo piano Claude. A prezzi API sarebbe circa ${e.cost}.`,billingApi:e=>e.cost,billingUnknown:e=>`Stima a prezzi API: ${e.cost}`,billingSubscriptionAtLeast:e=>`Rientra nel tuo piano Claude. A prezzi API sarebbe almeno ${e.cost}.`,billingUnknownAtLeast:e=>`Stima a prezzi API: almeno ${e.cost}`,costUnknown:"Il costo di alcune esecuzioni non è noto: la cifra reale può essere più alta.",noCost:"Costo non disponibile per questa esecuzione.",details:"Dettaglio dei token",input:"Input",output:"Output",cacheWrite:"Scrittura in cache",cacheRead:"Lettura dalla cache (esclusa dal totale)",creativeTotal:"Token",untracked:"Le versioni create prima dell'inizio del conteggio non sono incluse."},shell:{home:"Home di Motion Studio",search:"Cerca progetti, creatività e pagine",running:e=>`${e.count} in corso`,bell:e=>e.count?`Attività, ${e.count} in attesa`:"Attività",account:"Menu account",settings:"Impostazioni",systemCheck:"Controllo di sistema",replaySetup:"Rifai la configurazione",projects:"Progetti",newProject:"Nuovo progetto",switchProject:e=>`Progetto ${e.name}, cambia progetto`,backAllFormats:"Tutti i formati",moreActions:"Altre azioni",newCreative:"Nuova creatività",breadcrumb:"Posizione",activity:{label:"Attività",sections:"Sezioni attività",needsYou:"Serve a te",running:"In corso",done:"Finiti",emptyNeeds:"Niente in attesa",emptyNeedsSub:"Le richieste dell'agente compaiono qui e come avviso.",emptyRunning:"Niente in corso",groupPhases:{coordinator:"Legge il tuo messaggio",confirm:"In attesa della tua conferma",helpers:"Le varianti sono al lavoro",report:"Scrive la risposta"},emptyRunningSub:"Generazioni e analisi mostrano qui il loro avanzamento.",emptyDone:"Ancora niente di finito",emptyDoneSub:"Qui compaiono gli ultimi esiti di questa sessione.",queued:"In attesa di partire",open:"Apri",enableNotifications:"Attiva le notifiche",versionReady:e=>`v${e.n} pronta`,versionIncomplete:e=>`v${e.n} salvata, incompleta`,versionKept:e=>`Nessuna versione nuova: v${e.n} invariata`},palette:{label:"Vai a",placeholder:"Cerca progetti, creatività e pagine",empty:e=>`Nessun risultato per “${e.query}”`,pages:"Pagine",projects:"Progetti",creatives:"Creatività",hint:"↑↓ per muoverti · ↵ per aprire · esc per chiudere",inProject:e=>`in ${e.project}`},attention:{waiting:e=>e.count===1?"1 richiesta ha bisogno di te":`${e.count} richieste hanno bisogno di te`,review:"Rivedi",many:e=>`${e.count} approvazioni in attesa`}},chat:{label:"Messaggi",appliesTo:"Si applica a",appliesAll:"Tutti i formati",appliesHint:"I formati a cui si applica la modifica: gli altri restano identici",appliesButton:e=>`Si applica a: ${e.choice}. Scegli i formati`,appliesInGroup:e=>`${e.group} · ${e.count} formati`,appliesCount:e=>`${e.count} formati`,appliesWholeGroup:e=>`${e.group}: tutto il gruppo`,followsBoth:e=>`${e.follower} segue ${e.primary}: la modifica vale per entrambi`,you:"Tu",agent:"Agente",summary:"Riepilogo",steps:e=>e.count===1?"1 passo":`${e.count} passi`,details:e=>`Dettagli dell’attività (${e.count})`,commandsRan:e=>{const t=e.count===1,i=e.attempted?t?"eseguito o tentato":"eseguiti o tentati":t?"eseguito":"eseguiti";return`${`${e.atLeast?"Almeno ":""}${e.count} ${t?"comando":"comandi"} ${i}`}${e.sandbox?" nella sandbox":""}${e.approved>0?` · ${e.approved===1?"1 approvato da te":`${e.approved} approvati da te`}`:""}`},commandMarks:{approved:"Approvato da te",denied:"Negato",notRun:"Non eseguito",error:"Terminato con un errore",interrupted:"Interrotto"},readFile:e=>`Letto ${e.file}`,autoDetails:"Dettagli",detailKinds:{session:"Sessione",text:"Messaggio",tool:"Strumento",result:"Output",error:"Errore",limit:"Limite",step:"Passo",log:"Log",unreadable:"Illeggibile",done:"Fatto",failed:"Non riuscito",stopped:"Fermato da te"},failed:e=>`L’agente si è fermato: ${e.error}`,working:"L’agente sta lavorando…",placeholder:"Descrivi cosa cambiare",busyPlaceholder:"L’agente sta lavorando all’ultima richiesta",sendHint:e=>`${e.keys} per inviare`,sendWithKeys:e=>`Invia (${e.keys})`,attach:"Allega file",attachMenu:"Allega file al messaggio",attachComputer:{title:"Dal computer",hint:"Lo salva anche negli Asset del progetto"},attachLibrary:{title:"Dagli Asset",hint:"Immagini, video e file del progetto"},attachedFiles:"File allegati",attachWait:"I file allegati partono con la prossima richiesta, quando l’agente ha finito.",uploading:e=>`Caricamento di ${e.name}…`,cancelUpload:e=>`Annulla il caricamento di ${e.name}`,attachmentGone:e=>e.count===1?`${e.names} non è più negli Asset: tolto dagli allegati. Invia di nuovo.`:`${e.names} non sono più negli Asset: tolti dagli allegati. Invia di nuovo.`,pin:e=>`${e.n} · ${e.format}`,sendFailed:e=>`Invio non riuscito: ${e.detail}. Il messaggio è ancora qui: riprova.`,retried:e=>`Riprovato · ${e.time}`,sendBusy:"Una generazione è già in corso per questa creatività. Attendi che finisca, poi invia di nuovo.",cancelFailed:"Non è stato possibile fermare l’agente. Riprova.",emptyTitle:"Ancora nessun messaggio",emptySub:"Chiedi una modifica qui sotto: ogni richiesta e ogni passo dell’agente compaiono qui."},liveUi:{send:"Invia all’agente",queue:"Metti in coda per dopo",interruptedRow:"Interrotto da te",consoleMessage:"Messaggio al turno della console",consoleOpen:"Messaggio",consoleUnsupported:"I messaggi dal vivo non sono supportati da questa versione di Claude Code. Invialo quando il turno finisce.",sendMore:"Altri modi di inviare",redirect:"Reindirizza",cancelRedirect:"Annulla il reindirizzamento",redirectNote:"Reindirizza ferma il passo in corso dell’agente e prosegue nella stessa sessione con il tuo messaggio.",queueOnly:"L’agente non può ricevere messaggi mentre lavora. Il messaggio aspetta e parte come richiesta successiva.",liveHint:"Invio invia · Maiusc+Invio a capo",liveNote:"Invia: l’agente lo legge appena finisce il passo in corso. Metti in coda per dopo parte quando l’agente ha finito.",queueHint:"Invio la mette in coda",redirectHint:e=>`${e.keys} per reindirizzare`,livePlaceholder:"Messaggio all’agente…",queuePlaceholder:"Prossima richiesta…",redirectPlaceholder:"Che cosa deve fare invece l’agente?",stop:"Ferma",stopMenu:"Opzioni di arresto",stopAndRedirect:"Ferma e reindirizza…",stopFailed:"Non è stato possibile fermare l’agente. Riprova.",redirectFailed:e=>`Impossibile reindirizzare: ${e.detail}`,redirectTitleFor:e=>`Ferma e reindirizza: ${e.label}`,redirectSend:"Reindirizza",redirectCancel:"Annulla",redirectFieldLabel:"Che cosa deve fare invece l’agente",state:{sending:"Invio…",pending:"In attesa del prossimo passo dell’agente",pendingStart:"Sarà incluso quando l’agente parte",sent:"Inviato",delivered:"Consegnato",queued:"In coda",notDelivered:"Non consegnato",redirect:"Reindirizzamento"},sentHint:"L’agente lo legge appena finisce il passo in corso",deliveredHint:"L’agente ci ha iniziato a lavorare",notDeliveredReason:"Il turno è finito prima che l’agente lo leggesse. Le tue parole restano qui sopra: inviale di nuovo.",outcome:{"queued-unsupported":"In coda: questo Claude Code non riceve messaggi durante un turno, quindi parte come richiesta successiva.","queued-after-finish":"In coda come richiesta successiva.",queued:"In coda per dopo.",restarted:"Reindirizzato: l’agente prosegue con il tuo messaggio.",interrupted:"Reindirizzato: il passo dell’agente è stato interrotto.","pending-start":"Sarà incluso quando l’agente parte."},queueLabel:"Richieste in coda",queueTitle:e=>e.count===1?"1 richiesta in coda":`${e.count} richieste in coda`,queuePaused:"Nulla è in esecuzione: la coda aspetta te.",runNext:"Avvia la prossima",item:e=>`Richiesta in coda ${e.n}`,edit:e=>`Modifica la richiesta in coda ${e.n}`,remove:e=>`Togli la richiesta in coda ${e.n}`,moveUp:e=>`Sposta su la richiesta in coda ${e.n}`,moveDown:e=>`Sposta giù la richiesta in coda ${e.n}`,drag:e=>`Trascina la richiesta in coda ${e.n} per riordinare`,editField:"Testo della richiesta in coda",save:"Salva",cancelEdit:"Annulla",draftKeptLabel:"La tua modifica non salvata",draftKept:"Questa richiesta è partita prima che la tua modifica fosse salvata, quindi è stata eseguita con il testo di prima. La tua modifica è conservata qui.",draftField:"La tua modifica non salvata",draftQueue:"Metti in coda come nuova richiesta",draftDiscard:"Scarta",moved:e=>`Richiesta ${e.n} spostata in posizione ${e.to}`,pins:e=>e.count===1?"1 commento":`${e.count} commenti`},render:{playerFrame:e=>`Anteprima dal vivo di ${e.label}`,loading:"Preparo l’anteprima dal vivo…",busy:"Le anteprime sono occupate: riprovo tra un momento…",failed:e=>`L’anteprima dal vivo non è partita: ${e.detail}`,retry:"Riprova",runtimeIssues:"Problemi dell’anteprima",runtimeError:{compositionMissing:"Impossibile leggere la composizione",compositionInvalid:"La composizione non è valida",baseNotAllowed:"La composizione punta fuori dalla sua cartella",assetPathRejected:"Un percorso di file è stato rifiutato",assetLoadFailed:"Un file non si è caricato",fontMissing:"Manca un font",fontLoadFailed:"Un font non si è caricato",videoSeekTimeout:"Un video ha impiegato troppo a mostrare il fotogramma",layerTimeout:"Un livello HTML ha impiegato troppo a rispondere",layerError:"Un livello HTML ha segnalato un errore",layerStalled:"Un livello HTML ha aspettato un timer che durante il render non scatta mai",badAnimation:"Un’animazione non si è potuta applicare",audioBlocked:"Il browser ha bloccato l’audio: riproduco senza suono",unknownClipType:"Una clip di tipo sconosciuto è stata saltata",frameTimeout:"Un fotogramma ha impiegato troppo a disegnarsi",videoFrameMismatch:"Un fotogramma video potrebbe essere leggermente sfasato",clipAudioFailed:"Una clip si sente senza audio",textOverflow:"Un testo esce dal suo riquadro",subtitlesInvalid:"Non riesco a leggere i sottotitoli: il video si vede senza"},errorClip:e=>`${e.text} (${e.clip})`,playPreview:e=>`Riproduci l’anteprima dal vivo di ${e.label}`,stopPreview:e=>`Ferma l’anteprima dal vivo di ${e.label}`,queued:"In coda",queuedAhead:e=>e.count===1?"In coda · 1 render prima":`In coda · ${e.count} render prima`,rendering:e=>`Render ${e.pct}%`,rendered:"Renderizzato",failedState:"Render non riuscito",retryRender:"Riprova",retryRenderOf:e=>`Riprova il render di ${e.label}`,problemState:e=>e.count===1?"Problema nel render":`${e.count} problemi nel render`,problemTitle:"Il render ha dei problemi",problemOpen:e=>`Mostra i problemi del render di ${e.label}`,problemHint:"La piattaforma potrebbe rifiutare questo file. Rifai il render, o modifica la composizione.",renderAgain:"Rifai il render",renderAgainOf:e=>`Rifai il render di ${e.label}`,render:"Render",renderVersion:e=>`Render v${e.n}`,started:e=>e.count===1?"Render di 1 formato":`Render di ${e.count} formati`,startFailed:e=>`Il render non è partito: ${e.detail}`,startedPartly:e=>`${e.count===1?"Render di 1 formato":`Render di ${e.count} formati`}; non partiti: ${e.list} (${e.detail})`,storyboard:"Storyboard",scene:e=>`Scena ${e.n}`,sceneAt:e=>`${e.name}, a ${e.time}`,storyboardLoading:"Preparo lo storyboard…",wholeVideo:"Tutto il video",scenesLoading:"Carico le scene…",scenesUnavailable:"Non riesco a leggere le scene di questa versione",framesProgress:e=>`${e.format} · ${e.done} / ${e.total} fotogrammi`,mediaProgress:e=>`${e.format} · preparo i media ${e.done}/${e.total}`,finishing:e=>`${e.format} · ultimo passaggio`,starting:"Avvio…",cancel:"Annulla",cancelRender:e=>`Annulla ${e.label}`,cancelFailed:e=>`Impossibile annullare: ${e.detail}`,rendersFirst:"Prima il render",engineLabel:"Motore di render",engineElectron:"Integrato (Electron)",engineSystem:e=>`Google Chrome ${e.version}`,engineSystemPlain:"Google Chrome",engineCft:e=>`Chrome for Testing ${e.version}`,engineInjected:"Integrato",engineNone:"Non disponibile",engineNoneHint:"Anteprime dal vivo, storyboard e render richiedono Chrome: installa Google Chrome, oppure scarica Chrome for Testing.",downloadOffer:"Scarica Chrome for Testing (circa 100 MB)",consentTitle:"Scaricare Chrome for Testing?",consentBody:e=>`Chrome for Testing ${e.version} (${e.size}) viene scaricato da Google nella cartella dei dati di Motion Studio e usato solo per anteprime e render. Non si scarica nulla finché non accetti.`,consentAgree:e=>`Scarica ${e.size}`,consentChecking:"Controllo la dimensione del download…",consentFailed:e=>`Impossibile leggere il download: ${e.detail}`,downloading:e=>`Scaricati ${e.done} di ${e.total}`,downloaded:"Chrome for Testing è installato",downloadFailed:e=>`Il download non è riuscito: ${e.detail}`,sizeMb:e=>`${e.n} MB`,engineLoadFailed:e=>`Impossibile leggere il motore di render: ${e.detail}`,pinFrame:e=>`Fotogramma inviato con il commento ${e.n}`},ui:{pickColor:"Scegli un colore",loading:"Caricamento",typing:"Sta scrivendo",progress:"Avanzamento",timeLeft:e=>`${e.time} rimanenti`,version:e=>`Versione ${e.n}`,chosenVersion:e=>`Versione scelta ${e.n}`,emptyTitle:"Niente da mostrare",noPreview:"Anteprima non disponibile"}},explain:{complex:"Esegue un comando shell complesso",more:e=>e.count===1?"e un altro passaggio":`e altri ${e.count} passaggi`,runs:e=>`Esegue ${e.cmd}`,tool:e=>`Usa ${e.tool}`,edit:e=>`Modifica ${e.path}`,read:e=>`Legge ${e.path}`,webFetch:e=>`Apre ${e.host}`,webSearch:"Cerca sul web",cd:e=>`Passa alla cartella ${e.path}`,list:e=>`Elenca i file in ${e.paths}`,show:e=>`Mostra ${e.paths}`,headFile:e=>`Mostra l’inizio di ${e.paths}`,headPipe:"Tiene le prime righe dell’output",tailFile:e=>`Mostra la fine di ${e.paths}`,tailPipe:"Tiene le ultime righe dell’output",fileType:e=>`Controlla il tipo di file di ${e.paths}`,count:e=>`Conta le righe di ${e.paths}`,countPipe:"Conta le righe dell’output",readFiles:e=>`Legge ${e.paths}`,filter:e=>`Elabora il testo di ${e.paths}`,filterPipe:"Elabora il testo dell’output",search:e=>`Cerca del testo in ${e.paths}`,searchPipe:"Filtra le righe dell’output",json:e=>`Legge il JSON in ${e.paths}`,jsonPipe:"Legge il JSON dall’output",jsonCheck:e=>`Controlla il file JSON ${e.path}`,editText:e=>`Modifica il testo di ${e.paths}`,mkdir:e=>e.n>1?`Crea le cartelle: ${e.paths}`:`Crea la cartella ${e.paths}`,copy:e=>`Copia ${e.sources} in ${e.dest}`,move:e=>`Sposta ${e.sources} in ${e.dest}`,delete:e=>`Elimina ${e.paths}`,touch:e=>`Crea o aggiorna ${e.paths}`,chmod:e=>`Cambia i permessi di ${e.paths}`,link:e=>`Crea il collegamento ${e.link} a ${e.target}`,find:e=>`Cerca file in ${e.paths}`,findDelete:e=>`Elimina i file trovati in ${e.paths}`,findExec:e=>`Esegue ${e.cmd} sui file trovati in ${e.paths}`,size:e=>`Misura la dimensione di ${e.paths}`,archiveCreate:e=>`Crea l’archivio ${e.archive}`,archiveExtract:e=>`Estrae ${e.archive} in ${e.dest}`,archiveList:e=>`Elenca il contenuto di ${e.archive}`,mediaConvert:e=>`Converte ${e.inputs} in ${e.outputs}`,mediaProcess:e=>`Elabora ${e.inputs} con ffmpeg`,mediaInfo:e=>`Legge le informazioni multimediali di ${e.paths}`,filterFiles:"Applica un grafo di filtri che legge o scrive file",imageConvert:e=>`Converte ${e.inputs} in ${e.outputs}`,imageEdit:e=>e.n>1?`Modifica le immagini: ${e.paths}`:`Modifica l’immagine ${e.paths}`,imageInfo:e=>e.n>1?`Legge le informazioni delle immagini: ${e.paths}`:`Legge le informazioni dell’immagine ${e.paths}`,imageOptimize:e=>e.n>1?`Ottimizza le immagini: ${e.paths}`:`Ottimizza l’immagine ${e.paths}`,pythonScript:e=>`Esegue lo script Python ${e.script}`,pythonInline:"Esegue un frammento di codice Python",pythonModule:e=>`Esegue il modulo Python ${e.module}`,venv:e=>`Crea un ambiente Python in ${e.path}`,pipInstall:e=>`Installa i pacchetti Python: ${e.packages}`,pipInstallReq:e=>`Installa i pacchetti Python elencati in ${e.file}`,pipInfo:"Elenca i pacchetti Python installati",pkgRemove:e=>`Rimuove i pacchetti: ${e.packages}`,pkgInfo:e=>`Mostra informazioni sui pacchetti con ${e.tool}`,pkgOther:e=>`Esegue ${e.tool} ${e.sub}`,nodeScript:e=>`Esegue lo script Node ${e.script}`,nodeInline:"Esegue un frammento di codice JavaScript",inlineCode:e=>`Esegue un frammento di codice ${e.lang}`,npmInstall:e=>`Installa i pacchetti Node: ${e.packages}`,npmInstallAll:"Installa i pacchetti Node del progetto",npmRun:e=>`Esegue lo script del pacchetto ${e.script}`,npx:e=>`Esegue lo strumento Node ${e.tool} (potrebbe scaricarlo)`,runScript:e=>`Esegue lo script ${e.script}`,runsInput:"Esegue il codice che riceve dal passaggio precedente",download:e=>`Scarica da ${e.host}`,downloadTo:e=>`Scarica da ${e.host} in ${e.path}`,upload:e=>`Invia dati a ${e.host}`,openUrl:e=>`Apre ${e.host} nel browser`,gitClone:e=>`Scarica il repository ${e.url}`,gitStatus:"Mostra lo stato di Git",gitDiff:"Mostra le modifiche in Git",gitLog:"Mostra la cronologia di Git",gitInfo:"Legge informazioni da Git",gitAdd:e=>`Prepara ${e.paths} per un commit Git`,gitCommit:"Salva un commit Git",gitSync:e=>`Si sincronizza con il repository remoto (git ${e.sub})`,gitChange:e=>`Cambia la cronologia o i file di Git (git ${e.sub})`,gitOther:e=>`Esegue git ${e.sub}`,systemInstall:e=>`Installa i pacchetti di sistema: ${e.packages}`,kill:e=>e.n>1?`Arresta i processi: ${e.targets}`:`Arresta il processo ${e.targets}`,sleep:e=>`Attende ${e.seconds} s`,print:"Stampa del testo",writeText:e=>`Scrive del testo in ${e.path}`,writeFile:e=>`Scrive ${e.paths}`,xargs:e=>`Esegue ${e.cmd} su ogni riga dell’input`,open:e=>`Apre ${e.paths}`,which:e=>`Controlla se ${e.cmd} è installato`,pwd:"Mostra la cartella corrente",sysInfo:"Mostra informazioni sul sistema",changesSystem:"Modifica le impostazioni di sistema",printEnv:"Mostra le variabili d’ambiente",noop:"Non fa nulla",setVar:e=>`Imposta la variabile ${e.name}`,shellOption:"Cambia un’opzione della shell",check:"Verifica una condizione",indicators:{deletesFiles:"Elimina file",installsPackages:"Installa pacchetti",usesNetwork:"Usa la rete",killsProcesses:"Arresta processi",writesOutsideProject:"Scrive fuori dal progetto",readsOutsideProject:"Legge fuori dal progetto",runsCode:"Esegue codice",elevated:"Permessi di amministratore",changesGit:"Modifica Git",complex:"Comando complesso",unknownCommand:e=>e.option?`Opzione non riconosciuta ${e.option}`:"Comando sconosciuto",outsideSandbox:"Fuori dalla sandbox"},risk:{low:"Rischio basso",medium:"Rischio medio",high:"Rischio alto"}}},xi=["en","it"];function oo(e){return typeof e=="string"&&xi.includes(e)}const Rn={en:Nn,it:Pn};function On(e){const t=e.trim().toLowerCase().replace(/_/g,"-").split(/[-.@]/)[0]??"";return/^[a-z]{2,3}$/.test(t)?t:null}function Xc(e,t){if(oo(e))return e;for(const i of t){const o=On(i);if(oo(o))return o}return"en"}function Ee(e){return Rn[e]}const we=m().min(1).max(300).refine(e=>!e.startsWith("/")&&!e.includes("\\")&&!e.split("/").some(t=>t===".."||t==="."||t==="")&&!e.includes("\0"),"issue.relativePath"),Ai=m().url().refine(e=>/^https?:\/\//i.test(e),"issue.httpOnly"),ao={png:"image",jpg:"image",jpeg:"image",webp:"image",gif:"image",avif:"image",heic:"image",svg:"svg",mp4:"video",mov:"video",webm:"video",m4v:"video",woff:"font",woff2:"font",ttf:"font",otf:"font",mp3:"audio",wav:"audio",m4a:"audio",aac:"audio",ogg:"audio"};function Zc(e){const t=e.split(".").pop()?.toLowerCase()??"";return Object.hasOwn(ao,t)?ao[t]:"other"}const Mn=y({file:we,kind:z(["image","video","svg","font","audio","other"]),origin:z(["upload","website","generated","stock","google-fonts","codebase"]),sourceUrl:Ai.nullable(),description:m().max(2e3),tags:k(m().min(1).max(40)).max(30),width:v().int().positive().nullable(),height:v().int().positive().nullable(),addedAt:Z(),attribution:m().max(500).nullable().default(null),provider:m().min(1).max(60).optional(),model:m().min(1).max(100).optional(),durationSec:v().nonnegative().nullable().optional(),bytes:v().int().nonnegative().optional(),loop:B().optional(),referenceFor:k(m().min(1).max(200)).max(500).optional()}),Zo=e=>new Set(e.map(t=>t.file)).size===e.length;y({schemaVersion:E(1),assets:k(Mn).default([])}).refine(e=>Zo(e.assets),{message:"issue.duplicateFiles",path:["assets"]});const Jc=e=>e.referenceFor!==void 0,En=y({file:we,note:m().max(2e3),useForBrand:B(),addedAt:Z()});y({schemaVersion:E(1),references:k(En).default([])}).refine(e=>Zo(e.references),{message:"issue.duplicateFiles",path:["references"]});const qn="motion-studio-video-analysis/1",Jo=z(["whisper-small","whisper-large-v3-turbo","openai","elevenlabs","none-skipped","none-no-speech"]);y({format:E(qn),asset:m().regex(/^assets\//),sha256:m().regex(/^[0-9a-f]{64}$/),bytes:v().int().min(0),durationSec:v().min(0),width:v().int().min(0),height:v().int().min(0),fps:v().min(0).nullable(),hasAudio:B(),transcript:Jo,language:m().max(32).nullable(),generator:m().max(200),createdAt:m().max(64),edited:B()}).strict();y({from:v().min(0),to:v().min(0),text:m().min(1).max(2e3)}).strict().refine(e=>e.to>=e.from,{message:"to must not be before from"});y({from:v().min(0),to:v().min(0),text:m().min(1).max(200)}).strict().refine(e=>e.to>=e.from,{message:"to must not be before from"});const Dn=m().regex(/^#[0-9a-fA-F]{6}$/),Un=y({from:v().min(0),to:v(),onScreen:m().min(1).max(1e3),onScreenText:k(m().max(300)).max(20).optional(),frame:m().max(64).optional()}).strict(),_n=y({from:v().min(0),to:v(),why:m().min(1).max(300)}).strict(),Bn=y({colours:k(Dn).max(12),typography:m().max(300),framing:m().max(300),audio:m().max(300)}).strict();y({summary:m().min(1).max(2e3).optional(),timeline:k(Un).max(200).optional(),usableMoments:k(_n).max(30).optional(),look:Bn.optional(),tags:k(m().min(1).max(40)).max(30).optional()}).strict().refine(e=>Object.keys(e).length>0,{message:"write at least one field"});const Wn=z(["whisper.cpp","openai-whisper","faster-whisper"]),ea=z(["small","large-v3-turbo"]),ta=z(["ask","whisper","openai","elevenlabs","never"]),no=m().min(2).max(4096).refine(e=>/^(\/|[A-Za-z]:[\\/])/.test(e)&&!e.includes("\0"),{message:"must be an absolute path"}),ia=y({program:no,engine:Wn,modelFile:no.optional()}).strict(),jn=y({method:ta.default("ask"),model:ea.default("small"),custom:ia.nullable().default(null)}).strict();y({method:ta.optional(),model:ea.optional(),custom:ia.nullable().optional()}).strict();y({file:m().min(1).max(1024),choice:z(["whisper","openai","elevenlabs","none"]),remember:B(),sizeBytes:v().int().positive().optional()}).strict();y({schemaVersion:E(1),workspacePath:m().min(1).nullable().default(null),language:z(["system",...xi]).default("system"),transcription:jn.optional()});const so="issue.domain",Vn=["localhost","local","internal","home.arpa"],Gn=new Set(["co.uk","org.uk","com.au","co.jp","com.br","co.nz"]),Hn=/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/,oa=m().trim().toLowerCase().max(253,so).refine(e=>{const t=e.startsWith("*."),i=t?e.slice(2):e,o=i.split(".");return!(o.length<2||!o.every(a=>Hn.test(a))||!/^[a-z]{2,}$/.test(o.at(-1))||Vn.some(a=>i===a||i.endsWith(`.${a}`))||t&&Gn.has(i))},so),Kn=y({schemaVersion:E(1),maxConcurrentJobs:v().int().min(1).max(8).default(2),expertMode:B().default(!1),theme:z(["system","light","dark"]).default("system"),model:m().min(1).nullable().default(null),sandboxMode:z(["auto","off"]).default("auto"),extraAllowedDomains:k(oa).max(100).default([]),confirmPaidProviders:B().default(!0),autoApproveSandboxed:B().default(!0),exportNamePattern:m().min(1).max(200).default("{title}-{format}-v{v}"),agentLiveInput:B().default(!0),agentInterrupt:B().default(!0),agentLiveDefaults:E(804).optional(),singleAgent:B().optional()}),Qn=e=>e!==null&&typeof e=="object"&&!Array.isArray(e)&&e.agentLiveDefaults===void 0?{...e,agentLiveInput:!0,agentInterrupt:!0,agentLiveDefaults:804}:e;Fn(Qn,Kn.extend({extraAllowedDomains:k(pi()).max(100).default([])}).transform(({extraAllowedDomains:e,...t})=>{const i=[],o=[];for(const a of e){const n=oa.safeParse(a);n.success?i.includes(n.data)||i.push(n.data):o.push(typeof a=="string"?a:JSON.stringify(a))}return{...t,extraAllowedDomains:i,...o.length?{droppedDomains:o}:{}}}));const Ci=y({path:m().min(1),note:m().optional()}),Yn=Ie([y({asset:we}).strict(),E("initials")]);y({schemaVersion:E(1),name:m().trim().min(1),description:m(),createdAt:Z(),updatedAt:Z(),linkedCodebases:k(Ci),icon:Yn.optional().catch(void 0)});const aa="(@([2-9]|1[0-9]|20))?",Je=new RegExp(`^[a-z0-9][a-z0-9-]*${aa}$`),Xn=`[a-z0-9][a-z0-9-]{0,62}${aa}`,Zn=20;function _e(e){const t=e.lastIndexOf("@");return t===-1?e:e.slice(0,t)}function Pt(e,t){if(!Je.test(t)||!t.includes("@"))return e.find(o=>o.id===t);const i=e.find(o=>o.id===_e(t));return i?{...i,id:t}:void 0}function na(e){const t=e.lastIndexOf("@");if(t===-1)return 1;const i=Number(e.slice(t+1));return Number.isInteger(i)&&i>=2?i:1}const sa=(e,t)=>t<=1?e:`${e}@${t}`;function Jn(e,t){const i=new Set(t);for(let o=1;o<=Zn;o++){const a=sa(e,o);if(!i.has(a))return a}return null}function es(e,t,i){const o=i?.[e];if(o!==void 0&&o!=="")return o;const a=na(e);return a>1?`${t} #${a}`:t}const ra=/^[a-z0-9][a-z0-9-]{0,62}$/,ts=5e3,is=y({id:m().regex(ra),channel:m().min(1),name:m().min(1),width:v().int().min(16).max(8192),height:v().int().min(16).max(8192),kind:z(["video","image"]),extensions:k(m().regex(/^[a-z0-9]{2,5}$/)).min(1),maxDurationSec:v().positive().optional(),safeZone:y({top:v().min(0),bottom:v().min(0),left:v().min(0),right:v().min(0)}).optional(),maxFileMB:v().positive().optional(),targetBitrateKbps:v().positive().optional(),identity:z(["logo","favicon","app-icon"]).optional(),hidden:E(!0).optional(),createdAt:Z().optional()});y({schemaVersion:E(1),presets:k(is).min(1),seenDefaults:k(m().min(1).max(200)).max(1e3).optional(),deletedCustom:k(m().regex(ra)).max(ts).optional()}).refine(e=>new Set(e.presets.map(t=>t.id)).size===e.presets.length,{message:"issue.duplicatePresetIds",path:["presets"]});function os(e,t){const i=o=>Ee(o).formats;return Object.hasOwn(i(t),e.id)&&xi.some(o=>i(o)[e.id]===e.name)?i(t)[e.id]:e.name}function la(e,t){const i=e.replace(/^./,a=>a.toLowerCase()).replace(/\s+(\w)/g,(a,n)=>n.toUpperCase()),o=Ee(t).channels;return Object.hasOwn(o,i)?o[i]:e}const as=(e,t)=>`${la(e.channel,t)} · ${os(e,t)}`;function ns(e,t,i,o){const a=Pt(e,t);return a?es(t,as({...a,id:_e(t)},i),o):t}const ss={portrait:[{w:1080,h:1920,kbps:4e3},{w:1080,h:1350,kbps:4e3}],square:[{w:1080,h:1080,kbps:3500}],landscape:[{w:1920,h:1080,kbps:5e3},{w:3840,h:2160,kbps:2e4}]};function rs(e,t,i=30){const o=ss[t>e?"portrait":e>t?"landscape":"square"],a=e*t,n=o.reduce((r,l)=>Math.abs(Math.log(a/(l.w*l.h)))<Math.abs(Math.log(a/(r.w*r.h)))?l:r),s=n.kbps*a/(n.w*n.h)*(i>45?1.5:1);return Math.max(100,Math.round(s/100)*100)}const ls=["mp4","webm","mov","gif"],ds=["png","jpg","jpeg","webp"],ie=(e,t,i,o,a,n={})=>({id:e,channel:t,name:i,width:o,height:a,kind:"video",extensions:ls,targetBitrateKbps:rs(o,a),...n}),Q=(e,t,i,o,a,n={})=>({id:e,channel:t,name:i,width:o,height:a,kind:"image",extensions:ds,...n}),vt={top:220,bottom:420,left:60,right:120},et=[ie("instagram-post-1x1","Instagram","Post 1:1",1080,1080,{maxDurationSec:60}),ie("instagram-post-4x5","Instagram","Post 4:5",1080,1350,{maxDurationSec:60}),ie("instagram-reel-9x16","Instagram","Story/Reel 9:16",1080,1920,{maxDurationSec:90,safeZone:vt}),Q("instagram-image-1x1","Instagram","Image 1:1",1080,1080),Q("instagram-image-4x5","Instagram","Image 4:5",1080,1350),ie("tiktok-9x16","TikTok","Video 9:16",1080,1920,{maxDurationSec:180,safeZone:vt}),ie("youtube-16x9","YouTube","Video 16:9",1920,1080),ie("youtube-4k-16x9","YouTube","Video 4K 16:9",3840,2160),ie("youtube-shorts-9x16","YouTube","Shorts 9:16",1080,1920,{maxDurationSec:60,safeZone:vt}),Q("youtube-thumbnail","YouTube","Thumbnail",1280,720,{maxFileMB:2}),ie("facebook-feed-1x1","Facebook","Feed 1:1",1080,1080),ie("facebook-feed-4x5","Facebook","Feed 4:5",1080,1350),ie("facebook-story-9x16","Facebook","Story 9:16",1080,1920,{maxDurationSec:60,safeZone:vt}),Q("facebook-cover","Facebook","Cover",1640,624),ie("linkedin-1x1","LinkedIn","Post 1:1",1080,1080),ie("linkedin-4x5","LinkedIn","Post 4:5",1080,1350),ie("linkedin-16x9","LinkedIn","Video 16:9",1920,1080),Q("linkedin-banner","LinkedIn","Banner",1584,396),ie("x-16x9","X","Video 16:9",1600,900,{maxFileMB:512}),ie("x-1x1","X","Post 1:1",1080,1080,{maxFileMB:512}),Q("pinterest-2x3","Pinterest","Pin 2:3",1e3,1500),Q("web-hero-16x9","Web","Hero 16:9",1920,1080),Q("web-banner-300x250","Web","Banner 300×250",300,250),Q("web-banner-728x90","Web","Banner 728×90",728,90),Q("web-banner-160x600","Web","Banner 160×600",160,600),Q("og-image-1200x630","Web","Social preview (Open Graph)",1200,630,{extensions:["png","jpg","jpeg"],maxFileMB:5}),Q("identity-logo","Identity","Logo",1024,1024,{extensions:["png"],identity:"logo"}),Q("identity-favicon","Identity","Website favicon",1024,1024,{extensions:["png"],identity:"favicon"}),Q("identity-app-icon","Identity","App icon",1024,1024,{extensions:["png"],identity:"app-icon"}),Q("appstore-iphone-69","App Store",'Screenshot iPhone 6.9"',1320,2868),Q("appstore-iphone-65","App Store",'Screenshot iPhone 6.5"',1284,2778),Q("appstore-ipad-13","App Store",'Screenshot iPad 13"',2064,2752),ie("appstore-preview","App Store","App Preview",886,1920,{maxDurationSec:30,extensions:["mp4","mov"],maxFileMB:500}),Q("appstore-icon","App Store","Icona",1024,1024),Q("playstore-feature","Play Store","Feature graphic",1024,500),Q("playstore-phone-9x16","Play Store","Screenshot telefono 9:16",1080,1920),Q("playstore-tablet","Play Store","Screenshot tablet",1600,2560),Q("playstore-icon","Play Store","Icona",512,512),ie("playstore-promo-16x9","Play Store","Video promo 16:9",1920,1080)],da="custom",cs=60,us=3600,ms=4096,ca=e=>e.trim().toLowerCase()===da,eu=e=>ca(e.channel),tu=e=>ca(e)?da:e,iu=(e,t)=>e.normalize("NFC").trim().toLocaleLowerCase()===t.normalize("NFC").trim().toLocaleLowerCase();y({name:m().trim().min(1).max(cs),kind:z(["video","image"]),width:v().int().min(16).max(8192),height:v().int().min(16).max(8192),maxDurationSec:v().int().min(1).max(us).optional()}).strict().superRefine((e,t)=>{if(e.kind==="video")for(const i of["width","height"])e[i]>ms?t.addIssue({code:"custom",path:[i],message:"issue.customVideoMax"}):e[i]%2!==0&&t.addIssue({code:"custom",path:[i],message:"issue.customVideoEven"})});function ps(e,t,i){return ua(e,t,i??null,i!==void 0)}function ua(e,t,i,o){if(e.kind!==t.kind)return{ok:!1,reason:"kind"};if(e.identity!==void 0||t.identity!==void 0)return{ok:!1,reason:"kind"};if(e.width!==t.width||e.height!==t.height)return{ok:!1,reason:"size"};if(!e.extensions.every(s=>t.extensions.includes(s)))return{ok:!1,reason:"extension"};if(o&&t.kind==="video"&&t.maxDurationSec!==void 0&&(i===null||i>t.maxDurationSec))return{ok:!1,reason:"duration"};const a=e.safeZone??{top:0,bottom:0,left:0,right:0},n=t.safeZone;return n&&(n.top>a.top||n.bottom>a.bottom||n.left>a.left||n.right>a.right)?{ok:!1,reason:"safeZone"}:{ok:!0}}function fs(e,t){const i={},o=[];for(const a of e){if(o.some(s=>s.id===a.id)||Object.hasOwn(i,a.id))continue;const n=o.find(s=>_e(s.id)!==_e(a.id)&&ua(s,a,null,t!==void 0).ok);n?i[a.id]=n.id:o.push(a)}return i}function ou(e,t,i){const o=t.filter(d=>!e.formats.includes(d));if(o.length===0)return e.links;const a=pt(e.links,e.formats),s=[...e.formats.filter(d=>t.includes(d)&&!Object.hasOwn(a,d)),...o].map(d=>Pt(i,d)).filter(d=>d!==void 0),r=fs(s,void 0),l={...e.links};for(const d of o)delete l[d],Object.hasOwn(r,d)&&(l[d]=r[d]);return l}const hs=e=>e!==void 0&&e.compositions===void 0&&e.outputs.length>0;function au(e,t){if(!hs(e))return"normal";const i=pt(t.links,t.formats),o=t.formats.filter(a=>!zi(e,a));return o.length>0&&o.every(a=>Object.hasOwn(i,a))?"followers":"convert"}function pt(e,t){const i=n=>t===void 0||t.includes(n),o=Object.entries(e??{}).filter(([n,s])=>n!==s&&i(n)&&i(s)),a=new Set(o.map(([n])=>n));return Object.fromEntries(o.filter(([,n])=>!a.has(n)))}const ft=e=>[...e].sort((t,i)=>t.n-i.n);function ut(e,t){if(!e)return null;const i=e.compositions?.find(a=>a.format===t);if(i)return{kind:"composition",hash:i.hash,followsFormat:i.followsFormat};const o=e.outputs.find(a=>a.format===t);return o?{kind:"file",sha256:o.sha256}:null}function Ti(e,t){return e.kind==="composition"&&t.kind==="composition"?e.hash===t.hash:e.kind==="file"&&t.kind==="file"?e.sha256!==void 0&&e.sha256===t.sha256:!1}function zi(e,t){return ut(e,t)!==null}function gs(e,t){const i=[];let o=null;for(const a of ft(e)){const n=ut(a,t);if(!n){o=null;continue}(o===null||!Ti(o,n))&&i.push(a.n),o=n}return i}function vs(e,t){const i=[];let o=null;for(const a of ft(e)){const n=ut(a,t);if(!n){o=null;continue}o===null||!Ti(o,n)?i.push({n:a.n,last:a.n}):i.at(-1).last=a.n,o=n}return i}function bs(e,t,i){const o=vs(e,t).find(r=>r.n===i)?.last??i,a=r=>(r.compositions?.find(l=>l.format===t)?.problems??r.outputs.find(l=>l.format===t)?.problems)!==void 0,n=ft(e).filter(r=>r.n>i&&r.n<=o&&a(r)).at(-1),s=e.find(r=>r.n===i);return s?ws(n??s,t)||ys(s,t).length>0:!1}function ma(e,t,i){const o=e.compositions?.find(n=>n.format===t),a=e.outputs.find(n=>n.format===t);return o?!a||a.sha256===void 0?"none":a.fromComposition!==o.hash?"stale":$s(a.subtitles,i)?"rendered":"stale":a?"rendered":"none"}function $s(e,t){if(!e||!t)return!0;const i=a=>Object.hasOwn(t,a)?t[a]:void 0;if(e.hash!==null)return e.lang!==null&&i(e.lang)===e.hash;if(e.lang!==null)return i(e.lang)===void 0;const o=new Set(e.seen??[]);return Object.keys(t).every(a=>o.has(a))}function nu(e){return Object.fromEntries((e??[]).map(t=>[t.lang,t.cuesHash??t.hash]))}function ys(e,t){return!e.compositions?.some(i=>i.format===t)||ma(e,t)!=="rendered"?[]:e.outputs.find(i=>i.format===t)?.problems??[]}function ws(e,t){const i=e.compositions?.find(o=>o.format===t)?.problems??e.outputs.find(o=>o.format===t)?.problems;return i!==void 0?i.length>0:e.problems.length>0}function su(e,t,i,o){const a=pt(o),n=Object.hasOwn(a,t)?a[t]:null;if(n!==null)return{version:null,manual:!1,newer:null,follows:n};const s=gs(e,t),r=s.at(-1)??null,l=i&&Object.hasOwn(i,t)?i[t]:void 0;return l!==void 0&&e.some(c=>c.n===l&&zi(c,t))?{version:l,manual:!0,newer:r!==null&&r>l?r:null,follows:null}:{version:[...s].reverse().find(c=>!bs(e,t,c))??r,manual:!1,newer:null,follows:null}}function ru(e,t,i,o){if(i===null)return null;for(const a of ft(e).reverse())if(ks(e,t,a.n,i,o))return a.n;return null}function ks(e,t,i,o,a){const n=pt(a);if(!Object.hasOwn(n,t))return!1;const s=n[t],r=c=>e.find(u=>u.n===c),l=ut(r(o),s),d=ut(r(i),t);return!l||!d||d.kind==="composition"&&d.followsFormat!==s?!1:Ti(l,d)}function Ss(e,t){for(const i of ft(e).reverse()){if(!zi(i,t))continue;const o=i.outputs.find(a=>a.format===t);return!o||ma(i,t)!=="rendered"?void 0:typeof o.durationSec=="number"&&Number.isFinite(o.durationSec)&&o.durationSec>0?o.durationSec:void 0}}function lu(e,t,i,o,a){if(o===a)return{ok:!1,reason:"self"};const n=e.formats.includes(o)?Pt(i,o):void 0,s=e.formats.includes(a)?Pt(i,a):void 0;if(!n||!s)return{ok:!1,reason:"unknown"};const r=pt(e.links,e.formats);return Object.hasOwn(r,a)||Object.entries(r).some(([l,d])=>d===o&&l!==o)?{ok:!1,reason:"chain"}:ps(s,n,Ss(t,a))}const du=["images","voice","music","sfx"],bt={images:["auto","openai","stock","none"],voice:["auto","openai","elevenlabs","none"],music:["auto","elevenlabs","none"],sfx:["auto","elevenlabs","none"]};function cu(e){const t=e.services??{};return{images:t.images??"auto",voice:t.voice??"auto",music:t.music??"auto",sfx:t.sfx??"auto"}}const uu={elevenlabs:["key","account","voices","tts","sfx","music"]},mu={elevenlabs:{account:"user_read",voices:"voices_read",tts:"text_to_speech",sfx:"sound_generation",music:"music_generation"}};function pu(e,t){return t==="pexels"||t==="unsplash"?"search":e==="voice"?"tts":e}function fu(e,t){if(!e)return null;const i=e.capabilities.find(o=>o.capability===t);return i?.status==="missing"?i.permission?{permission:i.permission}:{}:e.capabilities.find(o=>o.capability==="key")?.status==="missing"?{}:null}const hu=["queued","reading","fonts","colors","logos","tone","writing","done"],xs=[".env*","*.pem","*.key","*.p12","*.keystore","*.jks","id_rsa*",".npmrc",".netrc",".pypirc","credentials*","secrets*","*.mobileprovision","google-services.json","GoogleService-Info.plist",".git/**"],As=e=>new RegExp(`^${e.split("*").map(t=>t.replace(/[.+?^${}()|[\]\\]/g,"\\$&")).join("[^/]*")}$`,"i");xs.map(e=>As(e.replace(/\/\*\*$/,"")));const Cs=y({start:z(["brand","scratch"]),name:m().trim().min(1).max(80).optional(),keywords:m().trim().max(300).optional(),colors:z(["brand","free"]).default("brand"),concepts:v().int().min(1).max(5).default(3)}),Ts=y({path:m().min(1).max(200),width:v().int().positive().optional(),height:v().int().positive().optional(),alpha:B().optional(),role:m().max(40)}),zs=y({dir:m().min(1).max(200),files:k(Ts).max(50),warnings:k(m().max(1e3)).max(50)}),gu=66/108,$t=v().int().min(0),Ii=y({input:$t,output:$t,cacheRead:$t,cacheWrite:$t}),ro=y({model:m().min(1),tokens:Ii,costUsd:v().min(0).nullable()}),pa=y({tokens:Ii,costUsd:v().min(0).nullable(),estimated:B().optional()}),fa=z(["creative","brand-analysis","describe","console","localize","video-analysis","transcription","paid"]);fa.options.filter(e=>e!=="transcription"&&e!=="paid");const Is=z(["openai","elevenlabs"]),Fs=z(["images","voice","music","sfx","transcription"]),Ls=z(["tokens","characters","seconds","minutes","images"]),Ns=y({provider:Is,service:Fs,model:m().min(1),units:y({amount:v().min(0),unit:Ls,estimated:E(!0).optional()})});y({at:m(),jobId:m(),kind:fa,creativeSlug:m().nullable(),version:v().int().nullable(),attempt:v().int().nullable(),tokens:Ii,costUsd:v().min(0).nullable(),models:k(ro),durationMs:v().min(0).nullable(),outcome:z(["ok","error","cancelled"]),estimated:B().optional(),sessionId:m().nullable().default(null),cumulativeCostUsd:v().min(0).nullable().default(null),cumulativeModels:k(ro).default([]),paid:Ns.optional()});function vu(e){return e.input+e.output+e.cacheWrite}function bu(e,t){return{input:e.input+t.input,output:e.output+t.output,cacheRead:e.cacheRead+t.cacheRead,cacheWrite:e.cacheWrite+t.cacheWrite}}const Qt=512;function Fi(e){if(typeof e!="string"||e.length>Qt||!e.startsWith("assets/")&&!e.startsWith("layers/"))return!1;let t=0;for(let i=0;i<=e.length;i++){if(i===e.length||e.charCodeAt(i)===47){const a=e.slice(t,i);if(a.trim()===""||a==="."||a==="..")return!1;t=i+1;continue}const o=e.charCodeAt(i);if(o<32||o>=127&&o<=159||o===8232||o===8233||o>=8203&&o<=8207||o>=8234&&o<=8238||o>=8288&&o<=8303||o===65279||o===1564||o===6158)return!1;if(o>=55296&&o<=56319){const a=e.charCodeAt(i+1);if(!(a>=56320&&a<=57343))return!1;i++;continue}if(o>=56320&&o<=57343||o===92||o===58||o===37||o===63||o===35)return!1}return!0}const Ps="motion-studio/composition@1",D={jsonBytes:5*1024*1024,tracks:64,scenes:200,fonts:32,clipsPerTrack:500,clips:2e3,animations:32,keyframes:64,params:32,text:2e3,name:200,id:64,family:80,durationSec:600,problems:100},ke=1e5,Be={coord:ke,size:ke,rotation:3600,fontSize:2e3,trimStart:36e3,volume:2},ha=["left","center","right"],Rs=/^[a-z0-9][a-z0-9-]{0,63}$/,Os=/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Ms=/^[A-Za-z0-9][A-Za-z0-9 _-]{0,79}$/,Es=/^[a-z][a-z0-9(),. -]{0,63}$/,qs=/^[A-Za-z_][A-Za-z0-9_]{0,63}$/,Ds=/^(?!.*(?:^|\/)\.{1,2}(?:\/|$))(?!.*\/\/)(?!.*\/$)(?![\s\S]*[\u0000-\u001f\u007f-\u009f])(?:assets|layers)\/[^\\:%?#]+$/,Rt=m().max(D.id).regex(Rs,"composition.badId").describe("Lowercase letters, digits and hyphens; unique in the composition."),Ce=m().max(9).regex(Os,"composition.badColor").describe("Hex colour: #rgb, #rgba, #rrggbb or #rrggbbaa."),Pe=m().max(Qt).regex(Ds,"composition.badPath").refine(Fi,"composition.badPath").describe('Relative to the composition folder, under assets/ or layers/; no scheme, no "..", no backslash.'),Yt=m().max(D.family).regex(Ms,"composition.badFontFamily").describe("A family declared in fonts[] (no fallbacks or generic families)."),Me=m().max(D.name),Li=m().max(64).regex(Es,"composition.badEase").describe("CSS easing: linear, ease-out, cubic-bezier(...), steps(...)."),Ot=v().min(-ke).max(ke),ze=v().min(0).max(D.durationSec),Ni=Ie([v().int().min(1).max(1e3),z(["normal","bold"])]),ga=U({family:Yt,src:Pe.describe("A font file (.ttf, .otf, .woff, .woff2) under assets/."),weight:Ni.optional(),style:z(["normal","italic"]).optional()}),Us=U({id:Rt,name:Me.optional(),start:ze,duration:v().gt(0).max(D.durationSec)}).describe("A named time range. Scenes are listed in order, contiguous, and cover the whole duration."),va=["fadeIn","fadeOut","slideUp","slideDown","slideLeft","slideRight","popIn","scaleIn","wipe"],ba=["opacity","x","y","scale","rotation","color","blur"],fi=Ie([v().min(-ke).max(ke),Ce]).describe('A number, or a hex colour for prop "color".'),Pi=v().gt(0).max(D.durationSec),_s=U({preset:z(va),start:ze.optional(),duration:Pi,ease:Li.optional()}),Bs=U({prop:z(ba),from:fi,to:fi,start:ze.optional(),duration:Pi,ease:Li.optional()}),Ws=U({prop:z(ba),keyframes:k(U({t:v().min(0).max(1),v:fi,ease:Li.optional()})).min(2).max(D.keyframes),start:ze.optional(),duration:Pi}),js=Ie([_s,Bs,Ws]).describe("Times relative to the clip start. A preset, a from/to tween of one prop, or keyframes (t from 0 to 1, ascending) of one prop."),Xt={x:Ot.optional(),y:Ot.optional(),width:v().min(0).max(ke).optional(),height:v().min(0).max(ke).optional(),rotation:v().min(-3600).max(Be.rotation).optional(),scale:v().min(0).max(100).optional(),opacity:v().min(0).max(1).optional()},$a=U(Xt).describe("Composition pixels; rotation (degrees) and scale apply around the box centre."),Re={id:Rt,name:Me.optional(),scene:Rt.optional().describe("The scene this clip belongs to: moving the scene moves the clip. The clip must lie inside it."),start:ze.describe("Seconds, absolute on the composition timeline."),duration:ze,hidden:B().optional().describe("The editor hides the clip: it is not rendered. Set by the user; leave it as it is."),locked:B().optional().describe("The user locked the clip against direct edits in the editor. Set by the user; leave it as it is.")},tt=k(js).max(D.animations).optional(),lo=U({scale:v().min(0).max(100).optional(),x:Ot.optional(),y:Ot.optional()}),Vs=U({...Re,type:E("text"),props:U({...Xt,text:m().max(D.text),fontFamily:Yt.optional(),fontSize:v().gt(0).max(Be.fontSize).optional(),fontWeight:Ni.optional(),color:Ce.optional(),align:z(ha).optional()}),animations:tt}),Gs=U({...Re,type:E("shape"),props:U({...Xt,fill:Ce.optional(),radius:v().min(0).max(ke).optional()}),animations:tt}),ya=U({...Xt,fit:z(["cover","contain","fill"]).optional(),kenBurns:U({from:lo,to:lo}).optional()}),Hs=U({...Re,type:E("image"),src:Pe,props:ya,animations:tt}),Ks=U({...Re,type:E("svg"),src:Pe,props:ya,animations:tt}),Qs=U({...Re,type:E("video"),src:Pe,trimStart:v().min(0).max(Be.trimStart).optional().describe("Seconds skipped at the start of the source."),sourceFps:v().gt(0).max(240).optional(),volume:v().min(0).max(Be.volume).optional(),props:$a,animations:tt}),Ys=Kt("type",[U({type:E("text"),value:m().max(D.text),label:Me.optional()}),U({type:E("color"),value:Ce,label:Me.optional()}),U({type:E("number"),value:v().min(-1e9).max(1e9),label:Me.optional()}),U({type:E("image"),value:Pe,label:Me.optional()})]),Xs=U({...Re,type:E("html"),src:Pe.describe("An .html file under layers/."),params:re(m().regex(qs,"composition.badParamKey"),Ys).optional().describe("The only values the editor exposes for a free layer; the layer reads them from window.msParams."),props:$a,animations:tt}),Zs=U({...Re,type:E("audio"),src:Pe,trimStart:v().min(0).max(Be.trimStart).optional(),volume:v().min(0).max(Be.volume).optional(),fadeIn:ze.optional(),fadeOut:ze.optional(),role:z(["voice","music","sfx"]).optional().describe("Lets the mixer duck music under voice."),script:m().max(5e3).optional().describe('The spoken text of a voice clip (role "voice" only); used to translate the voice.')}).refine(e=>e.script===void 0||e.role==="voice",{message:"composition.scriptNeedsVoice",path:["script"]}),Js=["bottom","middle","top"],er=["none","fade","pop","slideUp"],tr=U({...Re,type:E("subtitles"),template:Pe.optional().describe("An .html file under layers/ that draws the line instead of the built-in look; it reads the subtitle set from window.msSubtitles and the line at a time from window.msActiveCue(ms)."),props:U({fontFamily:Yt.optional(),fontSize:v().gt(0).max(Be.fontSize),fontWeight:Ni.optional(),color:Ce,lineHeight:v().min(.8).max(3).optional().describe("A multiple of the font size."),align:z(ha).optional(),position:z(Js),margin:v().min(0).max(ke).describe("Pixels from the edge of the safe zone."),maxWidth:v().min(.2).max(1).describe("A fraction of the frame width."),background:Ce.optional().describe("A box behind the line."),boxPadding:v().min(0).max(200).optional(),boxRadius:v().min(0).max(200).optional(),outlineColor:Ce.optional(),outlineWidth:v().min(0).max(20).optional(),shadow:B().optional(),entrance:z(er).optional(),entranceSec:v().min(0).max(1).optional(),highlight:U({color:Ce}).optional().describe("Colours the word being spoken.")})}).describe("Draws the active subtitle line of the creative's subtitle set; one per composition, on the one subtitles track, from 0 to the end; the text is not here."),ir=Kt("type",[Vs,Gs,Hs,Ks,Qs,Xs,Zs,tr]),or=U({id:Rt,kind:z(["visual","video","text","audio","subtitles"]),name:Me.optional(),muted:B().optional(),hidden:B().optional(),locked:B().optional(),clips:k(ir).max(D.clipsPerTrack)}),wa=U({$schema:E(Ps),width:v().int().min(16).max(8192),height:v().int().min(16).max(8192),fps:E([24,25,30,50,60]),duration:ze.describe("Seconds. 0 for a still (image formats): one frame at t = 0."),background:Ce,fonts:k(ga).max(D.fonts),fontFallbacks:k(Yt).max(3).optional().describe("Declared families tried after a text clip's own family, before the generic fallback (per character). Set by localization for scripts the font lacks; leave it as it is."),scenes:k(Us).max(D.scenes),tracks:k(or).max(D.tracks).describe("Stacking order: the first track is at the bottom. Audio tracks do not render. At most one subtitles track, holding one subtitles clip.")}),Ct=e=>!!e.locked||e.kind==="subtitles";function $u(e){return e.tracks.some(t=>t.kind==="subtitles"&&!t.hidden&&t.clips.some(i=>i.type==="subtitles"&&!i.hidden))}const G=(e,t,i)=>({tag:e,name:t,script:i,rtl:!1}),Ri=[G("en","English","latin"),G("it","Italian","latin"),G("fr","French","latin"),G("de","German","latin"),G("es","Spanish","latin"),G("pt","Portuguese","latin"),G("nl","Dutch","latin"),G("sv","Swedish","latin"),G("da","Danish","latin"),G("nb","Norwegian","latin"),G("fi","Finnish","latin"),G("pl","Polish","latin"),G("cs","Czech","latin"),G("hu","Hungarian","latin"),G("ro","Romanian","latin"),G("ca","Catalan","latin"),G("el","Greek","greek"),G("ru","Russian","cyrillic"),G("uk","Ukrainian","cyrillic"),G("tr","Turkish","latin"),G("id","Indonesian","latin"),G("vi","Vietnamese","latin"),G("zh-Hans","Chinese (Simplified)","han-sc"),G("zh-Hant","Chinese (Traditional)","han-tc"),G("ja","Japanese","jp"),G("ko","Korean","kr"),G("hi","Hindi","devanagari"),G("th","Thai","thai")],yu=["ar","he","fa","ur"],ar=new Set(Ri.map(e=>e.tag)),wu=e=>typeof e=="string"&&ar.has(e),nr="motion-studio/localization@1",$e=z(Ri.map(e=>e.tag)),ii=m().max(D.id).regex(/^[a-z0-9][a-z0-9-]*$/),hi=m().max(Qt).refine(e=>e.startsWith("assets/")&&Fi(e),"issue.badAssetPath"),yt=m().max(D.text);y({$schema:E(nr),locale:$e,instanceId:m().regex(Je),texts:re(ii,y({source:yt,text:yt}).strict()),params:re(m().regex(/^[a-z0-9-]+\.[A-Za-z0-9_-]+$/),y({source:yt,text:yt}).strict()),voices:re(ii,y({src:hi,sourceScript:m().max(5e3),script:m().max(5e3)}).strict()),fit:re(ii,v().min(.7).max(1)),fonts:k(y({family:m().regex(/^[A-Za-z0-9][A-Za-z0-9 _-]{0,79}$/),files:k(hi).min(1).max(8)}).strict()).max(3)}).strict();const sr=["appstore","playstore"],ka=["iphone-69","ipad-13"],Sa=["phone","tablet","feature"],co={appstore:{min:1,max:10},playstore:{min:2,max:8}},ku=20,Mt={appstore:{"iphone-69":"appstore-iphone-69","ipad-13":"appstore-ipad-13"},playstore:{phone:"playstore-phone-9x16",tablet:"playstore-tablet",feature:"playstore-feature"}},xa={appstore:"appstore-preview",playstore:"playstore-promo-16x9"};function Aa(e){const t=_e(e);return Object.values(Mt).some(i=>Object.values(i).includes(t))||Object.values(xa).includes(t)}const rr=2e3,lr=60;function dr(e,t){const i=t.replace(/\s+/g," ").trim();return i?cr(`${e} · ${i}`):String(e)}function cr(e,t=lr){if(e.length<=t)return e;let i="";for(const o of e){if(i.length+o.length+1>t)break;i+=o}return`${i.trimEnd()}…`}const ur=y({app:y({name:m().trim().min(1).max(60),tagline:m().trim().max(120)}).strict(),stores:k(z(sr)).min(1).max(2).refine(e=>new Set(e).size===e.length,"issue.duplicateStores"),devices:y({appstore:k(z(ka)).max(2).optional(),playstore:k(z(Sa)).max(3).optional()}).strict(),screenshots:k(y({caption:m().trim().max(rr),screen:hi.nullable()}).strict()).min(1).max(10),preview:B(),instances:k(m().regex(Je)).max(80).optional()}).strict().superRefine((e,t)=>{const i=(r,l)=>t.addIssue({code:"custom",message:r,path:l}),o=r=>e.stores.includes(r);o("appstore")&&!e.devices.appstore?.includes("iphone-69")&&i("issue.storePackIphone",["devices","appstore"]),o("playstore")&&!e.devices.playstore?.includes("phone")&&i("issue.storePackPhone",["devices","playstore"]);const a=e.screenshots.length,n=Math.max(...e.stores.map(r=>co[r].min)),s=Math.min(...e.stores.map(r=>co[r].max));(a<n||a>s)&&i("issue.storePackScreenshots",["screenshots"])});function Oi(e,t=et){const i=l=>{const d=t.find(c=>c.id===l);return d?`${d.width}x${d.height}`:l},o=[],a={},n={},s=new Map,r=l=>{if(!e.preview)return;const d=xa[l];o.push(d)};for(const l of e.stores){const d=e.devices[l]??[],c=l==="appstore"?ka:Sa;for(const u of c.filter(p=>d.includes(p))){const p=Mt[l][u];if(u==="feature"){o.push(p);continue}const h=i(p),b=s.get(h),g=[];e.screenshots.forEach((S,L)=>{const A=sa(p,L+1);o.push(A),g.push(A),a[A]=dr(L+1,S.caption),b?.[L]&&(n[A]=b[L])}),b||s.set(h,g)}r(l)}return{formats:o,formatLabels:a,links:n}}function mr(e,t=et){const i=Oi(e,t).formats;return e.instances&&e.instances.length===i.length?[...e.instances]:i}function pr(e,t=et){const i=Oi(e,t).formats;return new Map(mr(e,t).map((o,a)=>[o,i[a]]))}function Su(e,t=et){if(!e.storePack)return[];const i=pr(e.storePack,t);return e.formats.filter(o=>i.has(o)&&Aa(i.get(o)))}function xu(e,t,i,o=et){const a=Oi(e,o),n=[...i],s=[],r=[],l=new Map;for(const u of a.formats){let p=t.get(u);if(p===void 0){if(p=n.includes(u)?Jn(_e(u),n)??void 0:u,p===void 0)return{full:_e(u)};n.push(p),r.push(p)}l.set(u,p),s.push(p)}const d={};for(const[u,p]of Object.entries(a.formatLabels))d[l.get(u)]=p;const c={};for(const[u,p]of Object.entries(a.links))c[l.get(u)]=l.get(p);return{instances:s,added:r,formatLabels:d,links:c}}const fr=["standard","high","max"],Au="high",Cu=[480,720,1080,1440,2160],hr=[24,25,30,50,60],uo=e=>Math.max(2,Math.round(e/2)*2);function Tu(e,t){const i=Math.min(e.width,e.height);if(t===void 0||t===i)return{width:e.width,height:e.height};const o=t/i;return e.width<=e.height?{width:t,height:uo(e.height*o)}:{width:uo(e.width*o),height:t}}function zu(e,t){return e?.kind==="video"&&!e.identity&&!Aa(t)}const Ca=y({quality:z(fr),width:v().int().positive(),height:v().int().positive(),encoder:z(["libx264","h264_videotoolbox"]).nullable(),fps:E(hr).optional()}),Ta=/^[a-z]{1,3}$/,Iu=e=>{let t=Math.floor(e)+1,i="";for(;t>0;){const o=(t-1)%26;i=String.fromCharCode(97+o)+i,t=Math.floor((t-1)/26)}return i},mo=e=>{if(!Ta.test(e))return-1;let t=0;for(const i of e)t=t*26+(i.charCodeAt(0)-96);return t-1},Fu=(e,t)=>mo(e)-mo(t),za=m().regex(/^[a-z0-9][a-z0-9-]{0,79}$/),gr=m().regex(/^[a-z0-9][a-z0-9-]{0,79}~(?!a$)[a-z]{1,3}$/),Et=Ie([za,gr]),Ze=m().regex(Ta),vr=y({slug:Et,letter:Ze,direction:m().nullable(),directionSource:z(["agent","user"]).nullable(),status:z(["active","discarded"]),createdAt:Z()}),br=y({slug:Et,version:v().int().min(1)}),$r=y({members:k(vr).min(1),picks:re(m().min(1),br),layout:z(["variant","format"]),chat:E("single").optional(),chatMerge:y({sha256:m().regex(/^[0-9a-f]{64}$/),size:v().int().min(0),copies:k(y({slug:Et,file:m().regex(/^conversation\.premerge(?:-[0-9a-z]+)?\.jsonl$/),letter:Ze,own:B()})),retire:k(Et)}).optional()}).superRefine((e,t)=>{const i=a=>t.addIssue({code:"custom",message:a});e.members[0]?.letter!=="a"&&i("variant.hostNotFirst"),new Set(e.members.map(a=>a.letter)).size!==e.members.length&&i("variant.duplicateLetter"),new Set(e.members.map(a=>a.slug)).size!==e.members.length&&i("variant.duplicateSlug"),e.members.some(a=>a.status==="active")||i("variant.noActiveMember");const o=new Set(e.members.map(a=>a.slug));for(const[a,n]of Object.entries(e.picks))o.has(n.slug)||t.addIssue({code:"custom",message:"variant.unknownPick",path:["picks",a]})}),Lu=e=>e.includes("~"),Nu=e=>{const t=e.indexOf("~");return t<0?e:e.slice(0,t)},Pu=e=>{const t=e.indexOf("~");return t<0?"a":e.slice(t+1)},yr=e=>e.members.filter(t=>t.status==="active"),Ru=(e,t,i)=>{const o=e.members.find(a=>a.letter===t);return o?i?{ok:!1,reason:"running"}:o.status==="active"&&yr(e).length===1?{ok:!1,reason:"last-active"}:{ok:!0}:{ok:!1,reason:"unknown"}},wr={un:1,una:1,uno:1,a:1,an:1,one:1,due:2,two:2,tre:3,three:3,quattro:4,four:4,cinque:5,five:5,sei:6,six:6,sette:7,seven:7,otto:8,eight:8,nove:9,nine:9,dieci:10,ten:10};`${Object.keys(wr).join("|")}`;const kr=z(["draft","working","ready","incomplete","error","interrupted"]),Tt=1e5,Ia=e=>({goal:m().trim().min(1),message:m(),formats:e,formatLabels:re(m(),m().min(1).max(60)).optional(),durationSec:v().int().min(1).max(600).nullable(),assets:k(m()),notes:m(),links:re(m().min(1),m().min(1)).optional(),services:y({images:z(bt.images),voice:z(bt.voice),music:z(bt.music),sfx:z(bt.sfx)}).partial().optional(),locales:y({primary:$e,extra:k($e).max(10)}).refine(t=>new Set(t.extra).size===t.extra.length&&!t.extra.includes(t.primary),"issue.badLocales").optional(),storePack:ur.optional(),identity:Cs.optional()}),Fa=e=>Object.keys(e.formatLabels??{}).every(t=>e.formats.includes(t)),La={message:"issue.labelNotInFormats",path:["formatLabels"]},Sr=y({...Ia(k(m().min(1)).min(1).transform(e=>[...new Set(e)])),agentFormatLabels:re(m(),m()).optional()}).refine(Fa,La);y(Ia(k(m().regex(Je)).min(1).refine(e=>new Set(e).size===e.length,"issue.duplicateFormats"))).refine(Fa,La);y({schemaVersion:E(1),title:m().trim().min(1),brief:Sr,status:kr,error:m().nullable(),createdAt:Z(),updatedAt:Z(),resumeFrom:y({version:v().int().min(1),sessionId:m().min(1)}).nullable(),linkedCodebases:k(Ci).default([]),exportPicks:re(m().min(1),v().int().min(1)).optional(),freedInstances:re(m().min(1),v().int().min(0)).optional(),queued:k(Ln(()=>Rr)).optional(),stoppedSession:y({sessionId:m().min(1),at:Z(),jobId:m().min(1)}).optional(),variantGroup:$r.optional(),variantOf:za.optional(),variantNext:v().int().min(1).optional(),archivedAt:Z().optional(),subtitlesDrawn:B().optional()});const me=/^[0-9a-f]{64}$/,Mi=/^[^/\\]+$/,xr=new RegExp(`^compositions/${Xn}$`),Ar=y({key:m(),params:re(m(),Ie([m(),v()]))}),Cr=y({code:z(["tooLarge","durationOffTarget","durationOverMax","badResolution","notReadable","badExtension"]),params:re(m(),Ie([m(),v()]))}),Ei=y({lang:$e.nullable(),hash:m().regex(me).nullable(),seen:k($e).max(64).optional()}).strict().refine(e=>e.hash===null||e.lang!==null,"a drawn set has a language").refine(e=>e.seen===void 0||e.lang===null,"only a marker with no language lists the sets it saw"),Tr=y({format:m(),file:m(),width:v(),height:v(),durationSec:v().nullable(),verified:B(),preview:m().nullable(),warnings:k(Ar).optional(),sha256:m().regex(me).optional(),problems:k(m()).optional(),issues:k(Cr).optional(),fromComposition:m().regex(me).optional(),identitySet:zs.optional(),render:Ca.optional(),subtitles:Ei.optional()}),Na=y({format:m().min(1),dir:m().regex(xr),hash:m().regex(me),followsFormat:m().min(1).optional(),problems:k(m()).optional(),userDuration:y({durationSec:v().positive(),briefDurationSec:v().positive()}).optional()}),zr=["textOverflow","textOverflowMeasured","notTranslated","stale","voiceTooLong","voiceFailed","voiceDurationUnknown","voiceFileInvalid","assetChanged","fallbackFontUnavailable","renderCheckFailed","invalid","sourceTextOverflow"],Ir=y({code:z(zr),clipId:m().max(200).optional(),message:m().max(1e3)}),Fr=y({n:v().int().min(1),commit:m().nullable(),sessionId:m().nullable(),status:z(["complete","incomplete"]),createdAt:Z(),request:m(),outputs:k(Tr),problems:k(m()),tools:k(m()),renderCommand:m().nullable(),basedOn:v().int().nullable(),usage:pa.optional(),compositions:k(Na).optional(),origin:z(["agent","editor"]).optional(),localizations:k(y({locale:$e,instanceId:m().regex(Je),hash:m().regex(me),origin:z(["agent","editor"]),stale:k(m()),voice:z(["translated","original","muted"]),problems:k(m()).optional(),issues:k(Ir).max(400).optional(),voiceFallback:z(["off","noKey","missingPermission","declined","failed"]).optional(),noScript:k(m().max(200)).max(200).optional(),assetHashes:re(m().max(1024),m().regex(me)).optional(),render:y({file:m().regex(Mi).refine(e=>e!=="."&&e!=="..","issue.fileName"),width:v().int().positive(),height:v().int().positive(),durationSec:v().positive().nullable(),sha256:m().regex(me),fromComposition:m().regex(me),overlayHash:m().regex(me),forced:B(),stale:k(m()),problems:k(m()).optional(),renderedAt:Z(),subtitles:Ei.optional()}).optional()})).optional()});y({schemaVersion:E(1),versions:k(Fr).default([])});const Lr=y({schemaVersion:E(1),files:k(y({format:m().min(1),file:m().regex(Mi).refine(e=>e!=="."&&e!=="..","issue.fileName"),width:v().int().positive(),height:v().int().positive(),durationSec:v().positive().nullish(),followsFormat:m().min(1).optional()})),tools:k(m()).default([]),renderCommand:m().nullish()}),Nr=y({schemaVersion:E(2),compositions:k(Na),renders:k(y({format:m().min(1),file:m().regex(Mi).refine(e=>e!=="."&&e!=="..","issue.fileName"),width:v().int().positive(),height:v().int().positive(),durationSec:v().positive().nullable(),sha256:m().regex(me),renderedAt:Z(),fromComposition:m().regex(me).optional(),render:Ca.optional(),locale:$e.optional(),forced:B().optional(),stale:k(m()).optional(),subtitles:Ei.optional()}))});Kt("schemaVersion",[Lr,Nr]);function Ou(e,t){return t!=null&&e>0&&Math.abs(e-t)>Math.max(1,t*.1)}const Pa=/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/,Mu=e=>e.replace(new RegExp(Pa.source,"g")," ").slice(0,200),oi=e=>m().max(e).refine(t=>!Pa.test(t),{message:"control characters are not allowed"}),Pr=y({format:m().min(1),x:v().min(0).max(1),y:v().min(0).max(1),timeSec:v().min(0).nullable(),note:m().optional(),clipId:oi(64).optional(),clipName:oi(200).optional(),range:y({start:v().min(0),end:v()}).refine(e=>e.start<e.end).optional(),animation:z(["in","out"]).optional(),element:y({path:m().max(120).regex(/^(?:\d{1,6}(?:\/\d{1,6})*)?$/),name:oi(200)}).optional(),variant:Ze.optional()}),Rr=y({clientId:m().min(1).max(100),text:m().max(1e4),pins:k(Pr).max(50).default([]),at:Z(),pinsVersion:v().int().min(1).optional(),bootId:m().min(1).max(100).optional(),fanout:y({id:m().min(1).max(100),lead:Ze}).optional(),variants:k(Ze).max(1e3).optional(),attachments:k(m().min(1).max(1024)).max(20).optional()});function Eu(e,t){return e.filter(i=>!i.group&&(i.variant??"a")===t)}function qu(e){return e.type==="version"?{n:e.n,status:e.status,kept:!1}:e.type==="system"&&typeof e.keptVersion=="number"?{n:e.keptVersion,status:null,kept:!0}:null}function Du(e,t){if(e.key==="outputs.largeFile"){const o=Number(e.params.sizeMB),a=Number(e.params.mbps),n=Number(e.params.targetMbps);return[o,a,n].every(Number.isFinite)?Ee(t).outputs.largeFile({sizeMB:o,mbps:a,targetMbps:n,channel:la(String(e.params.channel??""),t)}):e.key}const i=o=>ns(et,String(o??""),t);return e.key==="outputs.keptUnchanged"?Ee(t).outputs.keptUnchanged({format:i(e.params.format)}):e.key==="outputs.followerReplaced"?Ee(t).outputs.followerReplaced({format:i(e.params.format),primary:i(e.params.primary)}):e.key}Object.values(Mt).flatMap(e=>Object.values(e)).filter(e=>e!==Mt.playstore.feature);const Or=48;function*Mr(e){for(const t of e.tracks)yield*t.clips}const Er=e=>e.type==="audio"&&e.role==="voice";function Uu(e){const t=[],i=[],o=[];for(const a of Mr(e))if(a.type==="text"){const n=a.props.fontSize??Or;t.push({clipId:a.id,...a.name!==void 0?{name:a.name}:{},...a.scene!==void 0?{scene:a.scene}:{},text:a.props.text,box:{w:a.props.width??e.width,h:a.props.height??Math.round(n*1.2)},size:n})}else if(a.type==="html")for(const[n,s]of Object.entries(a.params??{}))s.type==="text"&&i.push({key:`${a.id}.${n}`,...s.label!==void 0?{label:s.label}:{},text:s.value});else Er(a)&&o.push({clipId:a.id,script:a.script??null,duration:a.duration});return{texts:t,params:i,voices:o}}const qr=/^creative:[a-z0-9][a-z0-9-]{0,79}(?:~(?!a\/)[a-z]{1,3})?\/v[1-9]\d{0,5}$/,We=m().regex(/^[a-z0-9][a-z0-9-]{0,62}$/,"issue.id"),Zt=y({kind:z(["manual","website","image","codebase"]),ref:m().nullable()}).superRefine((e,t)=>{e.kind==="manual"&&e.ref!==null&&!qr.test(e.ref)&&t.addIssue({code:ae.custom,message:"issue.manualRef",path:["ref"]}),e.kind==="website"&&(e.ref===null?t.addIssue({code:ae.custom,message:"issue.websiteRefRequired",path:["ref"]}):Ai.safeParse(e.ref).success||t.addIssue({code:ae.custom,message:"issue.websiteRefInvalid",path:["ref"]})),e.kind==="image"&&(e.ref===null?t.addIssue({code:ae.custom,message:"issue.imageRefRequired",path:["ref"]}):we.safeParse(e.ref).success||t.addIssue({code:ae.custom,message:"issue.imageRefInvalid",path:["ref"]})),e.kind==="codebase"&&(e.ref===null?t.addIssue({code:ae.custom,message:"issue.codebaseRefRequired",path:["ref"]}):we.safeParse(e.ref).success||t.addIssue({code:ae.custom,message:"issue.codebaseRefInvalid",path:["ref"]}))}),wt="issue.weights",Dr=y({id:We,name:m().trim().min(1,"issue.nameRequired").max(60,"issue.nameTooLong"),hex:m().regex(/^#[0-9a-fA-F]{6}$/,"issue.hex").transform(e=>e.toUpperCase()),role:z(["primary","secondary","accent","background","text","other"],{message:"issue.role"}),source:Zt}),Ur=y({id:We,family:m().trim().min(1,"issue.familyRequired").max(80,"issue.familyTooLong"),role:z(["heading","body","accent","other"],{message:"issue.role"}),weights:k(v({message:wt}).int(wt).min(100,wt).max(900,wt)).max(9,"issue.maxWeights"),file:we.nullable(),source:Zt}),_r=y({id:We,file:we,variant:z(["primary","secondary","mono","icon","other"],{message:"issue.variant"}),background:z(["light","dark","any"],{message:"issue.background"}),source:Zt}),kt=y({id:We,text:m().trim().min(1,"issue.textRequired").max(2e3,"issue.textTooLong"),source:Zt}),Br=y({genre:m().max(200),energy:z(["low","medium","high"]).nullable(),instruments:k(m().min(1).max(60)).max(20),avoid:k(m().min(1).max(60)).max(20),voice:y({provider:z(["openai","elevenlabs"]),id:m().min(1).max(200),name:m().max(200).optional()}).nullable()}),_u={genre:"",energy:null,instruments:[],avoid:[],voice:null},Qe={colors:40,fonts:20,logos:30,dos:50,donts:50,codebaseSources:5},Ra=e=>new Set(e.map(t=>t.id)).size===e.length;y({schemaVersion:E(1),colors:k(Dr).max(Qe.colors).default([]),fonts:k(Ur).max(Qe.fonts).default([]),logos:k(_r).max(Qe.logos).default([]),tone:kt.nullable().default(null),dos:k(kt).max(Qe.dos).default([]),donts:k(kt).max(Qe.donts).default([]),photoStyle:kt.nullable().default(null),sound:Br.optional()}).refine(e=>[e.colors,e.fonts,e.logos,e.dos,e.donts].every(Ra),{message:"issue.duplicateIds"});function Wr(e){if(e.includes("\0")||e.split(/[\\/]/).includes(".."))return!1;const t=e.startsWith("/")?e.replace(/\/+$/,""):null;if(t!==null)return t!=="";const i=/^[A-Za-z]:[\\/]/.test(e)?e.slice(3).replace(/[\\/]+$/,""):null;return i!==null&&i!==""}const jr=y({id:We,kind:z(["website","image","codebase"]),url:Ai.nullable(),file:we.nullable(),path:m().min(1).max(4096).optional(),note:m().max(500).optional(),addedAt:Z(),lastAnalyzedAt:Z().nullable()}).superRefine((e,t)=>{e.kind==="website"&&(e.url===null&&t.addIssue({code:ae.custom,message:"issue.siteSourceUrl",path:["url"]}),e.file!==null&&t.addIssue({code:ae.custom,message:"issue.siteSourceFile",path:["file"]})),e.kind==="image"&&(e.file===null&&t.addIssue({code:ae.custom,message:"issue.imageSourceFile",path:["file"]}),e.url!==null&&t.addIssue({code:ae.custom,message:"issue.imageSourceUrl",path:["url"]})),e.kind==="codebase"?(e.path===void 0?t.addIssue({code:ae.custom,message:"issue.codebaseSourcePath",path:["path"]}):Wr(e.path)||t.addIssue({code:ae.custom,message:"issue.codebaseSourcePathInvalid",path:["path"]}),e.url!==null&&t.addIssue({code:ae.custom,message:"issue.codebaseSourceUrl",path:["url"]}),e.file!==null&&t.addIssue({code:ae.custom,message:"issue.codebaseSourceFile",path:["file"]})):(e.path!==void 0||e.note!==void 0)&&t.addIssue({code:ae.custom,message:"issue.pathOnlyCodebase",path:["path"]})});y({schemaVersion:E(1),sources:k(jr).default([])}).refine(e=>Ra(e.sources),{message:"issue.duplicateSourceIds",path:["sources"]}).refine(e=>e.sources.filter(t=>t.kind==="codebase").length<=Qe.codebaseSources,{message:"issue.maxCodebaseSources",path:["sources"]});const Vr=z(["colors","fonts","logos","dos","donts","tone","photoStyle"]),Gr=y({id:m().min(1),field:Vr,op:z(["add","update","remove"]),itemId:m().nullable(),before:pi(),after:pi()});y({schemaVersion:E(1),id:We,createdAt:Z(),sourceIds:k(We).max(100),status:z(["open","applied","discarded"]),summary:m().max(5e3),changes:k(Gr).max(500),guidelines:y({current:m().max(2e5),proposed:m().max(2e5)}).nullable(),assetsAdded:k(we).max(1e3),importedFiles:k(we).max(1e3).optional(),usage:pa.optional()});const ai=["openai","elevenlabs","pexels","unsplash"];y({schemaVersion:E(1),allow:k(y({rule:m().min(1).max(500),label:m().max(300),addedAt:Z()})).max(200).default([])});y({provider:z(ai),calls:k(y({label:m().max(300),chars:v().int().min(0)})).min(1),estimate:m().max(100).optional(),items:k(y({variant:Ze,provider:z(ai),capability:z(["images","voice","music","sfx"]),chars:v().int().min(0).optional(),seconds:v().min(0).optional(),estimate:m().max(100).optional()})).min(1).optional(),total:y({variants:v().int().min(1),calls:v().int().min(1),providers:k(y({provider:z(ai),calls:v().int().min(1)})).min(1).max(4).optional(),chars:v().int().min(0).optional(),seconds:v().min(0).optional(),estimate:m().max(100).optional()}).optional()});const pe={questions:4,minOptions:2,options:4,question:4e3,header:200,label:500,description:4e3,other:2e3},Bu={question:600,header:40,label:120,description:300},Hr=y({label:m().min(1).max(pe.label).refine(e=>e.trim()!==""),description:m().max(pe.description).optional().default("")}),Kr=new Set(["__proto__","constructor","prototype"]),Qr=y({question:m().min(1).max(pe.question).refine(e=>e.trim()!==""&&!Kr.has(e.trim())),header:m().max(pe.header).optional().default(""),options:k(Hr).min(pe.minOptions).max(pe.options).refine(e=>new Set(e.map(t=>t.label)).size===e.length),multiSelect:B().optional().default(!1)});y({questions:k(Qr).min(1).max(pe.questions).refine(e=>new Set(e.map(t=>t.question)).size===e.length)});k(y({selected:k(v().int().min(0).max(pe.options-1)).max(pe.options),other:m().max(pe.other).optional()}).strict()).min(1).max(pe.questions);let ni=0;const ue={add(e){ni+=e},reset(){ni=0},get(){return ni}},Yr=50,Xr=1e3,W=()=>({commands:[],parsed:!1,separators:[]});function Oa(e){return e<32?e!==9&&e!==10:e>=127&&e<=159?!0:e===173||e===847||e===1564||e===4447||e===4448||e===6068||e===6069||e===6158||e>=8203&&e<=8207||e>=8232&&e<=8238||e>=8288&&e<=8303||e===12644||e>=65024&&e<=65039||e===65279||e===65440||e>=65529&&e<=65531||e===56128}const qi=e=>e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_",zt=e=>qi(e)||e>="0"&&e<="9",It=e=>{if(e.length===0)return!1;for(let t=0;t<e.length;t++){const i=e[t];if(i<"0"||i>"9")return!1}return!0};function po(e){const t=e.text.indexOf("=");if(t<=0||e.quotedAt!==-1&&e.quotedAt<t||!qi(e.text[0]))return null;for(let i=1;i<t;i++)if(!zt(e.text[i]))return null;return[e.text.slice(0,t),e.text.slice(t+1)]}const Zr=new Set(["sh","bash","zsh","dash","ksh","mksh","fish","csh","tcsh","ash"]),fo=new Set(["eval","source",".","exec","trap","alias","unalias","function","coproc","select","let","if","then","else","elif","fi","for","while","until","do","done","case","esac","in","{","}","[[","]]","!","((","))","su","runuser","watch","parallel","flock","chroot","sandbox-exec","unbuffer","stdbuf","ionice","taskpolicy","dtruss","strace","ltrace","lldb","gdb","expect","at","batch","emacs","vim","vi","nvim","ex","ed"]),Jr=["/bin","/usr/bin","/usr/local/bin","/opt/homebrew/bin","/sbin","/usr/sbin","/opt/local/bin","/usr/local/sbin"];function Di(e){let t="";for(const i of e.split("/"))i===""||i==="."||(t+=`/${i}`);return e.startsWith("/")?t||"/":t.slice(1)}function Ma(e){if(!e.includes("/"))return e;const t=Di(e),i=t.lastIndexOf("/");return Jr.includes(t.slice(0,i))?t.slice(i+1):null}const Ea=e=>(Ma(e)??e).toLowerCase();function Ui(e){const t=e[0];if(t===void 0)return!1;const i=Ea(t);if(fo.has(i)||fo.has(t))return!0;const o=i.slice(i.lastIndexOf("/")+1);if(!Zr.has(o))return!1;for(let a=1;a<e.length;a++){const n=e[a];if(n==="--")return!1;if(n.startsWith("--")){if(n==="--command"||n.startsWith("--command=")||n==="--init-file"||n==="--rcfile")return!0;continue}if(n.startsWith("-")||n.startsWith("+")){if(n.includes("c")||n.includes("O")||n.includes("o"))return!0;continue}return!1}return!1}const ho=new Set(["-u","-g","-C","-p","-h","-r","-t","-U","-D","-R","-T","--user","--group","--prompt","--host","--role","--type","--other-user","--chdir","--chroot","--close-from","--command-timeout"]);function qa(e,t){const i={},o=[];let a=0;const n=()=>{for(;a<e.length;a++){const d=po(e[a]);if(!d)break;i[d[0]]=d[1]}},s=d=>e[d]?.text;for(n();;){const d=s(a);if(d===void 0)break;const c=Ea(d);if(c==="time"){for(o.push("time"),a++;a<e.length;a++){const u=s(a);if(u==="--"){a++;break}if(!u.startsWith("-")||u==="-")break;if(![...u.slice(1)].every(p=>"plha".includes(p)))return null}n()}else if(c==="nohup"||c==="builtin"||c==="noglob"||c==="nocorrect"||c==="busybox")o.push(c),a++;else if(c==="command"){const u=s(a+1);if(u==="-v"||u==="-V")break;for(o.push(c),a++;s(a)==="-p"||s(a)==="--";)a++}else if(c==="sudo"||c==="doas"){for(o.push(c),a++;a<e.length;a++){const u=s(a);if(u==="--"){a++;break}if(!u.startsWith("-")||u==="-")break;if(c==="doas"){if(u==="-u"){a++;continue}if(u==="-n")continue;return null}if(u==="-s"||u==="-i"||u==="-e"||u==="--shell"||u==="--login"||u==="--edit"||u==="-l"||u==="--list"||u==="-v"||u==="--validate")return null;if(ho.has(u)){a++;continue}if(u.startsWith("--"))continue;const p=`-${u[u.length-1]}`;u.length>2&&ho.has(p)&&a++;for(const h of u.slice(1))if(h==="s"||h==="i"||h==="e"||h==="l"||h==="v")return null}if(n(),a>=e.length)return null}else if(c==="env"){for(o.push("env"),a++;a<e.length;a++){const u=s(a);if(u==="--"){a++;break}if(!(u==="-i"||u==="-"||u==="--ignore-environment"||u==="-0"||u==="--null"||u==="-v")){if(u==="-u"||u==="--unset"){a++;continue}if(!u.startsWith("--unset=")){if(u.startsWith("-"))return null;break}}}n()}else if(c==="nice")for(o.push("nice"),a++;a<e.length;a++){const u=s(a);if(u==="-n"||u==="--adjustment"){a++;continue}if(!(u.startsWith("--adjustment=")||u.startsWith("-")&&u.length>1&&It(u.slice(u[1]==="-"?2:1)))){if(u.startsWith("-"))return null;break}}else if(c==="timeout"||c==="gtimeout"){for(o.push("timeout"),a++;a<e.length;a++){const u=s(a);if(u==="-s"||u==="-k"||u==="--signal"||u==="--kill-after"){a++;continue}if(!(u==="--preserve-status"||u==="--foreground"||u==="-v"||u==="--verbose"||u.startsWith("--signal=")||u.startsWith("--kill-after="))){if(u.startsWith("-"))return null;break}}if(a++,a>=e.length)return null}else if(c==="caffeinate"||c==="arch"||c==="xcrun"||c==="script"){let u=a+1;const p={caffeinate:["-t","-w"],arch:["-arch","-d","-e"],xcrun:["-sdk","--sdk","--toolchain"],script:["-t","-T"]},h={caffeinate:["-d","-i","-m","-s","-u","-di","-dims","-dimsu","-is","-im","-ims"],arch:["-x86_64","-x86_64h","-arm64","-arm64e","-i386","-32","-64","-c","-h"],xcrun:["-l","--log","-v","--verbose","-n","--no-cache","-k","--kill-cache","-r","--run"],script:["-a","-d","-e","-F","-k","-p","-q","-r","-aq","-qa","-q","-qF"]};let b=!1;for(;u<e.length;u++){const g=s(u);if(!g.startsWith("-"))break;if(p[c].includes(g)){if(c==="arch"&&g==="-e"){const S=e[u+1]&&po(e[u+1]);S&&(i[S[0]]=S[1])}u++;continue}if(!h[c].includes(g)){if(c==="xcrun"&&(g==="-f"||g==="--find"||g.startsWith("--show"))){b=!0;break}return null}}if(b||u>=e.length)break;if(c==="script"&&(s(u)!=="/dev/null"||(u++,u>=e.length)))return null;o.push(c),a=u}else break}const r=e[a];r&&r.text.length>1&&r.text.startsWith("=")&&r.quotedAt===-1&&(e[a]={text:r.text.slice(1),quotedAt:-1});const l=e.slice(a).map(d=>d.text);return Ui(l)?null:{argv:l,env:i,redirects:t,wrappers:o}}function Da(e){for(let t=1;t<e.length;t++){if(e[t]!=="[")continue;const i=e[t-1];if(!(i>="a"&&i<="z"||i>="A"&&i<="Z"||i>="0"&&i<="9"||i==="_"))continue;let o=0,a=t;for(;a<e.length;a++){const n=e[a];if(n==="[")o++;else if(n==="]"){if(o--,o===0)break}else if(n==="`"||n==="$"&&e[a+1]==="(")return!0}t=a}return!1}function Ua(e){return e.some(Da)?null:qa(e.map(t=>({text:t,quotedAt:-1})),[])}function el(e){let t=0;try{return i()}finally{ue.add(t)}function i(){const o=e,a=o.length;t+=a;for(let N=0;N<a;N++)if(Oa(o.charCodeAt(N)))return W();const n=[],s=[];let r=[],l=[],d="",c=!1,u=-1,p=null,h=!1,b=0;const g=()=>{u===-1&&(u=d.length),c=!0},S=()=>{if(!c)return!0;if(Da(d))return!1;const N={text:d,quotedAt:u};if(d="",c=!1,u=-1,p!==null){const x=p;return p=null,x==="dup>"||x==="dup<"?N.text==="-"||It(N.text)||N.text.endsWith("-")&&It(N.text.slice(0,-1))?!0:x==="dup<"?!1:(l.push({op:"&>",target:N.text}),!0):(l.push({op:x,target:N.text}),!0)}return r.push(N),++b<=Xr},L=N=>{if(!S()||p!==null)return!1;if(r.length===0&&l.length===0)return N===null?!h:N===`
14
14
  `;const x=qa(r,l);return!x||(n.push(x),r=[],l=[],n.length>Yr)?!1:(N!==null&&s.push(N),h=N==="&&"||N==="||"||N==="|",!0)},A=(N,x)=>p!==null||x!==null&&N==="&>"?!1:(x==="2"&&(N===">"||N===">>")&&(N="2>"),p=N,!0);let $=0,I=!1,w=!1;const X=N=>{let x=N+1;const V=x;if(x<a&&qi(o[x]))for(x++;x<a&&zt(o[x]);)x++;else for(;x<a&&o[x]>="0"&&o[x]<="9";)x++;if(x===V)return-1;if(o[x]==="["&&(o[x+1]==="@"||o[x+1]==="*")&&o[x+2]==="]"&&o[x+3]==="}")return t+=x+4-N,x+4;if(o[x]===":"&&x++,o[x]==="-"||o[x]==="="||o[x]==="+"||o[x]==="?")for(x++;x<a;){const ot=o[x];if(!(zt(ot)||ot==="."||ot==="/"||ot==="~"||ot==="-"))break;x++}else if(o[x-1]===":")return-1;return t+=x-N,o[x]!=="}"||o[x+1]==="["?-1:x+1},j=N=>{let x=N+1;if(o[x]==="[")return!0;for(;x<a&&zt(o[x]);)x++;return t+=x-N,x>N+1&&o[x]==="["};for(;$<a;){t++;const N=o[$];if(I){N==="'"?I=!1:d+=N,$++;continue}if(w){if(N==='"'){w=!1,$++;continue}if(N==="\\"){const x=o[$+1];if(x===void 0)return W();if(x===`
15
15
  `){$+=2;continue}if(x==="$"||x==="`"||x==='"'||x==="\\"){d+=x,$+=2;continue}d+="\\",$++;continue}if(N==="`")return W();if(N==="$"){const x=o[$+1];if(x==="("||j($))return W();if(x==="{"){const V=X($+1);if(V<0)return W();d+=o.slice($,V),$=V;continue}}d+=N,$++;continue}switch(N){case" ":case" ":if(!S())return W();$++;break;case`
16
16
  `:if(!L(`
17
17
  `))return W();$++;break;case"\\":{const x=o[$+1];if(x===void 0)return W();if(x===`
18
- `){$+=2;break}g(),d+=x,$+=2;break}case"'":g(),I=!0,$++;break;case'"':g(),w=!0,$++;break;case"`":return W();case"$":{const x=o[$+1];if(x==="("||x==="'"||x==='"'||j($))return W();if(x==="{"){const V=X($+1);if(V<0)return W();c=!0,d+=o.slice($,V),$=V;break}c=!0,d+=N,$++;break}case"#":if(!c)return W();d+=N,$++;break;case";":if(o[$+1]===";"||o[$+1]==="&"||!L(";"))return W();$++;break;case"&":if(o[$+1]==="&"){if(!L("&&"))return W();$+=2;break}if(o[$+1]===">"){if(!S()||($+=2,o[$]===">"&&$++,!A("&>",null)))return W();break}if(!L("&"))return W();$++;break;case"|":if(o[$+1]==="|"){if(!L("||"))return W();$+=2;break}if(!L("|"))return W();$+=o[$+1]==="&"?2:1;break;case">":case"<":{let x=null;if(c&&u===-1&&It(d))x=d,d="",c=!1;else if(!S())return W();const V=o[$+1];if(N==="<"){if(V==="<"||V==="("||V===">")return W();if(V==="&"){if(!A("dup<",x))return W();$+=2;break}if(!A("<",x))return W();$++;break}if(V==="(")return W();if(V===">"){if(o[$+2]==="&"||o[$+2]==="("||o[$+2]==="|"||!A(">>",x))return W();$+=2;break}if(V==="&"){if(!A("dup>",x))return W();$+=2;break}if(!A(">",x))return W();$+=V==="|"?2:1;break}case"(":case")":return W();default:c=!0,d+=N,$++}}return I||w||!L(null)||n.length===0?W():{commands:n,parsed:!0,separators:s}}}const Xe={low:0,medium:1,high:2},go=["outside-sandbox","elevated","deletes-files","writes-outside-project","runs-code","complex","unknown-command","uses-network","installs-packages","kills-processes","changes-git","reads-outside-project"],St=6,vo=120;class tl{byId=new Map;add(t,i,o){const a=this.byId.get(t);a&&Xe[a.risk]>=Xe[i]||this.byId.set(t,o?{id:t,risk:i,params:o}:{id:t,risk:i})}has(t){return this.byId.has(t)}list(){return[...this.byId.values()].sort((t,i)=>Xe[i.risk]-Xe[t.risk]||go.indexOf(t.id)-go.indexOf(i.id))}}function il(e,t){ue.add(e.length);let i="";for(let o=0;o<e.length;o++){const a=e.charCodeAt(o);i+=a===9||a===10?" ":Oa(a)?"?":e[o]}if(t.length>1){const o=t.endsWith("/")?t.slice(0,-1):t;let a="",n=0;for(;;){const s=i.indexOf(o,n);if(s<0){a+=i.slice(n);break}const r=i[s+o.length],l=r===void 0||!/[\p{L}\p{N}_.\-]/u.test(r);a+=i.slice(n,s)+(l?"~":o),n=s+o.length}i=a}if(i.length>vo){let o=i.slice(0,vo-1);const a=o.charCodeAt(o.length-1);a>=55296&&a<=56319&&(o=o.slice(0,-1)),i=`${o}…`}return i}function bo(e,t){const i={};for(const[o,a]of Object.entries(e))i[o]=typeof a=="string"?il(a,t):a;return i}function ol(e,t,i,o){const n=(e.length>St?e.slice(0,St):e).map(l=>({key:l.key,params:bo(l.params,o)}));e.length>St&&n.push({key:"explain.more",params:{count:e.length-St}});const s=t.list().map(l=>l.params?{...l,params:bo(l.params,o)}:l),r=s.reduce((l,d)=>Xe[d.risk]>Xe[l]?d.risk:l,"low");return{summary:n,indicators:s,risk:r,parsed:i}}const al=4,nl=32,sl=3,rl=4096;function ll(e){return e==="/private/tmp"||e.startsWith("/private/tmp/")||e==="/private/var"||e.startsWith("/private/var/")||e==="/private/etc"||e.startsWith("/private/etc/")?e.slice(8):e}function be(e){ue.add(e.length);const t=[];let i=0;for(let o=0;o<=e.length;o++)if(o===e.length||e[o]==="/"){const a=e.slice(i,o);if(i=o+1,a===""||a===".")continue;if(a===".."){t.pop();continue}t.push(a)}return ll(`/${t.join("/")}`)}const xe=(e,t)=>t==="/"||e===t||e.startsWith(`${t}/`),$o=e=>e.includes("*")||e.includes("?")||e.includes("["),dl=e=>e.length>=2&&e[0]==="."&&(e[1]==="*"||e[1]==="?"||e[1]==="["),yo=new WeakMap;function _a(e){const t=yo.get(e);if(t)return t;const i=cl(e);return yo.set(e,i),i}function cl(e){const t=e.tmpDir?be(e.tmpDir):null;return{project:be(e.projectDir),work:e.workDir?be(e.workDir):null,home:be(e.home),tmpRoots:["/tmp",...t?[t]:[]],tmpDir:t}}function ul(e,t){return t.work&&xe(e,t.work)?"work":xe(e,t.project)?"project":t.tmpRoots.some(i=>xe(e,i))?"tmp":"outside"}function wo(e,t){return e==="/"||e===t.home||xe(t.project,e)||t.tmpRoots.includes(e)}function ml(e){let t=[e];for(let i=0;;i++){const o=[];let a=!1;for(const n of t){let s=0,r=!1;for(;!r;){const l=n.indexOf("{",s);if(l<0){o.push(n);break}let d=-1,c=!1;for(let h=l+1;h<n.length;h++){const b=n[h];if(b==="{")return null;if(b===","&&(c=!0),b==="}"){d=h;break}}if(d<0){o.push(n);break}if(!c){s=d+1;continue}const u=n.slice(0,l),p=n.slice(d+1);for(const h of n.slice(l+1,d).split(","))o.push(u+h+p);a=!0,r=!0}if(o.length>nl)return null}t=o;for(const n of o)ue.add(n.length);if(!a)return t;if(i+1>=al)return t.some(n=>n.includes("{")&&n.includes(","))?null:t}}const si=(e,t)=>{for(const i of[`$${t}`,`\${${t}}`]){if(e===i)return"";if(e.startsWith(`${i}/`))return e.slice(i.length)}return null};function Ba(e,t,i,o){ue.add(e.length+(t?.length??0));const a=[{cls:"unknown",abs:null,raw:e,critical:!0}];if(e==="")return a;let n=e;if(n==="~"||n.startsWith("~/"))n=i.home+n.slice(1);else{if(n.startsWith("~"))return a;{const p=si(n,"HOME"),h=si(n,"TMPDIR"),b=si(n,"PWD");if(p!==null)n=i.home+p;else if(b!==null){if(t===null)return a;n=t+b}else if(h!==null)if(i.tmpDir)n=i.tmpDir+h;else return h.includes("$")||h.split("/").includes("..")?a:[{cls:"tmp",abs:null,raw:e,critical:h===""||h==="/"||$o(h.split("/")[1]??"")}]}}if(n.includes("$"))return a;if(!n.startsWith("/")){if(t===null)return a;n=`${t}/${n}`}if(n.length>rl)return a;const s=n.split("/"),r=[];for(let p=0;p<s.length;p++)if(dl(s[p])){if(o>=sl)return a;const h=[...s.slice(0,p),"..",...s.slice(p+1)].join("/");for(const b of Ba(h,t,i,o+1))r.push({...b,raw:e,critical:!0});break}const l=be(n),d=l.split("/").slice(1),c=d.findIndex($o),u=c>=0?wo(`/${d.slice(0,c).join("/")}`,i):wo(l,i);return[{cls:ul(l,i),abs:l,raw:e,critical:u},...r]}function gi(e,t,i){const o=_a(i),a=ml(e);if(!a)return[{cls:"unknown",abs:null,raw:e,critical:!0}];const n=t===null?null:be(t);return a.flatMap(s=>Ba(s,n,o,0))}function ne(e,t){if(e.abs===null)return e.raw;const i=_a(t),o=e.abs,a=t.opaqueRoot?be(t.opaqueRoot):null;if(xe(o,i.project))return o===i.project?a&&xe(o,a)?e.raw:`${i.project.slice(i.project.lastIndexOf("/")+1)}/`:o.slice(i.project.length+1);if(i.tmpDir&&xe(o,i.tmpDir))return o===i.tmpDir?"$TMPDIR":`$TMPDIR/${o.slice(i.tmpDir.length+1)}`;if(i.home!=="/"&&xe(o,i.home))return o===i.home?"~":`~/${o.slice(i.home.length+1)}`;if(a&&xe(o,a))return e.raw;const n=o.split("/").slice(1);return n.length<=3?o:`/${n[0]}/…/${n[n.length-1]}`}function ht(e){return e==="/dev/null"||e==="/dev/stdout"||e==="/dev/stderr"||e==="/dev/stdin"||e==="/dev/tty"||e==="/dev/zero"||e==="/dev/random"||e==="/dev/urandom"||e!==null&&e.startsWith("/dev/fd/")}const pl=e=>e.lastIndexOf("/")<=0?"/":e.slice(0,e.lastIndexOf("/")),f=(e,t,i={})=>{e.phrases.push({key:`explain.${t}`,params:i})},C=(e,t,i,o)=>{t==="uses-network"&&(e.usedNet=!0),e.ind.add(t,i,o)},oe=(e,t)=>C(e,"unknown-command","medium",{option:t}),ri="$MOTION_STUDIO_INPUT",fl=200,hl=e=>({cls:"unknown",abs:null,raw:e,critical:!0}),gl=e=>!e.startsWith("/")&&!e.startsWith("~")&&!e.startsWith("$");function Y(e,t,i=e.cwd){if(e.found&&e.found.token!==""&&t.includes(e.found.token))return e.found.locs;const o=gi(t,i,e.ctx);if(i===e.cwd&&e.altCwds.length>0&&gl(t))for(const a of e.altCwds)o.push(...gi(t,a,e.ctx));return o}function le(e){const t=[...new Set(e.filter(i=>i!==""))];return t.length===0?"…":t.length>3?`${t.slice(0,3).join(", ")} +${t.length-3}`:t.join(", ")}function Wa(e,t,i=e.cwd){const o=[],a=new Set;for(const n of t)if(o.length<3){const s=Y(e,n,i)[0];if(s){const r=ne(s,e.ctx);o.includes(r)||o.push(r)}}else a.add(n);return o.length===0?{s:"…",n:0}:{s:a.size?`${o.join(", ")} +${a.size}`:o.join(", "),n:o.length+a.size}}const R=(e,t,i=e.cwd)=>Wa(e,t,i).s;function Ne(e,t,i,o,a={}){const n=Wa(e,o);f(e,t,{...a,[i]:n.s,n:n.n})}const ce=e=>e.startsWith("/")||e.startsWith("~")||e.startsWith("$")||e.startsWith(".")||e.includes("/"),Le=e=>{if(ce(e))return!0;const t=e.lastIndexOf("."),i=e.slice(t+1);if(t<=0||i.length<1||i.length>5)return!1;for(const o of i)if(!(o>="a"&&o<="z"||o>="A"&&o<="Z"||o>="0"&&o<="9"))return!1;for(const o of e)if(o===" "||o==="="||o===":"||o===" ")return!1;return!0},vl=e=>{let t=e.length;for(;t>1&&e[t-1]==="/";)t--;return e.slice(0,t)},dt=e=>e.length>0&&[...e].every(t=>t>="0"&&t<="9"),_i=(e,t)=>e.written.some(i=>t===i||t.startsWith(`${i}/`));function ja(e,t,i){if(t===null)return;const o=t.split("/");o.includes(".git")?(e.add("changes-git","medium",{path:i}),e.add("runs-code","medium",{path:i})):(o.includes("bin")||o.includes(".bin"))&&e.add("runs-code","medium",{path:i})}function F(e,t,i=e.cwd){for(const o of t)for(const a of Y(e,o,i))ht(a.abs)||(a.cls==="outside"||a.cls==="unknown")&&C(e,"reads-outside-project","medium",{path:ne(a,e.ctx)})}function M(e,t,i=e.cwd){for(const o of t)for(const a of Y(e,o,i))ht(a.abs)||((a.cls==="outside"||a.cls==="unknown")&&C(e,"writes-outside-project","high",{path:ne(a,e.ctx)}),a.abs!==null&&(e.written.length<fl&&e.written.push(a.abs),ja(e.ind,a.abs,ne(a,e.ctx))))}function qe(e,t,i=e.cwd){if(t.length===0){C(e,"deletes-files","medium");return}for(const o of t)for(const a of Y(e,o,i)){if(ht(a.abs))continue;const n=a.cls==="outside"||a.cls==="unknown"||a.critical;C(e,"deletes-files",n?"high":"medium",{path:ne(a,e.ctx)})}}function bl(e,t){for(const i of t)for(const o of Y(e,i))ht(o.abs)||(o.cls==="outside"||o.cls==="unknown"||o.critical)&&C(e,"deletes-files","high",{path:ne(o,e.ctx)})}function fe(e,t){const i=Y(e,t),o=i.every(n=>n.cls==="work"||n.cls==="project"),a=i.some(n=>n.abs!==null&&_i(e,n.abs));C(e,"runs-code",o&&!e.chainNet&&!a?"low":"medium"),F(e,[t])}function De(e,t){const i=Y(e,t);i.some(o=>o.cls!=="work"&&o.cls!=="project")&&C(e,"runs-code","medium",{path:ne(i[0],e.ctx)}),F(e,[t])}const qt=e=>["/System/Library/Fonts/","/Library/Fonts/","/usr/share/fonts/","/usr/local/share/fonts/","/opt/homebrew/share/fonts/"].some(t=>e.startsWith(t))&&!e.includes("/../");function te(e,t){for(const i of t){const o=i.includes("=")?i.slice(i.indexOf("=")+1):i;ce(o)?M(e,[o]):ce(i)&&!i.startsWith("-")&&M(e,[i])}}const Ve=e=>["/dev/stdin","/dev/fd/0","/proc/self/fd/0"].includes(Di(e))?!0:!e.startsWith("/")||e.length>256?!1:/^\/(?:dev\/stdin|dev\/fd\/0+|proc\/(?:self|thread-self|[0-9]+)\/fd\/0+)$/.test(be(e));function J(e,t){if(e.stdinFile!==null){f(e,t==="python"?"pythonScript":t==="node"?"nodeScript":"runScript",{script:e.stdinFile}),C(e,"runs-code","medium");return}f(e,"runsInput"),C(e,"runs-code",e.pipedIn&&e.pipeNet?"high":"medium")}const $l=["rm_rf","rm_r","FileUtils.rm","File.delete","rmtree","os.remove","unlink","rmdir","remove(","rmSync","rimraf","fs.rm","shutil.move","'rm'",'"rm"',"rm -"],yl=["do shell script","doShellScript","system(","os.system","subprocess","os.popen","os.exec","os.spawn","pty.spawn","child_process","execSync","spawn(","exec(","eval(","__import__","execFile","process.binding","shell_exec","passthru","popen","proc_open","Bun.spawn","Deno.run","Deno.Command"],wl=["`","system ","exec ","%x(","%x{","qx(","qx{","qx/"],kl=["urllib","requests","http.client","httpx","socket","fetch(","http.get","https.get","http.request","https.request","net.connect","ftplib","smtplib","Net::","LWP","curl_","file_get_contents('http","open-uri"];function Te(e,t,i="shellish"){ue.add(t.length*4);const o=yl.some(a=>t.includes(a))||i==="shellish"&&wl.some(a=>t.includes(a));C(e,"runs-code",o?"high":"medium"),$l.some(a=>t.includes(a))&&C(e,"deletes-files","high"),kl.some(a=>t.includes(a))&&C(e,"uses-network","medium")}function q(e,t,i={}){ue.add(t.length);const o=new Set(i.f??[]),a=new Set(i.v??[]),n=[],s=new Map,r=[],l=(u,p)=>{if(p===void 0)return;const h=s.get(u);h?h.push(p):s.set(u,[p])},d=u=>{i.any||oe(e,u)};let c=!1;for(let u=0;u<t.length;u++){const p=t[u];if(c||p==="-"||!p.startsWith("-")||p.includes("$")){r.push(p);continue}if(p==="--"){c=!0;continue}if(p.startsWith("--")){const h=p.indexOf("="),b=h>0?p.slice(0,h):p;n.push(b),!o.has(b)&&!a.has(b)&&d(b),h>0?l(b,p.slice(h+1)):a.has(b)&&l(b,t[++u]);continue}if(a.has(p)){n.push(p),l(p,t[++u]);continue}if(o.has(p)){n.push(p);continue}if(i.num&&dt(p.slice(1))){n.push(p);continue}if(i.long1){n.push(p),d(p);continue}for(let h=1;h<p.length;h++){const b=`-${p[h]}`;if(n.push(b),a.has(b)){const g=p.slice(h+1);l(b,g!==""?g:t[++u]);break}o.has(b)||d(b)}}return{flags:n,values:s,operands:r}}const H=(e,...t)=>t.some(i=>e.flags.includes(i)),O=(e,...t)=>t.flatMap(i=>e.values.get(i)??[]);function ye(e){const t=e.indexOf("://");if(t<=0)return!1;for(let i=0;i<t;i++){const o=e[i];if(!(o>="a"&&o<="z"||o>="A"&&o<="Z"||o>="0"&&o<="9"||o==="+"||o==="-"||o==="."))return!1}return!0}function he(e){let t=e;const i=t.indexOf("://");i>=0&&(t=t.slice(i+3));let o=t.length;for(const s of["/","?","#"]){const r=t.indexOf(s);r>=0&&r<o&&(o=r)}t=t.slice(0,o);const a=t.lastIndexOf("@");if(a>=0&&(t=t.slice(a+1)),t==="")return"…";let n=!0;for(let s=0;s<t.length;s++)if(t.charCodeAt(s)>126){n=!1;break}if(!n)try{return new URL(`http://${t}`).host}catch{return"?"}return t}function Sl(e){if(!ye(e)){const n=e.indexOf("@");return n>=0?e.slice(n+1):e}const t=he(e),i=e.slice(e.indexOf("://")+3),o=i.indexOf("/");let a=o>=0?i.slice(o):"";for(const n of["?","#"]){const s=a.indexOf(n);s>=0&&(a=a.slice(0,s))}return t+a}const vi=new Map,T=(e,t)=>{for(const i of e)vi.set(i,t)};T(["cd","pushd"],(e,t)=>{const o=q(t,e,{f:["-P","-L","-e","-@"]}).operands[0];if(o===void 0){t.cdTarget=[t.ctx.home],f(t,"cd",{path:"~"});return}if(o==="-"){t.cdTarget=[null],f(t,"cd",{path:"-"});return}const a=Y(t,o);f(t,"cd",{path:R(t,[o])}),t.cdTarget=[...new Set(a.map(n=>n.abs!==null&&!n.abs.includes("*")&&!n.abs.includes("?")?n.abs:null))]});T(["popd"],(e,t)=>{t.cdTarget=[null],f(t,"cd",{path:"…"})});T(["ls"],(e,t)=>{const i=q(t,e,{any:!0,v:["-I","--ignore","-w","--width","-T","--tabsize","--format","--sort","--time-style","-D","--hide","--block-size"]}),o=i.operands.length?i.operands:["."];F(t,o),f(t,"list",{paths:R(t,o)})});T(["cat"],(e,t)=>{const o=q(t,e,{any:!0}).operands.filter(a=>a!=="-");F(t,o),o.length?f(t,"show",{paths:R(t,o)}):f(t,"filterPipe")});T(["head","tail"],(e,t,i)=>{const a=q(t,e,{any:!0,num:!0,v:["-n","-c","-b","--lines","--bytes","-s","--sleep-interval","--pid"]}).operands.filter(s=>s!=="-");F(t,a);const n=i==="head"?"head":"tail";a.length?f(t,`${n}File`,{paths:R(t,a)}):f(t,`${n}Pipe`)});T(["file"],(e,t)=>{const i=q(t,e,{f:["-b","-i","-I","-L","-h","-z","-Z","-k","-N","-n","-p","-r","-s","-0","-d","-E","--mime","--mime-type","--mime-encoding","--brief","--dereference","--no-dereference","--keep-going","--extension","--apple"],v:["-m","-M","-F","-P","-e","-f","--magic-file","--separator","--exclude","--files-from","--parameter"]});F(t,[...i.operands,...O(i,"-f","--files-from","-m","-M","--magic-file")]),f(t,"fileType",{paths:R(t,i.operands)})});T(["wc"],(e,t)=>{const i=q(t,e,{any:!0,v:["--files0-from"]});F(t,[...i.operands,...O(i,"--files0-from")]),i.operands.length?f(t,"count",{paths:R(t,i.operands)}):f(t,"countPipe")});T(["mkdir"],(e,t)=>{const i=q(t,e,{f:["-p","-v","--parents","--verbose"],v:["-m","--mode"]});M(t,i.operands),Ne(t,"mkdir","paths",i.operands)});const xl={f:["-r","-R","-f","-i","-n","-p","-v","-a","-L","-H","-P","-X","-c","-l","-s","-x","-u","-T","-b","-d","--recursive","--force","--interactive","--no-clobber","--preserve","--no-preserve","--verbose","--archive","--update","--parents","--no-target-directory","--backup","--dereference","--no-dereference","--sparse","--reflink","--strip-trailing-slashes","--link","--symbolic-link","--one-file-system","--remove-destination","--attributes-only","--copy-contents"],v:["-t","--target-directory","-S","--suffix"]},Al={f:["-f","-i","-n","-v","-h","-u","-T","-b","--force","--interactive","--no-clobber","--verbose","--update","--backup","--strip-trailing-slashes","--no-target-directory","--no-copy"],v:["-t","--target-directory","-S","--suffix"]};T(["cp","mv"],(e,t,i)=>{const o=q(t,e,i==="mv"?Al:xl),a=O(o,"-t","--target-directory"),n=a.length?a:o.operands.slice(-1),s=a.length?o.operands:o.operands.slice(0,-1);i==="mv"?(bl(t,s),M(t,s)):F(t,s),M(t,n),f(t,i==="mv"?"move":"copy",{sources:R(t,s),dest:R(t,n)})});const ko={rm:{f:["-r","-R","-f","-i","-I","-d","-v","-P","-W","-x","--recursive","--force","--verbose","--dir","--interactive","--one-file-system","--no-preserve-root","--preserve-root"]},rmdir:{f:["-p","-v","--parents","--verbose","--ignore-fail-on-non-empty"]},unlink:{f:[]},shred:{f:["-f","-u","-v","-x","-z","--remove","--force","--zero","--exact","--verbose"],v:["-n","--iterations","-s","--size"]},srm:{f:["-r","-R","-f","-i","-v","-s","-m","-z","-n","-d","-x","-D","-E","--recursive","--force","--verbose","--simple","--medium","--zero"]},trash:{f:["-F","-v","-s","-y","-d","-f","-r","-i","-R"]}};T(Object.keys(ko),(e,t,i)=>{const o=q(t,e,ko[i]);qe(t,o.operands),f(t,"delete",{paths:R(t,o.operands)})});T(["touch"],(e,t)=>{const i=q(t,e,{f:["-a","-c","-m","-h","--no-create","--no-dereference"],v:["-t","-d","-r","-A","--date","--reference","--time"]});M(t,i.operands),F(t,O(i,"-r","--reference")),f(t,"touch",{paths:R(t,i.operands)})});const Cl=e=>e.length>1&&[...e].every(t=>"ugoa+-=rwxXst01234567,".includes(t))&&/[rwxXst]/.test(e);T(["chmod"],(e,t)=>{let i=!1;const o=[];for(const s of e){if(!i&&!s.startsWith("--")&&Cl(s)&&!["-R","-v","-f","-h"].includes(s)){i=!0;continue}o.push(s)}const a=q(t,o,{f:["-R","-v","-f","-h","-H","-L","-P","-c","--recursive","--verbose","--changes","--silent","--quiet","--no-preserve-root","--preserve-root"],v:["--reference"]}),n=i||H(a,"--reference")?a.operands:a.operands.slice(1);M(t,n),f(t,"chmod",{paths:R(t,n)})});T(["chown","chgrp","chflags","xattr"],(e,t,i)=>{const o=q(t,e,i==="xattr"?{f:["-l","-r","-s","-v","-x","-c","-d"],v:["-p","-w"]}:{f:["-R","-h","-v","-f","-H","-L","-P","-c","-x","--recursive","--no-dereference","--dereference","--verbose","--changes","--silent","--quiet"],v:["--reference","--from"]}),a=H(o,"--reference")||i==="xattr"?o.operands:o.operands.slice(1);M(t,a),f(t,"runs",{cmd:i}),C(t,"unknown-command","medium")});T(["ln"],(e,t)=>{const i=q(t,e,{f:["-s","-f","-n","-h","-i","-v","-F","-L","-P","-r","-T","-b","--symbolic","--force","--no-dereference","--relative","--verbose","--interactive","--backup","--logical","--physical"],v:["-t","--target-directory","-S","--suffix"]}),o=O(i,"-t","--target-directory"),a=o[0]??(i.operands.length>=2?i.operands[i.operands.length-1]:"."),n=o.length?i.operands:i.operands.length>=2?i.operands.slice(0,-1):i.operands;M(t,[a]);const s=Y(t,a)[0],l=H(i,"-s","--symbolic")?s?.abs?pl(s.abs):null:t.cwd;for(const d of n)for(const c of Y(t,d,l))(c.cls==="outside"||c.cls==="unknown"||c.cls==="tmp")&&C(t,"writes-outside-project","high",{path:ne(c,t.ctx)});f(t,"link",{link:R(t,[a]),target:le(n)})});T(["du"],(e,t)=>{const i=q(t,e,{any:!0,v:["-d","-B","--max-depth","--block-size","-t","--threshold","--exclude","-I","--files0-from"]}),o=i.operands.length?i.operands:["."];F(t,o),f(t,"size",{paths:R(t,o)})});const Tl=["-name","-iname","-path","-ipath","-wholename","-iwholename","-regex","-iregex","-type","-xtype","-maxdepth","-mindepth","-mtime","-mmin","-ctime","-cmin","-atime","-amin","-newer","-anewer","-cnewer","-size","-perm","-user","-group","-links","-inum","-samefile","-regextype","-printf","-uid","-gid","-fstype","-lname","-ilname","-newermt","-newerct","-newerat","-Bmin","-Btime","-used"],zl=["-empty","-print","-print0","-ls","-prune","-quit","-follow","-depth","-true","-false","-not","-and","-or","-a","-o","-nouser","-nogroup","-readable","-writable","-executable","-mount","-xdev","-noleaf","-delete","(",")","!",",","-d"];T(["find","gfind"],(e,t)=>{let i=0;for(;i<e.length&&["-H","-L","-P","-E","-X","-s","-x","-d","-O0","-O1","-O2","-O3"].includes(e[i]);)i++;const o=[];for(;i<e.length;i++){const r=e[i];if(r==="-f"){const l=e[++i];l!==void 0&&o.push(l);continue}if(r.startsWith("-")&&!r.includes("$")||r==="("||r==="!"||r===")")break;o.push(r)}o.length===0&&o.push("."),F(t,o);let a=!1,n=null;const s=[];for(;i<e.length;i++){const r=e[i];if(r==="-delete")a=!0;else if(r==="-fprint"||r==="-fprint0"||r==="-fls")M(t,[e[++i]??""]);else if(r==="-fprintf")M(t,[e[++i]??""]),i++;else if(r==="-exec"||r==="-execdir"||r==="-ok"||r==="-okdir"){const l=[];for(i++;i<e.length&&e[i]!==";"&&e[i]!=="+";i++)l.push(e[i]);if(l.length===0||Ui(l)){t.parsed=!1;return}n??=l[0],s.push(l)}else Tl.includes(r)?i++:zl.includes(r)||oe(t,r)}if(a&&qe(t,o),s.length){const r=new Map;for(const l of o)for(const d of Y(t,l)){const c=`${d.cls}|${d.critical}|${d.abs===null}`,u=r.get(c);u?u.length<3&&u.push(d):r.set(c,[d])}for(const l of r.values())for(const d of s)en(d,t,{token:"{}",locs:l})}n!==null?f(t,"findExec",{cmd:n,paths:R(t,o)}):a?f(t,"findDelete",{paths:R(t,o)}):f(t,"find",{paths:R(t,o)})});const Ft=["--create","--append","--update","--extract","--get","--list","--absolute-names","--file","--directory","--gzip","--gunzip","--bzip2","--xz","--zstd","--lzma","--auto-compress","--verbose","--exclude","--strip-components","--keep-old-files","--no-same-owner","--no-same-permissions","--to-stdout","--totals","--wildcards","--exclude-vcs","--remove-files","--overwrite","--skip-old-files","--preserve-permissions","--same-owner","--numeric-owner","--owner","--group","--mode","--mtime","--sort","--format","--transform","--exclude-from","--files-from","--null","--no-recursion","--one-file-system","--dereference","--hard-dereference","--quiet","--warning"],li=["--to-command","--checkpoint-action","--use-compress-program","--info-script","--new-volume-script","--rsh-command","--rmt-command","-I","-F"];T(["tar","bsdtar","gtar"],(e,t)=>{let i=null,o=null,a=null,n=!1,s=!1;const r=[],l="fCbTX",d="crutxvzjJaZOpPkmowqSlhLnsUB",c=(L,A)=>{A!==void 0&&(L==="f"?o=A:L==="C"?a=A:(L==="T"||L==="X")&&F(t,[A]))},u=(L,A,$)=>{for(let I=0;I<L.length;I++){const w=L[I];if(w==="c"||w==="r"||w==="u"?i="c":w==="x"?i="x":w==="t"?i="t":w==="P"&&(n=!0),w==="I"||w==="F")return t.parsed=!1,A;if(l.includes(w)){const X=L.slice(I+1);if($&&X!=="")return c(w,X),A;c(w,e[++A])}else d.includes(w)||oe(t,`-${w}`)}return A},p=Ft;for(let L=0;L<e.length;L++){const A=e[L];if(L===0&&!A.startsWith("-")){if(L=u(A,L,!1),!t.parsed)return;continue}if(A.startsWith("--")){const $=A.indexOf("="),I=$>0?A.slice(0,$):A,w=$>0?A.slice($+1):void 0;if(["--to-command","--use-compress-program","--checkpoint-action","--info-script","--new-volume-script","--rsh-command","--rmt-command"].includes(I)){t.parsed=!1;return}p.includes(I)||oe(t,I),I==="--create"||I==="--append"||I==="--update"?i="c":I==="--extract"||I==="--get"?i="x":I==="--list"?i="t":I==="--absolute-names"?n=!0:I==="--remove-files"?s=!0:I==="--file"?o=w??e[++L]??null:I==="--directory"?a=w??e[++L]??null:(I==="--files-from"||I==="--exclude-from")&&F(t,[w??e[++L]??""]);continue}if(A.startsWith("-")&&A.length>1&&!A.includes("$")){if(L=u(A.slice(1),L,!0),!t.parsed)return;continue}r.push(A)}const h=o,b=a,g=h!==null&&h!=="-"?[h]:[],S=b!==null?Y(t,b)[0]?.abs??null:t.cwd;if(i==="c")M(t,g),F(t,r,S),s&&qe(t,r,S),f(t,"archiveCreate",{archive:g.length?R(t,g):"…"});else if(i==="x"){F(t,g);const L=b??".";M(t,[L]),n&&C(t,"writes-outside-project","high",{path:"/"}),f(t,"archiveExtract",{archive:g.length?R(t,g):"…",dest:R(t,[L])})}else i==="t"?(F(t,g),f(t,"archiveList",{archive:g.length?R(t,g):"…"})):Jt(e,t,"tar")});T(["unzip"],(e,t)=>{(e.includes("-:")||e.includes("-^"))&&C(t,"writes-outside-project","high",{path:".."});const i=e.indexOf("-x"),o=(i>=0?e.slice(0,i):e).filter(l=>l!=="-:"&&l!=="-^"),a=q(t,o,{f:["-o","-n","-q","-qq","-l","-v","-t","-z","-Z","-p","-c","-j","-a","-aa","-b","-C","-L","-U","-u","-f","-X","-K","-M","-D","-V","-T","-W"],v:["-d","-P"]}),n=a.operands[0],s=n!==void 0?[n]:[];if(F(t,s),H(a,"-l","-v","-t","-z","-Z","-p","-c")){f(t,"archiveList",{archive:R(t,s)});return}const r=O(a,"-d")[0]??".";M(t,[r]),f(t,"archiveExtract",{archive:R(t,s),dest:R(t,[r])})});T(["zip"],(e,t)=>{if(e.some(l=>l==="-TT"||l.startsWith("--unzip-command"))){t.parsed=!1;return}const i=[];let o=!1;for(const l of e){if(l==="-x"||l==="-i"||l==="--exclude"||l==="--include"){o=!0;continue}l.startsWith("-")&&(o=!1),o||i.push(l)}const a=q(t,i,{num:!0,f:["-r","-q","-j","-m","-u","-f","-D","-X","-y","-v","-T","-o","-l","-ll","-0","-R","-FS","-g","-k","-A","-J","-e","--recurse-paths","--quiet","--junk-paths","--move","--update","--freshen","--no-dir-entries","--no-extra","--symlinks","--test","--grow","--filesync"],v:["-b","-n","-t","-tt","-O","--output-file","-P","--password","-Z","-s","-sp","--temp-path"]}),n=a.operands[0],s=n!==void 0?[n]:[],r=a.operands.slice(1);M(t,[...s,...O(a,"-O","--output-file")]),F(t,r),H(a,"-m","--move")&&qe(t,r),f(t,"archiveCreate",{archive:R(t,s)})});const Il=new Set(["-y","-n","-hide_banner","-nostdin","-stdin","-stats","-nostats","-shortest","-an","-vn","-sn","-dn","-re","-benchmark","-benchmark_all","-copyts","-start_at_zero","-accurate_seek","-noaccurate_seek","-report","-dump","-hex","-ignore_unknown","-copy_unknown","-debug_ts","-xerror","-autorotate","-noautorotate","-version","-buildconf","-formats","-codecs","-encoders","-decoders","-filters","-pix_fmts","-sample_fmts","-layouts","-L","-protocols","-muxers","-demuxers","-devices","-bsfs","-hwaccels","-colors","-sources","-sinks","-noautoscale","-nostdin","-h","-help","-copyinkf","-intra","-psnr","-vstats"]),Fl=new Set(["-i","-c","-codec","-vcodec","-acodec","-scodec","-b","-r","-s","-pix_fmt","-crf","-preset","-tune","-profile","-level","-g","-bf","-vf","-af","-filter","-filter_complex","-lavfi","-map","-ss","-t","-to","-f","-frames","-vframes","-aframes","-dframes","-ar","-ac","-ab","-aspect","-movflags","-loglevel","-v","-threads","-fps_mode","-vsync","-metadata","-map_metadata","-map_chapters","-framerate","-loop","-stream_loop","-start_number","-q","-qscale","-x264-params","-x265-params","-x264opts","-tag","-svtav1-params","-aom-params","-dump_attachment","-max_muxing_queue_size","-sample_fmt","-channel_layout","-ch_layout","-minrate","-maxrate","-bufsize","-pattern_type","-itsoffset","-sseof","-fs","-color_primaries","-color_trc","-colorspace","-color_range","-disposition","-safe","-probesize","-analyzeduration","-video_size","-pixel_format","-cq","-qp","-rc","-deadline","-cpu-used","-row-mt","-tile-columns","-lag-in-frames","-auto-alt-ref","-quality","-speed","-compression_level","-pred","-lossless","-sws_flags","-vtag","-atag","-b_strategy","-refs","-keyint_min","-sc_threshold","-apad","-async","-frame_size","-id3v2_version","-write_id3v1","-brand","-timecode","-max_interleave_delta","-avoid_negative_ts","-fflags","-flags","-strict","-thread_queue_size","-filter_threads","-filter_complex_threads","-hwaccel","-hwaccel_output_format","-hwaccel_device","-init_hw_device","-stats_period","-x","-y_pos","-alpha_quality","-pass","-plays","-final_delay","-gifflags","-dpi","-update","-frame_pts","-strftime","-qmin","-qmax","-allowed_extensions","-allow_sw","-realtime","-vbr","-application","-cutoff","-loop_output","-intra_refresh","-bsf","-vbsf","-absf","-af_threads","-bits_per_raw_sample"]),So=new Set(["-filter_complex_script","-filter_script","-attach","-hls_key_info_file","-key_info_file"]),xo=new Set(["-vstats_file","-passlogfile","-progress","-sdp_file","-hls_segment_filename","-segment_list","-master_pl_name","-hls_fmp4_init_filename","-hls_base_url","-dash_segment_filename","-init_seg_name","-media_seg_name","-stats_file","-report_file"]),Ll=new Set(["-v","-loglevel","-print_format","-of","-output_format","-select_streams","-show_entries","-read_intervals","-i","-o","-f","-analyzeduration","-probesize","-show_optional_fields","-threads","-sections"]),Ao=["http","https","tcp","udp","rtmp","rtmps","rtmpt","rtmpe","rtmpte","rtmpts","rtp","srt","ftp","sftp","tls","rtsp","rtsps","mmsh","mmst","gopher","gophers","icecast","smb","srtp","zmq","ipfs","ipns","unix","librist","rist","hls","prompeg","httpproxy","ws","wss"],Nl=["cache","async","crypto"];function se(e,t,i,o=0){if(o>3)return!1;if(t==="-"||t===""||t.startsWith("pipe:"))return!0;const a=t.indexOf(":"),n=t.indexOf("/"),s=a>1&&(n<0||a<n)&&!t.startsWith(".")&&!t.startsWith("~")&&!t.startsWith("$")?t.slice(0,a).toLowerCase():"";if(s.includes(","))return!1;if(s===""||![...s].every(d=>d>="a"&&d<="z"||d>="0"&&d<="9"||d==="+"||d==="-"||d==="."))return i?M(e,[t]):F(e,[t]),!0;const r=t.slice(a+1);if(s==="file")return se(e,r.startsWith("//")?r.slice(2):r,i,o+1);if(s==="data")return!0;if(s==="concat"){const d=r.split("|");return d.some(c=>c==="")?!1:d.every(c=>se(e,c,i,o+1))}const l=s.includes("+")?s.slice(s.lastIndexOf("+")+1):s;return Ao.includes(l)||Ao.includes(s)?(C(e,"uses-network","medium",{host:he(t)}),!0):Nl.includes(s)?se(e,r,i,o+1):!1}function Lt(e,t){const i=[];let o="",a=!1,n=0;for(let s=0;s<e.length;s++){const r=e[s];if(r==="\\"&&s+1<e.length){o+=r+e[s+1],s++;continue}if(r==="'"){a=!a,o+=r;continue}if(!a){if(r==="[")n++;else if(r==="]"&&n>0)n--;else if(n===0&&t.includes(r)){i.push(o),o="";continue}}o+=r}return i.push(o),ue.add(e.length),i}function Va(e){let t="",i=!1;for(let o=0;o<e.length;o++){const a=e[o];if(a==="'"){i=!i;continue}if(a==="\\"&&!i&&o+1<e.length){t+=e[o+1],o++;continue}t+=a}return t.trim()}function Ga(e){if(e.startsWith("/")||e.startsWith("~")||e.startsWith("./")||e.startsWith("../")||e.includes("/../")||e==="..")return!0;if(!e.includes("/")||[...e].some(i=>" ()*+<>,=".includes(i)))return!1;const t=e.lastIndexOf(".");return t>e.lastIndexOf("/")&&e.length-t-1>=1&&e.length-t-1<=5}const Rl={movie:["filename","#0"],amovie:["filename","#0"],subtitles:["filename","f","#0","fontsdir"],ass:["filename","f","#0","fontsdir"],drawtext:["textfile","fontfile"],lut3d:["file","#0"],lut1d:["file","#0"],haldclut:[],sendcmd:["filename","f","#0"],asendcmd:["filename","f","#0"],vidstabtransform:["input"],ocr:["datapath"],select:[],coreimage:[],afir:[],headphone:[],sofalizer:["sofa","#0"],dnn_processing:["model"],whisper:["model","vad_model"]},Pl={psnr:["stats_file","f","#0"],ssim:["stats_file","f","#0"],libvmaf:["log_path"],vmaf:["log_path"],metadata:["file"],ametadata:["file"],signature:["filename"],vidstabdetect:["result"],ebur128:[],identity:["stats_file","f"],msad:["stats_file","f"],corr:["stats_file","f"],whisper:["destination"]},Ol=["zmq","azmq","frei0r","frei0r_src","ladspa","lv2","lensfun"];function Co(e,t){for(const i of Lt(t,";"))for(const o of Lt(i,",")){let a=o.trim();for(;a.startsWith("[");){const p=a.indexOf("]");if(p<0)return!1;a=a.slice(p+1).trim()}const n=a.indexOf("=");let s=(n>=0?a.slice(0,n):a).trim(),r=n>=0?a.slice(n+1):"";const l=r.length?-1:s.indexOf("[");l>=0&&(s=s.slice(0,l));{let p=r.length;for(;p>0&&r[p-1]==="]";){const h=r.lastIndexOf("[",p-1);if(h<0)break;p=h}r=r.slice(0,p)}if(s.includes("@")&&(s=s.slice(0,s.indexOf("@"))),s=s.trim(),Ol.includes(s))return!1;if(r==="")continue;const d=Rl[s]??[],c=Pl[s]??[];let u=0;for(const p of Lt(r,":")){const h=p.indexOf("="),b=h>=0?p.slice(0,h).trim():`#${u++}`,g=Va(h>=0?p.slice(h+1):p);if(g!==""){if(d.includes(b)){if((b==="fontfile"||b==="fontsdir")&&qt(g.endsWith("/")?g:`${g}`))continue;if(!se(e,g,!1))return!1}else if(c.includes(b)){if(!se(e,g,!0))return!1}else if(Ga(g)&&!se(e,g,!0))return!1}}}return!0}const To=["sendcmd","zmq","textfile","metadata","stats_file","psnr","ssim","signature","whisper"],zo=["file=","filename=","movie=","amovie=","destination="];function Io(e){let t="";for(const i of e.toLowerCase())i!=="'"&&i!=="\\"&&i!=='"'&&(t+=i);return ue.add(t.length*(To.length+zo.length)),To.some(i=>t.includes(i))?!0:zo.some(i=>{for(let o=t.indexOf(i);o>=0;o=t.indexOf(i,o+1)){const a=o===0?"":t[o-1];if(!(a>="a"&&a<="z"||a>="0"&&a<="9"||a==="_"))return!0}return!1})}const Ml=["stats","dump-yuv","csv","analysis-save","analysis-reuse-file","recon","pass-stats","output"],El=["analysis-load","qpfile","cqmfile","cqm-file","zonefile","dhdr10-info","master-display-file","scaling-list","lambda-file"];function ql(e,t){for(const i of Lt(t,":")){const o=i.indexOf("=");if(o<0)continue;const a=i.slice(0,o).trim().toLowerCase(),n=Va(i.slice(o+1));if(Ml.includes(a)){if(!se(e,n,!0))return!1}else if(El.includes(a)){if(!se(e,n,!1))return!1}else if(Ga(n)&&!se(e,n,!0))return!1}return!0}function Ha(e,t,i){let o=!1;const a=[],n=[],s=b=>b.startsWith("-show_")&&b!=="-show_entries"&&b!=="-show_optional_fields"||b.startsWith("-count_")||["-hide_banner","-pretty","-unit","-prefix","-byte_binary_prefix","-sexagesimal","-bitexact","-version","-h","-help"].includes(b);let r=null,l=-1,d=!1;const c=(b,g,S)=>S==="lavfi"&&!g?(Io(b)&&(o=!0),Co(e,b)):S==="tee"&&g?b.split("|").every(L=>{const A=L.startsWith("[")?L.slice(L.indexOf("]")+1):L;return se(e,A,!0)}):se(e,b,g);for(let b=0;b<t.length;b++){const g=t[b];if(g.startsWith("-")&&g.length>1&&!g.includes("$")){if(i==="ffmpeg"?Il.has(g):s(g))continue;if(g.startsWith("-/")){o=!0,F(e,[t[++b]??""]),l=b;continue}const S=i==="ffmpeg"&&g.includes(":")?g.slice(0,g.indexOf(":")):g;(i==="ffmpeg"?Fl.has(S)||So.has(S)||xo.has(S):Ll.has(S))||oe(e,S);const A=t[++b];if(l=b,A===void 0)continue;if(S==="-f"){r=A;continue}if(S==="-dump_attachment")return null;if(["-x264-params","-x265-params","-x264opts","-svtav1-params","-aom-params","-vpx-params","-rav1e-params","-kvazaar-params"].includes(S)){if(!ql(e,A))return null;continue}if(S==="-i"){if(a.push(A),d=!0,!c(A,!1,r))return null;r=null;continue}if(d=!1,i==="ffprobe"&&S==="-o"){if(!se(e,A,!0))return null;n.push(A);continue}if(So.has(S)){S.endsWith("_script")&&(o=!0),F(e,[A]);continue}if(xo.has(S)){if(!se(e,A,!0))return null;continue}if(["-vf","-af","-filter","-filter_complex","-lavfi"].includes(S)&&(Io(A)&&(o=!0),!Co(e,A)))return null;(A.startsWith("/")||A.startsWith("~")||A.startsWith("$")||A.startsWith("../"))&&!qt(A)&&F(e,[A]);continue}if(d=!1,i==="ffmpeg"){if(n.push(g),!c(g,!0,r))return null;r=null}else if(a.push(g),!c(g,!1,r))return null}const u=t.length-1,p=t[u];if(i==="ffmpeg"&&p!==void 0&&l===u&&!d&&!p.startsWith("-")&&(n.push(p),!se(e,p,!0)))return null;const h=b=>b.filter(g=>!ye(g)&&g!=="-"&&!g.startsWith("pipe:"));return{inputs:h(a),outputs:h(n),fileFilters:o}}T(["ffmpeg"],(e,t)=>{const i=Ha(t,e,"ffmpeg");if(i===null){t.parsed=!1;return}const{inputs:o,outputs:a}=i;if(i.fileFilters){C(t,"complex","medium"),f(t,"filterFiles");return}a.length?f(t,"mediaConvert",{inputs:R(t,o),outputs:R(t,a)}):f(t,"mediaProcess",{inputs:R(t,o)})});T(["ffprobe"],(e,t)=>{const i=Ha(t,e,"ffprobe");if(i===null){t.parsed=!1;return}const{inputs:o}=i;if(i.fileFilters){C(t,"complex","medium"),f(t,"filterFiles");return}f(t,"mediaInfo",{paths:R(t,o)})});T(["sips"],(e,t)=>{const i=new Set(["-s","--setProperty","-z","--resampleHeightWidth","-c","--cropToHeightWidth","-p","--padToHeightWidth","--cropOffset"]),o=new Set(["-g","--getProperty","-d","--deleteProperty","-r","--rotate","-f","--flip","-Z","--resampleHeightWidthMax","--resampleWidth","--resampleHeight","--padColor","-o","--out","-x","--extractProfile","-e","--embedProfile","-E","--embedProfileIfNone","-m","--matchTo","-M","--matchToWithIntent","-j","--js","--extractTag","-X","--setPropertiesWithJSON"]),a=new Set(["-1","--oneLine","-h","--help","-H","--helpProperties","--debug","--formats","-i","--addIcon","--optimizeColorForSharing","--deleteColorManagementProperties"]),n=new Set(["-g","--getProperty","-1","--oneLine","-h","--help","-H","--helpProperties","--debug","--formats"]),s=[],r=[];let l=!1;for(let d=0;d<e.length;d++){const c=e[d];if(!c.startsWith("-")||c.includes("$")){s.push(c);continue}if(n.has(c)||(l=!0),i.has(c)){d+=2;continue}if(o.has(c)){const u=e[++d];if(u===void 0)continue;c==="-o"||c==="--out"||c==="-x"||c==="--extractProfile"?r.push(u):c==="-j"||c==="--js"?(C(t,"runs-code","medium"),F(t,[u])):(c==="-e"||c==="-E"||c==="-m"||c==="-M"||c.startsWith("--embed")||c.startsWith("--match")||c==="-X"||c==="--setPropertiesWithJSON")&&F(t,[u]);continue}a.has(c)||oe(t,c)}r.length?(F(t,s),M(t,r),f(t,"imageConvert",{inputs:R(t,s),outputs:R(t,r)})):l?(M(t,s),Ne(t,"imageEdit","paths",s)):(F(t,s),Ne(t,"imageInfo","paths",s))});function Fo(e){let t=e;for(;;){const i=t.indexOf(":");if(i<=1||ye(t))return t;const o=t.slice(0,i);let a=!0;for(const n of o)if(!(n>="a"&&n<="z"||n>="A"&&n<="Z"||n>="0"&&n<="9")){a=!1;break}if(!a)return t;t=t.slice(i+1)}}const Dl={resize:1,crop:1,gravity:1,extent:1,background:1,flatten:0,colors:1,format:1,quality:1,strip:0,thumbnail:1,fill:1,font:1,pointsize:1,annotate:2,geometry:1,alpha:1,colorspace:1,depth:1,density:1,rotate:1,flip:0,flop:0,trim:0,repage:1,define:1,sharpen:1,blur:1,unsharp:1,modulate:1,level:1,negate:0,type:1,units:1,interlace:1,"sampling-factor":1,append:0,layers:1,coalesce:0,delay:1,loop:1,dispose:1,deconstruct:0,scale:1,sample:1,"adaptive-resize":1,"auto-orient":0,bordercolor:1,border:1,frame:1,shadow:1,channel:1,separate:0,combine:0,compose:1,composite:0,page:1,size:1,"unique-colors":0,print:1,verbose:0,quiet:0,limit:2,transparent:1,fuzz:1,opaque:1,threshold:1,dither:1,remap:1,posterize:1,monochrome:0,grayscale:1,normalize:0,"contrast-stretch":1,"brightness-contrast":1,gamma:1,"sigmoidal-contrast":1,transpose:0,transverse:0,shave:1,chop:1,splice:1,distort:2,"virtual-pixel":1,interpolate:1,filter:1,vignette:1,morphology:2,kernel:1,compress:1,comment:1,region:1,colorize:1,tint:1,"sepia-tone":1,evaluate:2,clut:0,stroke:1,strokewidth:1,kerning:1,"interline-spacing":1,"interword-spacing":1,family:1,weight:1,style:1,stretch:1,antialias:0,resample:1,extract:1,orient:1,delete:1,swap:1,clone:1,duplicate:1,reverse:0,ping:0,precision:1,matte:0,"liquid-rescale":1,edge:1,charcoal:1,paint:1,sketch:1,emboss:1,polaroid:1,roll:1,shear:1,"motion-blur":1,"radial-blur":1,despeckle:0,enhance:0,equalize:0,"auto-level":0,"auto-gamma":0,"white-balance":0,"linear-stretch":1,label:1,caption:1,mosaic:0,mattecolor:1,fx:1,write:1,draw:1,identify:0,set:2,encoding:1,"gaussian-blur":1,"adaptive-sharpen":1,"alpha-color":1,"auto-threshold":1,"background-color":1,quantize:1,"transparent-color":1,tile:1,title:1,"fill-opacity":1,path:1},Ul={distort:2,level:1,"sigmoidal-contrast":1,gamma:1,write:1};T(["magick","convert","mogrify","identify","montage","composite"],(e,t,i)=>{let o=i,a=e;if(i==="magick"&&["convert","mogrify","identify","montage","composite","compare","stream","import","display","animate","conjure"].includes(e[0]??"")&&(o=e[0],a=e.slice(1)),o==="conjure"||o==="import"||o==="display"||o==="animate"||o==="stream"){Jt(e,t,i);return}const n=[],s=[];for(let p=0;p<a.length;p++){const h=a[p];if((h.startsWith("-")||h.startsWith("+"))&&h.length>1&&!h.includes("$")){const g=h.slice(1);if(g==="script"||g==="process"||g==="monitor"||g==="authenticate"){t.parsed=!1;return}const S=h.startsWith("+")?Ul[g]??0:Dl[g];if(S===void 0){oe(t,h);continue}const L=a.slice(p+1,p+1+S);if(p+=S,g==="write"){if(L.some(I=>I.includes("%["))){t.parsed=!1;return}for(const I of L)s.push(Fo(I));continue}const A=g==="set"?(L[0]??"").toLowerCase():"";if(A.startsWith("filename:")){t.parsed=!1;return}const $=["comment","label","caption","title"].includes(A);if(g==="set"&&!$||g==="define")for(const I of L){const w=I.includes("=")?I.slice(I.indexOf("=")+1):I;ce(w)&&!qt(w)&&F(t,[w])}for(const I of L){if(I.includes("@")&&(g==="annotate"||g==="label"||g==="caption"||g==="comment"||g==="draw"||g==="title"||g==="set")){t.parsed=!1;return}if(g==="draw"&&(I.includes("url(")||I.includes("image"))){t.parsed=!1;return}(g==="font"||g==="remap"||g==="clut"||g==="kernel")&&ce(I)&&!qt(I)&&F(t,[I])}continue}const b=Fo(h);if(h.includes("%[")){t.parsed=!1;return}if(b.startsWith("@")||h.startsWith("msl:")||h.startsWith("mvg:")||h.includes(":@")){t.parsed=!1;return}n.push(b)}M(t,s);const r=n.filter(ye);r.length&&C(t,"uses-network","medium",{host:he(r[0])});const l=n.filter(p=>!ye(p)&&p!=="-"&&p!=="");if(o==="mogrify"){M(t,l);for(let p=0;p<a.length;p++)a[p]==="-path"&&M(t,[a[p+1]??""]);Ne(t,"imageEdit","paths",l.filter(Le));return}if(o==="identify"){F(t,l),Ne(t,"imageInfo","paths",l.filter(Le));return}const d=n[n.length-1],c=d!==void 0&&d!=="-"&&!ye(d)&&d!==""?d:null,u=l.slice(0,c!==null&&n.length>1?-1:l.length);F(t,u),c!==null&&n.length>1?(M(t,[c]),f(t,"imageConvert",{inputs:R(t,u.filter(Le)),outputs:R(t,[c])})):Ne(t,"imageInfo","paths",u.filter(Le))});const Lo={cwebp:{long1:!0,f:["-lossless","-exact","-mt","-low_memory","-af","-strong","-nostrong","-sharp_yuv","-noalpha","-short","-quiet","-v","-version","-h","-H","-print_psnr","-print_ssim","-print_lsim","-progress","-jpeg_like","-alpha_cleanup","-noasm","-blend_alpha"],v:["-q","-alpha_q","-preset","-z","-m","-segments","-size","-psnr","-sns","-f","-sharpness","-pass","-qrange","-crop","-resize","-metadata","-alpha_method","-alpha_filter","-near_lossless","-hint","-map","-partition_limit","-o","-d","-s","-af","-pre","-tune"]},dwebp:{long1:!0,f:["-pam","-ppm","-bmp","-tiff","-pgm","-yuv","-nofancy","-nofilter","-nodither","-alpha_dither","-mt","-flip","-alpha","-incremental","-v","-quiet","-noasm","-version","-h","-png","-webp"],v:["-o","-dither","-crop","-resize","-scale"]},"rsvg-convert":{f:["-a","--keep-aspect-ratio","--unlimited","-u","--keep-image-data","--no-keep-image-data","-v","--version","-?","--help"],v:["-w","-h","-z","-x","-y","-f","-o","-b","--width","--height","--zoom","--x-zoom","--y-zoom","--format","--output","--background-color","--dpi-x","--dpi-y","-d","-p","--page-width","--page-height","--left","--top","--stylesheet","-s","--export-id","-i","--accept-language"]},gif2webp:{long1:!0,f:["-lossy","-mixed","-min_size","-loop_compatibility","-mt","-v","-quiet","-version","-h"],v:["-q","-m","-kmin","-kmax","-f","-metadata","-o"]},img2webp:{long1:!0,f:["-lossy","-lossless","-mixed","-v","-h","-min_size"],v:["-o","-q","-m","-d","-loop","-kmin","-kmax"]}};T(Object.keys(Lo),(e,t,i)=>{const o=q(t,e,Lo[i]),a=O(o,"-o","--output").filter(r=>r!=="-");i==="cwebp"&&M(t,O(o,"-d")),i==="rsvg-convert"&&F(t,O(o,"-s","--stylesheet"));const n=o.operands;F(t,n),M(t,a);const s=a.length?R(t,a):t.stdout;s!==null?f(t,"imageConvert",{inputs:R(t,n.filter(Le)),outputs:s}):Ne(t,"imageInfo","paths",n.filter(Le))});const No={optipng:{out:["-out","-dir"],long1:!0,f:["-quiet","-clobber","-backup","-keep","-fix","-force","-preserve","-snip","-simulate","-full","-nb","-nc","-np","-nz","-nx","-v","-o0","-o1","-o2","-o3","-o4","-o5","-o6","-o7"],v:["-out","-dir","-log","-strip","-zc","-zm","-zs","-zw","-f","-i"]},pngquant:{out:["--output","-o"],num:!0,f:["--force","-f","--skip-if-larger","--strip","--nofs","--verbose","-v","--ordered","--quiet","-q","--floyd"],v:["--ext","--quality","--speed","--posterize","--output","-o","-Q","-s"]},gifsicle:{out:["-o","--output"],f:["-b","--batch","-O1","-O2","-O3","-U","--unoptimize","-i","--interlace","-w","--no-warnings","--careful","--no-comments","--no-names","--no-extensions"],v:["-o","--output","--colors","--lossy","--resize","--resize-width","--resize-height","--resize-fit","--scale","--delay","-d","--loopcount","-O","--optimize","--crop"]},jpegoptim:{out:["-d","--dest"],f:["--strip-all","-s","--strip-exif","--strip-iptc","--strip-icc","-t","--totals","-o","--overwrite","-p","--preserve","-q","--quiet","-f","--force","--all-progressive","--all-normal","-n","--noaction","-v","--verbose"],v:["-m","--max","-d","--dest","-S","--size","-T","--threshold"]},oxipng:{out:["--out","--dir"],f:["-a","--alpha","-i","-Z","--zopfli","-r","--recursive","-q","--quiet","-v","--verbose","--fix","--force","--preserve","-p","--nx","--nz"],v:["-o","--opt","--strip","--out","--dir","-t","--threads","--interlace"]}};T(Object.keys(No),(e,t,i)=>{const o=No[i],a=q(t,e,o),n=O(a,...o.out).filter(r=>r!=="-");i==="optipng"&&M(t,O(a,"-log"));const s=a.operands;M(t,[...s,...n]),Ne(t,"imageOptimize","paths",(n.length?[...s,...n]:s).filter(Le))});const _l=new Set(["PATH","LD_PRELOAD","LD_LIBRARY_PATH","LD_AUDIT","BASH_ENV","ENV","IFS","PROMPT_COMMAND","SHELLOPTS","BASHOPTS","PS4","NODE_OPTIONS","PYTHONSTARTUP","PYTHONINSPECT","PYTHONHOME","PERL5OPT","PERL5LIB","PERLLIB","RUBYOPT","HOME","TMPDIR","PWD","OLDPWD","CDPATH","GLOBIGNORE","ZDOTDIR","EDITOR","VISUAL","PAGER","LESSOPEN","LESSCLOSE","MANPAGER","GIT_DIR","GIT_WORK_TREE","PIP_TARGET","PIP_PREFIX","BROWSER","SSH_ASKPASS","SUDO_ASKPASS","FPATH","MAILPATH"]),Bl=new Set(["npm_config_cache","NPM_CONFIG_CACHE","npm_config_yes","NPM_CONFIG_YES","npm_config_loglevel","NPM_CONFIG_LOGLEVEL","npm_config_update_notifier","NPM_CONFIG_UPDATE_NOTIFIER","npm_config_fund","NPM_CONFIG_FUND","npm_config_audit","NPM_CONFIG_AUDIT"]),Wl=new Set(["PYTHONPATH","PYTHONUNBUFFERED","PYTHONDONTWRITEBYTECODE","PYTHONIOENCODING","PYTHONHASHSEED","PYTHONUTF8","PYTHONWARNINGS","PYTHONFAULTHANDLER","PYTHONNOUSERSITE","PYTHONOPTIMIZE","PYTHONVERBOSE"]);function jl(e){if(Bl.has(e))return!1;if(_l.has(e))return!0;const t=e.toUpperCase();return t.startsWith("NPM_CONFIG_")?!0:t.startsWith("PYTHON")?!Wl.has(t):["DYLD_","LD_","GIT_","BASH_FUNC_","RUBYOPT","PERL5","NODE_REPL","ZDOTDIR"].some(i=>t.startsWith(i))||t.startsWith("MAGICK_")&&t.endsWith("_PATH")?!0:t.endsWith("_CONFIG_PATH")||t.endsWith("USERCONFIG")||t.endsWith("GLOBALCONFIG")||t.endsWith("_PRELOAD")||t.endsWith("STARTUP")||t.endsWith("_MODULE_PATH")||t.endsWith("_PLUGIN_PATH")||t.endsWith("_PLUGINS")}function Vl(e){const t=e.toUpperCase();return Ka.includes(t)?!1:["OUT","OUTPUT","DEST","DIR","OUTDIR"].includes(t)||["_OUT","_OUTPUT","_DEST","OUTDIR"].some(i=>t.endsWith(i))?!0:t.endsWith("CONFIG")||t.endsWith("_CONFIG_FILE")||t.endsWith("_FILE")||t.endsWith("_RC")||t.endsWith("RCFILE")||t.endsWith("_HOME")||t.endsWith("_DIR")||t.endsWith("_PATH")||["XDG_","MAGICK_","RUBY","BUN_","DENO_","FFREPORT","LESS","RIPGREP_","CURL_","WGET","SSH_","GNUPG","GPG_","PIP_","GEM_","CARGO_","GO"].some(i=>t.startsWith(i))}function Gl(e,t){for(const i of t.split(":")){const o=i.includes("=")?i.slice(i.lastIndexOf("=")+1):i;if(!(o===""||!ce(o))&&Y(e,o).some(a=>a.cls!=="work"&&a.cls!=="project"))return!0}return!1}function Bi(e,t,i){return(t==="GIT_PAGER"||t==="PAGER")&&i==="cat"?!1:t==="TMPDIR"&&i!==""&&!i.includes("$")?Y(e,i).some(o=>o.cls!=="work"&&o.cls!=="project"):jl(t)||Vl(t)&&Gl(e,i)}const Ka=["PYTHONPATH","NODE_PATH","GEM_PATH","CLASSPATH"],Hl={f:["-U","--upgrade","--user","--no-deps","--force-reinstall","--no-cache-dir","-q","--quiet","-v","--verbose","--pre","--no-index","--break-system-packages","-I","--ignore-installed","--no-build-isolation","--require-hashes","--no-warn-script-location","--disable-pip-version-check","--isolated","--dry-run","--compile","--no-compile","--prefer-binary","--no-input","--exists-action","--use-pep517","--no-use-pep517","--no-clean","--upgrade-strategy","--progress-bar","--root-user-action","--no-color","--editable","-e"],v:["-r","--requirement","-c","--constraint","-e","--editable","-t","--target","--prefix","--root","-i","--index-url","--extra-index-url","-f","--find-links","--cache-dir","--src","--upgrade-strategy","--platform","--python-version","--implementation","--abi","--only-binary","--no-binary","--progress-bar","--log","--timeout","--retries","--proxy","--trusted-host","--cert","--client-cert","-C","--config-settings","-d","--dest","-w","--wheel-dir","--report","--root-user-action","--python"]};function Qa(e,t){let i=0;const o=["--python","--log","--proxy","--cache-dir","--retries","--timeout","--exists-action","--trusted-host","--cert","--client-cert","--keyring-provider","--use-feature","--use-deprecated"],a=["-q","--quiet","-v","--verbose","--isolated","--no-cache-dir","--disable-pip-version-check","--no-color","--no-input","--require-virtualenv","-V","--version","-h","--help"];for(;i<e.length&&e[i].startsWith("-");){const r=e[i];if(r==="-V"||r==="--version"){f(t,"pipInfo");return}o.includes(r)?((r==="--log"||r==="--cache-dir")&&M(t,[e[i+1]??""]),i++):!a.includes(r)&&!o.includes(r.split("=")[0])&&oe(t,r),i++}const n=e[i],s=e.slice(i+1);if(n==="install"||n==="download"||n==="wheel"){const r=q(t,s,Hl),l=O(r,"-r","--requirement","-c","--constraint");F(t,[...l,...O(r,"-e","--editable").filter(ce)]),M(t,O(r,"-t","--target","--prefix","--root","-d","--dest","-w","--wheel-dir","--src","--report","--log")),H(r,"--user")&&C(t,"writes-outside-project","high",{path:"~"}),H(r,"--break-system-packages")&&C(t,"writes-outside-project","high"),n==="install"&&C(t,"installs-packages","medium"),H(r,"--no-index")||C(t,"uses-network","medium",{host:"pypi.org"});const d=r.operands;for(const c of d)ce(c)&&F(t,[c]);d.length?f(t,"pipInstall",{packages:le(d)}):l.length?f(t,"pipInstallReq",{file:R(t,l)}):f(t,"pipInstall",{packages:"…"});return}if(n==="uninstall"){const r=q(t,s,{f:["-y","--yes","-q","--quiet","-v","--break-system-packages","--root-user-action"],v:["-r","--requirement"]});C(t,"installs-packages","medium"),f(t,"pkgRemove",{packages:le(r.operands)});return}if(n===void 0||["list","show","freeze","check","help","inspect","debug"].includes(n)){const r=q(t,s,{f:["--outdated","-o","--uptodate","-u","--editable","-e","--local","-l","--user","--not-required","--exclude-editable","--include-editable","--pre","--all","--verbose","-v","-f","--files","-q","--quiet"],v:["--format","--path","--exclude","-r","--requirement","--log"]});F(t,[...O(r,"--path","-r","--requirement")]),M(t,O(r,"--log")),f(t,"pipInfo");return}f(t,"pkgOther",{tool:"pip",sub:n}),C(t,"unknown-command","medium")}const Kl="uBOIEsSqvbdxPRhVi";T(["python","python3","pypy3"],(e,t)=>{for(let i=0;i<e.length;i++){const o=e[i];if(o==="-"){J(t,"python");return}if(o==="-X"||o.startsWith("-X")){const a=o==="-X"?e[++i]:o.slice(2);a?.startsWith("pycache_prefix=")&&De(t,a.slice(15));continue}if(o==="-W"||o==="--check-hash-based-pycs"){i++;continue}if(o==="--version"||o==="--help"){f(t,"sysInfo");return}if(o.startsWith("--")){oe(t,o);continue}if(o.startsWith("-")&&!o.includes("$")){for(let a=1;a<o.length;a++){const n=o[a];if(n==="c"||n==="m"){const s=o.slice(a+1)!==""?o.slice(a+1):e[++i];if(s===void 0){t.parsed=!1;return}if(n==="c"){Te(t,s,"python"),f(t,"pythonInline");return}Ql(s,e.slice(i+1),t);return}if(n==="W"||n==="X"){const s=o.slice(a+1)!==""?o.slice(a+1):e[++i];n==="X"&&s?.startsWith("pycache_prefix=")&&De(t,s.slice(15));break}Kl.includes(n)||oe(t,`-${n}`)}continue}if(Ve(o)){J(t,"python");return}fe(t,o),te(t,e.slice(i+1)),f(t,"pythonScript",{script:R(t,[o])});return}J(t,"python")});function Ql(e,t,i){if(e==="pip"){Qa(t,i);return}if(e==="venv"||e==="virtualenv"){const o=q(i,t,{f:["--clear","--upgrade","--without-pip","--system-site-packages","--symlinks","--copies","--upgrade-deps","--without-scm-ignore-files"],v:["--prompt"]});M(i,o.operands),f(i,"venv",{path:R(i,o.operands)});return}if(e==="json.tool"){const o=q(i,t,{f:["--sort-keys","--no-ensure-ascii","--json-lines","--tab","--no-indent","--compact"],v:["--indent"]});F(i,o.operands.slice(0,1)),M(i,o.operands.slice(1,2)),f(i,"jsonCheck",{path:o.operands.length?R(i,o.operands.slice(0,1)):"…"});return}C(i,"runs-code","medium"),(e==="http.server"||e==="SimpleHTTPServer"||e==="smtpd")&&C(i,"uses-network","medium"),te(i,t),f(i,"pythonModule",{module:e})}T(["pip","pip3"],(e,t)=>Qa(e,t));const Ro=["-r","--require","--import","--loader","--experimental-loader","-C","--conditions","--input-type","--env-file","--title","--stack-size","--max-old-space-size","--inspect-port","--test-reporter","--test-name-pattern"],Yl=["--no-warnings","--enable-source-maps","--trace-warnings","--trace-uncaught","--test","--watch","--check","-c","-v","--version","-h","--help","--no-deprecation","--preserve-symlinks","--abort-on-uncaught-exception","--unhandled-rejections","--throw-deprecation","--pending-deprecation","--expose-gc"],Xl=["--max-old-space-size=","--stack-size=","--inspect","--harmony","--unhandled-rejections=","--disable-warning="],Zl=["--experimental-vm-modules","--experimental-strip-types","--experimental-transform-types","--experimental-specifier-resolution","--experimental-json-modules","--experimental-fetch","--no-experimental-fetch","--experimental-modules","--experimental-detect-module","--experimental-require-module","--experimental-sqlite","--experimental-websocket","--experimental-global-webcrypto","--experimental-wasm-modules","--experimental-import-meta-resolve","--experimental-test-coverage","--no-experimental-strip-types","--experimental-default-type","--trace-warnings","--trace-uncaught","--trace-deprecation","--trace-exit","--trace-sigint","--trace-gc","--trace-sync-io","--trace-tls"],Jl=["--trace-event-file-pattern","--diagnostic-dir","--report-directory","--report-filename","--cpu-prof-dir","--heap-prof-dir","--redirect-warnings","--cpu-prof-name","--heap-prof-name","--experimental-sea-config"],ed=["--experimental-config-file","--experimental-policy","--policy-integrity","--openssl-config","--icu-data-dir","--snapshot-blob","--build-snapshot"];function Wi(e,t){for(let i=0;i<e.length;i++){const o=e[i];if(o==="-e"||o==="--eval"||o==="-p"||o==="--print"||o==="-pe"){const a=e[++i];if(a===void 0){t.parsed=!1;return}Te(t,a,"js"),f(t,"nodeInline");return}if(o.startsWith("--eval=")||o.startsWith("--print=")){Te(t,o.slice(o.indexOf("=")+1),"js"),f(t,"nodeInline");return}if(o==="-"){J(t,"node");return}if(o==="-v"||o==="--version"){f(t,"sysInfo");return}if(o==="--env-file"||o.startsWith("--env-file=")||o.startsWith("--env-file-if-exists")){const a=o.includes("=")?o.slice(o.indexOf("=")+1):e[++i];a!==void 0&&De(t,a);continue}if(o.startsWith("--inspect")){const a=o.includes("=")?o.slice(o.indexOf("=")+1):"",n=a.includes(":")?a.slice(0,a.lastIndexOf(":")):dt(a)?"":a;n!==""&&n!=="127.0.0.1"&&n!=="localhost"&&n!=="[::1]"&&C(t,"uses-network","medium",{host:n});continue}if(Ro.includes(o)){const a=e[++i];a!==void 0&&["-r","--require","--import","--loader","--experimental-loader"].includes(o)&&(a.includes(":")?Te(t,a):fe(t,a));continue}if(o.startsWith("-")&&!o.includes("$")){const a=o.includes("=")?o.slice(0,o.indexOf("=")):o;if(ed.includes(a)){t.parsed=!1;return}if(Jl.includes(a)){M(t,[o.includes("=")?o.slice(o.indexOf("=")+1):e[++i]??""]);continue}if(!Yl.includes(o)&&!Zl.includes(o)&&!Ro.includes(a)&&!Xl.some(n=>o.startsWith(n))&&oe(t,a),(a==="--require"||a==="--import"||a==="--loader"||a==="--experimental-loader")&&o.includes("=")){const n=o.slice(o.indexOf("=")+1);n.includes(":")?Te(t,n):fe(t,n)}continue}if(Ve(o)){J(t,"node");return}fe(t,o),te(t,e.slice(i+1)),f(t,"nodeScript",{script:R(t,[o])});return}J(t,"node")}T(["node","nodejs"],(e,t)=>Wi(e,t));function lt(e,t,i,o){C(e,"installs-packages","medium"),o||C(e,"uses-network","medium",{host:"registry.npmjs.org"}),i&&C(e,"writes-outside-project","high");for(const a of t)ce(a)&&!a.startsWith("@")&&F(e,[a]);t.length?f(e,"npmInstall",{packages:le(t)}):f(e,"npmInstallAll")}function ji(e,t){const i=["-p","--package","--cache"];let o=0;for(;o<e.length&&e[o].startsWith("-")&&e[o]!=="--";)o+=i.includes(e[o])?2:1;const a=e.slice(0,o),n=e[o]==="--"?e.slice(o+1):e.slice(o);if(a.some(l=>l==="-c"||l==="--call"||l.startsWith("--call=")||l==="--shell")){t.parsed=!1;return}const s=q(t,a,{f:["-y","--yes","--no","-q","--quiet","--no-install","--prefer-offline","--ignore-existing","-s","--silent"],v:i}),r=n[0]??O(s,"-p","--package")[0]??"…";if(r==="node"){Wi(n.slice(1),t);return}C(t,"runs-code","medium"),C(t,"uses-network","medium",{host:"registry.npmjs.org"}),te(t,n.slice(1)),f(t,"npx",{tool:r})}T(["npx","pnpx","bunx"],(e,t)=>ji(e,t));const Po=["install","i","in","ins","inst","insta","instal","isnt","isnta","isntal","isntall","add","ci","clean-install","update","up","upgrade","udpate"],Oo=["uninstall","remove","rm","r","un","unlink"],Mo=["ls","list","ll","la","view","info","show","v","outdated","explain","why","help","search"],td=["publish","unpublish","link","ln","config","set","get","login","logout","adduser","deploy","pack","patch","patch-commit","store","env","setup","self-update","audit","import","rebuild","prune","fetch","server","root","bin","init","version","owner","team","token","access","hook","profile","cache","dist-tag","deprecate","edit","sbom","shrinkwrap","global","plugin","policies","workspaces","catalog","approve-builds","workspace","dlx","exec","x","create","run","node","test","start"],Se={f:["-g","--global","-D","--save-dev","-S","--save","--no-save","-E","--save-exact","-O","--save-optional","-P","--save-prod","--legacy-peer-deps","--strict-peer-deps","--force","-f","--silent","-s","--quiet","-q","--ignore-scripts","--no-audit","--no-fund","--production","--frozen-lockfile","--prefer-offline","--offline","-y","--yes","--if-present","-r","--recursive","--parallel","--no-package-lock","--dev","-W","--ignore-workspace-root-check","--exact","--dry-run","--verbose","-d","--no-optional","--no-progress","--workspaces","--include-workspace-root","--immutable","--check-files","--pure-lockfile","--no-lockfile","--non-interactive","--shamefully-hoist","--prefer-frozen-lockfile","--no-frozen-lockfile","--save-peer","--fix","--json","--long","--all","--depth","--stream","--aggregate-output","--reporter-hide-prefix","--color","--no-color","--version","-v","--help","-h","--foreground-scripts","--no-update-notifier"],v:["--omit","--include","--reporter","--loglevel","-w","--workspace","-C","--dir","--filter","-F","--prefix","--location","--cache","--registry","--cwd","--tag","--network-concurrency","--child-concurrency","--depth"]},Ya=["build","dev","test","start","lint","render","preview","typecheck","format","serve","watch","check","compile","bundle","export","generate","gen","storybook","e2e","ci","prettier","fmt"],id=["run","run-script","rum","urn","test","t","tst","start","stop","restart"];function od(e,t){const i=t.indexOf("--"),o=i>=0?t.slice(0,i):t;for(let a=0;a<o.length;a++){const n=o[a];if(!n.startsWith("-"))continue;const s=n.includes("=")?n.slice(0,n.indexOf("=")):n;if(!["--silent","-s","--if-present","--workspaces","--include-workspace-root","-ws","--quiet","-q","--verbose","-d","-dd","--color","--no-color","--foreground-scripts","--no-audit","--no-fund","--no-update-notifier"].includes(n)){if(s==="--loglevel"||s==="--color"){n.includes("=")||a++;continue}if(s==="-w"||s==="--workspace"||s==="--prefix"){const r=n.includes("=")?n.slice(n.indexOf("=")+1):o[++a];if(r!==void 0&&Y(e,r).every(l=>l.cls==="work"||l.cls==="project")||s!=="--prefix"&&r!==void 0&&!ce(r))continue}return!1}}return!0}T(["npm","pnpm","yarn"],(e,t,i)=>{const o=e.findIndex((g,S)=>!g.startsWith("-")&&!Se.v.includes(e[S-1]??"")),a=o>=0?e[o]:void 0;if(i==="npm"&&a!==void 0&&id.includes(a)&&!od(t,e)){t.parsed=!1;return}const n=e.indexOf("--"),s=n>=0?e.slice(0,n):e,r=n>=0?e.slice(n+1):[],l=a!==void 0&&(a==="run"||a==="run-script"||a==="exec"||a==="x"||a==="dlx"||a==="node"||i!=="npm"&&!Po.includes(a)&&!Oo.includes(a)&&!Mo.includes(a)&&!td.includes(a)),d=l&&o>=0?s.slice(0,o+(a==="run"||a==="run-script"?2:1)):s,c=l&&o>=0?[...s.slice(o+(a==="run"||a==="run-script"?2:1)),...r]:r,u=q(t,d,Se),p=u.operands.slice(1),h=H(u,"-g","--global")||O(u,"--location").includes("global"),b=H(u,"--offline");if(M(t,O(u,"--prefix")),F(t,O(u,"-C","--dir","--cwd")),a===void 0){if(H(u,"--version","-v","--help","-h")){f(t,"pkgInfo",{tool:i});return}if(i==="yarn"){lt(t,[],h,b);return}f(t,"pkgInfo",{tool:i});return}if(i==="yarn"&&a==="global"){if(p[0]==="add"){lt(t,p.slice(1),!0,b);return}f(t,"pkgOther",{tool:i,sub:a}),C(t,"unknown-command","medium");return}if(Po.includes(a)){lt(t,p,h,b);return}if(a==="run"||a==="run-script"||a==="rum"||a==="urn"){C(t,"runs-code","low"),te(t,c),f(t,"npmRun",{script:p[0]??"…"});return}if(["test","t","tst","start","stop","restart"].includes(a)){C(t,"runs-code","low"),te(t,c),f(t,"npmRun",{script:a});return}if(a==="node"){Wi(c,t);return}if(a==="exec"||a==="x"||a==="dlx"||a==="create"){ji(a==="create"?[`create-${p[0]??""}`,...p.slice(1),...c]:c,t);return}if(Oo.includes(a)){C(t,"installs-packages","medium"),h&&C(t,"writes-outside-project","high"),f(t,"pkgRemove",{packages:le(p)});return}if(Mo.includes(a)){f(t,"pkgInfo",{tool:i});return}if(a==="audit"){p[0]==="fix"?lt(t,[],h,b):f(t,"pkgInfo",{tool:i});return}if(i!=="npm"&&l){C(t,"runs-code",Ya.includes(a)?"low":"medium"),te(t,c),f(t,"npmRun",{script:a});return}f(t,"pkgOther",{tool:i,sub:a}),C(t,"unknown-command","medium")});T(["bun"],(e,t)=>{const i=e[0];if(i==="-e"||i==="--eval"||i==="-p"||i==="--print"){const n=e[1];if(n===void 0){t.parsed=!1;return}Te(t,n,"js"),f(t,"inlineCode",{lang:"bun"});return}if(i==="-"||i==="run"&&e[1]==="-"){J(t,"node");return}if(i==="install"||i==="i"||i==="add"||i==="a"){const n=q(t,e.slice(1),Se);lt(t,n.operands,H(n,"-g","--global"),!1);return}if(i==="x"){ji(e.slice(1),t);return}const o=i==="run"?e[1]:i;if(o===void 0){f(t,"pkgInfo",{tool:"bun"});return}const a=e.slice(i==="run"?2:1);if(Ve(o)){J(t,"node");return}if(Le(o)){fe(t,o),te(t,a),f(t,"runScript",{script:R(t,[o])});return}C(t,"runs-code",Ya.includes(o)?"low":"medium"),te(t,a),f(t,"npmRun",{script:o})});const ad={f:["-s","-S","-L","-f","-k","-v","-i","-I","-O","-J","-#","-N","-g","-G","-4","-6","-n","-R","-Z","-q","--silent","--show-error","--location","--fail","--fail-with-body","--insecure","--verbose","--include","--head","--remote-name","--remote-name-all","--remote-header-name","--progress-bar","--no-buffer","--globoff","--get","--compressed","--create-dirs","--http1.1","--http2","--http1.0","--http2-prior-knowledge","--tlsv1.2","--tlsv1.3","--retry-all-errors","--no-progress-meter","--location-trusted","--parallel","--fail-early","--digest","--basic","--anyauth","--negotiate","--ntlm","--remote-time","--raw","--tcp-nodelay","--path-as-is","--ssl-reqd","--no-keepalive","--disable"],v:["-o","--output","-d","--data","--data-raw","--data-binary","--data-urlencode","--data-ascii","--json","-F","--form","--form-string","-H","--header","-X","--request","-u","--user","-A","--user-agent","-e","--referer","-b","--cookie","-c","--cookie-jar","-T","--upload-file","-m","--max-time","--connect-timeout","-w","--write-out","-x","--proxy","--retry","--retry-delay","--retry-max-time","-r","--range","-C","--continue-at","--cacert","--capath","--cert","--key","-E","-D","--dump-header","--trace","--trace-ascii","--stderr","--output-dir","-z","--time-cond","-Y","--speed-limit","-y","--speed-time","--limit-rate","--resolve","--connect-to","--interface","--max-filesize","--url","-U","--proxy-user","--tls-max","--ciphers","--max-redirs","-K","--config","--libcurl","--etag-save","--etag-compare","--hsts","--alt-svc","--netrc-file","-Q","--quote","--variable","--proto","--proto-redir","--parallel-max","--expect100-timeout","--happy-eyeballs-timeout-ms"]};T(["curl"],(e,t)=>{const i=q(t,e,ad);if(O(i,"-K","--config").length){t.parsed=!1;return}const o=[...i.operands,...O(i,"--url")],a=o.filter(b=>b.startsWith("file://"));F(t,a.map(b=>b.slice(7)));const n=O(i,"-o","--output","-c","--cookie-jar","-D","--dump-header","--trace","--trace-ascii","--stderr","--libcurl","--etag-save","--hsts","--alt-svc").filter(b=>b!=="-"),s=O(i,"--output-dir");H(i,"-O","--remote-name","--remote-name-all","-J")&&s.push(s[0]??"."),M(t,[...n,...s]),F(t,O(i,"--netrc-file","--cacert","--cert","--key","--etag-compare"));const r=O(i,"-d","--data","--data-binary","--data-urlencode","--data-ascii","--json"),l=O(i,"-F","--form"),d=O(i,"-T","--upload-file"),c=[...r.filter(b=>b.startsWith("@")).map(b=>b.slice(1)),...l.flatMap(b=>{const g=b.search(/=[@<]/);return g>=0?[b.slice(g+2).split(";")[0]]:[]}),...d].filter(b=>b!=="-"&&b!=="");F(t,c);const u=(O(i,"-X","--request")[0]??"").toUpperCase(),p=r.length>0||l.length>0||d.length>0||["POST","PUT","PATCH","DELETE"].includes(u),h=o.length?he(o[0]):"…";(o.length!==a.length||o.length===0)&&C(t,"uses-network","medium",{host:h}),p?f(t,"upload",{host:h}):n.length?f(t,"downloadTo",{host:h,path:R(t,n.slice(0,1))}):f(t,"download",{host:h})});T(["wget"],(e,t)=>{const i=q(t,e,{f:["-q","-c","-nc","-N","-r","-np","-nd","-nH","-k","-p","-m","-S","-v","-nv","-4","-6","-x","--quiet","--continue","--no-clobber","--timestamping","--recursive","--no-parent","--no-directories","--no-host-directories","--convert-links","--page-requisites","--mirror","--server-response","--no-verbose","--show-progress","--no-check-certificate","--content-disposition","--spider","--force-directories","--trust-server-names","--progress","--https-only","--retry-connrefused","--no-cache"],v:["-O","--output-document","-P","--directory-prefix","-o","--output-file","-a","--append-output","-i","--input-file","--post-data","--post-file","--method","--body-data","--body-file","-U","--user-agent","--header","-t","--tries","-T","--timeout","-e","--execute","--user","--password","-l","--level","-A","-R","-D","--load-cookies","--save-cookies","--config","--wait","-w","--limit-rate"]});if(O(i,"-e","--execute","--config").length){t.parsed=!1;return}const o=O(i,"-O","--output-document").filter(l=>l!=="-"),a=[...o,...O(i,"-o","--output-file","-a","--append-output","--save-cookies")],n=O(i,"-P","--directory-prefix");M(t,[...a,...o.length||O(i,"-O","--output-document").includes("-")?[]:n.length?n:["."]]);const s=O(i,"--post-file","--body-file");F(t,[...s,...O(i,"-i","--input-file","--load-cookies")]);const r=i.operands.length?he(i.operands[0]):"…";C(t,"uses-network","medium",{host:r}),s.length||O(i,"--post-data","--method","--body-data").length?f(t,"upload",{host:r}):o.length?f(t,"downloadTo",{host:r,path:R(t,o)}):f(t,"download",{host:r})});T(["ssh","scp","sftp","rsync","nc","ncat","netcat","telnet","ftp","socat","ping","dig","nslookup","host","whois","http","https","aria2c"],(e,t,i)=>{Jt(e,t,i),C(t,"uses-network","medium")});const bi=["--stat","--numstat","--shortstat","--dirstat","--summary","--name-only","--name-status","--cached","--staged","-p","--patch","-s","--no-patch","--raw","--minimal","--patience","--histogram","--word-diff","--color-words","--no-renames","-M","-C","-B","-D","-R","--text","-a","-w","-b","--ignore-space-change","--ignore-all-space","--ignore-blank-lines","--exit-code","--quiet","--no-ext-diff","--no-textconv","--check","--full-index","--binary","--abbrev","--relative","--no-index","--compact-summary","--merge-base","--cc","--no-prefix","--ignore-submodules","--submodule","--color-moved","--function-context","-W","--find-renames","--find-copies","--irreversible-delete","--color","--no-color","--oneline","--format","--pretty","--show-signature","--diff-merges","--remerge-diff","-m","-c","-t","-z","--stat-width","--ita-invisible-in-index"],$i=["-U","--unified","--format","--pretty","--diff-filter","--diff-algorithm","-S","-G","--word-diff-regex","--src-prefix","--dst-prefix","--inter-hunk-context","--output","-O","-l"],nd=[...bi,"--graph","--decorate","--all","--branches","--tags","--remotes","--follow","--reverse","--no-merges","--merges","--first-parent","--abbrev-commit","--date","--relative-date","--source","--left-right","--cherry-pick","--boundary","-i","--regexp-ignore-case","-E","--extended-regexp","-F","--fixed-strings","--all-match","--invert-grep","--walk-reflogs","-g","--no-walk","--date-order","--topo-order","--full-history","--simplify-by-decoration","--notes","--no-notes","--mailmap","-L","--use-mailmap"],sd=[...$i,"-n","--max-count","--skip","--since","--until","--after","--before","--author","--committer","--grep","--decorate-refs","--date"],Xa={status:{phrase:"gitStatus",f:["-s","--short","-b","--branch","--long","--ignored","-u","-uno","-unormal","-uall","--untracked-files","--ahead-behind","--no-ahead-behind","--show-stash","--no-renames","--porcelain","-z","-v","--verbose"]},diff:{phrase:"gitDiff",f:bi,v:$i},show:{phrase:"gitDiff",f:bi,v:$i},log:{phrase:"gitLog",f:nd,v:sd,num:!0},shortlog:{phrase:"gitLog",f:["-s","-n","-e","--summary","--numbered","--email","--all"],v:["--since","--until","--group","-c","--format"]},blame:{phrase:"gitLog",f:["-l","-s","-e","-w","-M","-C","--porcelain","--line-porcelain","-p","-t","--show-email","--show-name","-f","-n"],v:["-L","--since"]},reflog:{phrase:"gitLog",f:["show","--all","--date"],v:["-n","--date"],num:!0},"rev-parse":{phrase:"gitInfo",f:["--show-toplevel","--abbrev-ref","--short","--verify","--git-dir","--git-common-dir","--is-inside-work-tree","--is-bare-repository","--symbolic-full-name","--absolute-git-dir","--show-prefix","--show-cdup","-q","--quiet","--all","--branches","--tags","--symbolic","--is-shallow-repository","--show-superproject-working-tree"]},"ls-files":{phrase:"gitInfo",f:["-m","--modified","-o","--others","-d","--deleted","--exclude-standard","-z","-s","--stage","--cached","-c","-i","--ignored","--error-unmatch","-t","--full-name","--abbrev","--directory","--no-empty-directory","-u","--unmerged","-k","--killed","--eol"],v:["-x","--exclude","-X","--exclude-from","--format"]},"ls-tree":{phrase:"gitInfo",f:["-r","-d","-t","-l","--long","--name-only","--name-status","--full-name","--full-tree","--abbrev","-z","--object-only"],v:["--format"]},describe:{phrase:"gitInfo",f:["--tags","--all","--always","--long","--abbrev","--dirty","--exact-match","--contains","--first-parent"],v:["--match","--exclude"]},"cat-file":{phrase:"gitInfo",f:["-t","-s","-p","-e","--batch","--batch-check"]},"show-ref":{phrase:"gitInfo",f:["--heads","--tags","-s","--hash","--verify","-d","-q","--quiet","--head"]},grep:{phrase:"gitInfo",f:["-n","-i","-l","-L","-w","-v","-E","-F","-P","-G","--cached","--untracked","-c","--count","-h","-H","--heading","--break","-r","--recursive","--no-index","-I","-o","--only-matching","-q","--quiet","--line-number","--ignore-case","--files-with-matches","--all-match","--color","--no-color","--column","-p","-W"],v:["-e","-A","-B","-C","-m","--max-count","--max-depth","-f"],num:!0},"rev-list":{phrase:"gitInfo",f:["--count","--all","--reverse","--objects","--first-parent","--left-right","--cherry-pick","--merges","--no-merges","--topo-order","--date-order"],v:["--max-count","-n","--since","--until","--author"]},"merge-base":{phrase:"gitInfo",f:["--is-ancestor","--all","--octopus","--independent","--fork-point"]},add:{phrase:"gitAdd",f:["-A","--all","-u","--update","-N","--intent-to-add","-f","--force","-n","--dry-run","-v","--verbose","-p","--patch","--ignore-errors","--renormalize","--no-all","--ignore-removal","--sparse"],v:["--chmod","--pathspec-from-file"]},commit:{phrase:"gitCommit",changes:!0,f:["-a","--all","--amend","--no-edit","-s","--signoff","--allow-empty","--allow-empty-message","-n","--no-verify","--no-gpg-sign","-e","--edit","--only","-o","--include","-i","--dry-run","--status","--no-status","-u","--untracked-files","-v","--verbose","--short","--porcelain","--reset-author","-q","--quiet","-p","--patch","-S","--gpg-sign"],v:["-m","--message","-F","--file","--author","--date","--fixup","--squash","-C","--reuse-message","-c","--reedit-message","--cleanup","-t","--template","--pathspec-from-file","--trailer"]},push:{phrase:"gitSync",changes:!0,net:!0,f:["-u","--set-upstream","-f","--force","--force-with-lease","--force-if-includes","--tags","--all","--mirror","--dry-run","-n","--delete","-d","--no-verify","--follow-tags","--atomic","--prune","--porcelain","--progress","-q","--quiet","-v","--verbose","--no-force-with-lease"],v:["-o","--push-option","--repo","--signed"]},pull:{phrase:"gitSync",changes:!0,net:!0,f:["--rebase","--no-rebase","--ff","--ff-only","--no-ff","--all","--tags","--prune","-p","--unshallow","--no-tags","--autostash","--no-autostash","--squash","--no-commit","--commit","--edit","--no-edit","--stat","-n","--no-stat","-q","--quiet","-v","--verbose","-r"],v:["--depth","-s","--strategy","-X","--strategy-option","-j","--jobs"]},fetch:{phrase:"gitSync",net:!0,f:["--all","--tags","--prune","-p","-P","--prune-tags","--unshallow","--no-tags","--dry-run","-f","--force","--multiple","--recurse-submodules","--no-recurse-submodules","-q","--quiet","-v","--verbose","--progress","-t","--append","-a","--write-fetch-head","--no-write-fetch-head","--atomic"],v:["--depth","--deepen","--shallow-since","-j","--jobs","--refmap","--negotiation-tip"]},clone:{phrase:"gitClone",net:!0,f:["--single-branch","--no-single-branch","--recurse-submodules","--recursive","--shallow-submodules","--bare","--mirror","--no-checkout","-n","--sparse","--no-tags","--dissociate","--progress","-q","--quiet","-v","--verbose","-l","--local","--no-local","--no-hardlinks","-s","--shared","--remote-submodules","--also-filter-submodules","--reject-shallow"],v:["--depth","--branch","-b","--filter","--origin","-o","-j","--jobs","--reference","--reference-if-able","--shallow-since","--shallow-exclude","--bundle-uri","--revision"]},checkout:{phrase:"gitChange",changes:!0,f:["--detach","-f","--force","--ours","--theirs","-p","--patch","-m","--merge","--track","-t","--no-track","-q","--quiet","--recurse-submodules","--no-recurse-submodules","--overlay","--no-overlay","--progress","--guess","--no-guess","--ignore-other-worktrees"],v:["-b","-B","--orphan","--conflict","--pathspec-from-file"]},switch:{phrase:"gitChange",changes:!0,f:["--detach","-f","--force","--discard-changes","-m","--merge","-t","--track","--no-track","--guess","--no-guess","-q","--quiet","--recurse-submodules","--progress","--ignore-other-worktrees"],v:["-c","-C","--create","--force-create","--orphan","--conflict"]},restore:{phrase:"gitChange",changes:!0,f:["--staged","-S","--worktree","-W","-p","--patch","--ours","--theirs","-m","--merge","--ignore-unmerged","--overlay","--no-overlay","-q","--quiet","--progress","--recurse-submodules"],v:["-s","--source","--conflict","--pathspec-from-file"]},reset:{phrase:"gitChange",changes:!0,f:["--hard","--soft","--mixed","--merge","--keep","-p","--patch","-N","--intent-to-add","-q","--quiet","--recurse-submodules","--no-refresh"],v:["--pathspec-from-file"]},stash:{phrase:"gitChange",changes:!0,f:["push","pop","list","show","apply","drop","clear","save","branch","create","store","-u","--include-untracked","-a","--all","-k","--keep-index","--no-keep-index","-p","--patch","--staged","-S","--index","-q","--quiet","--stat","-p"],v:["-m","--message","--pathspec-from-file"]},rebase:{phrase:"gitChange",changes:!0,f:["--continue","--abort","--skip","--quit","-i","--interactive","--autosquash","--no-autosquash","--autostash","--no-autostash","--keep-base","--root","--rebase-merges","-r","--edit-todo","--show-current-patch","-q","--quiet","-v","--verbose","--stat","-n","--no-stat","--no-verify","--verify","-f","--force-rebase","--fork-point","--no-fork-point","--signoff","--committer-date-is-author-date","--reset-author-date","--update-refs"],v:["--onto","-s","--strategy","-X","--strategy-option"]},merge:{phrase:"gitChange",changes:!0,f:["--no-ff","--ff","--ff-only","--squash","--abort","--continue","--quit","--no-edit","--edit","--no-commit","--commit","--allow-unrelated-histories","--no-verify","--stat","-n","--no-stat","-q","--quiet","-v","--verbose","--autostash","--no-autostash","--signoff","--progress"],v:["-m","-F","--file","-s","--strategy","-X","--strategy-option","--into-name"]},revert:{phrase:"gitChange",changes:!0,f:["--no-edit","--edit","-e","--continue","--abort","--skip","--quit","-n","--no-commit","-s","--signoff"],v:["-m","--mainline","--strategy","-X"]},"cherry-pick":{phrase:"gitChange",changes:!0,f:["--no-edit","--edit","-e","--continue","--abort","--skip","--quit","-n","--no-commit","-s","--signoff","-x","--ff","--allow-empty","--keep-redundant-commits"],v:["-m","--mainline","--strategy","-X"]},clean:{phrase:"gitChange",changes:!0,f:["-f","--force","-d","-x","-X","-n","--dry-run","-i","--interactive","-q","--quiet","-ff","-fd","-fdx","-fdX","-fx","-dfx","-xdf","-fxd","-dn","-nd"],v:["-e","--exclude"]},rm:{phrase:"gitChange",changes:!0,f:["--cached","-r","-f","--force","-n","--dry-run","--ignore-unmatch","-q","--quiet","--sparse"],v:["--pathspec-from-file"]},mv:{phrase:"gitChange",changes:!0,f:["-f","--force","-k","-n","--dry-run","-v","--verbose"]},branch:{phrase:"gitChange",changes:!0,f:["-a","--all","-r","--remotes","-v","-vv","--verbose","-l","--list","-d","-D","--delete","-m","-M","--move","-c","-C","--copy","-f","--force","--show-current","--merged","--no-merged","--contains","--no-contains","--unset-upstream","-t","--track","--no-track","--points-at","--column","--no-column","-q","--quiet","-i","--ignore-case","--color","--no-color"],v:["--sort","--format","-u","--set-upstream-to"]},tag:{phrase:"gitChange",changes:!0,f:["-a","--annotate","-l","--list","-d","--delete","-f","--force","-v","--verify","--contains","--no-contains","--merged","--no-merged","-s","--sign","-i","--ignore-case","--column","--no-column"],v:["-m","--message","-F","--file","--sort","--points-at","--format","-n"],num:!0},remote:{phrase:"gitInfo",f:["-v","--verbose","add","remove","rm","rename","set-url","show","get-url","prune","update","set-head","--push","--all","--add","--delete","-f"],v:["-t","-m"]},init:{phrase:"gitChange",changes:!0,f:["-q","--quiet","--bare"],v:["-b","--initial-branch","--shared","--object-format"]},gc:{phrase:"gitChange",changes:!0,f:["--aggressive","--auto","--prune","--no-prune","-q","--quiet","--force"]},apply:{phrase:"gitChange",changes:!0,f:["--check","--stat","--numstat","--summary","--cached","--index","-3","--3way","-R","--reverse","-v","--verbose","--reject","--allow-empty","--recount","--unidiff-zero","-N","--intent-to-add"],v:["-p","--whitespace","--exclude","--include","--directory","-C"]},"format-patch":{phrase:"gitOther",num:!0,f:["--stdout","-n","--numbered","-N","--no-numbered","-k","--keep-subject","--cover-letter","--signoff","-s","--no-stat","--root","--thread","-q","--quiet","--zero-commit","--minimal","-p","--no-binary"],v:["-o","--output-directory","--subject-prefix","--start-number","-v","--reroll-count","--base","--suffix","--to","--cc","--from"]},archive:{phrase:"gitOther",f:["--list","-l","-v","--verbose","--worktree-attributes","-0","-1","-2","-3","-4","-5","-6","-7","-8","-9"],v:["-o","--output","--format","--prefix","--add-file","--add-virtual-file","--mtime"]},bundle:{phrase:"gitOther",f:["create","verify","list-heads","unbundle","--all","--branches","--tags","-q","--quiet","--progress"],v:["--version"]},worktree:{phrase:"gitChange",changes:!0,f:["add","list","remove","prune","lock","unlock","move","repair","-f","--force","--detach","--checkout","--no-checkout","--lock","--orphan","-q","--quiet","--porcelain","-v","--verbose","--track","--no-track","--guess-remote"],v:["-b","-B","--reason","--expire"]},am:{phrase:"gitChange",changes:!0,f:["--abort","--continue","--skip","--quit","-3","--3way","-s","--signoff","-k","--keep","-q","--quiet","--show-current-patch"],v:["-p","--whitespace","--directory"]}},rd=[...new Set(Object.values(Xa).flatMap(e=>[...e.f??[],...e.v??[]]))],ld=["--config","--config-env","--exec","--upload-pack","--receive-pack","--template","--ext-diff","--open-files-in-pager","--git-dir","--work-tree","--exec-path","--namespace","--super-prefix","--separate-git-dir","--textconv","--strategy-option=theirs-exec"],dd=["submodule","bisect","filter-branch","filter-repo","difftool","mergetool","hook","daemon","instaweb","credential","credential-store","credential-cache","send-email","svn","p4","web--browse","upload-pack","receive-pack","shell","fsmonitor--daemon","archimport","cvsimport","cvsserver","quiltimport","imap-send","remote-ext","run-command"],cd=new Set(["commit","switch","branch","show","log","diff","checkout","shortlog","grep","ls-files","apply"]),ud=new Set(["clone","fetch","pull","ls-remote","archive"]);T(["git"],(e,t)=>{let i=0,o=t.cwd;for(;i<e.length;i++){const r=e[i];if(r==="-C"){const l=e[++i];if(l===void 0){t.parsed=!1;return}F(t,[l]),o=Y(t,l)[0]?.abs??null;continue}if(!["--no-pager","-P","--paginate","-p","--no-optional-locks","--no-replace-objects","--literal-pathspecs","--glob-pathspecs","--noglob-pathspecs","--icase-pathspecs","--no-advice"].includes(r)){if(r==="--version"||r==="--help"){f(t,"gitInfo");return}if(r.startsWith("-")){t.parsed=!1;return}break}}const a=e[i],n=e.slice(i+1);if(a!==void 0&&dd.includes(a)){t.parsed=!1;return}for(const r of n){const l=r.includes("=")?r.slice(0,r.indexOf("=")):r;if(ld.includes(l)){t.parsed=!1;return}if((r==="-c"||r.startsWith("-c")&&r.length>2&&!r.startsWith("--"))&&!cd.has(a??"")){t.parsed=!1;return}if((r==="-u"||r.startsWith("-u")&&r.length>2&&!r.startsWith("--"))&&ud.has(a??"")){t.parsed=!1;return}if(a==="grep"&&(r==="-O"||r.startsWith("-O")&&!r.startsWith("--"))){t.parsed=!1;return}if(a==="rebase"&&(r==="-x"||r.startsWith("-x")&&!r.startsWith("--"))){t.parsed=!1;return}}const s=t.cwd;t.cwd=o;try{if(a===void 0){f(t,"gitInfo");return}for(let c=0;c<n.length;c++){const u=n[c];if(u==="--")break;const p=u.includes("=")?u.slice(0,u.indexOf("=")):u;(p==="--output"||p.length>=4&&p.startsWith("--ou")&&"--output".startsWith(p))&&M(t,[u.includes("=")?u.slice(u.indexOf("=")+1):n[c+1]??""])}if(a==="config"){const c=n.map(u=>u.toLowerCase());if(n.some(u=>["--get","--get-all","--list","-l","--get-regexp","--show-origin","--show-scope","get","list"].includes(u))&&n.length<=3){f(t,"gitInfo");return}if(c.some(u=>["core.","alias.","filter.","include","credential","command","textconv","hook","sshcommand","pager","editor","diff.","merge.","url.","http.","gpg.","protocol","remote.","submodule","sequence"].some(p=>u.includes(p)))){t.parsed=!1;return}C(t,"changes-git","medium"),f(t,"gitOther",{sub:a}),C(t,"unknown-command","medium");return}const r=Xa[a];if(!r){f(t,"gitOther",{sub:a}),C(t,"unknown-command","medium");return}const l=q(t,n,{...r,f:[...r.f??[],"-q","--quiet","-h","--help"]});if((a==="branch"||a==="tag")&&!H(l,"-d","-D","-m","-M","-c","-C","--delete","--move","--copy","-f","--force","-u","--set-upstream-to","--unset-upstream","-t","--track","--no-track","--edit-description")&&!(a==="tag"&&H(l,"-a","-s","--annotate","--sign","-m","-F","--message","--file","-v","--verify"))&&(l.operands.length===0||H(l,"-l","--list"))||a==="worktree"&&l.operands[0]==="list"){f(t,"gitInfo");return}switch(r.changes&&C(t,"changes-git","medium"),r.net&&C(t,"uses-network","medium"),a){case"diff":H(l,"--no-index")&&F(t,l.operands),f(t,"gitDiff");return;case"format-patch":M(t,O(l,"-o","--output-directory")),H(l,"-o","--output-directory","--stdout")||M(t,["."]),f(t,"gitOther",{sub:a});return;case"archive":M(t,O(l,"-o")),F(t,O(l,"--add-file")),f(t,"gitOther",{sub:a});return;case"bundle":l.operands[0]==="create"?M(t,l.operands.slice(1,2)):F(t,l.operands.slice(1,2)),f(t,"gitOther",{sub:a});return;case"worktree":{const[c,u]=l.operands;c==="add"||c==="move"?M(t,c==="move"?l.operands.slice(1,3):u!==void 0?[u]:[]):c==="remove"&&qe(t,u!==void 0?[u]:[]),f(t,"gitChange",{sub:a});return}case"add":F(t,l.operands),f(t,"gitAdd",{paths:R(t,l.operands.length?l.operands:["."])});return;case"commit":F(t,O(l,"-F","--file","-t","--template")),f(t,"gitCommit");return;case"clone":{const c=l.operands[0]??"…",u=(()=>{let S=vl(c);return S=S.slice(S.lastIndexOf("/")+1),S=S.slice(S.lastIndexOf(":")+1),S.endsWith(".git")?S.slice(0,-4):S})();M(t,[l.operands[1]??(u||".")]);const p=c.indexOf(":"),h=c.indexOf("/"),b=p>0&&(h<0||p<h)&&!c.startsWith("/")&&!c.startsWith(".")&&!c.startsWith("~");c.startsWith("file://")||!ye(c)&&!b?F(t,[c.startsWith("file://")?c.slice(7):c]):C(t,"uses-network","medium",{host:he(c.includes("://")?c:c.slice(c.indexOf("@")+1).split(":")[0]??c)}),f(t,"gitClone",{url:Sl(c)});return}case"push":case"pull":case"fetch":f(t,"gitSync",{sub:a});return;case"rm":H(l,"--cached")||qe(t,l.operands),f(t,"gitChange",{sub:a});return;case"clean":H(l,"-n","--dry-run")||qe(t,l.operands.length?l.operands:["."]),f(t,"gitChange",{sub:a});return;case"branch":case"tag":f(t,"gitChange",{sub:a});return;case"remote":{const c=l.operands[0];if(c===void 0||c==="show"||c==="get-url"){f(t,"gitInfo");return}C(t,"changes-git","medium"),f(t,"gitChange",{sub:a});return}case"stash":f(t,"gitChange",{sub:a});return;default:f(t,r.phrase,r.phrase==="gitChange"?{sub:a}:{})}}finally{t.cwd=s}});T(["brew","apt","apt-get","port","yum","dnf","apk"],(e,t,i)=>{const o=e.find(l=>!l.startsWith("-")),a=["install","reinstall","upgrade","tap","bundle","uninstall","remove","rm","purge","autoremove"].includes(o??""),n=q(t,e,a?{any:!0,v:["-o","--option","-t","--target-release"]}:{f:["--versions","--json","--formula","--formulae","--cask","--casks","-1","-l","--full-name","--installed","--upgradable","-a","--all","--quiet","-q","-v","--verbose","--multiple","--pinned","--desc","--eval-all"],v:[]}),[s,...r]=n.operands;if(s==="install"||s==="reinstall"||s==="upgrade"||s==="tap"||i==="brew"&&s==="bundle"){C(t,"installs-packages","medium"),C(t,"uses-network","medium"),C(t,"writes-outside-project","high"),f(t,"systemInstall",{packages:le(r)});return}if(s==="uninstall"||s==="remove"||s==="rm"||s==="purge"||s==="autoremove"){C(t,"installs-packages","medium"),C(t,"writes-outside-project","high"),f(t,"pkgRemove",{packages:le(r)});return}if(s===void 0||["list","ls","info","search","--prefix","--version","config","outdated","deps","leaves","show","policy","desc","home","doctor"].includes(s)){f(t,"pkgInfo",{tool:i});return}f(t,"pkgOther",{tool:i,sub:s}),C(t,"unknown-command","medium")});const Za=e=>e.length>0&&[...e].every(t=>t>="A"&&t<="Z"||t>="0"&&t<="9");T(["kill"],(e,t)=>{C(t,"kills-processes","medium");let i=0;if(e[0]==="-l"||e[0]==="-L"){f(t,"sysInfo");return}e[0]==="-s"||e[0]==="-n"?i=2:e[0]!==void 0&&e[0]!=="--"&&e[0].startsWith("-")&&!e[0].startsWith("-$")&&(dt(e[0].slice(1))||Za(e[0].slice(1)))&&(i=1),e[i]==="--"&&i++;const o=e.slice(i);for(const a of o)a==="0"||a.startsWith("-")&&(dt(a.slice(1))||a.startsWith("-$"))?C(t,"kills-processes","high",{target:a}):!dt(a)&&!a.startsWith("%")&&!a.startsWith("$")&&oe(t,a);f(t,"kill",{targets:le(o),n:o.length})});T(["pkill","killall"],(e,t,i)=>{const o=e.filter(r=>r.startsWith("-")&&Za(r.slice(1))&&!["-I","-U","-G","-P","-F","-M","-N"].includes(r)),a=q(t,e.filter(r=>!o.includes(r)),{num:!0,f:i==="pkill"?["-f","-i","-l","-n","-o","-x","-v","-a","-I","-q","--full","--exact","--newest","--oldest"]:["-v","-s","-e","-I","-q","-m","-z","-d","--exact","--interactive","--quiet","--regexp","-w","--wait"],v:["-u","-U","-g","-G","-t","-s","-P","-F","-c","-j","-M","-N","--signal","-SIGNAL"]});F(t,O(a,"-F"));const n=a.operands,s=n.some(r=>r===""||r==="."||r===".*"||r==="^"||r==="*");C(t,"kills-processes",s?"high":"medium"),f(t,"kill",{targets:le(n),n:n.length})});T(["sleep"],(e,t)=>{q(t,e,{}),f(t,"sleep",{seconds:e[0]??"…"})});T(["echo"],(e,t)=>{t.stdout!==null?f(t,"writeText",{path:t.stdout}):f(t,"print")});T(["printf"],(e,t)=>{if(e[0]==="-v"){if((e[1]??"").includes("[")){t.parsed=!1;return}f(t,"setVar",{name:e[1]??"…"});return}t.stdout!==null?f(t,"writeText",{path:t.stdout}):f(t,"print")});T(["basename","dirname","seq","expr","yes"],(e,t)=>{q(t,e,{any:!0}),f(t,"print")});T(["jq","gojq"],(e,t)=>{const i=new Set(["--arg","--argjson","--slurpfile","--rawfile"]),o=["-f","--from-file","--indent","-L"],a=[];let n=null;for(let s=0;s<e.length;s++){const r=e[s];if(r==="--args"||r==="--jsonargs")break;if(i.has(r)){const l=e[s+2];(r==="--slurpfile"||r==="--rawfile")&&l!==void 0&&F(t,[l]),s+=2;continue}if(o.includes(r)){const l=e[++s];(r==="-f"||r==="--from-file")&&l!==void 0&&(F(t,[l]),n=l);continue}r.startsWith("-")&&r!=="-"&&!r.includes("$")||(n===null?n=r:a.push(r))}F(t,a),a.length?f(t,"json",{paths:R(t,a)}):f(t,"jsonPipe")});T(["yq"],(e,t)=>{if(e.some(a=>a==="-s"||a.startsWith("--split-exp")||a.startsWith("--split"))){t.parsed=!1;return}const i=q(t,e,{f:["-i","--inplace","-e","--exit-status","-P","--prettyPrint","-C","--colors","-M","--no-colors","-n","--null-input","-N","--no-doc","-r","--unwrapScalar","-j","--tojson","-0","--nul-output","-v","--verbose","--front-matter"],v:["-o","--output-format","-p","--input-format","--indent","-I","--from-file","--expression"]}),o=i.operands.slice(O(i,"--from-file").length?0:1);if(F(t,[...o,...O(i,"--from-file")]),H(i,"-i","--inplace")){M(t,o),f(t,"editText",{paths:R(t,o)});return}o.length?f(t,"json",{paths:R(t,o)}):f(t,"jsonPipe")});function md(e){ue.add(e.length);const t=e.length;let i=0;const o=s=>s!==void 0&&s>="0"&&s<="9",a=()=>{for(;i<t&&(e[i]===" "||e[i]===" ");)i++},n=()=>{if(e[i]==="$")return i++,!0;if(o(e[i])){for(;o(e[i]);)i++;if(e[i]==="~")for(i++;o(e[i]);)i++;return!0}if(e[i]==="/"){for(i++;i<t&&e[i]!=="/";){if(e[i]==="\\"&&i++,e[i]===`
18
+ `){$+=2;break}g(),d+=x,$+=2;break}case"'":g(),I=!0,$++;break;case'"':g(),w=!0,$++;break;case"`":return W();case"$":{const x=o[$+1];if(x==="("||x==="'"||x==='"'||j($))return W();if(x==="{"){const V=X($+1);if(V<0)return W();c=!0,d+=o.slice($,V),$=V;break}c=!0,d+=N,$++;break}case"#":if(!c)return W();d+=N,$++;break;case";":if(o[$+1]===";"||o[$+1]==="&"||!L(";"))return W();$++;break;case"&":if(o[$+1]==="&"){if(!L("&&"))return W();$+=2;break}if(o[$+1]===">"){if(!S()||($+=2,o[$]===">"&&$++,!A("&>",null)))return W();break}if(!L("&"))return W();$++;break;case"|":if(o[$+1]==="|"){if(!L("||"))return W();$+=2;break}if(!L("|"))return W();$+=o[$+1]==="&"?2:1;break;case">":case"<":{let x=null;if(c&&u===-1&&It(d))x=d,d="",c=!1;else if(!S())return W();const V=o[$+1];if(N==="<"){if(V==="<"||V==="("||V===">")return W();if(V==="&"){if(!A("dup<",x))return W();$+=2;break}if(!A("<",x))return W();$++;break}if(V==="(")return W();if(V===">"){if(o[$+2]==="&"||o[$+2]==="("||o[$+2]==="|"||!A(">>",x))return W();$+=2;break}if(V==="&"){if(!A("dup>",x))return W();$+=2;break}if(!A(">",x))return W();$+=V==="|"?2:1;break}case"(":case")":return W();default:c=!0,d+=N,$++}}return I||w||!L(null)||n.length===0?W():{commands:n,parsed:!0,separators:s}}}const Xe={low:0,medium:1,high:2},go=["outside-sandbox","elevated","deletes-files","writes-outside-project","runs-code","complex","unknown-command","uses-network","installs-packages","kills-processes","changes-git","reads-outside-project"],St=6,vo=120;class tl{byId=new Map;add(t,i,o){const a=this.byId.get(t);a&&Xe[a.risk]>=Xe[i]||this.byId.set(t,o?{id:t,risk:i,params:o}:{id:t,risk:i})}has(t){return this.byId.has(t)}list(){return[...this.byId.values()].sort((t,i)=>Xe[i.risk]-Xe[t.risk]||go.indexOf(t.id)-go.indexOf(i.id))}}function il(e,t){ue.add(e.length);let i="";for(let o=0;o<e.length;o++){const a=e.charCodeAt(o);i+=a===9||a===10?" ":Oa(a)?"?":e[o]}if(t.length>1){const o=t.endsWith("/")?t.slice(0,-1):t;let a="",n=0;for(;;){const s=i.indexOf(o,n);if(s<0){a+=i.slice(n);break}const r=i[s+o.length],l=r===void 0||!/[\p{L}\p{N}_.\-]/u.test(r);a+=i.slice(n,s)+(l?"~":o),n=s+o.length}i=a}if(i.length>vo){let o=i.slice(0,vo-1);const a=o.charCodeAt(o.length-1);a>=55296&&a<=56319&&(o=o.slice(0,-1)),i=`${o}…`}return i}function bo(e,t){const i={};for(const[o,a]of Object.entries(e))i[o]=typeof a=="string"?il(a,t):a;return i}function ol(e,t,i,o){const n=(e.length>St?e.slice(0,St):e).map(l=>({key:l.key,params:bo(l.params,o)}));e.length>St&&n.push({key:"explain.more",params:{count:e.length-St}});const s=t.list().map(l=>l.params?{...l,params:bo(l.params,o)}:l),r=s.reduce((l,d)=>Xe[d.risk]>Xe[l]?d.risk:l,"low");return{summary:n,indicators:s,risk:r,parsed:i}}const al=4,nl=32,sl=3,rl=4096;function ll(e){return e==="/private/tmp"||e.startsWith("/private/tmp/")||e==="/private/var"||e.startsWith("/private/var/")||e==="/private/etc"||e.startsWith("/private/etc/")?e.slice(8):e}function be(e){ue.add(e.length);const t=[];let i=0;for(let o=0;o<=e.length;o++)if(o===e.length||e[o]==="/"){const a=e.slice(i,o);if(i=o+1,a===""||a===".")continue;if(a===".."){t.pop();continue}t.push(a)}return ll(`/${t.join("/")}`)}const xe=(e,t)=>t==="/"||e===t||e.startsWith(`${t}/`),$o=e=>e.includes("*")||e.includes("?")||e.includes("["),dl=e=>e.length>=2&&e[0]==="."&&(e[1]==="*"||e[1]==="?"||e[1]==="["),yo=new WeakMap;function _a(e){const t=yo.get(e);if(t)return t;const i=cl(e);return yo.set(e,i),i}function cl(e){const t=e.tmpDir?be(e.tmpDir):null;return{project:be(e.projectDir),work:e.workDir?be(e.workDir):null,home:be(e.home),tmpRoots:["/tmp",...t?[t]:[]],tmpDir:t}}function ul(e,t){return t.work&&xe(e,t.work)?"work":xe(e,t.project)?"project":t.tmpRoots.some(i=>xe(e,i))?"tmp":"outside"}function wo(e,t){return e==="/"||e===t.home||xe(t.project,e)||t.tmpRoots.includes(e)}function ml(e){let t=[e];for(let i=0;;i++){const o=[];let a=!1;for(const n of t){let s=0,r=!1;for(;!r;){const l=n.indexOf("{",s);if(l<0){o.push(n);break}let d=-1,c=!1;for(let h=l+1;h<n.length;h++){const b=n[h];if(b==="{")return null;if(b===","&&(c=!0),b==="}"){d=h;break}}if(d<0){o.push(n);break}if(!c){s=d+1;continue}const u=n.slice(0,l),p=n.slice(d+1);for(const h of n.slice(l+1,d).split(","))o.push(u+h+p);a=!0,r=!0}if(o.length>nl)return null}t=o;for(const n of o)ue.add(n.length);if(!a)return t;if(i+1>=al)return t.some(n=>n.includes("{")&&n.includes(","))?null:t}}const si=(e,t)=>{for(const i of[`$${t}`,`\${${t}}`]){if(e===i)return"";if(e.startsWith(`${i}/`))return e.slice(i.length)}return null};function Ba(e,t,i,o){ue.add(e.length+(t?.length??0));const a=[{cls:"unknown",abs:null,raw:e,critical:!0}];if(e==="")return a;let n=e;if(n==="~"||n.startsWith("~/"))n=i.home+n.slice(1);else{if(n.startsWith("~"))return a;{const p=si(n,"HOME"),h=si(n,"TMPDIR"),b=si(n,"PWD");if(p!==null)n=i.home+p;else if(b!==null){if(t===null)return a;n=t+b}else if(h!==null)if(i.tmpDir)n=i.tmpDir+h;else return h.includes("$")||h.split("/").includes("..")?a:[{cls:"tmp",abs:null,raw:e,critical:h===""||h==="/"||$o(h.split("/")[1]??"")}]}}if(n.includes("$"))return a;if(!n.startsWith("/")){if(t===null)return a;n=`${t}/${n}`}if(n.length>rl)return a;const s=n.split("/"),r=[];for(let p=0;p<s.length;p++)if(dl(s[p])){if(o>=sl)return a;const h=[...s.slice(0,p),"..",...s.slice(p+1)].join("/");for(const b of Ba(h,t,i,o+1))r.push({...b,raw:e,critical:!0});break}const l=be(n),d=l.split("/").slice(1),c=d.findIndex($o),u=c>=0?wo(`/${d.slice(0,c).join("/")}`,i):wo(l,i);return[{cls:ul(l,i),abs:l,raw:e,critical:u},...r]}function gi(e,t,i){const o=_a(i),a=ml(e);if(!a)return[{cls:"unknown",abs:null,raw:e,critical:!0}];const n=t===null?null:be(t);return a.flatMap(s=>Ba(s,n,o,0))}function ne(e,t){if(e.abs===null)return e.raw;const i=_a(t),o=e.abs,a=t.opaqueRoot?be(t.opaqueRoot):null;if(xe(o,i.project))return o===i.project?a&&xe(o,a)?e.raw:`${i.project.slice(i.project.lastIndexOf("/")+1)}/`:o.slice(i.project.length+1);if(i.tmpDir&&xe(o,i.tmpDir))return o===i.tmpDir?"$TMPDIR":`$TMPDIR/${o.slice(i.tmpDir.length+1)}`;if(i.home!=="/"&&xe(o,i.home))return o===i.home?"~":`~/${o.slice(i.home.length+1)}`;if(a&&xe(o,a))return e.raw;const n=o.split("/").slice(1);return n.length<=3?o:`/${n[0]}/…/${n[n.length-1]}`}function ht(e){return e==="/dev/null"||e==="/dev/stdout"||e==="/dev/stderr"||e==="/dev/stdin"||e==="/dev/tty"||e==="/dev/zero"||e==="/dev/random"||e==="/dev/urandom"||e!==null&&e.startsWith("/dev/fd/")}const pl=e=>e.lastIndexOf("/")<=0?"/":e.slice(0,e.lastIndexOf("/")),f=(e,t,i={})=>{e.phrases.push({key:`explain.${t}`,params:i})},C=(e,t,i,o)=>{t==="uses-network"&&(e.usedNet=!0),e.ind.add(t,i,o)},oe=(e,t)=>C(e,"unknown-command","medium",{option:t}),ri="$MOTION_STUDIO_INPUT",fl=200,hl=e=>({cls:"unknown",abs:null,raw:e,critical:!0}),gl=e=>!e.startsWith("/")&&!e.startsWith("~")&&!e.startsWith("$");function Y(e,t,i=e.cwd){if(e.found&&e.found.token!==""&&t.includes(e.found.token))return e.found.locs;const o=gi(t,i,e.ctx);if(i===e.cwd&&e.altCwds.length>0&&gl(t))for(const a of e.altCwds)o.push(...gi(t,a,e.ctx));return o}function le(e){const t=[...new Set(e.filter(i=>i!==""))];return t.length===0?"…":t.length>3?`${t.slice(0,3).join(", ")} +${t.length-3}`:t.join(", ")}function Wa(e,t,i=e.cwd){const o=[],a=new Set;for(const n of t)if(o.length<3){const s=Y(e,n,i)[0];if(s){const r=ne(s,e.ctx);o.includes(r)||o.push(r)}}else a.add(n);return o.length===0?{s:"…",n:0}:{s:a.size?`${o.join(", ")} +${a.size}`:o.join(", "),n:o.length+a.size}}const P=(e,t,i=e.cwd)=>Wa(e,t,i).s;function Ne(e,t,i,o,a={}){const n=Wa(e,o);f(e,t,{...a,[i]:n.s,n:n.n})}const ce=e=>e.startsWith("/")||e.startsWith("~")||e.startsWith("$")||e.startsWith(".")||e.includes("/"),Le=e=>{if(ce(e))return!0;const t=e.lastIndexOf("."),i=e.slice(t+1);if(t<=0||i.length<1||i.length>5)return!1;for(const o of i)if(!(o>="a"&&o<="z"||o>="A"&&o<="Z"||o>="0"&&o<="9"))return!1;for(const o of e)if(o===" "||o==="="||o===":"||o===" ")return!1;return!0},vl=e=>{let t=e.length;for(;t>1&&e[t-1]==="/";)t--;return e.slice(0,t)},dt=e=>e.length>0&&[...e].every(t=>t>="0"&&t<="9"),_i=(e,t)=>e.written.some(i=>t===i||t.startsWith(`${i}/`));function ja(e,t,i){if(t===null)return;const o=t.split("/");o.includes(".git")?(e.add("changes-git","medium",{path:i}),e.add("runs-code","medium",{path:i})):(o.includes("bin")||o.includes(".bin"))&&e.add("runs-code","medium",{path:i})}function F(e,t,i=e.cwd){for(const o of t)for(const a of Y(e,o,i))ht(a.abs)||(a.cls==="outside"||a.cls==="unknown")&&C(e,"reads-outside-project","medium",{path:ne(a,e.ctx)})}function M(e,t,i=e.cwd){for(const o of t)for(const a of Y(e,o,i))ht(a.abs)||((a.cls==="outside"||a.cls==="unknown")&&C(e,"writes-outside-project","high",{path:ne(a,e.ctx)}),a.abs!==null&&(e.written.length<fl&&e.written.push(a.abs),ja(e.ind,a.abs,ne(a,e.ctx))))}function qe(e,t,i=e.cwd){if(t.length===0){C(e,"deletes-files","medium");return}for(const o of t)for(const a of Y(e,o,i)){if(ht(a.abs))continue;const n=a.cls==="outside"||a.cls==="unknown"||a.critical;C(e,"deletes-files",n?"high":"medium",{path:ne(a,e.ctx)})}}function bl(e,t){for(const i of t)for(const o of Y(e,i))ht(o.abs)||(o.cls==="outside"||o.cls==="unknown"||o.critical)&&C(e,"deletes-files","high",{path:ne(o,e.ctx)})}function fe(e,t){const i=Y(e,t),o=i.every(n=>n.cls==="work"||n.cls==="project"),a=i.some(n=>n.abs!==null&&_i(e,n.abs));C(e,"runs-code",o&&!e.chainNet&&!a?"low":"medium"),F(e,[t])}function De(e,t){const i=Y(e,t);i.some(o=>o.cls!=="work"&&o.cls!=="project")&&C(e,"runs-code","medium",{path:ne(i[0],e.ctx)}),F(e,[t])}const qt=e=>["/System/Library/Fonts/","/Library/Fonts/","/usr/share/fonts/","/usr/local/share/fonts/","/opt/homebrew/share/fonts/"].some(t=>e.startsWith(t))&&!e.includes("/../");function te(e,t){for(const i of t){const o=i.includes("=")?i.slice(i.indexOf("=")+1):i;ce(o)?M(e,[o]):ce(i)&&!i.startsWith("-")&&M(e,[i])}}const Ve=e=>["/dev/stdin","/dev/fd/0","/proc/self/fd/0"].includes(Di(e))?!0:!e.startsWith("/")||e.length>256?!1:/^\/(?:dev\/stdin|dev\/fd\/0+|proc\/(?:self|thread-self|[0-9]+)\/fd\/0+)$/.test(be(e));function J(e,t){if(e.stdinFile!==null){f(e,t==="python"?"pythonScript":t==="node"?"nodeScript":"runScript",{script:e.stdinFile}),C(e,"runs-code","medium");return}f(e,"runsInput"),C(e,"runs-code",e.pipedIn&&e.pipeNet?"high":"medium")}const $l=["rm_rf","rm_r","FileUtils.rm","File.delete","rmtree","os.remove","unlink","rmdir","remove(","rmSync","rimraf","fs.rm","shutil.move","'rm'",'"rm"',"rm -"],yl=["do shell script","doShellScript","system(","os.system","subprocess","os.popen","os.exec","os.spawn","pty.spawn","child_process","execSync","spawn(","exec(","eval(","__import__","execFile","process.binding","shell_exec","passthru","popen","proc_open","Bun.spawn","Deno.run","Deno.Command"],wl=["`","system ","exec ","%x(","%x{","qx(","qx{","qx/"],kl=["urllib","requests","http.client","httpx","socket","fetch(","http.get","https.get","http.request","https.request","net.connect","ftplib","smtplib","Net::","LWP","curl_","file_get_contents('http","open-uri"];function Te(e,t,i="shellish"){ue.add(t.length*4);const o=yl.some(a=>t.includes(a))||i==="shellish"&&wl.some(a=>t.includes(a));C(e,"runs-code",o?"high":"medium"),$l.some(a=>t.includes(a))&&C(e,"deletes-files","high"),kl.some(a=>t.includes(a))&&C(e,"uses-network","medium")}function q(e,t,i={}){ue.add(t.length);const o=new Set(i.f??[]),a=new Set(i.v??[]),n=[],s=new Map,r=[],l=(u,p)=>{if(p===void 0)return;const h=s.get(u);h?h.push(p):s.set(u,[p])},d=u=>{i.any||oe(e,u)};let c=!1;for(let u=0;u<t.length;u++){const p=t[u];if(c||p==="-"||!p.startsWith("-")||p.includes("$")){r.push(p);continue}if(p==="--"){c=!0;continue}if(p.startsWith("--")){const h=p.indexOf("="),b=h>0?p.slice(0,h):p;n.push(b),!o.has(b)&&!a.has(b)&&d(b),h>0?l(b,p.slice(h+1)):a.has(b)&&l(b,t[++u]);continue}if(a.has(p)){n.push(p),l(p,t[++u]);continue}if(o.has(p)){n.push(p);continue}if(i.num&&dt(p.slice(1))){n.push(p);continue}if(i.long1){n.push(p),d(p);continue}for(let h=1;h<p.length;h++){const b=`-${p[h]}`;if(n.push(b),a.has(b)){const g=p.slice(h+1);l(b,g!==""?g:t[++u]);break}o.has(b)||d(b)}}return{flags:n,values:s,operands:r}}const H=(e,...t)=>t.some(i=>e.flags.includes(i)),O=(e,...t)=>t.flatMap(i=>e.values.get(i)??[]);function ye(e){const t=e.indexOf("://");if(t<=0)return!1;for(let i=0;i<t;i++){const o=e[i];if(!(o>="a"&&o<="z"||o>="A"&&o<="Z"||o>="0"&&o<="9"||o==="+"||o==="-"||o==="."))return!1}return!0}function he(e){let t=e;const i=t.indexOf("://");i>=0&&(t=t.slice(i+3));let o=t.length;for(const s of["/","?","#"]){const r=t.indexOf(s);r>=0&&r<o&&(o=r)}t=t.slice(0,o);const a=t.lastIndexOf("@");if(a>=0&&(t=t.slice(a+1)),t==="")return"…";let n=!0;for(let s=0;s<t.length;s++)if(t.charCodeAt(s)>126){n=!1;break}if(!n)try{return new URL(`http://${t}`).host}catch{return"?"}return t}function Sl(e){if(!ye(e)){const n=e.indexOf("@");return n>=0?e.slice(n+1):e}const t=he(e),i=e.slice(e.indexOf("://")+3),o=i.indexOf("/");let a=o>=0?i.slice(o):"";for(const n of["?","#"]){const s=a.indexOf(n);s>=0&&(a=a.slice(0,s))}return t+a}const vi=new Map,T=(e,t)=>{for(const i of e)vi.set(i,t)};T(["cd","pushd"],(e,t)=>{const o=q(t,e,{f:["-P","-L","-e","-@"]}).operands[0];if(o===void 0){t.cdTarget=[t.ctx.home],f(t,"cd",{path:"~"});return}if(o==="-"){t.cdTarget=[null],f(t,"cd",{path:"-"});return}const a=Y(t,o);f(t,"cd",{path:P(t,[o])}),t.cdTarget=[...new Set(a.map(n=>n.abs!==null&&!n.abs.includes("*")&&!n.abs.includes("?")?n.abs:null))]});T(["popd"],(e,t)=>{t.cdTarget=[null],f(t,"cd",{path:"…"})});T(["ls"],(e,t)=>{const i=q(t,e,{any:!0,v:["-I","--ignore","-w","--width","-T","--tabsize","--format","--sort","--time-style","-D","--hide","--block-size"]}),o=i.operands.length?i.operands:["."];F(t,o),f(t,"list",{paths:P(t,o)})});T(["cat"],(e,t)=>{const o=q(t,e,{any:!0}).operands.filter(a=>a!=="-");F(t,o),o.length?f(t,"show",{paths:P(t,o)}):f(t,"filterPipe")});T(["head","tail"],(e,t,i)=>{const a=q(t,e,{any:!0,num:!0,v:["-n","-c","-b","--lines","--bytes","-s","--sleep-interval","--pid"]}).operands.filter(s=>s!=="-");F(t,a);const n=i==="head"?"head":"tail";a.length?f(t,`${n}File`,{paths:P(t,a)}):f(t,`${n}Pipe`)});T(["file"],(e,t)=>{const i=q(t,e,{f:["-b","-i","-I","-L","-h","-z","-Z","-k","-N","-n","-p","-r","-s","-0","-d","-E","--mime","--mime-type","--mime-encoding","--brief","--dereference","--no-dereference","--keep-going","--extension","--apple"],v:["-m","-M","-F","-P","-e","-f","--magic-file","--separator","--exclude","--files-from","--parameter"]});F(t,[...i.operands,...O(i,"-f","--files-from","-m","-M","--magic-file")]),f(t,"fileType",{paths:P(t,i.operands)})});T(["wc"],(e,t)=>{const i=q(t,e,{any:!0,v:["--files0-from"]});F(t,[...i.operands,...O(i,"--files0-from")]),i.operands.length?f(t,"count",{paths:P(t,i.operands)}):f(t,"countPipe")});T(["mkdir"],(e,t)=>{const i=q(t,e,{f:["-p","-v","--parents","--verbose"],v:["-m","--mode"]});M(t,i.operands),Ne(t,"mkdir","paths",i.operands)});const xl={f:["-r","-R","-f","-i","-n","-p","-v","-a","-L","-H","-P","-X","-c","-l","-s","-x","-u","-T","-b","-d","--recursive","--force","--interactive","--no-clobber","--preserve","--no-preserve","--verbose","--archive","--update","--parents","--no-target-directory","--backup","--dereference","--no-dereference","--sparse","--reflink","--strip-trailing-slashes","--link","--symbolic-link","--one-file-system","--remove-destination","--attributes-only","--copy-contents"],v:["-t","--target-directory","-S","--suffix"]},Al={f:["-f","-i","-n","-v","-h","-u","-T","-b","--force","--interactive","--no-clobber","--verbose","--update","--backup","--strip-trailing-slashes","--no-target-directory","--no-copy"],v:["-t","--target-directory","-S","--suffix"]};T(["cp","mv"],(e,t,i)=>{const o=q(t,e,i==="mv"?Al:xl),a=O(o,"-t","--target-directory"),n=a.length?a:o.operands.slice(-1),s=a.length?o.operands:o.operands.slice(0,-1);i==="mv"?(bl(t,s),M(t,s)):F(t,s),M(t,n),f(t,i==="mv"?"move":"copy",{sources:P(t,s),dest:P(t,n)})});const ko={rm:{f:["-r","-R","-f","-i","-I","-d","-v","-P","-W","-x","--recursive","--force","--verbose","--dir","--interactive","--one-file-system","--no-preserve-root","--preserve-root"]},rmdir:{f:["-p","-v","--parents","--verbose","--ignore-fail-on-non-empty"]},unlink:{f:[]},shred:{f:["-f","-u","-v","-x","-z","--remove","--force","--zero","--exact","--verbose"],v:["-n","--iterations","-s","--size"]},srm:{f:["-r","-R","-f","-i","-v","-s","-m","-z","-n","-d","-x","-D","-E","--recursive","--force","--verbose","--simple","--medium","--zero"]},trash:{f:["-F","-v","-s","-y","-d","-f","-r","-i","-R"]}};T(Object.keys(ko),(e,t,i)=>{const o=q(t,e,ko[i]);qe(t,o.operands),f(t,"delete",{paths:P(t,o.operands)})});T(["touch"],(e,t)=>{const i=q(t,e,{f:["-a","-c","-m","-h","--no-create","--no-dereference"],v:["-t","-d","-r","-A","--date","--reference","--time"]});M(t,i.operands),F(t,O(i,"-r","--reference")),f(t,"touch",{paths:P(t,i.operands)})});const Cl=e=>e.length>1&&[...e].every(t=>"ugoa+-=rwxXst01234567,".includes(t))&&/[rwxXst]/.test(e);T(["chmod"],(e,t)=>{let i=!1;const o=[];for(const s of e){if(!i&&!s.startsWith("--")&&Cl(s)&&!["-R","-v","-f","-h"].includes(s)){i=!0;continue}o.push(s)}const a=q(t,o,{f:["-R","-v","-f","-h","-H","-L","-P","-c","--recursive","--verbose","--changes","--silent","--quiet","--no-preserve-root","--preserve-root"],v:["--reference"]}),n=i||H(a,"--reference")?a.operands:a.operands.slice(1);M(t,n),f(t,"chmod",{paths:P(t,n)})});T(["chown","chgrp","chflags","xattr"],(e,t,i)=>{const o=q(t,e,i==="xattr"?{f:["-l","-r","-s","-v","-x","-c","-d"],v:["-p","-w"]}:{f:["-R","-h","-v","-f","-H","-L","-P","-c","-x","--recursive","--no-dereference","--dereference","--verbose","--changes","--silent","--quiet"],v:["--reference","--from"]}),a=H(o,"--reference")||i==="xattr"?o.operands:o.operands.slice(1);M(t,a),f(t,"runs",{cmd:i}),C(t,"unknown-command","medium")});T(["ln"],(e,t)=>{const i=q(t,e,{f:["-s","-f","-n","-h","-i","-v","-F","-L","-P","-r","-T","-b","--symbolic","--force","--no-dereference","--relative","--verbose","--interactive","--backup","--logical","--physical"],v:["-t","--target-directory","-S","--suffix"]}),o=O(i,"-t","--target-directory"),a=o[0]??(i.operands.length>=2?i.operands[i.operands.length-1]:"."),n=o.length?i.operands:i.operands.length>=2?i.operands.slice(0,-1):i.operands;M(t,[a]);const s=Y(t,a)[0],l=H(i,"-s","--symbolic")?s?.abs?pl(s.abs):null:t.cwd;for(const d of n)for(const c of Y(t,d,l))(c.cls==="outside"||c.cls==="unknown"||c.cls==="tmp")&&C(t,"writes-outside-project","high",{path:ne(c,t.ctx)});f(t,"link",{link:P(t,[a]),target:le(n)})});T(["du"],(e,t)=>{const i=q(t,e,{any:!0,v:["-d","-B","--max-depth","--block-size","-t","--threshold","--exclude","-I","--files0-from"]}),o=i.operands.length?i.operands:["."];F(t,o),f(t,"size",{paths:P(t,o)})});const Tl=["-name","-iname","-path","-ipath","-wholename","-iwholename","-regex","-iregex","-type","-xtype","-maxdepth","-mindepth","-mtime","-mmin","-ctime","-cmin","-atime","-amin","-newer","-anewer","-cnewer","-size","-perm","-user","-group","-links","-inum","-samefile","-regextype","-printf","-uid","-gid","-fstype","-lname","-ilname","-newermt","-newerct","-newerat","-Bmin","-Btime","-used"],zl=["-empty","-print","-print0","-ls","-prune","-quit","-follow","-depth","-true","-false","-not","-and","-or","-a","-o","-nouser","-nogroup","-readable","-writable","-executable","-mount","-xdev","-noleaf","-delete","(",")","!",",","-d"];T(["find","gfind"],(e,t)=>{let i=0;for(;i<e.length&&["-H","-L","-P","-E","-X","-s","-x","-d","-O0","-O1","-O2","-O3"].includes(e[i]);)i++;const o=[];for(;i<e.length;i++){const r=e[i];if(r==="-f"){const l=e[++i];l!==void 0&&o.push(l);continue}if(r.startsWith("-")&&!r.includes("$")||r==="("||r==="!"||r===")")break;o.push(r)}o.length===0&&o.push("."),F(t,o);let a=!1,n=null;const s=[];for(;i<e.length;i++){const r=e[i];if(r==="-delete")a=!0;else if(r==="-fprint"||r==="-fprint0"||r==="-fls")M(t,[e[++i]??""]);else if(r==="-fprintf")M(t,[e[++i]??""]),i++;else if(r==="-exec"||r==="-execdir"||r==="-ok"||r==="-okdir"){const l=[];for(i++;i<e.length&&e[i]!==";"&&e[i]!=="+";i++)l.push(e[i]);if(l.length===0||Ui(l)){t.parsed=!1;return}n??=l[0],s.push(l)}else Tl.includes(r)?i++:zl.includes(r)||oe(t,r)}if(a&&qe(t,o),s.length){const r=new Map;for(const l of o)for(const d of Y(t,l)){const c=`${d.cls}|${d.critical}|${d.abs===null}`,u=r.get(c);u?u.length<3&&u.push(d):r.set(c,[d])}for(const l of r.values())for(const d of s)en(d,t,{token:"{}",locs:l})}n!==null?f(t,"findExec",{cmd:n,paths:P(t,o)}):a?f(t,"findDelete",{paths:P(t,o)}):f(t,"find",{paths:P(t,o)})});const Ft=["--create","--append","--update","--extract","--get","--list","--absolute-names","--file","--directory","--gzip","--gunzip","--bzip2","--xz","--zstd","--lzma","--auto-compress","--verbose","--exclude","--strip-components","--keep-old-files","--no-same-owner","--no-same-permissions","--to-stdout","--totals","--wildcards","--exclude-vcs","--remove-files","--overwrite","--skip-old-files","--preserve-permissions","--same-owner","--numeric-owner","--owner","--group","--mode","--mtime","--sort","--format","--transform","--exclude-from","--files-from","--null","--no-recursion","--one-file-system","--dereference","--hard-dereference","--quiet","--warning"],li=["--to-command","--checkpoint-action","--use-compress-program","--info-script","--new-volume-script","--rsh-command","--rmt-command","-I","-F"];T(["tar","bsdtar","gtar"],(e,t)=>{let i=null,o=null,a=null,n=!1,s=!1;const r=[],l="fCbTX",d="crutxvzjJaZOpPkmowqSlhLnsUB",c=(L,A)=>{A!==void 0&&(L==="f"?o=A:L==="C"?a=A:(L==="T"||L==="X")&&F(t,[A]))},u=(L,A,$)=>{for(let I=0;I<L.length;I++){const w=L[I];if(w==="c"||w==="r"||w==="u"?i="c":w==="x"?i="x":w==="t"?i="t":w==="P"&&(n=!0),w==="I"||w==="F")return t.parsed=!1,A;if(l.includes(w)){const X=L.slice(I+1);if($&&X!=="")return c(w,X),A;c(w,e[++A])}else d.includes(w)||oe(t,`-${w}`)}return A},p=Ft;for(let L=0;L<e.length;L++){const A=e[L];if(L===0&&!A.startsWith("-")){if(L=u(A,L,!1),!t.parsed)return;continue}if(A.startsWith("--")){const $=A.indexOf("="),I=$>0?A.slice(0,$):A,w=$>0?A.slice($+1):void 0;if(["--to-command","--use-compress-program","--checkpoint-action","--info-script","--new-volume-script","--rsh-command","--rmt-command"].includes(I)){t.parsed=!1;return}p.includes(I)||oe(t,I),I==="--create"||I==="--append"||I==="--update"?i="c":I==="--extract"||I==="--get"?i="x":I==="--list"?i="t":I==="--absolute-names"?n=!0:I==="--remove-files"?s=!0:I==="--file"?o=w??e[++L]??null:I==="--directory"?a=w??e[++L]??null:(I==="--files-from"||I==="--exclude-from")&&F(t,[w??e[++L]??""]);continue}if(A.startsWith("-")&&A.length>1&&!A.includes("$")){if(L=u(A.slice(1),L,!0),!t.parsed)return;continue}r.push(A)}const h=o,b=a,g=h!==null&&h!=="-"?[h]:[],S=b!==null?Y(t,b)[0]?.abs??null:t.cwd;if(i==="c")M(t,g),F(t,r,S),s&&qe(t,r,S),f(t,"archiveCreate",{archive:g.length?P(t,g):"…"});else if(i==="x"){F(t,g);const L=b??".";M(t,[L]),n&&C(t,"writes-outside-project","high",{path:"/"}),f(t,"archiveExtract",{archive:g.length?P(t,g):"…",dest:P(t,[L])})}else i==="t"?(F(t,g),f(t,"archiveList",{archive:g.length?P(t,g):"…"})):Jt(e,t,"tar")});T(["unzip"],(e,t)=>{(e.includes("-:")||e.includes("-^"))&&C(t,"writes-outside-project","high",{path:".."});const i=e.indexOf("-x"),o=(i>=0?e.slice(0,i):e).filter(l=>l!=="-:"&&l!=="-^"),a=q(t,o,{f:["-o","-n","-q","-qq","-l","-v","-t","-z","-Z","-p","-c","-j","-a","-aa","-b","-C","-L","-U","-u","-f","-X","-K","-M","-D","-V","-T","-W"],v:["-d","-P"]}),n=a.operands[0],s=n!==void 0?[n]:[];if(F(t,s),H(a,"-l","-v","-t","-z","-Z","-p","-c")){f(t,"archiveList",{archive:P(t,s)});return}const r=O(a,"-d")[0]??".";M(t,[r]),f(t,"archiveExtract",{archive:P(t,s),dest:P(t,[r])})});T(["zip"],(e,t)=>{if(e.some(l=>l==="-TT"||l.startsWith("--unzip-command"))){t.parsed=!1;return}const i=[];let o=!1;for(const l of e){if(l==="-x"||l==="-i"||l==="--exclude"||l==="--include"){o=!0;continue}l.startsWith("-")&&(o=!1),o||i.push(l)}const a=q(t,i,{num:!0,f:["-r","-q","-j","-m","-u","-f","-D","-X","-y","-v","-T","-o","-l","-ll","-0","-R","-FS","-g","-k","-A","-J","-e","--recurse-paths","--quiet","--junk-paths","--move","--update","--freshen","--no-dir-entries","--no-extra","--symlinks","--test","--grow","--filesync"],v:["-b","-n","-t","-tt","-O","--output-file","-P","--password","-Z","-s","-sp","--temp-path"]}),n=a.operands[0],s=n!==void 0?[n]:[],r=a.operands.slice(1);M(t,[...s,...O(a,"-O","--output-file")]),F(t,r),H(a,"-m","--move")&&qe(t,r),f(t,"archiveCreate",{archive:P(t,s)})});const Il=new Set(["-y","-n","-hide_banner","-nostdin","-stdin","-stats","-nostats","-shortest","-an","-vn","-sn","-dn","-re","-benchmark","-benchmark_all","-copyts","-start_at_zero","-accurate_seek","-noaccurate_seek","-report","-dump","-hex","-ignore_unknown","-copy_unknown","-debug_ts","-xerror","-autorotate","-noautorotate","-version","-buildconf","-formats","-codecs","-encoders","-decoders","-filters","-pix_fmts","-sample_fmts","-layouts","-L","-protocols","-muxers","-demuxers","-devices","-bsfs","-hwaccels","-colors","-sources","-sinks","-noautoscale","-nostdin","-h","-help","-copyinkf","-intra","-psnr","-vstats"]),Fl=new Set(["-i","-c","-codec","-vcodec","-acodec","-scodec","-b","-r","-s","-pix_fmt","-crf","-preset","-tune","-profile","-level","-g","-bf","-vf","-af","-filter","-filter_complex","-lavfi","-map","-ss","-t","-to","-f","-frames","-vframes","-aframes","-dframes","-ar","-ac","-ab","-aspect","-movflags","-loglevel","-v","-threads","-fps_mode","-vsync","-metadata","-map_metadata","-map_chapters","-framerate","-loop","-stream_loop","-start_number","-q","-qscale","-x264-params","-x265-params","-x264opts","-tag","-svtav1-params","-aom-params","-dump_attachment","-max_muxing_queue_size","-sample_fmt","-channel_layout","-ch_layout","-minrate","-maxrate","-bufsize","-pattern_type","-itsoffset","-sseof","-fs","-color_primaries","-color_trc","-colorspace","-color_range","-disposition","-safe","-probesize","-analyzeduration","-video_size","-pixel_format","-cq","-qp","-rc","-deadline","-cpu-used","-row-mt","-tile-columns","-lag-in-frames","-auto-alt-ref","-quality","-speed","-compression_level","-pred","-lossless","-sws_flags","-vtag","-atag","-b_strategy","-refs","-keyint_min","-sc_threshold","-apad","-async","-frame_size","-id3v2_version","-write_id3v1","-brand","-timecode","-max_interleave_delta","-avoid_negative_ts","-fflags","-flags","-strict","-thread_queue_size","-filter_threads","-filter_complex_threads","-hwaccel","-hwaccel_output_format","-hwaccel_device","-init_hw_device","-stats_period","-x","-y_pos","-alpha_quality","-pass","-plays","-final_delay","-gifflags","-dpi","-update","-frame_pts","-strftime","-qmin","-qmax","-allowed_extensions","-allow_sw","-realtime","-vbr","-application","-cutoff","-loop_output","-intra_refresh","-bsf","-vbsf","-absf","-af_threads","-bits_per_raw_sample"]),So=new Set(["-filter_complex_script","-filter_script","-attach","-hls_key_info_file","-key_info_file"]),xo=new Set(["-vstats_file","-passlogfile","-progress","-sdp_file","-hls_segment_filename","-segment_list","-master_pl_name","-hls_fmp4_init_filename","-hls_base_url","-dash_segment_filename","-init_seg_name","-media_seg_name","-stats_file","-report_file"]),Ll=new Set(["-v","-loglevel","-print_format","-of","-output_format","-select_streams","-show_entries","-read_intervals","-i","-o","-f","-analyzeduration","-probesize","-show_optional_fields","-threads","-sections"]),Ao=["http","https","tcp","udp","rtmp","rtmps","rtmpt","rtmpe","rtmpte","rtmpts","rtp","srt","ftp","sftp","tls","rtsp","rtsps","mmsh","mmst","gopher","gophers","icecast","smb","srtp","zmq","ipfs","ipns","unix","librist","rist","hls","prompeg","httpproxy","ws","wss"],Nl=["cache","async","crypto"];function se(e,t,i,o=0){if(o>3)return!1;if(t==="-"||t===""||t.startsWith("pipe:"))return!0;const a=t.indexOf(":"),n=t.indexOf("/"),s=a>1&&(n<0||a<n)&&!t.startsWith(".")&&!t.startsWith("~")&&!t.startsWith("$")?t.slice(0,a).toLowerCase():"";if(s.includes(","))return!1;if(s===""||![...s].every(d=>d>="a"&&d<="z"||d>="0"&&d<="9"||d==="+"||d==="-"||d==="."))return i?M(e,[t]):F(e,[t]),!0;const r=t.slice(a+1);if(s==="file")return se(e,r.startsWith("//")?r.slice(2):r,i,o+1);if(s==="data")return!0;if(s==="concat"){const d=r.split("|");return d.some(c=>c==="")?!1:d.every(c=>se(e,c,i,o+1))}const l=s.includes("+")?s.slice(s.lastIndexOf("+")+1):s;return Ao.includes(l)||Ao.includes(s)?(C(e,"uses-network","medium",{host:he(t)}),!0):Nl.includes(s)?se(e,r,i,o+1):!1}function Lt(e,t){const i=[];let o="",a=!1,n=0;for(let s=0;s<e.length;s++){const r=e[s];if(r==="\\"&&s+1<e.length){o+=r+e[s+1],s++;continue}if(r==="'"){a=!a,o+=r;continue}if(!a){if(r==="[")n++;else if(r==="]"&&n>0)n--;else if(n===0&&t.includes(r)){i.push(o),o="";continue}}o+=r}return i.push(o),ue.add(e.length),i}function Va(e){let t="",i=!1;for(let o=0;o<e.length;o++){const a=e[o];if(a==="'"){i=!i;continue}if(a==="\\"&&!i&&o+1<e.length){t+=e[o+1],o++;continue}t+=a}return t.trim()}function Ga(e){if(e.startsWith("/")||e.startsWith("~")||e.startsWith("./")||e.startsWith("../")||e.includes("/../")||e==="..")return!0;if(!e.includes("/")||[...e].some(i=>" ()*+<>,=".includes(i)))return!1;const t=e.lastIndexOf(".");return t>e.lastIndexOf("/")&&e.length-t-1>=1&&e.length-t-1<=5}const Pl={movie:["filename","#0"],amovie:["filename","#0"],subtitles:["filename","f","#0","fontsdir"],ass:["filename","f","#0","fontsdir"],drawtext:["textfile","fontfile"],lut3d:["file","#0"],lut1d:["file","#0"],haldclut:[],sendcmd:["filename","f","#0"],asendcmd:["filename","f","#0"],vidstabtransform:["input"],ocr:["datapath"],select:[],coreimage:[],afir:[],headphone:[],sofalizer:["sofa","#0"],dnn_processing:["model"],whisper:["model","vad_model"]},Rl={psnr:["stats_file","f","#0"],ssim:["stats_file","f","#0"],libvmaf:["log_path"],vmaf:["log_path"],metadata:["file"],ametadata:["file"],signature:["filename"],vidstabdetect:["result"],ebur128:[],identity:["stats_file","f"],msad:["stats_file","f"],corr:["stats_file","f"],whisper:["destination"]},Ol=["zmq","azmq","frei0r","frei0r_src","ladspa","lv2","lensfun"];function Co(e,t){for(const i of Lt(t,";"))for(const o of Lt(i,",")){let a=o.trim();for(;a.startsWith("[");){const p=a.indexOf("]");if(p<0)return!1;a=a.slice(p+1).trim()}const n=a.indexOf("=");let s=(n>=0?a.slice(0,n):a).trim(),r=n>=0?a.slice(n+1):"";const l=r.length?-1:s.indexOf("[");l>=0&&(s=s.slice(0,l));{let p=r.length;for(;p>0&&r[p-1]==="]";){const h=r.lastIndexOf("[",p-1);if(h<0)break;p=h}r=r.slice(0,p)}if(s.includes("@")&&(s=s.slice(0,s.indexOf("@"))),s=s.trim(),Ol.includes(s))return!1;if(r==="")continue;const d=Pl[s]??[],c=Rl[s]??[];let u=0;for(const p of Lt(r,":")){const h=p.indexOf("="),b=h>=0?p.slice(0,h).trim():`#${u++}`,g=Va(h>=0?p.slice(h+1):p);if(g!==""){if(d.includes(b)){if((b==="fontfile"||b==="fontsdir")&&qt(g.endsWith("/")?g:`${g}`))continue;if(!se(e,g,!1))return!1}else if(c.includes(b)){if(!se(e,g,!0))return!1}else if(Ga(g)&&!se(e,g,!0))return!1}}}return!0}const To=["sendcmd","zmq","textfile","metadata","stats_file","psnr","ssim","signature","whisper"],zo=["file=","filename=","movie=","amovie=","destination="];function Io(e){let t="";for(const i of e.toLowerCase())i!=="'"&&i!=="\\"&&i!=='"'&&(t+=i);return ue.add(t.length*(To.length+zo.length)),To.some(i=>t.includes(i))?!0:zo.some(i=>{for(let o=t.indexOf(i);o>=0;o=t.indexOf(i,o+1)){const a=o===0?"":t[o-1];if(!(a>="a"&&a<="z"||a>="0"&&a<="9"||a==="_"))return!0}return!1})}const Ml=["stats","dump-yuv","csv","analysis-save","analysis-reuse-file","recon","pass-stats","output"],El=["analysis-load","qpfile","cqmfile","cqm-file","zonefile","dhdr10-info","master-display-file","scaling-list","lambda-file"];function ql(e,t){for(const i of Lt(t,":")){const o=i.indexOf("=");if(o<0)continue;const a=i.slice(0,o).trim().toLowerCase(),n=Va(i.slice(o+1));if(Ml.includes(a)){if(!se(e,n,!0))return!1}else if(El.includes(a)){if(!se(e,n,!1))return!1}else if(Ga(n)&&!se(e,n,!0))return!1}return!0}function Ha(e,t,i){let o=!1;const a=[],n=[],s=b=>b.startsWith("-show_")&&b!=="-show_entries"&&b!=="-show_optional_fields"||b.startsWith("-count_")||["-hide_banner","-pretty","-unit","-prefix","-byte_binary_prefix","-sexagesimal","-bitexact","-version","-h","-help"].includes(b);let r=null,l=-1,d=!1;const c=(b,g,S)=>S==="lavfi"&&!g?(Io(b)&&(o=!0),Co(e,b)):S==="tee"&&g?b.split("|").every(L=>{const A=L.startsWith("[")?L.slice(L.indexOf("]")+1):L;return se(e,A,!0)}):se(e,b,g);for(let b=0;b<t.length;b++){const g=t[b];if(g.startsWith("-")&&g.length>1&&!g.includes("$")){if(i==="ffmpeg"?Il.has(g):s(g))continue;if(g.startsWith("-/")){o=!0,F(e,[t[++b]??""]),l=b;continue}const S=i==="ffmpeg"&&g.includes(":")?g.slice(0,g.indexOf(":")):g;(i==="ffmpeg"?Fl.has(S)||So.has(S)||xo.has(S):Ll.has(S))||oe(e,S);const A=t[++b];if(l=b,A===void 0)continue;if(S==="-f"){r=A;continue}if(S==="-dump_attachment")return null;if(["-x264-params","-x265-params","-x264opts","-svtav1-params","-aom-params","-vpx-params","-rav1e-params","-kvazaar-params"].includes(S)){if(!ql(e,A))return null;continue}if(S==="-i"){if(a.push(A),d=!0,!c(A,!1,r))return null;r=null;continue}if(d=!1,i==="ffprobe"&&S==="-o"){if(!se(e,A,!0))return null;n.push(A);continue}if(So.has(S)){S.endsWith("_script")&&(o=!0),F(e,[A]);continue}if(xo.has(S)){if(!se(e,A,!0))return null;continue}if(["-vf","-af","-filter","-filter_complex","-lavfi"].includes(S)&&(Io(A)&&(o=!0),!Co(e,A)))return null;(A.startsWith("/")||A.startsWith("~")||A.startsWith("$")||A.startsWith("../"))&&!qt(A)&&F(e,[A]);continue}if(d=!1,i==="ffmpeg"){if(n.push(g),!c(g,!0,r))return null;r=null}else if(a.push(g),!c(g,!1,r))return null}const u=t.length-1,p=t[u];if(i==="ffmpeg"&&p!==void 0&&l===u&&!d&&!p.startsWith("-")&&(n.push(p),!se(e,p,!0)))return null;const h=b=>b.filter(g=>!ye(g)&&g!=="-"&&!g.startsWith("pipe:"));return{inputs:h(a),outputs:h(n),fileFilters:o}}T(["ffmpeg"],(e,t)=>{const i=Ha(t,e,"ffmpeg");if(i===null){t.parsed=!1;return}const{inputs:o,outputs:a}=i;if(i.fileFilters){C(t,"complex","medium"),f(t,"filterFiles");return}a.length?f(t,"mediaConvert",{inputs:P(t,o),outputs:P(t,a)}):f(t,"mediaProcess",{inputs:P(t,o)})});T(["ffprobe"],(e,t)=>{const i=Ha(t,e,"ffprobe");if(i===null){t.parsed=!1;return}const{inputs:o}=i;if(i.fileFilters){C(t,"complex","medium"),f(t,"filterFiles");return}f(t,"mediaInfo",{paths:P(t,o)})});T(["sips"],(e,t)=>{const i=new Set(["-s","--setProperty","-z","--resampleHeightWidth","-c","--cropToHeightWidth","-p","--padToHeightWidth","--cropOffset"]),o=new Set(["-g","--getProperty","-d","--deleteProperty","-r","--rotate","-f","--flip","-Z","--resampleHeightWidthMax","--resampleWidth","--resampleHeight","--padColor","-o","--out","-x","--extractProfile","-e","--embedProfile","-E","--embedProfileIfNone","-m","--matchTo","-M","--matchToWithIntent","-j","--js","--extractTag","-X","--setPropertiesWithJSON"]),a=new Set(["-1","--oneLine","-h","--help","-H","--helpProperties","--debug","--formats","-i","--addIcon","--optimizeColorForSharing","--deleteColorManagementProperties"]),n=new Set(["-g","--getProperty","-1","--oneLine","-h","--help","-H","--helpProperties","--debug","--formats"]),s=[],r=[];let l=!1;for(let d=0;d<e.length;d++){const c=e[d];if(!c.startsWith("-")||c.includes("$")){s.push(c);continue}if(n.has(c)||(l=!0),i.has(c)){d+=2;continue}if(o.has(c)){const u=e[++d];if(u===void 0)continue;c==="-o"||c==="--out"||c==="-x"||c==="--extractProfile"?r.push(u):c==="-j"||c==="--js"?(C(t,"runs-code","medium"),F(t,[u])):(c==="-e"||c==="-E"||c==="-m"||c==="-M"||c.startsWith("--embed")||c.startsWith("--match")||c==="-X"||c==="--setPropertiesWithJSON")&&F(t,[u]);continue}a.has(c)||oe(t,c)}r.length?(F(t,s),M(t,r),f(t,"imageConvert",{inputs:P(t,s),outputs:P(t,r)})):l?(M(t,s),Ne(t,"imageEdit","paths",s)):(F(t,s),Ne(t,"imageInfo","paths",s))});function Fo(e){let t=e;for(;;){const i=t.indexOf(":");if(i<=1||ye(t))return t;const o=t.slice(0,i);let a=!0;for(const n of o)if(!(n>="a"&&n<="z"||n>="A"&&n<="Z"||n>="0"&&n<="9")){a=!1;break}if(!a)return t;t=t.slice(i+1)}}const Dl={resize:1,crop:1,gravity:1,extent:1,background:1,flatten:0,colors:1,format:1,quality:1,strip:0,thumbnail:1,fill:1,font:1,pointsize:1,annotate:2,geometry:1,alpha:1,colorspace:1,depth:1,density:1,rotate:1,flip:0,flop:0,trim:0,repage:1,define:1,sharpen:1,blur:1,unsharp:1,modulate:1,level:1,negate:0,type:1,units:1,interlace:1,"sampling-factor":1,append:0,layers:1,coalesce:0,delay:1,loop:1,dispose:1,deconstruct:0,scale:1,sample:1,"adaptive-resize":1,"auto-orient":0,bordercolor:1,border:1,frame:1,shadow:1,channel:1,separate:0,combine:0,compose:1,composite:0,page:1,size:1,"unique-colors":0,print:1,verbose:0,quiet:0,limit:2,transparent:1,fuzz:1,opaque:1,threshold:1,dither:1,remap:1,posterize:1,monochrome:0,grayscale:1,normalize:0,"contrast-stretch":1,"brightness-contrast":1,gamma:1,"sigmoidal-contrast":1,transpose:0,transverse:0,shave:1,chop:1,splice:1,distort:2,"virtual-pixel":1,interpolate:1,filter:1,vignette:1,morphology:2,kernel:1,compress:1,comment:1,region:1,colorize:1,tint:1,"sepia-tone":1,evaluate:2,clut:0,stroke:1,strokewidth:1,kerning:1,"interline-spacing":1,"interword-spacing":1,family:1,weight:1,style:1,stretch:1,antialias:0,resample:1,extract:1,orient:1,delete:1,swap:1,clone:1,duplicate:1,reverse:0,ping:0,precision:1,matte:0,"liquid-rescale":1,edge:1,charcoal:1,paint:1,sketch:1,emboss:1,polaroid:1,roll:1,shear:1,"motion-blur":1,"radial-blur":1,despeckle:0,enhance:0,equalize:0,"auto-level":0,"auto-gamma":0,"white-balance":0,"linear-stretch":1,label:1,caption:1,mosaic:0,mattecolor:1,fx:1,write:1,draw:1,identify:0,set:2,encoding:1,"gaussian-blur":1,"adaptive-sharpen":1,"alpha-color":1,"auto-threshold":1,"background-color":1,quantize:1,"transparent-color":1,tile:1,title:1,"fill-opacity":1,path:1},Ul={distort:2,level:1,"sigmoidal-contrast":1,gamma:1,write:1};T(["magick","convert","mogrify","identify","montage","composite"],(e,t,i)=>{let o=i,a=e;if(i==="magick"&&["convert","mogrify","identify","montage","composite","compare","stream","import","display","animate","conjure"].includes(e[0]??"")&&(o=e[0],a=e.slice(1)),o==="conjure"||o==="import"||o==="display"||o==="animate"||o==="stream"){Jt(e,t,i);return}const n=[],s=[];for(let p=0;p<a.length;p++){const h=a[p];if((h.startsWith("-")||h.startsWith("+"))&&h.length>1&&!h.includes("$")){const g=h.slice(1);if(g==="script"||g==="process"||g==="monitor"||g==="authenticate"){t.parsed=!1;return}const S=h.startsWith("+")?Ul[g]??0:Dl[g];if(S===void 0){oe(t,h);continue}const L=a.slice(p+1,p+1+S);if(p+=S,g==="write"){if(L.some(I=>I.includes("%["))){t.parsed=!1;return}for(const I of L)s.push(Fo(I));continue}const A=g==="set"?(L[0]??"").toLowerCase():"";if(A.startsWith("filename:")){t.parsed=!1;return}const $=["comment","label","caption","title"].includes(A);if(g==="set"&&!$||g==="define")for(const I of L){const w=I.includes("=")?I.slice(I.indexOf("=")+1):I;ce(w)&&!qt(w)&&F(t,[w])}for(const I of L){if(I.includes("@")&&(g==="annotate"||g==="label"||g==="caption"||g==="comment"||g==="draw"||g==="title"||g==="set")){t.parsed=!1;return}if(g==="draw"&&(I.includes("url(")||I.includes("image"))){t.parsed=!1;return}(g==="font"||g==="remap"||g==="clut"||g==="kernel")&&ce(I)&&!qt(I)&&F(t,[I])}continue}const b=Fo(h);if(h.includes("%[")){t.parsed=!1;return}if(b.startsWith("@")||h.startsWith("msl:")||h.startsWith("mvg:")||h.includes(":@")){t.parsed=!1;return}n.push(b)}M(t,s);const r=n.filter(ye);r.length&&C(t,"uses-network","medium",{host:he(r[0])});const l=n.filter(p=>!ye(p)&&p!=="-"&&p!=="");if(o==="mogrify"){M(t,l);for(let p=0;p<a.length;p++)a[p]==="-path"&&M(t,[a[p+1]??""]);Ne(t,"imageEdit","paths",l.filter(Le));return}if(o==="identify"){F(t,l),Ne(t,"imageInfo","paths",l.filter(Le));return}const d=n[n.length-1],c=d!==void 0&&d!=="-"&&!ye(d)&&d!==""?d:null,u=l.slice(0,c!==null&&n.length>1?-1:l.length);F(t,u),c!==null&&n.length>1?(M(t,[c]),f(t,"imageConvert",{inputs:P(t,u.filter(Le)),outputs:P(t,[c])})):Ne(t,"imageInfo","paths",u.filter(Le))});const Lo={cwebp:{long1:!0,f:["-lossless","-exact","-mt","-low_memory","-af","-strong","-nostrong","-sharp_yuv","-noalpha","-short","-quiet","-v","-version","-h","-H","-print_psnr","-print_ssim","-print_lsim","-progress","-jpeg_like","-alpha_cleanup","-noasm","-blend_alpha"],v:["-q","-alpha_q","-preset","-z","-m","-segments","-size","-psnr","-sns","-f","-sharpness","-pass","-qrange","-crop","-resize","-metadata","-alpha_method","-alpha_filter","-near_lossless","-hint","-map","-partition_limit","-o","-d","-s","-af","-pre","-tune"]},dwebp:{long1:!0,f:["-pam","-ppm","-bmp","-tiff","-pgm","-yuv","-nofancy","-nofilter","-nodither","-alpha_dither","-mt","-flip","-alpha","-incremental","-v","-quiet","-noasm","-version","-h","-png","-webp"],v:["-o","-dither","-crop","-resize","-scale"]},"rsvg-convert":{f:["-a","--keep-aspect-ratio","--unlimited","-u","--keep-image-data","--no-keep-image-data","-v","--version","-?","--help"],v:["-w","-h","-z","-x","-y","-f","-o","-b","--width","--height","--zoom","--x-zoom","--y-zoom","--format","--output","--background-color","--dpi-x","--dpi-y","-d","-p","--page-width","--page-height","--left","--top","--stylesheet","-s","--export-id","-i","--accept-language"]},gif2webp:{long1:!0,f:["-lossy","-mixed","-min_size","-loop_compatibility","-mt","-v","-quiet","-version","-h"],v:["-q","-m","-kmin","-kmax","-f","-metadata","-o"]},img2webp:{long1:!0,f:["-lossy","-lossless","-mixed","-v","-h","-min_size"],v:["-o","-q","-m","-d","-loop","-kmin","-kmax"]}};T(Object.keys(Lo),(e,t,i)=>{const o=q(t,e,Lo[i]),a=O(o,"-o","--output").filter(r=>r!=="-");i==="cwebp"&&M(t,O(o,"-d")),i==="rsvg-convert"&&F(t,O(o,"-s","--stylesheet"));const n=o.operands;F(t,n),M(t,a);const s=a.length?P(t,a):t.stdout;s!==null?f(t,"imageConvert",{inputs:P(t,n.filter(Le)),outputs:s}):Ne(t,"imageInfo","paths",n.filter(Le))});const No={optipng:{out:["-out","-dir"],long1:!0,f:["-quiet","-clobber","-backup","-keep","-fix","-force","-preserve","-snip","-simulate","-full","-nb","-nc","-np","-nz","-nx","-v","-o0","-o1","-o2","-o3","-o4","-o5","-o6","-o7"],v:["-out","-dir","-log","-strip","-zc","-zm","-zs","-zw","-f","-i"]},pngquant:{out:["--output","-o"],num:!0,f:["--force","-f","--skip-if-larger","--strip","--nofs","--verbose","-v","--ordered","--quiet","-q","--floyd"],v:["--ext","--quality","--speed","--posterize","--output","-o","-Q","-s"]},gifsicle:{out:["-o","--output"],f:["-b","--batch","-O1","-O2","-O3","-U","--unoptimize","-i","--interlace","-w","--no-warnings","--careful","--no-comments","--no-names","--no-extensions"],v:["-o","--output","--colors","--lossy","--resize","--resize-width","--resize-height","--resize-fit","--scale","--delay","-d","--loopcount","-O","--optimize","--crop"]},jpegoptim:{out:["-d","--dest"],f:["--strip-all","-s","--strip-exif","--strip-iptc","--strip-icc","-t","--totals","-o","--overwrite","-p","--preserve","-q","--quiet","-f","--force","--all-progressive","--all-normal","-n","--noaction","-v","--verbose"],v:["-m","--max","-d","--dest","-S","--size","-T","--threshold"]},oxipng:{out:["--out","--dir"],f:["-a","--alpha","-i","-Z","--zopfli","-r","--recursive","-q","--quiet","-v","--verbose","--fix","--force","--preserve","-p","--nx","--nz"],v:["-o","--opt","--strip","--out","--dir","-t","--threads","--interlace"]}};T(Object.keys(No),(e,t,i)=>{const o=No[i],a=q(t,e,o),n=O(a,...o.out).filter(r=>r!=="-");i==="optipng"&&M(t,O(a,"-log"));const s=a.operands;M(t,[...s,...n]),Ne(t,"imageOptimize","paths",(n.length?[...s,...n]:s).filter(Le))});const _l=new Set(["PATH","LD_PRELOAD","LD_LIBRARY_PATH","LD_AUDIT","BASH_ENV","ENV","IFS","PROMPT_COMMAND","SHELLOPTS","BASHOPTS","PS4","NODE_OPTIONS","PYTHONSTARTUP","PYTHONINSPECT","PYTHONHOME","PERL5OPT","PERL5LIB","PERLLIB","RUBYOPT","HOME","TMPDIR","PWD","OLDPWD","CDPATH","GLOBIGNORE","ZDOTDIR","EDITOR","VISUAL","PAGER","LESSOPEN","LESSCLOSE","MANPAGER","GIT_DIR","GIT_WORK_TREE","PIP_TARGET","PIP_PREFIX","BROWSER","SSH_ASKPASS","SUDO_ASKPASS","FPATH","MAILPATH"]),Bl=new Set(["npm_config_cache","NPM_CONFIG_CACHE","npm_config_yes","NPM_CONFIG_YES","npm_config_loglevel","NPM_CONFIG_LOGLEVEL","npm_config_update_notifier","NPM_CONFIG_UPDATE_NOTIFIER","npm_config_fund","NPM_CONFIG_FUND","npm_config_audit","NPM_CONFIG_AUDIT"]),Wl=new Set(["PYTHONPATH","PYTHONUNBUFFERED","PYTHONDONTWRITEBYTECODE","PYTHONIOENCODING","PYTHONHASHSEED","PYTHONUTF8","PYTHONWARNINGS","PYTHONFAULTHANDLER","PYTHONNOUSERSITE","PYTHONOPTIMIZE","PYTHONVERBOSE"]);function jl(e){if(Bl.has(e))return!1;if(_l.has(e))return!0;const t=e.toUpperCase();return t.startsWith("NPM_CONFIG_")?!0:t.startsWith("PYTHON")?!Wl.has(t):["DYLD_","LD_","GIT_","BASH_FUNC_","RUBYOPT","PERL5","NODE_REPL","ZDOTDIR"].some(i=>t.startsWith(i))||t.startsWith("MAGICK_")&&t.endsWith("_PATH")?!0:t.endsWith("_CONFIG_PATH")||t.endsWith("USERCONFIG")||t.endsWith("GLOBALCONFIG")||t.endsWith("_PRELOAD")||t.endsWith("STARTUP")||t.endsWith("_MODULE_PATH")||t.endsWith("_PLUGIN_PATH")||t.endsWith("_PLUGINS")}function Vl(e){const t=e.toUpperCase();return Ka.includes(t)?!1:["OUT","OUTPUT","DEST","DIR","OUTDIR"].includes(t)||["_OUT","_OUTPUT","_DEST","OUTDIR"].some(i=>t.endsWith(i))?!0:t.endsWith("CONFIG")||t.endsWith("_CONFIG_FILE")||t.endsWith("_FILE")||t.endsWith("_RC")||t.endsWith("RCFILE")||t.endsWith("_HOME")||t.endsWith("_DIR")||t.endsWith("_PATH")||["XDG_","MAGICK_","RUBY","BUN_","DENO_","FFREPORT","LESS","RIPGREP_","CURL_","WGET","SSH_","GNUPG","GPG_","PIP_","GEM_","CARGO_","GO"].some(i=>t.startsWith(i))}function Gl(e,t){for(const i of t.split(":")){const o=i.includes("=")?i.slice(i.lastIndexOf("=")+1):i;if(!(o===""||!ce(o))&&Y(e,o).some(a=>a.cls!=="work"&&a.cls!=="project"))return!0}return!1}function Bi(e,t,i){return(t==="GIT_PAGER"||t==="PAGER")&&i==="cat"?!1:t==="TMPDIR"&&i!==""&&!i.includes("$")?Y(e,i).some(o=>o.cls!=="work"&&o.cls!=="project"):jl(t)||Vl(t)&&Gl(e,i)}const Ka=["PYTHONPATH","NODE_PATH","GEM_PATH","CLASSPATH"],Hl={f:["-U","--upgrade","--user","--no-deps","--force-reinstall","--no-cache-dir","-q","--quiet","-v","--verbose","--pre","--no-index","--break-system-packages","-I","--ignore-installed","--no-build-isolation","--require-hashes","--no-warn-script-location","--disable-pip-version-check","--isolated","--dry-run","--compile","--no-compile","--prefer-binary","--no-input","--exists-action","--use-pep517","--no-use-pep517","--no-clean","--upgrade-strategy","--progress-bar","--root-user-action","--no-color","--editable","-e"],v:["-r","--requirement","-c","--constraint","-e","--editable","-t","--target","--prefix","--root","-i","--index-url","--extra-index-url","-f","--find-links","--cache-dir","--src","--upgrade-strategy","--platform","--python-version","--implementation","--abi","--only-binary","--no-binary","--progress-bar","--log","--timeout","--retries","--proxy","--trusted-host","--cert","--client-cert","-C","--config-settings","-d","--dest","-w","--wheel-dir","--report","--root-user-action","--python"]};function Qa(e,t){let i=0;const o=["--python","--log","--proxy","--cache-dir","--retries","--timeout","--exists-action","--trusted-host","--cert","--client-cert","--keyring-provider","--use-feature","--use-deprecated"],a=["-q","--quiet","-v","--verbose","--isolated","--no-cache-dir","--disable-pip-version-check","--no-color","--no-input","--require-virtualenv","-V","--version","-h","--help"];for(;i<e.length&&e[i].startsWith("-");){const r=e[i];if(r==="-V"||r==="--version"){f(t,"pipInfo");return}o.includes(r)?((r==="--log"||r==="--cache-dir")&&M(t,[e[i+1]??""]),i++):!a.includes(r)&&!o.includes(r.split("=")[0])&&oe(t,r),i++}const n=e[i],s=e.slice(i+1);if(n==="install"||n==="download"||n==="wheel"){const r=q(t,s,Hl),l=O(r,"-r","--requirement","-c","--constraint");F(t,[...l,...O(r,"-e","--editable").filter(ce)]),M(t,O(r,"-t","--target","--prefix","--root","-d","--dest","-w","--wheel-dir","--src","--report","--log")),H(r,"--user")&&C(t,"writes-outside-project","high",{path:"~"}),H(r,"--break-system-packages")&&C(t,"writes-outside-project","high"),n==="install"&&C(t,"installs-packages","medium"),H(r,"--no-index")||C(t,"uses-network","medium",{host:"pypi.org"});const d=r.operands;for(const c of d)ce(c)&&F(t,[c]);d.length?f(t,"pipInstall",{packages:le(d)}):l.length?f(t,"pipInstallReq",{file:P(t,l)}):f(t,"pipInstall",{packages:"…"});return}if(n==="uninstall"){const r=q(t,s,{f:["-y","--yes","-q","--quiet","-v","--break-system-packages","--root-user-action"],v:["-r","--requirement"]});C(t,"installs-packages","medium"),f(t,"pkgRemove",{packages:le(r.operands)});return}if(n===void 0||["list","show","freeze","check","help","inspect","debug"].includes(n)){const r=q(t,s,{f:["--outdated","-o","--uptodate","-u","--editable","-e","--local","-l","--user","--not-required","--exclude-editable","--include-editable","--pre","--all","--verbose","-v","-f","--files","-q","--quiet"],v:["--format","--path","--exclude","-r","--requirement","--log"]});F(t,[...O(r,"--path","-r","--requirement")]),M(t,O(r,"--log")),f(t,"pipInfo");return}f(t,"pkgOther",{tool:"pip",sub:n}),C(t,"unknown-command","medium")}const Kl="uBOIEsSqvbdxPRhVi";T(["python","python3","pypy3"],(e,t)=>{for(let i=0;i<e.length;i++){const o=e[i];if(o==="-"){J(t,"python");return}if(o==="-X"||o.startsWith("-X")){const a=o==="-X"?e[++i]:o.slice(2);a?.startsWith("pycache_prefix=")&&De(t,a.slice(15));continue}if(o==="-W"||o==="--check-hash-based-pycs"){i++;continue}if(o==="--version"||o==="--help"){f(t,"sysInfo");return}if(o.startsWith("--")){oe(t,o);continue}if(o.startsWith("-")&&!o.includes("$")){for(let a=1;a<o.length;a++){const n=o[a];if(n==="c"||n==="m"){const s=o.slice(a+1)!==""?o.slice(a+1):e[++i];if(s===void 0){t.parsed=!1;return}if(n==="c"){Te(t,s,"python"),f(t,"pythonInline");return}Ql(s,e.slice(i+1),t);return}if(n==="W"||n==="X"){const s=o.slice(a+1)!==""?o.slice(a+1):e[++i];n==="X"&&s?.startsWith("pycache_prefix=")&&De(t,s.slice(15));break}Kl.includes(n)||oe(t,`-${n}`)}continue}if(Ve(o)){J(t,"python");return}fe(t,o),te(t,e.slice(i+1)),f(t,"pythonScript",{script:P(t,[o])});return}J(t,"python")});function Ql(e,t,i){if(e==="pip"){Qa(t,i);return}if(e==="venv"||e==="virtualenv"){const o=q(i,t,{f:["--clear","--upgrade","--without-pip","--system-site-packages","--symlinks","--copies","--upgrade-deps","--without-scm-ignore-files"],v:["--prompt"]});M(i,o.operands),f(i,"venv",{path:P(i,o.operands)});return}if(e==="json.tool"){const o=q(i,t,{f:["--sort-keys","--no-ensure-ascii","--json-lines","--tab","--no-indent","--compact"],v:["--indent"]});F(i,o.operands.slice(0,1)),M(i,o.operands.slice(1,2)),f(i,"jsonCheck",{path:o.operands.length?P(i,o.operands.slice(0,1)):"…"});return}C(i,"runs-code","medium"),(e==="http.server"||e==="SimpleHTTPServer"||e==="smtpd")&&C(i,"uses-network","medium"),te(i,t),f(i,"pythonModule",{module:e})}T(["pip","pip3"],(e,t)=>Qa(e,t));const Po=["-r","--require","--import","--loader","--experimental-loader","-C","--conditions","--input-type","--env-file","--title","--stack-size","--max-old-space-size","--inspect-port","--test-reporter","--test-name-pattern"],Yl=["--no-warnings","--enable-source-maps","--trace-warnings","--trace-uncaught","--test","--watch","--check","-c","-v","--version","-h","--help","--no-deprecation","--preserve-symlinks","--abort-on-uncaught-exception","--unhandled-rejections","--throw-deprecation","--pending-deprecation","--expose-gc"],Xl=["--max-old-space-size=","--stack-size=","--inspect","--harmony","--unhandled-rejections=","--disable-warning="],Zl=["--experimental-vm-modules","--experimental-strip-types","--experimental-transform-types","--experimental-specifier-resolution","--experimental-json-modules","--experimental-fetch","--no-experimental-fetch","--experimental-modules","--experimental-detect-module","--experimental-require-module","--experimental-sqlite","--experimental-websocket","--experimental-global-webcrypto","--experimental-wasm-modules","--experimental-import-meta-resolve","--experimental-test-coverage","--no-experimental-strip-types","--experimental-default-type","--trace-warnings","--trace-uncaught","--trace-deprecation","--trace-exit","--trace-sigint","--trace-gc","--trace-sync-io","--trace-tls"],Jl=["--trace-event-file-pattern","--diagnostic-dir","--report-directory","--report-filename","--cpu-prof-dir","--heap-prof-dir","--redirect-warnings","--cpu-prof-name","--heap-prof-name","--experimental-sea-config"],ed=["--experimental-config-file","--experimental-policy","--policy-integrity","--openssl-config","--icu-data-dir","--snapshot-blob","--build-snapshot"];function Wi(e,t){for(let i=0;i<e.length;i++){const o=e[i];if(o==="-e"||o==="--eval"||o==="-p"||o==="--print"||o==="-pe"){const a=e[++i];if(a===void 0){t.parsed=!1;return}Te(t,a,"js"),f(t,"nodeInline");return}if(o.startsWith("--eval=")||o.startsWith("--print=")){Te(t,o.slice(o.indexOf("=")+1),"js"),f(t,"nodeInline");return}if(o==="-"){J(t,"node");return}if(o==="-v"||o==="--version"){f(t,"sysInfo");return}if(o==="--env-file"||o.startsWith("--env-file=")||o.startsWith("--env-file-if-exists")){const a=o.includes("=")?o.slice(o.indexOf("=")+1):e[++i];a!==void 0&&De(t,a);continue}if(o.startsWith("--inspect")){const a=o.includes("=")?o.slice(o.indexOf("=")+1):"",n=a.includes(":")?a.slice(0,a.lastIndexOf(":")):dt(a)?"":a;n!==""&&n!=="127.0.0.1"&&n!=="localhost"&&n!=="[::1]"&&C(t,"uses-network","medium",{host:n});continue}if(Po.includes(o)){const a=e[++i];a!==void 0&&["-r","--require","--import","--loader","--experimental-loader"].includes(o)&&(a.includes(":")?Te(t,a):fe(t,a));continue}if(o.startsWith("-")&&!o.includes("$")){const a=o.includes("=")?o.slice(0,o.indexOf("=")):o;if(ed.includes(a)){t.parsed=!1;return}if(Jl.includes(a)){M(t,[o.includes("=")?o.slice(o.indexOf("=")+1):e[++i]??""]);continue}if(!Yl.includes(o)&&!Zl.includes(o)&&!Po.includes(a)&&!Xl.some(n=>o.startsWith(n))&&oe(t,a),(a==="--require"||a==="--import"||a==="--loader"||a==="--experimental-loader")&&o.includes("=")){const n=o.slice(o.indexOf("=")+1);n.includes(":")?Te(t,n):fe(t,n)}continue}if(Ve(o)){J(t,"node");return}fe(t,o),te(t,e.slice(i+1)),f(t,"nodeScript",{script:P(t,[o])});return}J(t,"node")}T(["node","nodejs"],(e,t)=>Wi(e,t));function lt(e,t,i,o){C(e,"installs-packages","medium"),o||C(e,"uses-network","medium",{host:"registry.npmjs.org"}),i&&C(e,"writes-outside-project","high");for(const a of t)ce(a)&&!a.startsWith("@")&&F(e,[a]);t.length?f(e,"npmInstall",{packages:le(t)}):f(e,"npmInstallAll")}function ji(e,t){const i=["-p","--package","--cache"];let o=0;for(;o<e.length&&e[o].startsWith("-")&&e[o]!=="--";)o+=i.includes(e[o])?2:1;const a=e.slice(0,o),n=e[o]==="--"?e.slice(o+1):e.slice(o);if(a.some(l=>l==="-c"||l==="--call"||l.startsWith("--call=")||l==="--shell")){t.parsed=!1;return}const s=q(t,a,{f:["-y","--yes","--no","-q","--quiet","--no-install","--prefer-offline","--ignore-existing","-s","--silent"],v:i}),r=n[0]??O(s,"-p","--package")[0]??"…";if(r==="node"){Wi(n.slice(1),t);return}C(t,"runs-code","medium"),C(t,"uses-network","medium",{host:"registry.npmjs.org"}),te(t,n.slice(1)),f(t,"npx",{tool:r})}T(["npx","pnpx","bunx"],(e,t)=>ji(e,t));const Ro=["install","i","in","ins","inst","insta","instal","isnt","isnta","isntal","isntall","add","ci","clean-install","update","up","upgrade","udpate"],Oo=["uninstall","remove","rm","r","un","unlink"],Mo=["ls","list","ll","la","view","info","show","v","outdated","explain","why","help","search"],td=["publish","unpublish","link","ln","config","set","get","login","logout","adduser","deploy","pack","patch","patch-commit","store","env","setup","self-update","audit","import","rebuild","prune","fetch","server","root","bin","init","version","owner","team","token","access","hook","profile","cache","dist-tag","deprecate","edit","sbom","shrinkwrap","global","plugin","policies","workspaces","catalog","approve-builds","workspace","dlx","exec","x","create","run","node","test","start"],Se={f:["-g","--global","-D","--save-dev","-S","--save","--no-save","-E","--save-exact","-O","--save-optional","-P","--save-prod","--legacy-peer-deps","--strict-peer-deps","--force","-f","--silent","-s","--quiet","-q","--ignore-scripts","--no-audit","--no-fund","--production","--frozen-lockfile","--prefer-offline","--offline","-y","--yes","--if-present","-r","--recursive","--parallel","--no-package-lock","--dev","-W","--ignore-workspace-root-check","--exact","--dry-run","--verbose","-d","--no-optional","--no-progress","--workspaces","--include-workspace-root","--immutable","--check-files","--pure-lockfile","--no-lockfile","--non-interactive","--shamefully-hoist","--prefer-frozen-lockfile","--no-frozen-lockfile","--save-peer","--fix","--json","--long","--all","--depth","--stream","--aggregate-output","--reporter-hide-prefix","--color","--no-color","--version","-v","--help","-h","--foreground-scripts","--no-update-notifier"],v:["--omit","--include","--reporter","--loglevel","-w","--workspace","-C","--dir","--filter","-F","--prefix","--location","--cache","--registry","--cwd","--tag","--network-concurrency","--child-concurrency","--depth"]},Ya=["build","dev","test","start","lint","render","preview","typecheck","format","serve","watch","check","compile","bundle","export","generate","gen","storybook","e2e","ci","prettier","fmt"],id=["run","run-script","rum","urn","test","t","tst","start","stop","restart"];function od(e,t){const i=t.indexOf("--"),o=i>=0?t.slice(0,i):t;for(let a=0;a<o.length;a++){const n=o[a];if(!n.startsWith("-"))continue;const s=n.includes("=")?n.slice(0,n.indexOf("=")):n;if(!["--silent","-s","--if-present","--workspaces","--include-workspace-root","-ws","--quiet","-q","--verbose","-d","-dd","--color","--no-color","--foreground-scripts","--no-audit","--no-fund","--no-update-notifier"].includes(n)){if(s==="--loglevel"||s==="--color"){n.includes("=")||a++;continue}if(s==="-w"||s==="--workspace"||s==="--prefix"){const r=n.includes("=")?n.slice(n.indexOf("=")+1):o[++a];if(r!==void 0&&Y(e,r).every(l=>l.cls==="work"||l.cls==="project")||s!=="--prefix"&&r!==void 0&&!ce(r))continue}return!1}}return!0}T(["npm","pnpm","yarn"],(e,t,i)=>{const o=e.findIndex((g,S)=>!g.startsWith("-")&&!Se.v.includes(e[S-1]??"")),a=o>=0?e[o]:void 0;if(i==="npm"&&a!==void 0&&id.includes(a)&&!od(t,e)){t.parsed=!1;return}const n=e.indexOf("--"),s=n>=0?e.slice(0,n):e,r=n>=0?e.slice(n+1):[],l=a!==void 0&&(a==="run"||a==="run-script"||a==="exec"||a==="x"||a==="dlx"||a==="node"||i!=="npm"&&!Ro.includes(a)&&!Oo.includes(a)&&!Mo.includes(a)&&!td.includes(a)),d=l&&o>=0?s.slice(0,o+(a==="run"||a==="run-script"?2:1)):s,c=l&&o>=0?[...s.slice(o+(a==="run"||a==="run-script"?2:1)),...r]:r,u=q(t,d,Se),p=u.operands.slice(1),h=H(u,"-g","--global")||O(u,"--location").includes("global"),b=H(u,"--offline");if(M(t,O(u,"--prefix")),F(t,O(u,"-C","--dir","--cwd")),a===void 0){if(H(u,"--version","-v","--help","-h")){f(t,"pkgInfo",{tool:i});return}if(i==="yarn"){lt(t,[],h,b);return}f(t,"pkgInfo",{tool:i});return}if(i==="yarn"&&a==="global"){if(p[0]==="add"){lt(t,p.slice(1),!0,b);return}f(t,"pkgOther",{tool:i,sub:a}),C(t,"unknown-command","medium");return}if(Ro.includes(a)){lt(t,p,h,b);return}if(a==="run"||a==="run-script"||a==="rum"||a==="urn"){C(t,"runs-code","low"),te(t,c),f(t,"npmRun",{script:p[0]??"…"});return}if(["test","t","tst","start","stop","restart"].includes(a)){C(t,"runs-code","low"),te(t,c),f(t,"npmRun",{script:a});return}if(a==="node"){Wi(c,t);return}if(a==="exec"||a==="x"||a==="dlx"||a==="create"){ji(a==="create"?[`create-${p[0]??""}`,...p.slice(1),...c]:c,t);return}if(Oo.includes(a)){C(t,"installs-packages","medium"),h&&C(t,"writes-outside-project","high"),f(t,"pkgRemove",{packages:le(p)});return}if(Mo.includes(a)){f(t,"pkgInfo",{tool:i});return}if(a==="audit"){p[0]==="fix"?lt(t,[],h,b):f(t,"pkgInfo",{tool:i});return}if(i!=="npm"&&l){C(t,"runs-code",Ya.includes(a)?"low":"medium"),te(t,c),f(t,"npmRun",{script:a});return}f(t,"pkgOther",{tool:i,sub:a}),C(t,"unknown-command","medium")});T(["bun"],(e,t)=>{const i=e[0];if(i==="-e"||i==="--eval"||i==="-p"||i==="--print"){const n=e[1];if(n===void 0){t.parsed=!1;return}Te(t,n,"js"),f(t,"inlineCode",{lang:"bun"});return}if(i==="-"||i==="run"&&e[1]==="-"){J(t,"node");return}if(i==="install"||i==="i"||i==="add"||i==="a"){const n=q(t,e.slice(1),Se);lt(t,n.operands,H(n,"-g","--global"),!1);return}if(i==="x"){ji(e.slice(1),t);return}const o=i==="run"?e[1]:i;if(o===void 0){f(t,"pkgInfo",{tool:"bun"});return}const a=e.slice(i==="run"?2:1);if(Ve(o)){J(t,"node");return}if(Le(o)){fe(t,o),te(t,a),f(t,"runScript",{script:P(t,[o])});return}C(t,"runs-code",Ya.includes(o)?"low":"medium"),te(t,a),f(t,"npmRun",{script:o})});const ad={f:["-s","-S","-L","-f","-k","-v","-i","-I","-O","-J","-#","-N","-g","-G","-4","-6","-n","-R","-Z","-q","--silent","--show-error","--location","--fail","--fail-with-body","--insecure","--verbose","--include","--head","--remote-name","--remote-name-all","--remote-header-name","--progress-bar","--no-buffer","--globoff","--get","--compressed","--create-dirs","--http1.1","--http2","--http1.0","--http2-prior-knowledge","--tlsv1.2","--tlsv1.3","--retry-all-errors","--no-progress-meter","--location-trusted","--parallel","--fail-early","--digest","--basic","--anyauth","--negotiate","--ntlm","--remote-time","--raw","--tcp-nodelay","--path-as-is","--ssl-reqd","--no-keepalive","--disable"],v:["-o","--output","-d","--data","--data-raw","--data-binary","--data-urlencode","--data-ascii","--json","-F","--form","--form-string","-H","--header","-X","--request","-u","--user","-A","--user-agent","-e","--referer","-b","--cookie","-c","--cookie-jar","-T","--upload-file","-m","--max-time","--connect-timeout","-w","--write-out","-x","--proxy","--retry","--retry-delay","--retry-max-time","-r","--range","-C","--continue-at","--cacert","--capath","--cert","--key","-E","-D","--dump-header","--trace","--trace-ascii","--stderr","--output-dir","-z","--time-cond","-Y","--speed-limit","-y","--speed-time","--limit-rate","--resolve","--connect-to","--interface","--max-filesize","--url","-U","--proxy-user","--tls-max","--ciphers","--max-redirs","-K","--config","--libcurl","--etag-save","--etag-compare","--hsts","--alt-svc","--netrc-file","-Q","--quote","--variable","--proto","--proto-redir","--parallel-max","--expect100-timeout","--happy-eyeballs-timeout-ms"]};T(["curl"],(e,t)=>{const i=q(t,e,ad);if(O(i,"-K","--config").length){t.parsed=!1;return}const o=[...i.operands,...O(i,"--url")],a=o.filter(b=>b.startsWith("file://"));F(t,a.map(b=>b.slice(7)));const n=O(i,"-o","--output","-c","--cookie-jar","-D","--dump-header","--trace","--trace-ascii","--stderr","--libcurl","--etag-save","--hsts","--alt-svc").filter(b=>b!=="-"),s=O(i,"--output-dir");H(i,"-O","--remote-name","--remote-name-all","-J")&&s.push(s[0]??"."),M(t,[...n,...s]),F(t,O(i,"--netrc-file","--cacert","--cert","--key","--etag-compare"));const r=O(i,"-d","--data","--data-binary","--data-urlencode","--data-ascii","--json"),l=O(i,"-F","--form"),d=O(i,"-T","--upload-file"),c=[...r.filter(b=>b.startsWith("@")).map(b=>b.slice(1)),...l.flatMap(b=>{const g=b.search(/=[@<]/);return g>=0?[b.slice(g+2).split(";")[0]]:[]}),...d].filter(b=>b!=="-"&&b!=="");F(t,c);const u=(O(i,"-X","--request")[0]??"").toUpperCase(),p=r.length>0||l.length>0||d.length>0||["POST","PUT","PATCH","DELETE"].includes(u),h=o.length?he(o[0]):"…";(o.length!==a.length||o.length===0)&&C(t,"uses-network","medium",{host:h}),p?f(t,"upload",{host:h}):n.length?f(t,"downloadTo",{host:h,path:P(t,n.slice(0,1))}):f(t,"download",{host:h})});T(["wget"],(e,t)=>{const i=q(t,e,{f:["-q","-c","-nc","-N","-r","-np","-nd","-nH","-k","-p","-m","-S","-v","-nv","-4","-6","-x","--quiet","--continue","--no-clobber","--timestamping","--recursive","--no-parent","--no-directories","--no-host-directories","--convert-links","--page-requisites","--mirror","--server-response","--no-verbose","--show-progress","--no-check-certificate","--content-disposition","--spider","--force-directories","--trust-server-names","--progress","--https-only","--retry-connrefused","--no-cache"],v:["-O","--output-document","-P","--directory-prefix","-o","--output-file","-a","--append-output","-i","--input-file","--post-data","--post-file","--method","--body-data","--body-file","-U","--user-agent","--header","-t","--tries","-T","--timeout","-e","--execute","--user","--password","-l","--level","-A","-R","-D","--load-cookies","--save-cookies","--config","--wait","-w","--limit-rate"]});if(O(i,"-e","--execute","--config").length){t.parsed=!1;return}const o=O(i,"-O","--output-document").filter(l=>l!=="-"),a=[...o,...O(i,"-o","--output-file","-a","--append-output","--save-cookies")],n=O(i,"-P","--directory-prefix");M(t,[...a,...o.length||O(i,"-O","--output-document").includes("-")?[]:n.length?n:["."]]);const s=O(i,"--post-file","--body-file");F(t,[...s,...O(i,"-i","--input-file","--load-cookies")]);const r=i.operands.length?he(i.operands[0]):"…";C(t,"uses-network","medium",{host:r}),s.length||O(i,"--post-data","--method","--body-data").length?f(t,"upload",{host:r}):o.length?f(t,"downloadTo",{host:r,path:P(t,o)}):f(t,"download",{host:r})});T(["ssh","scp","sftp","rsync","nc","ncat","netcat","telnet","ftp","socat","ping","dig","nslookup","host","whois","http","https","aria2c"],(e,t,i)=>{Jt(e,t,i),C(t,"uses-network","medium")});const bi=["--stat","--numstat","--shortstat","--dirstat","--summary","--name-only","--name-status","--cached","--staged","-p","--patch","-s","--no-patch","--raw","--minimal","--patience","--histogram","--word-diff","--color-words","--no-renames","-M","-C","-B","-D","-R","--text","-a","-w","-b","--ignore-space-change","--ignore-all-space","--ignore-blank-lines","--exit-code","--quiet","--no-ext-diff","--no-textconv","--check","--full-index","--binary","--abbrev","--relative","--no-index","--compact-summary","--merge-base","--cc","--no-prefix","--ignore-submodules","--submodule","--color-moved","--function-context","-W","--find-renames","--find-copies","--irreversible-delete","--color","--no-color","--oneline","--format","--pretty","--show-signature","--diff-merges","--remerge-diff","-m","-c","-t","-z","--stat-width","--ita-invisible-in-index"],$i=["-U","--unified","--format","--pretty","--diff-filter","--diff-algorithm","-S","-G","--word-diff-regex","--src-prefix","--dst-prefix","--inter-hunk-context","--output","-O","-l"],nd=[...bi,"--graph","--decorate","--all","--branches","--tags","--remotes","--follow","--reverse","--no-merges","--merges","--first-parent","--abbrev-commit","--date","--relative-date","--source","--left-right","--cherry-pick","--boundary","-i","--regexp-ignore-case","-E","--extended-regexp","-F","--fixed-strings","--all-match","--invert-grep","--walk-reflogs","-g","--no-walk","--date-order","--topo-order","--full-history","--simplify-by-decoration","--notes","--no-notes","--mailmap","-L","--use-mailmap"],sd=[...$i,"-n","--max-count","--skip","--since","--until","--after","--before","--author","--committer","--grep","--decorate-refs","--date"],Xa={status:{phrase:"gitStatus",f:["-s","--short","-b","--branch","--long","--ignored","-u","-uno","-unormal","-uall","--untracked-files","--ahead-behind","--no-ahead-behind","--show-stash","--no-renames","--porcelain","-z","-v","--verbose"]},diff:{phrase:"gitDiff",f:bi,v:$i},show:{phrase:"gitDiff",f:bi,v:$i},log:{phrase:"gitLog",f:nd,v:sd,num:!0},shortlog:{phrase:"gitLog",f:["-s","-n","-e","--summary","--numbered","--email","--all"],v:["--since","--until","--group","-c","--format"]},blame:{phrase:"gitLog",f:["-l","-s","-e","-w","-M","-C","--porcelain","--line-porcelain","-p","-t","--show-email","--show-name","-f","-n"],v:["-L","--since"]},reflog:{phrase:"gitLog",f:["show","--all","--date"],v:["-n","--date"],num:!0},"rev-parse":{phrase:"gitInfo",f:["--show-toplevel","--abbrev-ref","--short","--verify","--git-dir","--git-common-dir","--is-inside-work-tree","--is-bare-repository","--symbolic-full-name","--absolute-git-dir","--show-prefix","--show-cdup","-q","--quiet","--all","--branches","--tags","--symbolic","--is-shallow-repository","--show-superproject-working-tree"]},"ls-files":{phrase:"gitInfo",f:["-m","--modified","-o","--others","-d","--deleted","--exclude-standard","-z","-s","--stage","--cached","-c","-i","--ignored","--error-unmatch","-t","--full-name","--abbrev","--directory","--no-empty-directory","-u","--unmerged","-k","--killed","--eol"],v:["-x","--exclude","-X","--exclude-from","--format"]},"ls-tree":{phrase:"gitInfo",f:["-r","-d","-t","-l","--long","--name-only","--name-status","--full-name","--full-tree","--abbrev","-z","--object-only"],v:["--format"]},describe:{phrase:"gitInfo",f:["--tags","--all","--always","--long","--abbrev","--dirty","--exact-match","--contains","--first-parent"],v:["--match","--exclude"]},"cat-file":{phrase:"gitInfo",f:["-t","-s","-p","-e","--batch","--batch-check"]},"show-ref":{phrase:"gitInfo",f:["--heads","--tags","-s","--hash","--verify","-d","-q","--quiet","--head"]},grep:{phrase:"gitInfo",f:["-n","-i","-l","-L","-w","-v","-E","-F","-P","-G","--cached","--untracked","-c","--count","-h","-H","--heading","--break","-r","--recursive","--no-index","-I","-o","--only-matching","-q","--quiet","--line-number","--ignore-case","--files-with-matches","--all-match","--color","--no-color","--column","-p","-W"],v:["-e","-A","-B","-C","-m","--max-count","--max-depth","-f"],num:!0},"rev-list":{phrase:"gitInfo",f:["--count","--all","--reverse","--objects","--first-parent","--left-right","--cherry-pick","--merges","--no-merges","--topo-order","--date-order"],v:["--max-count","-n","--since","--until","--author"]},"merge-base":{phrase:"gitInfo",f:["--is-ancestor","--all","--octopus","--independent","--fork-point"]},add:{phrase:"gitAdd",f:["-A","--all","-u","--update","-N","--intent-to-add","-f","--force","-n","--dry-run","-v","--verbose","-p","--patch","--ignore-errors","--renormalize","--no-all","--ignore-removal","--sparse"],v:["--chmod","--pathspec-from-file"]},commit:{phrase:"gitCommit",changes:!0,f:["-a","--all","--amend","--no-edit","-s","--signoff","--allow-empty","--allow-empty-message","-n","--no-verify","--no-gpg-sign","-e","--edit","--only","-o","--include","-i","--dry-run","--status","--no-status","-u","--untracked-files","-v","--verbose","--short","--porcelain","--reset-author","-q","--quiet","-p","--patch","-S","--gpg-sign"],v:["-m","--message","-F","--file","--author","--date","--fixup","--squash","-C","--reuse-message","-c","--reedit-message","--cleanup","-t","--template","--pathspec-from-file","--trailer"]},push:{phrase:"gitSync",changes:!0,net:!0,f:["-u","--set-upstream","-f","--force","--force-with-lease","--force-if-includes","--tags","--all","--mirror","--dry-run","-n","--delete","-d","--no-verify","--follow-tags","--atomic","--prune","--porcelain","--progress","-q","--quiet","-v","--verbose","--no-force-with-lease"],v:["-o","--push-option","--repo","--signed"]},pull:{phrase:"gitSync",changes:!0,net:!0,f:["--rebase","--no-rebase","--ff","--ff-only","--no-ff","--all","--tags","--prune","-p","--unshallow","--no-tags","--autostash","--no-autostash","--squash","--no-commit","--commit","--edit","--no-edit","--stat","-n","--no-stat","-q","--quiet","-v","--verbose","-r"],v:["--depth","-s","--strategy","-X","--strategy-option","-j","--jobs"]},fetch:{phrase:"gitSync",net:!0,f:["--all","--tags","--prune","-p","-P","--prune-tags","--unshallow","--no-tags","--dry-run","-f","--force","--multiple","--recurse-submodules","--no-recurse-submodules","-q","--quiet","-v","--verbose","--progress","-t","--append","-a","--write-fetch-head","--no-write-fetch-head","--atomic"],v:["--depth","--deepen","--shallow-since","-j","--jobs","--refmap","--negotiation-tip"]},clone:{phrase:"gitClone",net:!0,f:["--single-branch","--no-single-branch","--recurse-submodules","--recursive","--shallow-submodules","--bare","--mirror","--no-checkout","-n","--sparse","--no-tags","--dissociate","--progress","-q","--quiet","-v","--verbose","-l","--local","--no-local","--no-hardlinks","-s","--shared","--remote-submodules","--also-filter-submodules","--reject-shallow"],v:["--depth","--branch","-b","--filter","--origin","-o","-j","--jobs","--reference","--reference-if-able","--shallow-since","--shallow-exclude","--bundle-uri","--revision"]},checkout:{phrase:"gitChange",changes:!0,f:["--detach","-f","--force","--ours","--theirs","-p","--patch","-m","--merge","--track","-t","--no-track","-q","--quiet","--recurse-submodules","--no-recurse-submodules","--overlay","--no-overlay","--progress","--guess","--no-guess","--ignore-other-worktrees"],v:["-b","-B","--orphan","--conflict","--pathspec-from-file"]},switch:{phrase:"gitChange",changes:!0,f:["--detach","-f","--force","--discard-changes","-m","--merge","-t","--track","--no-track","--guess","--no-guess","-q","--quiet","--recurse-submodules","--progress","--ignore-other-worktrees"],v:["-c","-C","--create","--force-create","--orphan","--conflict"]},restore:{phrase:"gitChange",changes:!0,f:["--staged","-S","--worktree","-W","-p","--patch","--ours","--theirs","-m","--merge","--ignore-unmerged","--overlay","--no-overlay","-q","--quiet","--progress","--recurse-submodules"],v:["-s","--source","--conflict","--pathspec-from-file"]},reset:{phrase:"gitChange",changes:!0,f:["--hard","--soft","--mixed","--merge","--keep","-p","--patch","-N","--intent-to-add","-q","--quiet","--recurse-submodules","--no-refresh"],v:["--pathspec-from-file"]},stash:{phrase:"gitChange",changes:!0,f:["push","pop","list","show","apply","drop","clear","save","branch","create","store","-u","--include-untracked","-a","--all","-k","--keep-index","--no-keep-index","-p","--patch","--staged","-S","--index","-q","--quiet","--stat","-p"],v:["-m","--message","--pathspec-from-file"]},rebase:{phrase:"gitChange",changes:!0,f:["--continue","--abort","--skip","--quit","-i","--interactive","--autosquash","--no-autosquash","--autostash","--no-autostash","--keep-base","--root","--rebase-merges","-r","--edit-todo","--show-current-patch","-q","--quiet","-v","--verbose","--stat","-n","--no-stat","--no-verify","--verify","-f","--force-rebase","--fork-point","--no-fork-point","--signoff","--committer-date-is-author-date","--reset-author-date","--update-refs"],v:["--onto","-s","--strategy","-X","--strategy-option"]},merge:{phrase:"gitChange",changes:!0,f:["--no-ff","--ff","--ff-only","--squash","--abort","--continue","--quit","--no-edit","--edit","--no-commit","--commit","--allow-unrelated-histories","--no-verify","--stat","-n","--no-stat","-q","--quiet","-v","--verbose","--autostash","--no-autostash","--signoff","--progress"],v:["-m","-F","--file","-s","--strategy","-X","--strategy-option","--into-name"]},revert:{phrase:"gitChange",changes:!0,f:["--no-edit","--edit","-e","--continue","--abort","--skip","--quit","-n","--no-commit","-s","--signoff"],v:["-m","--mainline","--strategy","-X"]},"cherry-pick":{phrase:"gitChange",changes:!0,f:["--no-edit","--edit","-e","--continue","--abort","--skip","--quit","-n","--no-commit","-s","--signoff","-x","--ff","--allow-empty","--keep-redundant-commits"],v:["-m","--mainline","--strategy","-X"]},clean:{phrase:"gitChange",changes:!0,f:["-f","--force","-d","-x","-X","-n","--dry-run","-i","--interactive","-q","--quiet","-ff","-fd","-fdx","-fdX","-fx","-dfx","-xdf","-fxd","-dn","-nd"],v:["-e","--exclude"]},rm:{phrase:"gitChange",changes:!0,f:["--cached","-r","-f","--force","-n","--dry-run","--ignore-unmatch","-q","--quiet","--sparse"],v:["--pathspec-from-file"]},mv:{phrase:"gitChange",changes:!0,f:["-f","--force","-k","-n","--dry-run","-v","--verbose"]},branch:{phrase:"gitChange",changes:!0,f:["-a","--all","-r","--remotes","-v","-vv","--verbose","-l","--list","-d","-D","--delete","-m","-M","--move","-c","-C","--copy","-f","--force","--show-current","--merged","--no-merged","--contains","--no-contains","--unset-upstream","-t","--track","--no-track","--points-at","--column","--no-column","-q","--quiet","-i","--ignore-case","--color","--no-color"],v:["--sort","--format","-u","--set-upstream-to"]},tag:{phrase:"gitChange",changes:!0,f:["-a","--annotate","-l","--list","-d","--delete","-f","--force","-v","--verify","--contains","--no-contains","--merged","--no-merged","-s","--sign","-i","--ignore-case","--column","--no-column"],v:["-m","--message","-F","--file","--sort","--points-at","--format","-n"],num:!0},remote:{phrase:"gitInfo",f:["-v","--verbose","add","remove","rm","rename","set-url","show","get-url","prune","update","set-head","--push","--all","--add","--delete","-f"],v:["-t","-m"]},init:{phrase:"gitChange",changes:!0,f:["-q","--quiet","--bare"],v:["-b","--initial-branch","--shared","--object-format"]},gc:{phrase:"gitChange",changes:!0,f:["--aggressive","--auto","--prune","--no-prune","-q","--quiet","--force"]},apply:{phrase:"gitChange",changes:!0,f:["--check","--stat","--numstat","--summary","--cached","--index","-3","--3way","-R","--reverse","-v","--verbose","--reject","--allow-empty","--recount","--unidiff-zero","-N","--intent-to-add"],v:["-p","--whitespace","--exclude","--include","--directory","-C"]},"format-patch":{phrase:"gitOther",num:!0,f:["--stdout","-n","--numbered","-N","--no-numbered","-k","--keep-subject","--cover-letter","--signoff","-s","--no-stat","--root","--thread","-q","--quiet","--zero-commit","--minimal","-p","--no-binary"],v:["-o","--output-directory","--subject-prefix","--start-number","-v","--reroll-count","--base","--suffix","--to","--cc","--from"]},archive:{phrase:"gitOther",f:["--list","-l","-v","--verbose","--worktree-attributes","-0","-1","-2","-3","-4","-5","-6","-7","-8","-9"],v:["-o","--output","--format","--prefix","--add-file","--add-virtual-file","--mtime"]},bundle:{phrase:"gitOther",f:["create","verify","list-heads","unbundle","--all","--branches","--tags","-q","--quiet","--progress"],v:["--version"]},worktree:{phrase:"gitChange",changes:!0,f:["add","list","remove","prune","lock","unlock","move","repair","-f","--force","--detach","--checkout","--no-checkout","--lock","--orphan","-q","--quiet","--porcelain","-v","--verbose","--track","--no-track","--guess-remote"],v:["-b","-B","--reason","--expire"]},am:{phrase:"gitChange",changes:!0,f:["--abort","--continue","--skip","--quit","-3","--3way","-s","--signoff","-k","--keep","-q","--quiet","--show-current-patch"],v:["-p","--whitespace","--directory"]}},rd=[...new Set(Object.values(Xa).flatMap(e=>[...e.f??[],...e.v??[]]))],ld=["--config","--config-env","--exec","--upload-pack","--receive-pack","--template","--ext-diff","--open-files-in-pager","--git-dir","--work-tree","--exec-path","--namespace","--super-prefix","--separate-git-dir","--textconv","--strategy-option=theirs-exec"],dd=["submodule","bisect","filter-branch","filter-repo","difftool","mergetool","hook","daemon","instaweb","credential","credential-store","credential-cache","send-email","svn","p4","web--browse","upload-pack","receive-pack","shell","fsmonitor--daemon","archimport","cvsimport","cvsserver","quiltimport","imap-send","remote-ext","run-command"],cd=new Set(["commit","switch","branch","show","log","diff","checkout","shortlog","grep","ls-files","apply"]),ud=new Set(["clone","fetch","pull","ls-remote","archive"]);T(["git"],(e,t)=>{let i=0,o=t.cwd;for(;i<e.length;i++){const r=e[i];if(r==="-C"){const l=e[++i];if(l===void 0){t.parsed=!1;return}F(t,[l]),o=Y(t,l)[0]?.abs??null;continue}if(!["--no-pager","-P","--paginate","-p","--no-optional-locks","--no-replace-objects","--literal-pathspecs","--glob-pathspecs","--noglob-pathspecs","--icase-pathspecs","--no-advice"].includes(r)){if(r==="--version"||r==="--help"){f(t,"gitInfo");return}if(r.startsWith("-")){t.parsed=!1;return}break}}const a=e[i],n=e.slice(i+1);if(a!==void 0&&dd.includes(a)){t.parsed=!1;return}for(const r of n){const l=r.includes("=")?r.slice(0,r.indexOf("=")):r;if(ld.includes(l)){t.parsed=!1;return}if((r==="-c"||r.startsWith("-c")&&r.length>2&&!r.startsWith("--"))&&!cd.has(a??"")){t.parsed=!1;return}if((r==="-u"||r.startsWith("-u")&&r.length>2&&!r.startsWith("--"))&&ud.has(a??"")){t.parsed=!1;return}if(a==="grep"&&(r==="-O"||r.startsWith("-O")&&!r.startsWith("--"))){t.parsed=!1;return}if(a==="rebase"&&(r==="-x"||r.startsWith("-x")&&!r.startsWith("--"))){t.parsed=!1;return}}const s=t.cwd;t.cwd=o;try{if(a===void 0){f(t,"gitInfo");return}for(let c=0;c<n.length;c++){const u=n[c];if(u==="--")break;const p=u.includes("=")?u.slice(0,u.indexOf("=")):u;(p==="--output"||p.length>=4&&p.startsWith("--ou")&&"--output".startsWith(p))&&M(t,[u.includes("=")?u.slice(u.indexOf("=")+1):n[c+1]??""])}if(a==="config"){const c=n.map(u=>u.toLowerCase());if(n.some(u=>["--get","--get-all","--list","-l","--get-regexp","--show-origin","--show-scope","get","list"].includes(u))&&n.length<=3){f(t,"gitInfo");return}if(c.some(u=>["core.","alias.","filter.","include","credential","command","textconv","hook","sshcommand","pager","editor","diff.","merge.","url.","http.","gpg.","protocol","remote.","submodule","sequence"].some(p=>u.includes(p)))){t.parsed=!1;return}C(t,"changes-git","medium"),f(t,"gitOther",{sub:a}),C(t,"unknown-command","medium");return}const r=Xa[a];if(!r){f(t,"gitOther",{sub:a}),C(t,"unknown-command","medium");return}const l=q(t,n,{...r,f:[...r.f??[],"-q","--quiet","-h","--help"]});if((a==="branch"||a==="tag")&&!H(l,"-d","-D","-m","-M","-c","-C","--delete","--move","--copy","-f","--force","-u","--set-upstream-to","--unset-upstream","-t","--track","--no-track","--edit-description")&&!(a==="tag"&&H(l,"-a","-s","--annotate","--sign","-m","-F","--message","--file","-v","--verify"))&&(l.operands.length===0||H(l,"-l","--list"))||a==="worktree"&&l.operands[0]==="list"){f(t,"gitInfo");return}switch(r.changes&&C(t,"changes-git","medium"),r.net&&C(t,"uses-network","medium"),a){case"diff":H(l,"--no-index")&&F(t,l.operands),f(t,"gitDiff");return;case"format-patch":M(t,O(l,"-o","--output-directory")),H(l,"-o","--output-directory","--stdout")||M(t,["."]),f(t,"gitOther",{sub:a});return;case"archive":M(t,O(l,"-o")),F(t,O(l,"--add-file")),f(t,"gitOther",{sub:a});return;case"bundle":l.operands[0]==="create"?M(t,l.operands.slice(1,2)):F(t,l.operands.slice(1,2)),f(t,"gitOther",{sub:a});return;case"worktree":{const[c,u]=l.operands;c==="add"||c==="move"?M(t,c==="move"?l.operands.slice(1,3):u!==void 0?[u]:[]):c==="remove"&&qe(t,u!==void 0?[u]:[]),f(t,"gitChange",{sub:a});return}case"add":F(t,l.operands),f(t,"gitAdd",{paths:P(t,l.operands.length?l.operands:["."])});return;case"commit":F(t,O(l,"-F","--file","-t","--template")),f(t,"gitCommit");return;case"clone":{const c=l.operands[0]??"…",u=(()=>{let S=vl(c);return S=S.slice(S.lastIndexOf("/")+1),S=S.slice(S.lastIndexOf(":")+1),S.endsWith(".git")?S.slice(0,-4):S})();M(t,[l.operands[1]??(u||".")]);const p=c.indexOf(":"),h=c.indexOf("/"),b=p>0&&(h<0||p<h)&&!c.startsWith("/")&&!c.startsWith(".")&&!c.startsWith("~");c.startsWith("file://")||!ye(c)&&!b?F(t,[c.startsWith("file://")?c.slice(7):c]):C(t,"uses-network","medium",{host:he(c.includes("://")?c:c.slice(c.indexOf("@")+1).split(":")[0]??c)}),f(t,"gitClone",{url:Sl(c)});return}case"push":case"pull":case"fetch":f(t,"gitSync",{sub:a});return;case"rm":H(l,"--cached")||qe(t,l.operands),f(t,"gitChange",{sub:a});return;case"clean":H(l,"-n","--dry-run")||qe(t,l.operands.length?l.operands:["."]),f(t,"gitChange",{sub:a});return;case"branch":case"tag":f(t,"gitChange",{sub:a});return;case"remote":{const c=l.operands[0];if(c===void 0||c==="show"||c==="get-url"){f(t,"gitInfo");return}C(t,"changes-git","medium"),f(t,"gitChange",{sub:a});return}case"stash":f(t,"gitChange",{sub:a});return;default:f(t,r.phrase,r.phrase==="gitChange"?{sub:a}:{})}}finally{t.cwd=s}});T(["brew","apt","apt-get","port","yum","dnf","apk"],(e,t,i)=>{const o=e.find(l=>!l.startsWith("-")),a=["install","reinstall","upgrade","tap","bundle","uninstall","remove","rm","purge","autoremove"].includes(o??""),n=q(t,e,a?{any:!0,v:["-o","--option","-t","--target-release"]}:{f:["--versions","--json","--formula","--formulae","--cask","--casks","-1","-l","--full-name","--installed","--upgradable","-a","--all","--quiet","-q","-v","--verbose","--multiple","--pinned","--desc","--eval-all"],v:[]}),[s,...r]=n.operands;if(s==="install"||s==="reinstall"||s==="upgrade"||s==="tap"||i==="brew"&&s==="bundle"){C(t,"installs-packages","medium"),C(t,"uses-network","medium"),C(t,"writes-outside-project","high"),f(t,"systemInstall",{packages:le(r)});return}if(s==="uninstall"||s==="remove"||s==="rm"||s==="purge"||s==="autoremove"){C(t,"installs-packages","medium"),C(t,"writes-outside-project","high"),f(t,"pkgRemove",{packages:le(r)});return}if(s===void 0||["list","ls","info","search","--prefix","--version","config","outdated","deps","leaves","show","policy","desc","home","doctor"].includes(s)){f(t,"pkgInfo",{tool:i});return}f(t,"pkgOther",{tool:i,sub:s}),C(t,"unknown-command","medium")});const Za=e=>e.length>0&&[...e].every(t=>t>="A"&&t<="Z"||t>="0"&&t<="9");T(["kill"],(e,t)=>{C(t,"kills-processes","medium");let i=0;if(e[0]==="-l"||e[0]==="-L"){f(t,"sysInfo");return}e[0]==="-s"||e[0]==="-n"?i=2:e[0]!==void 0&&e[0]!=="--"&&e[0].startsWith("-")&&!e[0].startsWith("-$")&&(dt(e[0].slice(1))||Za(e[0].slice(1)))&&(i=1),e[i]==="--"&&i++;const o=e.slice(i);for(const a of o)a==="0"||a.startsWith("-")&&(dt(a.slice(1))||a.startsWith("-$"))?C(t,"kills-processes","high",{target:a}):!dt(a)&&!a.startsWith("%")&&!a.startsWith("$")&&oe(t,a);f(t,"kill",{targets:le(o),n:o.length})});T(["pkill","killall"],(e,t,i)=>{const o=e.filter(r=>r.startsWith("-")&&Za(r.slice(1))&&!["-I","-U","-G","-P","-F","-M","-N"].includes(r)),a=q(t,e.filter(r=>!o.includes(r)),{num:!0,f:i==="pkill"?["-f","-i","-l","-n","-o","-x","-v","-a","-I","-q","--full","--exact","--newest","--oldest"]:["-v","-s","-e","-I","-q","-m","-z","-d","--exact","--interactive","--quiet","--regexp","-w","--wait"],v:["-u","-U","-g","-G","-t","-s","-P","-F","-c","-j","-M","-N","--signal","-SIGNAL"]});F(t,O(a,"-F"));const n=a.operands,s=n.some(r=>r===""||r==="."||r===".*"||r==="^"||r==="*");C(t,"kills-processes",s?"high":"medium"),f(t,"kill",{targets:le(n),n:n.length})});T(["sleep"],(e,t)=>{q(t,e,{}),f(t,"sleep",{seconds:e[0]??"…"})});T(["echo"],(e,t)=>{t.stdout!==null?f(t,"writeText",{path:t.stdout}):f(t,"print")});T(["printf"],(e,t)=>{if(e[0]==="-v"){if((e[1]??"").includes("[")){t.parsed=!1;return}f(t,"setVar",{name:e[1]??"…"});return}t.stdout!==null?f(t,"writeText",{path:t.stdout}):f(t,"print")});T(["basename","dirname","seq","expr","yes"],(e,t)=>{q(t,e,{any:!0}),f(t,"print")});T(["jq","gojq"],(e,t)=>{const i=new Set(["--arg","--argjson","--slurpfile","--rawfile"]),o=["-f","--from-file","--indent","-L"],a=[];let n=null;for(let s=0;s<e.length;s++){const r=e[s];if(r==="--args"||r==="--jsonargs")break;if(i.has(r)){const l=e[s+2];(r==="--slurpfile"||r==="--rawfile")&&l!==void 0&&F(t,[l]),s+=2;continue}if(o.includes(r)){const l=e[++s];(r==="-f"||r==="--from-file")&&l!==void 0&&(F(t,[l]),n=l);continue}r.startsWith("-")&&r!=="-"&&!r.includes("$")||(n===null?n=r:a.push(r))}F(t,a),a.length?f(t,"json",{paths:P(t,a)}):f(t,"jsonPipe")});T(["yq"],(e,t)=>{if(e.some(a=>a==="-s"||a.startsWith("--split-exp")||a.startsWith("--split"))){t.parsed=!1;return}const i=q(t,e,{f:["-i","--inplace","-e","--exit-status","-P","--prettyPrint","-C","--colors","-M","--no-colors","-n","--null-input","-N","--no-doc","-r","--unwrapScalar","-j","--tojson","-0","--nul-output","-v","--verbose","--front-matter"],v:["-o","--output-format","-p","--input-format","--indent","-I","--from-file","--expression"]}),o=i.operands.slice(O(i,"--from-file").length?0:1);if(F(t,[...o,...O(i,"--from-file")]),H(i,"-i","--inplace")){M(t,o),f(t,"editText",{paths:P(t,o)});return}o.length?f(t,"json",{paths:P(t,o)}):f(t,"jsonPipe")});function md(e){ue.add(e.length);const t=e.length;let i=0;const o=s=>s!==void 0&&s>="0"&&s<="9",a=()=>{for(;i<t&&(e[i]===" "||e[i]===" ");)i++},n=()=>{if(e[i]==="$")return i++,!0;if(o(e[i])){for(;o(e[i]);)i++;if(e[i]==="~")for(i++;o(e[i]);)i++;return!0}if(e[i]==="/"){for(i++;i<t&&e[i]!=="/";){if(e[i]==="\\"&&i++,e[i]===`
19
19
  `)return!1;i++}if(i>=t)return!1;i++,e[i]==="I"&&i++}return!0};for(;i<t;){for(a();e[i]===";"||e[i]===`
20
20
  `;)i++,a();if(i>=t)break;if(!n()||e[i]===","&&(i++,!n()))return!1;a(),e[i]==="!"&&(i++,a());const s=e[i++];if(s==="s"||s==="y"){const r=e[i++];if(r===void 0||r==="\\"||r===`
21
21
  `||r===" "||r===";")return!1;for(let l=0;l<2;l++){for(;i<t&&e[i]!==r;)e[i]==="\\"&&i++,i++;if(i>=t)return!1;i++}if(s==="s")for(;i<t&&"gIip0123456789".includes(e[i]);)i++}else if(!(s==="p"||s==="d"||s==="="))if(s==="q"||s==="Q")for(a();o(e[i]);)i++;else return!1;if(a(),i<t&&e[i]!==";"&&e[i]!==`
22
- `)return!1}return!0}T(["sed","gsed"],(e,t)=>{const i=[],o=[],a=[];let n=!1;const s=["--quiet","--silent","--regexp-extended","--posix","--null-data","--separate","--unbuffered","--debug","--sandbox","--zero-terminated"];for(let r=0;r<e.length;r++){const l=e[r];if(l==="--"){o.push(...e.slice(r+1));break}if(l==="--expression"){i.push(e[++r]??"");continue}if(l.startsWith("--expression=")){i.push(l.slice(13));continue}if(l.startsWith("--in-place")){n=!0;const d=l.slice(l.indexOf("=")+1);l.includes("=")&&d.includes("/")&&a.push(d.split("*").join("x"));continue}if(l==="--line-length"){r++;continue}if(l.startsWith("--")){if(s.includes(l))continue;t.parsed=!1;return}if(l.startsWith("-")&&l!=="-"&&!l.includes("$")){for(let d=1;d<l.length;d++){const c=l[d];if(!"nErusz".includes(c)){if(c==="i"||c==="I"){n=!0;let u=l.slice(d+1);if(d===l.length-1){const p=e[r+1];p!==void 0&&(p===""||p.startsWith(".")&&!p.includes("/"))&&(u=p,r++)}u.includes("/")&&a.push(u.split("*").join("x"));break}if(c==="e"){const u=l.slice(d+1);i.push(u!==""?u:e[++r]??"");break}if(c==="l"){l.slice(d+1)===""&&r++;break}t.parsed=!1;return}}continue}o.push(l)}if(i.length===0&&o.length&&i.push(o.shift()),i.length===0||!i.every(md)){t.parsed=!1;return}if(n){M(t,[...o,...a]),f(t,"editText",{paths:R(t,o)});return}F(t,o),o.length?f(t,"filter",{paths:R(t,o)}):f(t,"filterPipe")});T(["awk","gawk","mawk","nawk"],(e,t)=>{const i=q(t,e,{v:["-F","-v","--assign","--field-separator"],f:["--posix","--traditional","-P","--re-interval"]});if(e.some(s=>s==="-f"||s.startsWith("--file")||s==="-E"||s==="-i"||s==="--include"||s==="-l"||s==="--load")){t.parsed=!1;return}const[o,...a]=i.operands;if(o===void 0){t.parsed=!1;return}if(["system","getline","|",">","close(","fflush(","@","ENVIRON"].some(s=>o.includes(s))){t.parsed=!1;return}const n=a.filter(s=>!/^[A-Za-z_][A-Za-z0-9_]*=/.test(s));F(t,n),n.length?f(t,"filter",{paths:R(t,n)}):f(t,"filterPipe")});const pd={f:["-n","-N","-i","-I","-l","-w","-v","-F","-x","-s","-S","-c","-o","-q","-u","-uu","-uuu","-U","-P","-L","-H","--line-number","--no-line-number","--ignore-case","--smart-case","--case-sensitive","--files-with-matches","--files-without-match","--word-regexp","--invert-match","--fixed-strings","--line-regexp","--count","--count-matches","--only-matching","--quiet","--hidden","--no-ignore","--no-ignore-vcs","--follow","--files","--json","--no-heading","--heading","--vimgrep","--stats","--multiline","--pcre2","--null","-0","--no-filename","--with-filename","--type-list","--trim","--sort-files","--column","--no-messages","--byte-offset","-b","--passthru","--text","-a","--crlf","--no-config"],v:["-e","--regexp","-f","--file","-A","-B","-C","-m","--max-count","-g","--glob","--iglob","-t","--type","-T","--type-not","--color","--colors","-M","--max-columns","-j","--threads","--max-depth","-d","--sort","--sortr","-r","--replace","--max-filesize","--context","--after-context","--before-context","--type-add","--ignore-file"]},fd={f:["-i","-s","-S","-l","-L","-w","-v","-Q","-c","-o","-u","-U","-a","-t","--hidden","--nocolor","--noheading","--nogroup","--column","--literal","--files-with-matches","--count","--vimgrep","--follow","--ignore-case","--case-sensitive","--silent","--stats","--numbers","--nonumbers"],v:["-G","--file-search-regex","-g","-A","-B","-C","-m","--max-count","--depth","--ignore","--ignore-dir","--color-match"]};T(["grep","egrep","fgrep","ggrep","rg","ag"],(e,t,i)=>{const o=q(t,e,i==="rg"?pd:i==="ag"?fd:{any:!0,v:["-e","--regexp","-f","--file","-A","-B","-C","-m","--max-count","--include","--exclude","--exclude-dir","-d","-D","--context","--after-context","--before-context","--label","--binary-files","-g","--glob","-t","--type","-T","--type-not","--colors","-M","--max-columns","-j","--threads","--ignore-file","--max-depth","--sort","--sortr","-r","--replace"].filter(l=>!(i!=="rg"&&l==="-r"))}),a=O(o,"-e","--regexp","-f","--file");F(t,[...O(o,"-f","--file","--ignore-file")]);const n=a.length?o.operands:o.operands.slice(1),s=i==="rg"||i==="ag"||H(o,"-r","-R","--recursive"),r=n.length?n:s?["."]:[];F(t,r),r.length?f(t,"search",{paths:R(t,r)}):f(t,"searchPipe")});T(["sort"],(e,t)=>{if(e.some(o=>o.startsWith("--compress-program"))){t.parsed=!1;return}const i=q(t,e,{f:["-r","-n","-u","-f","-b","-d","-g","-h","-i","-M","-R","-s","-V","-c","-C","-m","-z","--reverse","--numeric-sort","--unique","--ignore-case","--human-numeric-sort","--version-sort","--stable","--check","--merge","--zero-terminated","--ignore-leading-blanks","--dictionary-order","--general-numeric-sort","--month-sort","--random-sort","--ignore-nonprinting","--debug"],v:["-o","--output","-k","--key","-t","--field-separator","-T","--temporary-directory","-S","--buffer-size","--parallel","--files0-from","--random-source","--sort","--batch-size"]});M(t,O(i,"-o","--output","-T","--temporary-directory")),F(t,[...i.operands,...O(i,"--files0-from","--random-source")]),i.operands.length?f(t,"filter",{paths:R(t,i.operands)}):f(t,"filterPipe")});const Eo={uniq:["-f","-s","-w","--skip-fields","--skip-chars","--check-chars"],cut:["-d","--delimiter","-f","--fields","-c","--characters","-b","--bytes","--output-delimiter"],tr:[],nl:["-b","-d","-f","-h","-i","-l","-n","-s","-v","-w"],column:["-s","-c","-o","-N","-W","-t"],rev:[],paste:["-d","--delimiters"],fold:["-w","--width"],fmt:["-w","--width","-p"],expand:["-t","--tabs"],unexpand:["-t","--tabs"],tac:["-s","--separator"],comm:[],join:["-1","-2","-t","-o","-j","-e","-a","-v"],iconv:["-f","-t","-o","--from-code","--to-code","--output"],col:["-l"],colrm:[]};T(Object.keys(Eo),(e,t,i)=>{const o=q(t,e,{any:!0,v:Eo[i]});let a=i==="tr"?[]:o.operands;i==="uniq"&&a.length>=2&&(M(t,a.slice(1,2)),a=a.slice(0,1)),i==="iconv"&&M(t,O(o,"-o","--output")),F(t,a),a.length?f(t,"filter",{paths:R(t,a)}):f(t,"filterPipe")});T(["stat","diff","cmp","md5","md5sum","shasum","sha1sum","sha256sum","sha512sum","cksum","readlink","realpath","od","hexdump","strings","mdls","pdfinfo","otool"],(e,t)=>{const i=q(t,e,{any:!0,v:["-f","--format","-c","-n","-s","-l","-L","-a","-I","-P","--from-file","--to-file","-t","-j","-N","-e"]});F(t,[...i.operands,...O(i,"--from-file","--to-file")]),i.operands.length?f(t,"readFiles",{paths:R(t,i.operands)}):f(t,"filterPipe")});const qo={xxd:{long1:!0,out:[],f:["-a","-autoskip","-b","-bits","-C","-capitalize","-E","-EBCDIC","-e","-i","-include","-p","-ps","-postscript","-plain","-r","-revert","-u","-uppercase","-d","-h","-help","-v","-version"],v:["-c","-cols","-g","-groupsize","-l","-len","-o","-offset","-s","-seek","-n","-name","-R"]},base64:{out:["-o","--output"],inp:["-i","--input"],f:["-d","-D","--decode","-h","--help","--ignore-garbage"],v:["-b","--break","-i","--input","-o","--output","-w","--wrap"]},tree:{out:["-o"],f:["-a","-d","-l","-f","-x","-i","-q","-N","-Q","-p","-u","-g","-s","-h","--du","-D","-F","-v","-t","-c","-U","-r","-C","-n","-A","-S","--dirsfirst","--noreport","--prune","-J","-X","--gitignore","--si"],v:["-L","-P","-I","-o","--charset","--filelimit","--timefmt"]},less:{f:["-N","-S","-R","-r","-F","-X","-i","-I","-n","-M","-m","-e","-E","-K","-c","-s","-f","-q","-Q","-+F"],v:["-x","-z","-p","-j","-b","-h","-y"]},more:{f:["-N","-S","-R","-r","-F","-X","-i","-I","-n","-M","-m","-e","-E","-c","-s","-f","-d","-l","-u"],v:["-x","-z","-p","-n"]},mediainfo:{inp:[],f:["--Full","-f","--Help","--Version"],v:["--Output","--Language","--Inform"]}};T(Object.keys(qo),(e,t,i)=>{const o=qo[i],a=q(t,e,o);i==="xxd"&&M(t,a.operands.slice(1,2)),M(t,O(a,...o.out??[]));for(const r of O(a,"--Output","--Inform"))r.startsWith("file://")&&De(t,r.slice(7));const n=i==="xxd"?a.operands.slice(0,1):[...a.operands,...O(a,...o.inp??[])],s=n.length?n:i==="tree"?["."]:[];F(t,s),s.length?f(t,"readFiles",{paths:R(t,s)}):f(t,"filterPipe")});T(["tee"],(e,t)=>{const i=q(t,e,{f:["-a","-i","-p","--append","--ignore-interrupts","--output-error"]});M(t,i.operands),f(t,"writeFile",{paths:R(t,i.operands)})});const hd=["python","node","perl","ruby","php","bun","deno","osascript","lua","sh","bash","zsh","dash","ksh","fish","pypy","tclsh","Rscript"];T(["xargs"],(e,t)=>{const i=["-n","-L","-P","-s","-d","-E","-e","-I","-J","-R","-S","-a","--arg-file","--max-args","--max-procs","--delimiter","--replace","--max-chars","--eof","--max-lines"],o=["-0","-r","-t","-p","-x","-o","--null","--no-run-if-empty","--verbose","--interactive","--exit","--open-tty"];let a=null,n=0;for(;n<e.length;n++){const d=e[n];if(d==="--"){n++;break}if(!d.startsWith("-"))break;if(i.includes(d)){const c=e[++n];(d==="-I"||d==="-J"||d==="--replace")&&(a=c??"{}"),(d==="-a"||d==="--arg-file")&&F(t,[c??""]);continue}if(d.startsWith("-I")&&d.length>2){a=d.slice(2);continue}if(d==="-i"){a="{}";continue}d.startsWith("-n")||d.startsWith("-P")||d.startsWith("-L")||o.includes(d)||oe(t,d)}const s=e.slice(n);if(s.length===0){f(t,"xargs",{cmd:"echo"});return}if(Ui(s)){t.parsed=!1;return}const r=a!==null&&a!==""&&s.some(d=>d.includes(a))?a:ri;en(r===ri?[...s,ri]:s,t,{token:r,locs:[hl("…")]});const l=(Ua(s)?.argv[0]??s[0]).replace(/^.*\//,"");t.pipedIn&&t.pipeNet&&hd.some(d=>l===d||l.startsWith(`${d}3`)||l.startsWith(`${d}.`)||l.startsWith(`${d}-`))&&C(t,"runs-code","high"),f(t,"xargs",{cmd:s[0]})});const gd=["png","jpg","jpeg","gif","webp","svg","mp4","mov","m4v","webm","mp3","wav","aac","m4a","pdf","txt","md","json","csv","heic","tif","tiff","avif","bmp","ogg","flac","mkv","gif","ico","psd","ai","eps","log"];T(["open"],(e,t)=>{const i=e.indexOf("--args"),o=i>=0?e.slice(0,i):e,a=q(t,o,{f:["-e","-t","-f","-F","-W","-R","-n","-g","-j","-h","--fresh","--new","--wait-apps","--background","--hide","--reveal","--header"],v:["-a","-b","-s","-u","--env","--stdin","--stdout","--stderr"]}),n=[...a.operands.filter(ye),...O(a,"-u")],s=a.operands.filter(d=>!ye(d));n.length&&C(t,"uses-network","medium",{host:he(n[0])}),F(t,s);const r=d=>{if(d.endsWith("/")||d==="."||d==="..")return!0;const c=d.slice(d.lastIndexOf(".")+1).toLowerCase();return d.lastIndexOf(".")>d.lastIndexOf("/")&&gd.includes(c)},l=s.some(d=>Y(t,d).some(c=>c.abs!==null&&_i(t,c.abs)));(O(a,"-a","-b").length||s.some(d=>!r(d))||l)&&C(t,"runs-code","medium"),s.length?f(t,"open",{paths:R(t,s)}):n.length?f(t,"openUrl",{host:he(n[0])}):f(t,"open",{paths:le(O(a,"-a","-b"))})});T(["which","whereis","type","command"],(e,t)=>f(t,"which",{cmd:le(e.filter(i=>!i.startsWith("-")))}));T(["pwd"],(e,t)=>{q(t,e,{f:["-L","-P"]}),f(t,"pwd")});T(["whoami","uname","id","sw_vers","nproc","uptime","df","locale","system_profiler","ps","top","lsof","groups","tty","cal","vm_stat","xcrun","jobs"],(e,t)=>f(t,"sysInfo"));T(["arch"],(e,t)=>{q(t,e,{any:!0}),f(t,"sysInfo")});T(["caffeinate"],(e,t)=>{q(t,e,{f:["-d","-i","-m","-s","-u"],v:["-t","-w"]}),f(t,"noop")});T(["date"],(e,t)=>{const i=q(t,e,{f:["-u","-j","-n","-R","--utc","--universal","--rfc-email","-I","--iso-8601","--rfc-3339","--debug"],v:["-r","-v","-f","-d","--date","--reference","-s","--set","-z"]});F(t,O(i,"--reference"));const o=O(i,"-s","--set").length>0||!H(i,"-j")&&i.operands.some(a=>!a.startsWith("+"));o&&C(t,"writes-outside-project","high"),f(t,o?"changesSystem":"sysInfo")});T(["hostname"],(e,t)=>{const i=q(t,e,{f:["-s","-f","-d","-i","-I","-a","-A","--short","--fqdn","--domain","--ip-address","--all-ip-addresses"],v:["-F","--file"]}),o=i.operands.length>0||O(i,"-F","--file").length>0;o&&C(t,"writes-outside-project","high"),f(t,o?"changesSystem":"sysInfo")});T(["sysctl"],(e,t)=>{const i=q(t,e,{f:["-a","-n","-b","-e","-h","-N","-o","-x","-q","-d","-w"],v:["-f"]}),o=H(i,"-w")||i.operands.some(a=>a.includes("="));o&&C(t,"writes-outside-project","high"),f(t,o?"changesSystem":"sysInfo")});T(["crontab"],(e,t)=>{if(e.length===1&&e[0]==="-l"){f(t,"sysInfo");return}C(t,"writes-outside-project","high"),f(t,"changesSystem")});T(["defaults"],(e,t)=>{const i=e.find(o=>!o.startsWith("-"));if(i==="read"||i==="read-type"||i==="domains"||i==="find"||i==="help"){f(t,"sysInfo");return}C(t,"writes-outside-project","high"),f(t,"changesSystem")});T(["launchctl"],(e,t)=>{const i=e[0];if(i==="list"||i==="print"||i==="version"||i==="help"||i==="getenv"||i==="blame"||i==="print-cache"||i==="managerpid"||i==="manageruid"){f(t,"sysInfo");return}C(t,"writes-outside-project","high"),C(t,"runs-code","high"),f(t,"changesSystem")});T(["hash"],(e,t)=>{if(e.some(i=>i.startsWith("-")&&i.includes("p"))){C(t,"runs-code","high"),f(t,"shellOption");return}f(t,"noop")});T(["enable"],(e,t)=>{if(e.some(i=>i.startsWith("-")&&i.includes("f"))){C(t,"runs-code","high"),f(t,"shellOption");return}C(t,"unknown-command","medium"),f(t,"shellOption")});T(["printenv"],(e,t)=>f(t,"printEnv"));T(["true","false",":","exit","wait","return","shift","break","continue"],(e,t)=>f(t,"noop"));T(["set"],(e,t)=>f(t,"shellOption"));T(["shopt"],(e,t)=>{t.parsed=!1});T(["test","["],(e,t)=>{if(e.some(o=>o.includes("["))){t.parsed=!1;return}const i=["-eq","-ne","-lt","-le","-gt","-ge"];F(t,e.filter((o,a)=>ce(o)&&o!=="]"&&!i.includes(e[a-1]??"")&&!i.includes(e[a+1]??""))),f(t,"check")});T(["export","unset","readonly","declare","typeset","local","read"],(e,t,i)=>{const o=[];for(const a of e){if(a.includes("[")||a.includes("`")||a.includes("$(")){t.parsed=!1;return}if(a.startsWith("-")){if(i==="read")continue;if(a.includes("f")||a.includes("n")){t.parsed=!1;return}continue}const n=a.indexOf("="),s=n>=0?a.slice(0,n):a;if(Bi(t,s,n>=0?a.slice(n+1):"")){t.parsed=!1;return}o.push(s)}f(t,"setVar",{name:le(o)})});const vd={perl:{code:"eE",value:"I",rest:"Mmixd",digits:"l0C",noval:"nNpaswWXSTtUcvhD"},ruby:{code:"e",value:"IrCFE",rest:"iWxK",digits:"0",noval:"npalwvdscyhUT"},php:{code:"rBRE",value:"fdctzS",rest:"",digits:"",noval:"nlsiamvhHqeaw"}};T(["perl","ruby","php"],(e,t,i)=>{const o=vd[i];for(let a=0;a<e.length;a++){const n=e[a];if(n==="--"){const s=e[a+1];if(s===void 0){J(t,"shell");return}fe(t,s),te(t,e.slice(a+2)),f(t,"runScript",{script:R(t,[s])});return}if(n==="-"){J(t,"shell");return}if(n.startsWith("--")){oe(t,n);continue}if(n.startsWith("-")&&!n.includes("$")){for(let s=1;s<n.length;s++){const r=n[s],l=n.slice(s+1);if(o.code.includes(r)){const d=l!==""?l:e[++a];if(d===void 0){t.parsed=!1;return}Te(t,d),(n.includes("i")||e.some(c=>c.startsWith("-")&&!c.startsWith("--")&&c.includes("i")&&i!=="php"))&&M(t,e.slice(a+1).filter(c=>!c.startsWith("-"))),f(t,"inlineCode",{lang:i});return}if(o.value.includes(r)){const d=l!==""?l:e[++a];if(i==="php"&&r==="f"&&d!==void 0){fe(t,d),te(t,e.slice(a+1)),f(t,"runScript",{script:R(t,[d])});return}if(i==="php"&&r==="S"&&(C(t,"uses-network","medium"),C(t,"runs-code","medium")),d!==void 0&&((r==="I"||r==="r"&&i==="ruby"&&ce(d)||i==="php"&&(r==="z"||r==="c"))&&De(t,d),i==="ruby"&&r==="C"&&F(t,[d]),i==="php"&&r==="d")){const c=d.slice(0,Math.max(0,d.indexOf("="))).trim().toLowerCase(),u=d.slice(d.indexOf("=")+1);["auto_prepend_file","auto_append_file","extension","zend_extension","include_path","extension_dir","open_basedir","error_log","sendmail_path"].includes(c)&&(C(t,"runs-code","medium",{option:`-d ${c}`}),u&&c!=="sendmail_path"&&De(t,u))}break}if(o.rest.includes(r)){if(i==="perl"&&(r==="M"||r==="m")&&l.startsWith("lib="))for(const d of l.slice(4).split(","))d&&De(t,d);break}if(o.digits.includes(r)){for(;s+1<n.length&&n[s+1]>="0"&&n[s+1]<="9";)s++;continue}o.noval.includes(r)||oe(t,`-${r}`)}continue}if(Ve(n)){J(t,"shell");return}fe(t,n),te(t,e.slice(a+1)),f(t,"runScript",{script:R(t,[n])});return}J(t,"shell")});T(["osascript"],(e,t)=>{for(let i=0;i<e.length;i++){const o=e[i];if(o==="-e"){const a=e[++i];if(a===void 0){t.parsed=!1;return}Te(t,a),f(t,"inlineCode",{lang:"AppleScript"});return}if(o==="-l"||o==="-s"){i++;continue}if(o!=="-i"){if(o==="-"){J(t,"shell");return}if(o.startsWith("-")&&!o.includes("$")){if(o.includes("e")){t.parsed=!1;return}oe(t,o);continue}if(Ve(o)){J(t,"shell");return}fe(t,o),te(t,e.slice(i+1)),f(t,"runScript",{script:R(t,[o])});return}}J(t,"shell")});T(["lua","Rscript","tclsh","deno"],(e,t,i)=>{const o=["-e","-E","--eval"];for(let a=0;a<e.length;a++){const n=e[a];if(o.includes(n)||i==="deno"&&n==="eval"){const s=e[++a];if(s===void 0){t.parsed=!1;return}Te(t,s),f(t,"inlineCode",{lang:i});return}if(n==="-"){J(t,"shell");return}if(!(i==="deno"&&n==="run")){if(n.startsWith("-")&&!n.includes("$")){oe(t,n);continue}if(ye(n)){C(t,"uses-network","medium",{host:he(n)}),C(t,"runs-code","medium"),te(t,e.slice(a+1)),f(t,"runScript",{script:he(n)});return}if(Ve(n)){J(t,"shell");return}fe(t,n),te(t,e.slice(a+1)),f(t,"runScript",{script:R(t,[n])});return}}J(t,"shell")});T(["bash","sh","zsh","dash","ksh","fish"],(e,t)=>{let i=0;for(;i<e.length&&(e[i].startsWith("-")||e[i].startsWith("+"))&&e[i]!=="-"&&e[i]!=="--";)i+=["-o","+o","-O","+O"].includes(e[i])?2:1;const o=q(t,e.slice(0,i),{f:["-e","-u","-x","-v","-n","-l","--login","-i","-s","--norc","--noprofile","--posix","-r","--restricted","-eu","-ex","-eux","-euo","--verbose"],v:["-o","+o","-O","+O"]});o.operands.push(...e.slice(e[i]==="--"?i+1:i));const a=o.operands[0],n=a===void 0?"":Di(a);if(H(o,"-s")||a===void 0||a==="-"||Ve(n)){J(t,"shell");return}const s=o.operands.slice(1);fe(t,a),te(t,s),f(t,"runScript",{script:R(t,[a])})});const Oe=["--script-shell","--node-options","--userconfig","--globalconfig","--init-module","--shell","--editor","--browser","--git","--onload-script","--npmrc","--call","--sign-git-commit","--sign-git-tag","--viewer","--node-gyp","--prefix-dir"],bd={git:{opts:["--config","--config-env","--exec","--upload-pack","--receive-pack","--template","--ext-diff","--open-files-in-pager","--git-dir","--work-tree","--exec-path","--namespace","--super-prefix","--separate-git-dir","--textconv","--extcmd","--tool","--gui"],ok:()=>rd},tar:{opts:li,ok:()=>Ft},bsdtar:{opts:li,ok:()=>Ft},gtar:{opts:li,ok:()=>Ft},sort:{opts:["--compress-program"]},rsync:{opts:["-e","--rsh","--rsync-path","--config","--daemon"]},ssh:{opts:["-o","-F","-S","-J","-L","-R","-D","-w"]},scp:{opts:["-o","-F","-S","-J"]},sftp:{opts:["-o","-F","-S","-J","-b"]},npm:{opts:Oe,ok:()=>Se.f.concat(Se.v)},pnpm:{opts:Oe,ok:()=>Se.f.concat(Se.v)},yarn:{opts:Oe,ok:()=>Se.f.concat(Se.v)},npx:{opts:Oe},pnpx:{opts:Oe},bunx:{opts:Oe},curl:{opts:["--config","-K"]},wget:{opts:["--execute","--config","-e"]},rg:{opts:["--pre","--pre-glob","--hostname-bin","--search-zip","-z"]},ag:{opts:["--pager","--search-zip","-z"]},zip:{opts:["--unzip-command","-TT"]},less:{opts:["-o","-O","--log-file","--LOG-FILE","--lesskey-file"]},mediainfo:{opts:["--LogFile","--logfile"]}};function Do(e,t){const i=bd[e];if(!i)return!1;const o=i.ok?new Set(i.ok()):null;for(const a of t){if(a==="--")return!1;if(!a.startsWith("-"))continue;const n=a.includes("=")?a.slice(0,a.indexOf("=")):a;if(i.opts.includes(n)||i.opts===Oe&&(n.startsWith("--config.")||n.toLowerCase().startsWith("--npm_config"))||n.startsWith("--")&&n.length>=3&&!o?.has(n)&&i.opts.some(s=>s.startsWith("--")&&s!==n&&s.startsWith(n)))return!0}return!1}function Jt(e,t,i){C(t,"unknown-command","medium"),te(t,e),f(t,"runs",{cmd:i})}const $d=e=>/^(python|pip)(\d+(\.\d+)?)?$/.test(e);function Ja(e,t){const i=e[0];if(i===void 0)return;if(i.includes("$")||i.includes("*")||i.includes("?")||i.includes("[")&&i!=="["||i.includes("{")&&i.includes(",")){t.parsed=!1;return}let o=i;const a=e.slice(1);if(i.includes("/")){const l=Ma(i),d=i.lastIndexOf("/"),c=i.slice(d+1),u=Y(t,i)[0],p=u!==void 0&&(u.cls==="work"||u.cls==="project"),h=u!==void 0&&u.abs!==null&&_i(t,u.abs);if(l!==null)o=l;else if(p&&$d(c)&&i.slice(0,d).endsWith("/bin"))o=c,h&&C(t,"runs-code","medium",{path:ne(u,t.ctx)});else{C(t,"runs-code","medium"),F(t,[i]),te(t,a),f(t,"runScript",{script:R(t,[i])});return}}if(/^python\d+(\.\d+)?$/.test(o)?o="python3":/^pip\d+(\.\d+)?$/.test(o)&&(o="pip"),Do(o,a)||Do(o.toLowerCase(),a)){t.parsed=!1;return}const n=vi.get(o);if(n){n(a,t,o);return}const s=o.toLowerCase(),r=s!==o?vi.get(s):void 0;if(r){const l=t.phrases;t.phrases=[],r(a,t,s),t.phrases=l,C(t,"unknown-command","medium"),f(t,"runs",{cmd:o});return}Jt(a,t,o)}function en(e,t,i){const o=t.phrases,a=t.cwd,n=t.found,s=t.cdTarget;t.phrases=[],t.found=i;const r=Ua(e);if(r===null)t.parsed=!1;else{for(const[l,d]of Object.entries(r.env))Bi(t,l,d)&&(t.parsed=!1);(r.wrappers.includes("sudo")||r.wrappers.includes("doas"))&&C(t,"elevated","high"),t.parsed&&Ja(r.argv,t)}t.phrases=o,t.cwd=a,t.found=n,t.cdTarget=s}function yd(e,t){for(const[o,a]of Object.entries(e.env)){if(Bi(t,o,a)){t.parsed=!1;return}if(Ka.includes(o))for(const n of a.split(":"))n!==""&&Y(t,n).some(s=>s.cls!=="work"&&s.cls!=="project")&&C(t,"runs-code","medium",{path:n})}(e.wrappers.includes("sudo")||e.wrappers.includes("doas"))&&C(t,"elevated","high"),t.stdout=null,t.stdinFile=null;for(const o of e.redirects){if(o.op==="<"){F(t,[o.target]),t.stdinFile??=R(t,[o.target]);continue}M(t,[o.target]),o.op!=="2>"&&t.stdout===null&&!ht(Y(t,o.target)[0]?.abs??null)&&(t.stdout=R(t,[o.target]))}const i=t.phrases.length;if(e.argv.length===0){const o=Object.keys(e.env);e.wrappers.includes("env")?f(t,"printEnv"):o.length?f(t,"setVar",{name:le(o)}):e.wrappers.includes("time")||e.wrappers.includes("nohup")?f(t,"noop"):f(t,"writeFile",{paths:t.stdout??"…"})}else Ja(e.argv,t);t.parsed&&(t.phrases.length===i?f(t,"runs",{cmd:e.argv[0]??"…"}):t.phrases.length>i+1&&t.phrases.splice(i+1))}const Ye=(e,t={})=>({key:`explain.${e}`,params:t}),wd=["exit","return","shift","break","continue","repeat","ulimit","sched","fc","history","wait","unset","read"],di=["declare","typeset","local","export","readonly","integer","float"],kd=["exit","return","shift","break","continue","repeat"],Uo=["-eq","-ne","-lt","-le","-gt","-ge"],_o=/^[-+]?(?:0[xX][0-9a-fA-F]+|[0-9]+(?:\.[0-9]*)?|\.[0-9]+)$/,Sd=/^\$(?:[A-Za-z_][A-Za-z0-9_]*|[0-9?#!$@*-]|\{[A-Za-z_][A-Za-z0-9_]*\})$/,xd=["$?","$#","$!","$$"];function Bo(e){if(e.includes("$"))return null;const t=[];for(let i=0;i<e.length;i++){if(e[i]!=="%"||(i++,e[i]==="%"))continue;let o=!1;for(;i<e.length&&"-+ #0123456789.'*".includes(e[i]);)(e[i]==="*"||e[i]==="'")&&(o=!0),i++;const a=e[i]??"";t.push(o?"strict":"diouxXeEfFgGaA".includes(a)&&a!==""?"num":"str")}return t}function Ad(e){const t=e.commands.flatMap(s=>[...s.argv,...Object.values(s.env),...s.redirects.map(r=>r.target)]);ue.add(t.reduce((s,r)=>s+r.length,0));const i=t.some(s=>s.includes("$(")||s.includes("`")),o=s=>s.includes("$")&&!xd.includes(s)||s.includes("[")||s.includes("(")||s.includes("`");let a=!1;for(const s of e.commands){const r=s.argv[0];if(Object.values(s.env).some(o)&&(a=!0),(r==="read"||r==="vared"||r==="getopts"||r==="mapfile"||r==="readarray")&&(a=!0),r!==void 0&&di.includes(r))for(const l of s.argv.slice(1))l.includes("=")&&o(l.slice(l.indexOf("=")+1))&&(a=!0)}const n=s=>_o.test(s)||Sd.test(s)&&!a;return e.commands.some(s=>{const r=s.argv[0]??"",l=s.argv.slice(1);if(i)if(r==="test"||r==="["){if(l.some(d=>Uo.includes(d)))return!0}else{if(wd.includes(r)||di.includes(r))return!0;if((r==="printf"||r==="print")&&l.some(d=>(Bo(d)??[]).some(c=>c!=="str")))return!0}if(kd.includes(r))return!l.every(n);if(r==="test"||r==="[")return l.some((d,c)=>Uo.includes(d)&&!(n(l[c-1]??"")&&n(l[c+1]==="]"?"":l[c+1]??"")));if(r==="printf"||r==="print"&&l.includes("-f")){let d=0;if(r==="printf"){for(;l[d]==="-v";)d+=2;l[d]==="--"&&d++}else d=l.indexOf("-f")+1;const c=l[d];if(c===void 0)return!1;const u=l.slice(d+1);if(u.length===0)return!1;const p=Bo(c);return p===null?!0:p.includes("strict")?!u.every(h=>_o.test(h)):p.includes("num")?u.some((h,b)=>p[b%p.length]==="num"&&!n(h)):!1}return di.includes(r)?r==="integer"||r==="float"?!0:l.some(d=>(d.startsWith("-")||d.startsWith("+"))&&/[iEF]/.test(d.slice(1))&&!d.includes("=")):r==="unset"?l.some(d=>d.includes("[")):!1})}function xt(e,t){ue.add(e.length);const i=`
22
+ `)return!1}return!0}T(["sed","gsed"],(e,t)=>{const i=[],o=[],a=[];let n=!1;const s=["--quiet","--silent","--regexp-extended","--posix","--null-data","--separate","--unbuffered","--debug","--sandbox","--zero-terminated"];for(let r=0;r<e.length;r++){const l=e[r];if(l==="--"){o.push(...e.slice(r+1));break}if(l==="--expression"){i.push(e[++r]??"");continue}if(l.startsWith("--expression=")){i.push(l.slice(13));continue}if(l.startsWith("--in-place")){n=!0;const d=l.slice(l.indexOf("=")+1);l.includes("=")&&d.includes("/")&&a.push(d.split("*").join("x"));continue}if(l==="--line-length"){r++;continue}if(l.startsWith("--")){if(s.includes(l))continue;t.parsed=!1;return}if(l.startsWith("-")&&l!=="-"&&!l.includes("$")){for(let d=1;d<l.length;d++){const c=l[d];if(!"nErusz".includes(c)){if(c==="i"||c==="I"){n=!0;let u=l.slice(d+1);if(d===l.length-1){const p=e[r+1];p!==void 0&&(p===""||p.startsWith(".")&&!p.includes("/"))&&(u=p,r++)}u.includes("/")&&a.push(u.split("*").join("x"));break}if(c==="e"){const u=l.slice(d+1);i.push(u!==""?u:e[++r]??"");break}if(c==="l"){l.slice(d+1)===""&&r++;break}t.parsed=!1;return}}continue}o.push(l)}if(i.length===0&&o.length&&i.push(o.shift()),i.length===0||!i.every(md)){t.parsed=!1;return}if(n){M(t,[...o,...a]),f(t,"editText",{paths:P(t,o)});return}F(t,o),o.length?f(t,"filter",{paths:P(t,o)}):f(t,"filterPipe")});T(["awk","gawk","mawk","nawk"],(e,t)=>{const i=q(t,e,{v:["-F","-v","--assign","--field-separator"],f:["--posix","--traditional","-P","--re-interval"]});if(e.some(s=>s==="-f"||s.startsWith("--file")||s==="-E"||s==="-i"||s==="--include"||s==="-l"||s==="--load")){t.parsed=!1;return}const[o,...a]=i.operands;if(o===void 0){t.parsed=!1;return}if(["system","getline","|",">","close(","fflush(","@","ENVIRON"].some(s=>o.includes(s))){t.parsed=!1;return}const n=a.filter(s=>!/^[A-Za-z_][A-Za-z0-9_]*=/.test(s));F(t,n),n.length?f(t,"filter",{paths:P(t,n)}):f(t,"filterPipe")});const pd={f:["-n","-N","-i","-I","-l","-w","-v","-F","-x","-s","-S","-c","-o","-q","-u","-uu","-uuu","-U","-P","-L","-H","--line-number","--no-line-number","--ignore-case","--smart-case","--case-sensitive","--files-with-matches","--files-without-match","--word-regexp","--invert-match","--fixed-strings","--line-regexp","--count","--count-matches","--only-matching","--quiet","--hidden","--no-ignore","--no-ignore-vcs","--follow","--files","--json","--no-heading","--heading","--vimgrep","--stats","--multiline","--pcre2","--null","-0","--no-filename","--with-filename","--type-list","--trim","--sort-files","--column","--no-messages","--byte-offset","-b","--passthru","--text","-a","--crlf","--no-config"],v:["-e","--regexp","-f","--file","-A","-B","-C","-m","--max-count","-g","--glob","--iglob","-t","--type","-T","--type-not","--color","--colors","-M","--max-columns","-j","--threads","--max-depth","-d","--sort","--sortr","-r","--replace","--max-filesize","--context","--after-context","--before-context","--type-add","--ignore-file"]},fd={f:["-i","-s","-S","-l","-L","-w","-v","-Q","-c","-o","-u","-U","-a","-t","--hidden","--nocolor","--noheading","--nogroup","--column","--literal","--files-with-matches","--count","--vimgrep","--follow","--ignore-case","--case-sensitive","--silent","--stats","--numbers","--nonumbers"],v:["-G","--file-search-regex","-g","-A","-B","-C","-m","--max-count","--depth","--ignore","--ignore-dir","--color-match"]};T(["grep","egrep","fgrep","ggrep","rg","ag"],(e,t,i)=>{const o=q(t,e,i==="rg"?pd:i==="ag"?fd:{any:!0,v:["-e","--regexp","-f","--file","-A","-B","-C","-m","--max-count","--include","--exclude","--exclude-dir","-d","-D","--context","--after-context","--before-context","--label","--binary-files","-g","--glob","-t","--type","-T","--type-not","--colors","-M","--max-columns","-j","--threads","--ignore-file","--max-depth","--sort","--sortr","-r","--replace"].filter(l=>!(i!=="rg"&&l==="-r"))}),a=O(o,"-e","--regexp","-f","--file");F(t,[...O(o,"-f","--file","--ignore-file")]);const n=a.length?o.operands:o.operands.slice(1),s=i==="rg"||i==="ag"||H(o,"-r","-R","--recursive"),r=n.length?n:s?["."]:[];F(t,r),r.length?f(t,"search",{paths:P(t,r)}):f(t,"searchPipe")});T(["sort"],(e,t)=>{if(e.some(o=>o.startsWith("--compress-program"))){t.parsed=!1;return}const i=q(t,e,{f:["-r","-n","-u","-f","-b","-d","-g","-h","-i","-M","-R","-s","-V","-c","-C","-m","-z","--reverse","--numeric-sort","--unique","--ignore-case","--human-numeric-sort","--version-sort","--stable","--check","--merge","--zero-terminated","--ignore-leading-blanks","--dictionary-order","--general-numeric-sort","--month-sort","--random-sort","--ignore-nonprinting","--debug"],v:["-o","--output","-k","--key","-t","--field-separator","-T","--temporary-directory","-S","--buffer-size","--parallel","--files0-from","--random-source","--sort","--batch-size"]});M(t,O(i,"-o","--output","-T","--temporary-directory")),F(t,[...i.operands,...O(i,"--files0-from","--random-source")]),i.operands.length?f(t,"filter",{paths:P(t,i.operands)}):f(t,"filterPipe")});const Eo={uniq:["-f","-s","-w","--skip-fields","--skip-chars","--check-chars"],cut:["-d","--delimiter","-f","--fields","-c","--characters","-b","--bytes","--output-delimiter"],tr:[],nl:["-b","-d","-f","-h","-i","-l","-n","-s","-v","-w"],column:["-s","-c","-o","-N","-W","-t"],rev:[],paste:["-d","--delimiters"],fold:["-w","--width"],fmt:["-w","--width","-p"],expand:["-t","--tabs"],unexpand:["-t","--tabs"],tac:["-s","--separator"],comm:[],join:["-1","-2","-t","-o","-j","-e","-a","-v"],iconv:["-f","-t","-o","--from-code","--to-code","--output"],col:["-l"],colrm:[]};T(Object.keys(Eo),(e,t,i)=>{const o=q(t,e,{any:!0,v:Eo[i]});let a=i==="tr"?[]:o.operands;i==="uniq"&&a.length>=2&&(M(t,a.slice(1,2)),a=a.slice(0,1)),i==="iconv"&&M(t,O(o,"-o","--output")),F(t,a),a.length?f(t,"filter",{paths:P(t,a)}):f(t,"filterPipe")});T(["stat","diff","cmp","md5","md5sum","shasum","sha1sum","sha256sum","sha512sum","cksum","readlink","realpath","od","hexdump","strings","mdls","pdfinfo","otool"],(e,t)=>{const i=q(t,e,{any:!0,v:["-f","--format","-c","-n","-s","-l","-L","-a","-I","-P","--from-file","--to-file","-t","-j","-N","-e"]});F(t,[...i.operands,...O(i,"--from-file","--to-file")]),i.operands.length?f(t,"readFiles",{paths:P(t,i.operands)}):f(t,"filterPipe")});const qo={xxd:{long1:!0,out:[],f:["-a","-autoskip","-b","-bits","-C","-capitalize","-E","-EBCDIC","-e","-i","-include","-p","-ps","-postscript","-plain","-r","-revert","-u","-uppercase","-d","-h","-help","-v","-version"],v:["-c","-cols","-g","-groupsize","-l","-len","-o","-offset","-s","-seek","-n","-name","-R"]},base64:{out:["-o","--output"],inp:["-i","--input"],f:["-d","-D","--decode","-h","--help","--ignore-garbage"],v:["-b","--break","-i","--input","-o","--output","-w","--wrap"]},tree:{out:["-o"],f:["-a","-d","-l","-f","-x","-i","-q","-N","-Q","-p","-u","-g","-s","-h","--du","-D","-F","-v","-t","-c","-U","-r","-C","-n","-A","-S","--dirsfirst","--noreport","--prune","-J","-X","--gitignore","--si"],v:["-L","-P","-I","-o","--charset","--filelimit","--timefmt"]},less:{f:["-N","-S","-R","-r","-F","-X","-i","-I","-n","-M","-m","-e","-E","-K","-c","-s","-f","-q","-Q","-+F"],v:["-x","-z","-p","-j","-b","-h","-y"]},more:{f:["-N","-S","-R","-r","-F","-X","-i","-I","-n","-M","-m","-e","-E","-c","-s","-f","-d","-l","-u"],v:["-x","-z","-p","-n"]},mediainfo:{inp:[],f:["--Full","-f","--Help","--Version"],v:["--Output","--Language","--Inform"]}};T(Object.keys(qo),(e,t,i)=>{const o=qo[i],a=q(t,e,o);i==="xxd"&&M(t,a.operands.slice(1,2)),M(t,O(a,...o.out??[]));for(const r of O(a,"--Output","--Inform"))r.startsWith("file://")&&De(t,r.slice(7));const n=i==="xxd"?a.operands.slice(0,1):[...a.operands,...O(a,...o.inp??[])],s=n.length?n:i==="tree"?["."]:[];F(t,s),s.length?f(t,"readFiles",{paths:P(t,s)}):f(t,"filterPipe")});T(["tee"],(e,t)=>{const i=q(t,e,{f:["-a","-i","-p","--append","--ignore-interrupts","--output-error"]});M(t,i.operands),f(t,"writeFile",{paths:P(t,i.operands)})});const hd=["python","node","perl","ruby","php","bun","deno","osascript","lua","sh","bash","zsh","dash","ksh","fish","pypy","tclsh","Rscript"];T(["xargs"],(e,t)=>{const i=["-n","-L","-P","-s","-d","-E","-e","-I","-J","-R","-S","-a","--arg-file","--max-args","--max-procs","--delimiter","--replace","--max-chars","--eof","--max-lines"],o=["-0","-r","-t","-p","-x","-o","--null","--no-run-if-empty","--verbose","--interactive","--exit","--open-tty"];let a=null,n=0;for(;n<e.length;n++){const d=e[n];if(d==="--"){n++;break}if(!d.startsWith("-"))break;if(i.includes(d)){const c=e[++n];(d==="-I"||d==="-J"||d==="--replace")&&(a=c??"{}"),(d==="-a"||d==="--arg-file")&&F(t,[c??""]);continue}if(d.startsWith("-I")&&d.length>2){a=d.slice(2);continue}if(d==="-i"){a="{}";continue}d.startsWith("-n")||d.startsWith("-P")||d.startsWith("-L")||o.includes(d)||oe(t,d)}const s=e.slice(n);if(s.length===0){f(t,"xargs",{cmd:"echo"});return}if(Ui(s)){t.parsed=!1;return}const r=a!==null&&a!==""&&s.some(d=>d.includes(a))?a:ri;en(r===ri?[...s,ri]:s,t,{token:r,locs:[hl("…")]});const l=(Ua(s)?.argv[0]??s[0]).replace(/^.*\//,"");t.pipedIn&&t.pipeNet&&hd.some(d=>l===d||l.startsWith(`${d}3`)||l.startsWith(`${d}.`)||l.startsWith(`${d}-`))&&C(t,"runs-code","high"),f(t,"xargs",{cmd:s[0]})});const gd=["png","jpg","jpeg","gif","webp","svg","mp4","mov","m4v","webm","mp3","wav","aac","m4a","pdf","txt","md","json","csv","heic","tif","tiff","avif","bmp","ogg","flac","mkv","gif","ico","psd","ai","eps","log"];T(["open"],(e,t)=>{const i=e.indexOf("--args"),o=i>=0?e.slice(0,i):e,a=q(t,o,{f:["-e","-t","-f","-F","-W","-R","-n","-g","-j","-h","--fresh","--new","--wait-apps","--background","--hide","--reveal","--header"],v:["-a","-b","-s","-u","--env","--stdin","--stdout","--stderr"]}),n=[...a.operands.filter(ye),...O(a,"-u")],s=a.operands.filter(d=>!ye(d));n.length&&C(t,"uses-network","medium",{host:he(n[0])}),F(t,s);const r=d=>{if(d.endsWith("/")||d==="."||d==="..")return!0;const c=d.slice(d.lastIndexOf(".")+1).toLowerCase();return d.lastIndexOf(".")>d.lastIndexOf("/")&&gd.includes(c)},l=s.some(d=>Y(t,d).some(c=>c.abs!==null&&_i(t,c.abs)));(O(a,"-a","-b").length||s.some(d=>!r(d))||l)&&C(t,"runs-code","medium"),s.length?f(t,"open",{paths:P(t,s)}):n.length?f(t,"openUrl",{host:he(n[0])}):f(t,"open",{paths:le(O(a,"-a","-b"))})});T(["which","whereis","type","command"],(e,t)=>f(t,"which",{cmd:le(e.filter(i=>!i.startsWith("-")))}));T(["pwd"],(e,t)=>{q(t,e,{f:["-L","-P"]}),f(t,"pwd")});T(["whoami","uname","id","sw_vers","nproc","uptime","df","locale","system_profiler","ps","top","lsof","groups","tty","cal","vm_stat","xcrun","jobs"],(e,t)=>f(t,"sysInfo"));T(["arch"],(e,t)=>{q(t,e,{any:!0}),f(t,"sysInfo")});T(["caffeinate"],(e,t)=>{q(t,e,{f:["-d","-i","-m","-s","-u"],v:["-t","-w"]}),f(t,"noop")});T(["date"],(e,t)=>{const i=q(t,e,{f:["-u","-j","-n","-R","--utc","--universal","--rfc-email","-I","--iso-8601","--rfc-3339","--debug"],v:["-r","-v","-f","-d","--date","--reference","-s","--set","-z"]});F(t,O(i,"--reference"));const o=O(i,"-s","--set").length>0||!H(i,"-j")&&i.operands.some(a=>!a.startsWith("+"));o&&C(t,"writes-outside-project","high"),f(t,o?"changesSystem":"sysInfo")});T(["hostname"],(e,t)=>{const i=q(t,e,{f:["-s","-f","-d","-i","-I","-a","-A","--short","--fqdn","--domain","--ip-address","--all-ip-addresses"],v:["-F","--file"]}),o=i.operands.length>0||O(i,"-F","--file").length>0;o&&C(t,"writes-outside-project","high"),f(t,o?"changesSystem":"sysInfo")});T(["sysctl"],(e,t)=>{const i=q(t,e,{f:["-a","-n","-b","-e","-h","-N","-o","-x","-q","-d","-w"],v:["-f"]}),o=H(i,"-w")||i.operands.some(a=>a.includes("="));o&&C(t,"writes-outside-project","high"),f(t,o?"changesSystem":"sysInfo")});T(["crontab"],(e,t)=>{if(e.length===1&&e[0]==="-l"){f(t,"sysInfo");return}C(t,"writes-outside-project","high"),f(t,"changesSystem")});T(["defaults"],(e,t)=>{const i=e.find(o=>!o.startsWith("-"));if(i==="read"||i==="read-type"||i==="domains"||i==="find"||i==="help"){f(t,"sysInfo");return}C(t,"writes-outside-project","high"),f(t,"changesSystem")});T(["launchctl"],(e,t)=>{const i=e[0];if(i==="list"||i==="print"||i==="version"||i==="help"||i==="getenv"||i==="blame"||i==="print-cache"||i==="managerpid"||i==="manageruid"){f(t,"sysInfo");return}C(t,"writes-outside-project","high"),C(t,"runs-code","high"),f(t,"changesSystem")});T(["hash"],(e,t)=>{if(e.some(i=>i.startsWith("-")&&i.includes("p"))){C(t,"runs-code","high"),f(t,"shellOption");return}f(t,"noop")});T(["enable"],(e,t)=>{if(e.some(i=>i.startsWith("-")&&i.includes("f"))){C(t,"runs-code","high"),f(t,"shellOption");return}C(t,"unknown-command","medium"),f(t,"shellOption")});T(["printenv"],(e,t)=>f(t,"printEnv"));T(["true","false",":","exit","wait","return","shift","break","continue"],(e,t)=>f(t,"noop"));T(["set"],(e,t)=>f(t,"shellOption"));T(["shopt"],(e,t)=>{t.parsed=!1});T(["test","["],(e,t)=>{if(e.some(o=>o.includes("["))){t.parsed=!1;return}const i=["-eq","-ne","-lt","-le","-gt","-ge"];F(t,e.filter((o,a)=>ce(o)&&o!=="]"&&!i.includes(e[a-1]??"")&&!i.includes(e[a+1]??""))),f(t,"check")});T(["export","unset","readonly","declare","typeset","local","read"],(e,t,i)=>{const o=[];for(const a of e){if(a.includes("[")||a.includes("`")||a.includes("$(")){t.parsed=!1;return}if(a.startsWith("-")){if(i==="read")continue;if(a.includes("f")||a.includes("n")){t.parsed=!1;return}continue}const n=a.indexOf("="),s=n>=0?a.slice(0,n):a;if(Bi(t,s,n>=0?a.slice(n+1):"")){t.parsed=!1;return}o.push(s)}f(t,"setVar",{name:le(o)})});const vd={perl:{code:"eE",value:"I",rest:"Mmixd",digits:"l0C",noval:"nNpaswWXSTtUcvhD"},ruby:{code:"e",value:"IrCFE",rest:"iWxK",digits:"0",noval:"npalwvdscyhUT"},php:{code:"rBRE",value:"fdctzS",rest:"",digits:"",noval:"nlsiamvhHqeaw"}};T(["perl","ruby","php"],(e,t,i)=>{const o=vd[i];for(let a=0;a<e.length;a++){const n=e[a];if(n==="--"){const s=e[a+1];if(s===void 0){J(t,"shell");return}fe(t,s),te(t,e.slice(a+2)),f(t,"runScript",{script:P(t,[s])});return}if(n==="-"){J(t,"shell");return}if(n.startsWith("--")){oe(t,n);continue}if(n.startsWith("-")&&!n.includes("$")){for(let s=1;s<n.length;s++){const r=n[s],l=n.slice(s+1);if(o.code.includes(r)){const d=l!==""?l:e[++a];if(d===void 0){t.parsed=!1;return}Te(t,d),(n.includes("i")||e.some(c=>c.startsWith("-")&&!c.startsWith("--")&&c.includes("i")&&i!=="php"))&&M(t,e.slice(a+1).filter(c=>!c.startsWith("-"))),f(t,"inlineCode",{lang:i});return}if(o.value.includes(r)){const d=l!==""?l:e[++a];if(i==="php"&&r==="f"&&d!==void 0){fe(t,d),te(t,e.slice(a+1)),f(t,"runScript",{script:P(t,[d])});return}if(i==="php"&&r==="S"&&(C(t,"uses-network","medium"),C(t,"runs-code","medium")),d!==void 0&&((r==="I"||r==="r"&&i==="ruby"&&ce(d)||i==="php"&&(r==="z"||r==="c"))&&De(t,d),i==="ruby"&&r==="C"&&F(t,[d]),i==="php"&&r==="d")){const c=d.slice(0,Math.max(0,d.indexOf("="))).trim().toLowerCase(),u=d.slice(d.indexOf("=")+1);["auto_prepend_file","auto_append_file","extension","zend_extension","include_path","extension_dir","open_basedir","error_log","sendmail_path"].includes(c)&&(C(t,"runs-code","medium",{option:`-d ${c}`}),u&&c!=="sendmail_path"&&De(t,u))}break}if(o.rest.includes(r)){if(i==="perl"&&(r==="M"||r==="m")&&l.startsWith("lib="))for(const d of l.slice(4).split(","))d&&De(t,d);break}if(o.digits.includes(r)){for(;s+1<n.length&&n[s+1]>="0"&&n[s+1]<="9";)s++;continue}o.noval.includes(r)||oe(t,`-${r}`)}continue}if(Ve(n)){J(t,"shell");return}fe(t,n),te(t,e.slice(a+1)),f(t,"runScript",{script:P(t,[n])});return}J(t,"shell")});T(["osascript"],(e,t)=>{for(let i=0;i<e.length;i++){const o=e[i];if(o==="-e"){const a=e[++i];if(a===void 0){t.parsed=!1;return}Te(t,a),f(t,"inlineCode",{lang:"AppleScript"});return}if(o==="-l"||o==="-s"){i++;continue}if(o!=="-i"){if(o==="-"){J(t,"shell");return}if(o.startsWith("-")&&!o.includes("$")){if(o.includes("e")){t.parsed=!1;return}oe(t,o);continue}if(Ve(o)){J(t,"shell");return}fe(t,o),te(t,e.slice(i+1)),f(t,"runScript",{script:P(t,[o])});return}}J(t,"shell")});T(["lua","Rscript","tclsh","deno"],(e,t,i)=>{const o=["-e","-E","--eval"];for(let a=0;a<e.length;a++){const n=e[a];if(o.includes(n)||i==="deno"&&n==="eval"){const s=e[++a];if(s===void 0){t.parsed=!1;return}Te(t,s),f(t,"inlineCode",{lang:i});return}if(n==="-"){J(t,"shell");return}if(!(i==="deno"&&n==="run")){if(n.startsWith("-")&&!n.includes("$")){oe(t,n);continue}if(ye(n)){C(t,"uses-network","medium",{host:he(n)}),C(t,"runs-code","medium"),te(t,e.slice(a+1)),f(t,"runScript",{script:he(n)});return}if(Ve(n)){J(t,"shell");return}fe(t,n),te(t,e.slice(a+1)),f(t,"runScript",{script:P(t,[n])});return}}J(t,"shell")});T(["bash","sh","zsh","dash","ksh","fish"],(e,t)=>{let i=0;for(;i<e.length&&(e[i].startsWith("-")||e[i].startsWith("+"))&&e[i]!=="-"&&e[i]!=="--";)i+=["-o","+o","-O","+O"].includes(e[i])?2:1;const o=q(t,e.slice(0,i),{f:["-e","-u","-x","-v","-n","-l","--login","-i","-s","--norc","--noprofile","--posix","-r","--restricted","-eu","-ex","-eux","-euo","--verbose"],v:["-o","+o","-O","+O"]});o.operands.push(...e.slice(e[i]==="--"?i+1:i));const a=o.operands[0],n=a===void 0?"":Di(a);if(H(o,"-s")||a===void 0||a==="-"||Ve(n)){J(t,"shell");return}const s=o.operands.slice(1);fe(t,a),te(t,s),f(t,"runScript",{script:P(t,[a])})});const Oe=["--script-shell","--node-options","--userconfig","--globalconfig","--init-module","--shell","--editor","--browser","--git","--onload-script","--npmrc","--call","--sign-git-commit","--sign-git-tag","--viewer","--node-gyp","--prefix-dir"],bd={git:{opts:["--config","--config-env","--exec","--upload-pack","--receive-pack","--template","--ext-diff","--open-files-in-pager","--git-dir","--work-tree","--exec-path","--namespace","--super-prefix","--separate-git-dir","--textconv","--extcmd","--tool","--gui"],ok:()=>rd},tar:{opts:li,ok:()=>Ft},bsdtar:{opts:li,ok:()=>Ft},gtar:{opts:li,ok:()=>Ft},sort:{opts:["--compress-program"]},rsync:{opts:["-e","--rsh","--rsync-path","--config","--daemon"]},ssh:{opts:["-o","-F","-S","-J","-L","-R","-D","-w"]},scp:{opts:["-o","-F","-S","-J"]},sftp:{opts:["-o","-F","-S","-J","-b"]},npm:{opts:Oe,ok:()=>Se.f.concat(Se.v)},pnpm:{opts:Oe,ok:()=>Se.f.concat(Se.v)},yarn:{opts:Oe,ok:()=>Se.f.concat(Se.v)},npx:{opts:Oe},pnpx:{opts:Oe},bunx:{opts:Oe},curl:{opts:["--config","-K"]},wget:{opts:["--execute","--config","-e"]},rg:{opts:["--pre","--pre-glob","--hostname-bin","--search-zip","-z"]},ag:{opts:["--pager","--search-zip","-z"]},zip:{opts:["--unzip-command","-TT"]},less:{opts:["-o","-O","--log-file","--LOG-FILE","--lesskey-file"]},mediainfo:{opts:["--LogFile","--logfile"]}};function Do(e,t){const i=bd[e];if(!i)return!1;const o=i.ok?new Set(i.ok()):null;for(const a of t){if(a==="--")return!1;if(!a.startsWith("-"))continue;const n=a.includes("=")?a.slice(0,a.indexOf("=")):a;if(i.opts.includes(n)||i.opts===Oe&&(n.startsWith("--config.")||n.toLowerCase().startsWith("--npm_config"))||n.startsWith("--")&&n.length>=3&&!o?.has(n)&&i.opts.some(s=>s.startsWith("--")&&s!==n&&s.startsWith(n)))return!0}return!1}function Jt(e,t,i){C(t,"unknown-command","medium"),te(t,e),f(t,"runs",{cmd:i})}const $d=e=>/^(python|pip)(\d+(\.\d+)?)?$/.test(e);function Ja(e,t){const i=e[0];if(i===void 0)return;if(i.includes("$")||i.includes("*")||i.includes("?")||i.includes("[")&&i!=="["||i.includes("{")&&i.includes(",")){t.parsed=!1;return}let o=i;const a=e.slice(1);if(i.includes("/")){const l=Ma(i),d=i.lastIndexOf("/"),c=i.slice(d+1),u=Y(t,i)[0],p=u!==void 0&&(u.cls==="work"||u.cls==="project"),h=u!==void 0&&u.abs!==null&&_i(t,u.abs);if(l!==null)o=l;else if(p&&$d(c)&&i.slice(0,d).endsWith("/bin"))o=c,h&&C(t,"runs-code","medium",{path:ne(u,t.ctx)});else{C(t,"runs-code","medium"),F(t,[i]),te(t,a),f(t,"runScript",{script:P(t,[i])});return}}if(/^python\d+(\.\d+)?$/.test(o)?o="python3":/^pip\d+(\.\d+)?$/.test(o)&&(o="pip"),Do(o,a)||Do(o.toLowerCase(),a)){t.parsed=!1;return}const n=vi.get(o);if(n){n(a,t,o);return}const s=o.toLowerCase(),r=s!==o?vi.get(s):void 0;if(r){const l=t.phrases;t.phrases=[],r(a,t,s),t.phrases=l,C(t,"unknown-command","medium"),f(t,"runs",{cmd:o});return}Jt(a,t,o)}function en(e,t,i){const o=t.phrases,a=t.cwd,n=t.found,s=t.cdTarget;t.phrases=[],t.found=i;const r=Ua(e);if(r===null)t.parsed=!1;else{for(const[l,d]of Object.entries(r.env))Bi(t,l,d)&&(t.parsed=!1);(r.wrappers.includes("sudo")||r.wrappers.includes("doas"))&&C(t,"elevated","high"),t.parsed&&Ja(r.argv,t)}t.phrases=o,t.cwd=a,t.found=n,t.cdTarget=s}function yd(e,t){for(const[o,a]of Object.entries(e.env)){if(Bi(t,o,a)){t.parsed=!1;return}if(Ka.includes(o))for(const n of a.split(":"))n!==""&&Y(t,n).some(s=>s.cls!=="work"&&s.cls!=="project")&&C(t,"runs-code","medium",{path:n})}(e.wrappers.includes("sudo")||e.wrappers.includes("doas"))&&C(t,"elevated","high"),t.stdout=null,t.stdinFile=null;for(const o of e.redirects){if(o.op==="<"){F(t,[o.target]),t.stdinFile??=P(t,[o.target]);continue}M(t,[o.target]),o.op!=="2>"&&t.stdout===null&&!ht(Y(t,o.target)[0]?.abs??null)&&(t.stdout=P(t,[o.target]))}const i=t.phrases.length;if(e.argv.length===0){const o=Object.keys(e.env);e.wrappers.includes("env")?f(t,"printEnv"):o.length?f(t,"setVar",{name:le(o)}):e.wrappers.includes("time")||e.wrappers.includes("nohup")?f(t,"noop"):f(t,"writeFile",{paths:t.stdout??"…"})}else Ja(e.argv,t);t.parsed&&(t.phrases.length===i?f(t,"runs",{cmd:e.argv[0]??"…"}):t.phrases.length>i+1&&t.phrases.splice(i+1))}const Ye=(e,t={})=>({key:`explain.${e}`,params:t}),wd=["exit","return","shift","break","continue","repeat","ulimit","sched","fc","history","wait","unset","read"],di=["declare","typeset","local","export","readonly","integer","float"],kd=["exit","return","shift","break","continue","repeat"],Uo=["-eq","-ne","-lt","-le","-gt","-ge"],_o=/^[-+]?(?:0[xX][0-9a-fA-F]+|[0-9]+(?:\.[0-9]*)?|\.[0-9]+)$/,Sd=/^\$(?:[A-Za-z_][A-Za-z0-9_]*|[0-9?#!$@*-]|\{[A-Za-z_][A-Za-z0-9_]*\})$/,xd=["$?","$#","$!","$$"];function Bo(e){if(e.includes("$"))return null;const t=[];for(let i=0;i<e.length;i++){if(e[i]!=="%"||(i++,e[i]==="%"))continue;let o=!1;for(;i<e.length&&"-+ #0123456789.'*".includes(e[i]);)(e[i]==="*"||e[i]==="'")&&(o=!0),i++;const a=e[i]??"";t.push(o?"strict":"diouxXeEfFgGaA".includes(a)&&a!==""?"num":"str")}return t}function Ad(e){const t=e.commands.flatMap(s=>[...s.argv,...Object.values(s.env),...s.redirects.map(r=>r.target)]);ue.add(t.reduce((s,r)=>s+r.length,0));const i=t.some(s=>s.includes("$(")||s.includes("`")),o=s=>s.includes("$")&&!xd.includes(s)||s.includes("[")||s.includes("(")||s.includes("`");let a=!1;for(const s of e.commands){const r=s.argv[0];if(Object.values(s.env).some(o)&&(a=!0),(r==="read"||r==="vared"||r==="getopts"||r==="mapfile"||r==="readarray")&&(a=!0),r!==void 0&&di.includes(r))for(const l of s.argv.slice(1))l.includes("=")&&o(l.slice(l.indexOf("=")+1))&&(a=!0)}const n=s=>_o.test(s)||Sd.test(s)&&!a;return e.commands.some(s=>{const r=s.argv[0]??"",l=s.argv.slice(1);if(i)if(r==="test"||r==="["){if(l.some(d=>Uo.includes(d)))return!0}else{if(wd.includes(r)||di.includes(r))return!0;if((r==="printf"||r==="print")&&l.some(d=>(Bo(d)??[]).some(c=>c!=="str")))return!0}if(kd.includes(r))return!l.every(n);if(r==="test"||r==="[")return l.some((d,c)=>Uo.includes(d)&&!(n(l[c-1]??"")&&n(l[c+1]==="]"?"":l[c+1]??"")));if(r==="printf"||r==="print"&&l.includes("-f")){let d=0;if(r==="printf"){for(;l[d]==="-v";)d+=2;l[d]==="--"&&d++}else d=l.indexOf("-f")+1;const c=l[d];if(c===void 0)return!1;const u=l.slice(d+1);if(u.length===0)return!1;const p=Bo(c);return p===null?!0:p.includes("strict")?!u.every(h=>_o.test(h)):p.includes("num")?u.some((h,b)=>p[b%p.length]==="num"&&!n(h)):!1}return di.includes(r)?r==="integer"||r==="float"?!0:l.some(d=>(d.startsWith("-")||d.startsWith("+"))&&/[iEF]/.test(d.slice(1))&&!d.includes("=")):r==="unset"?l.some(d=>d.includes("[")):!1})}function xt(e,t){ue.add(e.length);const i=`
23
23
  ;&|(\`"'$={`;for(let o=0;;){const a=e.indexOf(t,o);if(a<0)return!1;const n=a===0?" ":e[a-1],s=e[a+t.length];if(i.includes(n)&&(s===void 0||`
24
- $"'\\;&|)},`.includes(s)))return!0;o=a+1}}function Nt(e,t){return t.add("complex","medium"),(xt(e,"rm")||["rmtree","rmdir","-delete","unlink","shred","rmSync"].some(i=>e.includes(i)))&&t.add("deletes-files","high"),xt(e,"sudo")&&t.add("elevated","high"),(xt(e,"curl")||xt(e,"wget")||e.includes("://"))&&t.add("uses-network","medium"),[Ye("complex")]}function Cd(e,t,i){const o=el(e);if(!o.parsed)return{phrases:Nt(e,i),parsed:!1};if(Ad(o))return{phrases:Nt(e,i),parsed:!1};const a={ctx:t,cwd:be(t.cwd??t.projectDir),altCwds:[],ind:i,phrases:[],parsed:!0,pipedIn:!1,pipeNet:!1,usedNet:!1,chainNet:!1,written:[],found:null,stdout:null,stdinFile:null},n=8,s=(...b)=>{const g=[...new Set(b.flat())];return g.length>n?[null]:g};let r=[a.cwd],l=[a.cwd],d=[],c=[a.cwd],u=[],p=[],h=0;return o.commands.forEach((b,g)=>{if(!a.parsed)return;const S=g>0?o.separators[g-1]:void 0,L=o.separators[g];if(S!=="|"){if(h=g,S==="&&")c=l,u=[],p=d;else if(S==="||")c=d,u=l,p=[];else{const w=s(l,d);c=S==="&"?s(w,r):w,r=c,u=[],p=[]}c.length===0&&(c=[null])}if(a.pipedIn=S==="|",a.pipedIn||(a.pipeNet=!1),a.usedNet=!1,a.cdTarget=void 0,a.cwd=c[0]??null,a.altCwds=c.slice(1),yd(b,a),a.usedNet&&(a.pipeNet=!0,a.chainNet=!0),L==="|")return;const A=h===g;let $=c,I=c;a.cdTarget!==void 0?A?$=s(a.cdTarget):($=s(c,a.cdTarget),I=$):A&&b.argv[0]==="exit"&&b.wrappers.length===0&&($=[],I=[]),l=s(u,$),d=s(p,I)}),a.parsed?{phrases:a.phrases,parsed:!0}:{phrases:Nt(e,i),parsed:!1}}const Td=e=>e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{};function Wu(e,t,i){const o=new tl,a=Td(t);a.dangerouslyDisableSandbox===!0&&o.add("outside-sandbox","high");let n,s=!0;const r=be(i.cwd??i.projectDir),l=d=>typeof d=="string"&&d!==""?gi(d,r,i):[];switch(e){case"Bash":{const d=a.command;if(typeof d!="string"||d.trim()===""){n=Nt("",o),s=!1;break}({phrases:n,parsed:s}=Cd(d,i,o));break}case"Edit":case"Write":case"MultiEdit":case"NotebookEdit":{const d=l(a.file_path??a.notebook_path);(d.length===0||d.some(c=>c.cls!=="work"&&c.cls!=="project"))&&o.add("writes-outside-project","high",d[0]?{path:ne(d[0],i)}:void 0);for(const c of d)ja(o,c.abs,ne(c,i));n=[Ye("edit",{path:d[0]?ne(d[0],i):"?"})];break}case"Read":{const d=l(a.file_path);(d.length===0||d.some(c=>c.cls==="outside"||c.cls==="unknown"))&&o.add("reads-outside-project","medium",d[0]?{path:ne(d[0],i)}:void 0),n=[Ye("read",{path:d[0]?ne(d[0],i):"?"})];break}case"WebFetch":{const d=typeof a.url=="string"?he(a.url):"…";o.add("uses-network","medium",{host:d}),n=[Ye("webFetch",{host:d})];break}case"WebSearch":o.add("uses-network","medium"),n=[Ye("webSearch")];break;default:o.add("unknown-command","medium"),n=[Ye("tool",{tool:e})]}return ol(n,o,s,i.home)}function ci(e,t,i={}){let o=e;for(const a of t.split(".")){if(o===null||typeof o!="object"||!Object.hasOwn(o,a))return t;o=o[a]}if(typeof o=="string")return o;if(typeof o=="function")try{const a=o(i);return typeof a=="string"?a:t}catch{return t}return t}const zd=e=>e.replace(/-([a-z])/g,(t,i)=>i.toUpperCase());function ju(e,t){return{summary:e.summary.map(i=>ci(t,i.key,i.params)),indicators:e.indicators.map(i=>({id:i.id,risk:i.risk,label:ci(t,`explain.indicators.${zd(i.id)}`,i.params??{})})),risk:e.risk,riskLabel:ci(t,`explain.risk.${e.risk}`)}}const Id=["title","channel","format","ratio","v","date","locale"],Vu="{title}-{format}-v{v}",tn=120,yi=e=>e==="-"||e==="_"||e===".",Fd=e=>e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||yi(e);function je(e){return Dt(e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-"))}function Dt(e){let t=0,i=e.length;for(;t<i&&yi(e[t]);)t++;for(;i>t&&yi(e[i-1]);)i--;return e.slice(t,i)}function Ld(e,t){if(e.length<=t)return e;const i=e.charCodeAt(t-1);return e.slice(0,i>=55296&&i<=56319?t-1:t)}function Gu(e,t){const i=new Set;let o="";for(let s=0;s<e.length;s++){const r=e[s];if(r==="{"){let l=s+1;for(;l<e.length&&Nd(e[l]);)l++;if(l>s+1&&e[l]==="}"){const d=e.slice(s+1,l);Id.includes(d)?o+=je(String(t[d]??"")):i.add(d),s=l;continue}}o+=Fd(r)?r:"-"}const a=o.replace(/[-_.]{2,}/g,s=>s[0]),n=Pd(Dt(Ld(Dt(a),tn)));return n?{ok:!0,name:n,unknown:[...i]}:{ok:!1,error:"empty",unknown:[...i]}}const Nd=e=>e>="a"&&e<="z"||e>="A"&&e<="Z",Rd=new Set(["con","prn","aux","nul",...[1,2,3,4,5,6,7,8,9].flatMap(e=>[`com${e}`,`lpt${e}`])]);function Pd(e){const t=e.indexOf("."),i=t===-1?e:e.slice(0,t);return Rd.has(i.toLowerCase())?t===-1?`${e}_`:`${i}_${e.slice(t+1)}`:e}function Vi(e,t){const i=tn-t.length-1;let o=e.length>i?e.slice(0,i):e;for(;o.length>0&&"-_.".includes(o.at(-1));)o=o.slice(0,-1);return`${o}-${t}`}function Od(e,t){return Vi(e,je(t))}function Hu(e,t){return Vi(e,`sub-${je(t)}`)}function Ku(e,t,i,o){return o&&i&&!e.includes("{locale}")?Od(t,i):t}function Qu(e){const t=new Map;for(const i of e){const o=`${i.stem}${i.ext}`.toLowerCase();t.set(o,(t.get(o)??0)+1)}return e.map(i=>t.get(`${i.stem}${i.ext}`.toLowerCase())>1&&na(i.format)>1?Vi(i.stem,je(i.format)):i.stem)}function Yu(e){const t=new Set,i=new Set;for(const o of e){const a=o.toLowerCase();t.has(a)?i.add(a):t.add(a)}return[...i]}function Md(e){const t=i=>String(i).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function Xu(e){const t=e.lastIndexOf("."),i=t>0?e.slice(t+1).toLowerCase():"";return i?`.${i.replace(/[^a-z0-9]/g,"_")}`:""}function Ed(e,t){if(!(e>0&&t>0)||!Number.isInteger(e)||!Number.isInteger(t))return"";let i=e,o=t;for(;o;)[i,o]=[o,i%o];return`${e/i}x${t/i}`}function qd(e){const t=je(e??"").slice(0,40);return Dt(t)||null}function Zu(e){const t=e.preset??e.size;return{title:qd(e.title)??je(e.slug),channel:e.preset?je(e.preset.channel):"",format:e.format,ratio:t?Ed(t.width,t.height):"",v:e.version,date:typeof e.date=="string"?e.date:Md(e.date),...e.locale!==void 0?{locale:e.locale}:{}}}const Gi=e=>e==="bold"?700:typeof e=="number"?e:400;function on(e,t){const i=t.toLowerCase(),o=e.filter(a=>a.family.toLowerCase()===i&&a.weight!==void 0).map(a=>Gi(a.weight));return o.length>0?[...new Set(o)].sort((a,n)=>a-n):null}const Wo="composition.",jo=120;function Hi(e,t={}){const i={};for(const[o,a]of Object.entries(t)){if(typeof a!="string"||a.length<=jo){i[o]=a;continue}let n=a.slice(0,jo);const s=n.charCodeAt(n.length-1);s>=55296&&s<=56319&&(n=n.slice(0,-1)),i[o]=`${n}…`}return{key:e,params:i}}function Dd(e,t){if(!e.key.startsWith(Wo))return e.key;const i=Ee(t).composition,o=e.key.slice(Wo.length);if(!Object.hasOwn(i,o))return e.key;const a=i[o];return typeof a=="string"?a:a(e.params)}function Ut(e){if(!Fe(e))return e;let t=e;const i=()=>{t===e&&(t={...e})},o=e.fonts,a=Array.isArray(o)&&Fe(o[0])&&typeof o[0].family=="string"?o[0].family:void 0;if(a!==void 0&&Array.isArray(e.tracks)){let n=!1;const s=e.tracks.map(r=>{if(!Fe(r)||!Array.isArray(r.clips))return r;let l=!1;const d=r.clips.map(c=>!Fe(c)||c.type!=="text"||!Fe(c.props)||c.props.fontFamily!==void 0?c:(l=!0,{...c,props:{...c.props,fontFamily:a}}));return l?(n=!0,{...r,clips:d}):r});n&&(i(),t.tracks=s)}return typeof e.duration=="number"&&e.duration>0&&Array.isArray(e.scenes)&&e.scenes.length===0&&(i(),t.scenes=[{id:an(e),start:0,duration:e.duration}]),t}function an(e){const t=new Set;if(Fe(e)&&Array.isArray(e.tracks)){for(const o of e.tracks)if(Fe(o)&&(typeof o.id=="string"&&t.add(o.id),Array.isArray(o.clips)))for(const a of o.clips)Fe(a)&&typeof a.id=="string"&&t.add(a.id)}let i=1;for(;t.has(`scene-${i}`);)i++;return`scene-${i}`}function Fe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Ud=500*1024*1024,de=1e-4,_t=1024*1024,_d=[".ttf",".otf",".woff",".woff2"],P=(e,t={})=>Hi(`composition.${e}`,t),Bt=e=>Math.round(e*10)/10,ve=e=>Math.round(e*1e3)/1e3;function Bd(e){return new TextEncoder().encode(JSON.stringify(Ut(e))).length}function Ju(e){const t=Bd(e);return t>D.jsonBytes?P("jsonTooLarge",{sizeMB:Bt(t/_t),maxMB:Bt(D.jsonBytes/_t)}):null}function em(e,t){const i=Wd(e);if(i)return{ok:!1,problems:[i],warnings:[]};const o=wa.safeParse(e),{problems:a,warnings:n}=o.success?Hd(o.data,t):{problems:wi(o.error.issues,e),warnings:[]};return{ok:a.length===0,problems:Vo(Go(a)),warnings:Vo(Go(n))}}function Vo(e){return e.length<=D.problems?e:[...e.slice(0,D.problems),P("moreProblems")]}function Go(e){const t=new Set;return e.filter(i=>{const o=JSON.stringify(i);return t.has(o)?!1:(t.add(o),!0)})}const at=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),nt=(e,t)=>Array.isArray(e)&&e.length>t;function Wd(e){if(!at(e))return P("wrongType",{path:"$",expected:"object"});if(nt(e.tracks,D.tracks))return P("limit",{path:"tracks",max:D.tracks});if(nt(e.scenes,D.scenes))return P("limit",{path:"scenes",max:D.scenes});if(nt(e.fonts,D.fonts))return P("limit",{path:"fonts",max:D.fonts});if(!Array.isArray(e.tracks))return null;let t=0;for(let i=0;i<e.tracks.length;i++){const o=at(e.tracks[i])?e.tracks[i].clips:void 0;if(Array.isArray(o)){if(o.length>D.clipsPerTrack)return P("limit",{path:`tracks[${i}].clips`,max:D.clipsPerTrack});t+=o.length}}if(t>D.clips)return P("limit",{path:"tracks[].clips",max:D.clips});for(let i=0;i<e.tracks.length;i++){const o=e.tracks[i]?.clips;if(Array.isArray(o))for(let a=0;a<o.length;a++){const n=o[a];if(!at(n))continue;const s=`tracks[${i}].clips[${a}]`;if(nt(n.animations,D.animations))return P("limit",{path:`${s}.animations`,max:D.animations});if(at(n.params)){let r=0;for(const l in n.params)if(Object.hasOwn(n.params,l)&&++r>D.params)return P("limit",{path:`${s}.params`,max:D.params})}if(Array.isArray(n.animations))for(let r=0;r<n.animations.length;r++){const l=n.animations[r];if(at(l)&&nt(l.keyframes,D.keyframes))return P("limit",{path:`${s}.animations[${r}].keyframes`,max:D.keyframes})}}}return null}const jd=e=>{let t="";for(const i of e)t+=typeof i=="number"?`[${i}]`:t===""?String(i):`.${String(i)}`;return t===""?"$":t};function Vd(e,t){let i=e;for(const o of t){if(typeof i!="object"||i===null||!Object.hasOwn(i,o))return{found:!1,value:void 0};i=i[o]}return{found:!0,value:i}}function wi(e,t,i=[]){return e.flatMap(o=>Gd(o,t,[...i,...o.path]))}function Gd(e,t,i){const o=jd(i);if(e.message.startsWith("composition."))return[{key:e.message,params:{path:o}}];const a=!Vd(t,i).found;switch(e.code){case"unrecognized_keys":return e.keys.map(n=>P("unknownField",{path:o,field:n}));case"invalid_type":return[a?P("missingField",{path:o}):P("wrongType",{path:o,expected:String(e.expected)})];case"invalid_value":return[a?P("missingField",{path:o}):P("badValue",{path:o,allowed:e.values.map(String).join(", ")})];case"too_big":return e.origin==="array"?[P("limit",{path:o,max:Number(e.maximum)})]:e.origin==="string"?[P("tooLong",{path:o,max:Number(e.maximum)})]:[P("tooBig",{path:o,max:Number(e.maximum)})];case"invalid_key":return wi(e.issues??[],t,i);case"too_small":return[P(e.inclusive===!1?"notAbove":"tooSmall",{path:o,min:Number(e.minimum)})];case"invalid_union":{if(a)return[P("missingField",{path:o})];if(e.note==="No matching discriminator")return[P("badValue",{path:o,allowed:e.options.map(String).join(", ")})];const n=i.length;if(n>=2&&typeof i[n-1]=="number"&&i[n-2]==="animations")return[P("badAnimation",{path:o})];const s=e.errors??[];if(s.every(d=>d.length===1&&d[0].path.length===0&&(d[0].code==="invalid_type"||d[0].code==="invalid_value"))){const d=s.map(c=>c[0].code==="invalid_value"?c[0].values.map(String).join(", "):`a ${String(c[0].expected)}`);return[P("badValue",{path:o,allowed:d.join(", ")})]}const l=s.filter(d=>d.length>0&&d[0].code!=="invalid_type").sort((d,c)=>d.length-c.length)[0];return l?wi(l,t,i):[P("invalid",{path:o})]}default:return[P("invalid",{path:o})]}}function Hd(e,t){const i=[],o=[],a=e.duration===0,n=1/e.fps,s=new Set,r=new Set,l=$=>{s.has($)&&!r.has($)&&(r.add($),i.push(P("duplicateId",{id:$}))),s.add($)};for(const $ of e.scenes)l($.id);for(const $ of e.tracks){l($.id);for(const I of $.clips)l(I.id)}const d=e.scenes.length===0&&!a?[{id:an(e),start:0,duration:e.duration}]:[...e.scenes].sort(($,I)=>$.start-I.start),c=new Map;for(const $ of d)c.has($.id)||c.set($.id,{start:$.start,end:$.start+$.duration});if(a)e.scenes.length>0&&o.push(P("stillScenes"));else{const $=d[0];$.start>de&&i.push(P("sceneStart",{scene:$.id,start:ve($.start)}));for(let w=1;w<d.length;w++){const X=d[w-1],j=d[w],N=X.start+X.duration,x={scene:j.id,previous:X.id,from:ve(N),to:ve(j.start)};j.start<N-de?i.push(P("sceneOverlap",x)):j.start>N+de&&i.push(P("sceneGap",x))}const I=d.reduce((w,X)=>Math.max(w,X.start+X.duration),0);Math.abs(I-e.duration)>de&&i.push(P("scenesEnd",{end:ve(I),duration:e.duration}))}const u=new Set,p=[];for(const $ of e.fonts){u.add($.family.toLowerCase());const I=$.src.toLowerCase();(!$.src.startsWith("assets/")||!_d.some(w=>I.endsWith(w)))&&i.push(P("fontNotAsset",{family:$.family,src:$.src})),p.push($.src)}const h=e.tracks.filter($=>$.kind==="subtitles");h.length>1&&i.push(P("subtitlesTwice")),h.length>0&&a&&i.push(P("subtitlesOnStill"));for(const $ of h){const I=$.clips[0];a||($.clips.length!==1||I&&(I.start>de||Math.abs(I.duration-e.duration)>de||I.scene!==void 0))&&i.push(P("subtitlesSpan",{track:$.id,duration:e.duration}))}for(const $ of e.tracks){let I=!1;for(const w of $.clips){($.kind==="audio"!=(w.type==="audio")||$.kind==="subtitles"!=(w.type==="subtitles"))&&i.push(P("trackKind",{track:$.id,clip:w.id,kind:$.kind,type:w.type}));const X=w.start+w.duration;if(a?(w.type==="audio"&&!I&&(I=!0,o.push(P("stillAudio",{track:$.id}))),w.type!=="audio"&&w.type!=="subtitles"&&w.animations&&w.animations.length>0&&o.push(P("stillAnimations",{clip:w.id})),w.start>de&&i.push(P("clipStill",{clip:w.id}))):w.duration<=0?i.push(P("clipZero",{clip:w.id})):(X>e.duration+de||w.start>=e.duration)&&i.push(P("clipOutside",{clip:w.id,start:ve(w.start),end:ve(X),duration:e.duration})),w.scene!==void 0){const j=c.get(w.scene);j?!a&&(w.start<j.start-de||X>j.end+de)&&i.push(P("clipOutsideScene",{clip:w.id,scene:w.scene,start:ve(j.start),end:ve(j.end)})):i.push(P("unknownScene",{clip:w.id,scene:w.scene}))}if(!a&&w.type!=="audio"&&w.type!=="subtitles"&&w.animations&&Kd(w.id,w.duration,w.animations,n,i),w.type==="text"){const j=w.props.fontFamily??e.fonts[0]?.family;if(j===void 0)i.push(P("fontMissing",{clip:w.id}));else if(!u.has(j.toLowerCase()))i.push(P("unknownFont",{clip:w.id,family:j}));else{const N=on(e.fonts,j),x=Gi(w.props.fontWeight);N&&!N.includes(x)&&o.push(P("fontWeightUndeclared",{clip:w.id,family:j,weight:x,declared:N.join(", ")}))}}if(w.type==="subtitles"){const j=w.props.fontFamily??e.fonts[0]?.family;j===void 0?i.push(P("fontMissing",{clip:w.id})):u.has(j.toLowerCase())||i.push(P("unknownFont",{clip:w.id,family:j})),w.template!==void 0&&((!w.template.startsWith("layers/")||!w.template.toLowerCase().endsWith(".html"))&&i.push(P("layerNotHtml",{clip:w.id,src:w.template})),p.push(w.template))}else if(w.type==="html"){(!w.src.startsWith("layers/")||!w.src.toLowerCase().endsWith(".html"))&&i.push(P("layerNotHtml",{clip:w.id,src:w.src})),p.push(w.src);for(const j of Object.values(w.params??{}))j.type==="image"&&(j.value.startsWith("assets/")||i.push(P("mediaNotAsset",{clip:w.id,src:j.value})),p.push(j.value))}else(w.type==="image"||w.type==="svg"||w.type==="video"||w.type==="audio")&&(w.src.startsWith("assets/")||i.push(P("mediaNotAsset",{clip:w.id,src:w.src})),p.push(w.src))}}const b=new Set;let g=0;for(const[$,I]of t.files)b.add($.normalize("NFC")),g+=Number.isFinite(I.size)&&I.size>0?I.size:0;const S=new Set;for(const $ of p){const I=$.normalize("NFC");b.has(I)||S.has(I)||(S.add(I),i.push(P("assetMissing",{path:$})))}const L=t.maxBytes??Ud;g>L&&i.push(P("assetsTooLarge",{sizeMB:Bt(g/_t),maxMB:Bt(L/_t)}));const A=t.format;return(e.width!==A.width||e.height!==A.height)&&i.push(P("sizeMismatch",{width:e.width,height:e.height,expectedWidth:A.width,expectedHeight:A.height,format:A.id})),A.kind==="video"?a?i.push(P("stillForVideo",{format:A.id})):A.maxDurationSec!==void 0&&e.duration>A.maxDurationSec+de&&i.push(P("durationOverMax",{duration:e.duration,max:A.maxDurationSec,format:A.id})):a||i.push(P("durationForImage",{format:A.id,duration:e.duration})),{problems:i,warnings:o}}function Kd(e,t,i,o,a){let n=!1,s=!1,r=!1;for(const l of i){const d=(l.start??0)+l.duration;if(!n&&d>t+o+de&&(n=!0,a.push(P("animationOutside",{clip:e,end:ve(d),duration:ve(t)}))),!("prop"in l))continue;const c=l.prop==="color",u="keyframes"in l?l.keyframes.map(p=>p.v):[l.from,l.to];!r&&u.some(p=>typeof p=="string"!==c)&&(r=!0,a.push(P("animationValue",{clip:e,prop:l.prop}))),!s&&"keyframes"in l&&l.keyframes.some((p,h)=>h>0&&p.t<l.keyframes[h-1].t)&&(s=!0,a.push(P("keyframesOrder",{clip:e})))}}const nn=9,ge=m().min(1).max(D.id),Ge=v().min(0).max(D.durationSec),sn=m().max(D.text),ui=v().int().min(0).max(1e6),Qd=U({x:v().optional(),y:v().optional(),width:v().optional(),height:v().optional(),rotation:v().optional(),scale:v().optional(),opacity:v().optional(),text:sn.optional(),fontFamily:m().max(D.family).optional(),fontSize:v().optional(),fontWeight:Ie([v().int(),z(["normal","bold"])]).optional(),color:m().max(9).optional(),align:z(["left","center","right"]).optional(),fill:m().max(9).optional(),radius:v().optional()});Kt("kind",[U({kind:E("clipProps"),clipId:ge,props:Qd}),U({kind:E("clipTiming"),clipId:ge,start:Ge,duration:Ge,ripple:B()}),U({kind:E("clipMedia"),clipId:ge,src:m().max(Qt).optional(),trimStart:v().min(0).max(36e3).optional(),volume:v().min(0).max(2).optional(),fadeIn:Ge.optional(),fadeOut:Ge.optional()}),U({kind:E("clipFlags"),clipId:ge,hidden:B().optional(),locked:B().optional()}),U({kind:E("trackFlags"),trackId:ge,hidden:B().optional(),locked:B().optional(),muted:B().optional()}),U({kind:E("sceneDuration"),sceneId:ge,duration:Ge}),U({kind:E("sceneOrder"),order:k(ge).max(D.scenes)}),U({kind:E("animationPreset"),clipId:ge,slot:z(["in","out"]),preset:z(va).nullable(),duration:Ge}),U({kind:E("svgContent"),clipId:ge,colors:ui,texts:ui,hidden:ui}),U({kind:E("htmlParam"),clipId:ge,key:m().min(1).max(64),value:Ie([sn,v()])}),U({kind:E("addFont"),font:ga,weights:k(v().int().min(1).max(1e3)).min(1).max(nn).optional()})]);const ee=1e-4,Yd=/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Xd=[".ttf",".otf",".woff",".woff2"],He=["x","y","width","height","rotation","scale","opacity"],Zd=["text","fontFamily","fontSize","fontWeight","color","align"],Jd=["fill","radius"],ec={text:[...He,...Zd],shape:[...He,...Jd],image:He,svg:He,video:He,html:He,audio:[],subtitles:[]};class rn extends Error{constructor(t){super(t.key),this.problem=t}problem}function _(e,t={}){throw new rn(Hi(e,t))}const K=e=>Math.round(e*1e6)/1e6,Ki=e=>Math.ceil(1e6/e)/1e6,Wt=(e,t,i)=>Math.min(Math.max(e,t),Math.max(t,i)),ln=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),jt=(e,t,i)=>typeof e=="number"&&Number.isFinite(e)?e:_("editor.badValue",{clip:t,key:i});function tm(e,t,i={}){try{const o=Ut(structuredClone(e));oc(o,t,i);const a=Ut(o),n=wa.safeParse(a);if(!n.success){const s=n.error.issues[0];return{ok:!1,problem:Hi("editor.invalid",{path:s.path.map(String).join(".")||"$"})}}return{ok:!0,composition:a}}catch(o){if(o instanceof rn)return{ok:!1,problem:o.problem};throw o}}function dn(e,t){for(const i of e.tracks)for(const o of i.clips)if(o.id===t)return{track:i,clip:o};return _("editor.unknownClip",{clip:t})}function it(e,t){const i=dn(e,t);return(i.clip.locked||Ct(i.track))&&_("editor.locked",{clip:t}),i}const Qi=e=>[...e.scenes].sort((t,i)=>t.start-i.start),Vt=e=>e.tracks.flatMap(t=>t.clips.map(i=>({track:t,clip:i})));function Yi(e,t){if(e.scene!==void 0)return t.find(a=>a.id===e.scene);const i=e.start+e.duration,o=t.filter(a=>e.start>=a.start-ee&&i<=a.start+a.duration+ee);return o.length===1?o[0]:void 0}function tc(e){const t=Ut(e);if(t.duration===0)return{ok:!0};const i=Qi(t);for(const{clip:o}of Vt(t))if(!(o.type==="audio"||o.type==="subtitles")&&!Yi(o,i))return{ok:!1,clipId:o.id};return{ok:!0}}const cn=e=>"preset"in e,ic=e=>e.type==="audio"||e.type==="subtitles"?void 0:e.animations;function un(e,t,i){const o=ic(e);if(!o||t===e.duration)return;const a=e.duration,n=1/i;for(const s of o){const r=s.start??0;if(!cn(s)){const d=r+s.duration;d>t+n+ee&&_("composition.animationOutside",{clip:e.id,end:K(d),duration:K(t)});continue}if(r<=ee){s.duration=K(Math.min(s.duration,t));continue}if(Math.abs(r+s.duration-a)<=ee){s.duration=K(Math.min(s.duration,t)),s.start=K(t-s.duration);continue}const l=Wt(r,0,t-n);s.start=K(l),s.duration=K(Math.min(s.duration,t-l))}}function ki(e,t){e.start=K(e.start+t)}function mn(e,t,i,o){const a=Qi(e),n=a.findIndex(g=>g.id===t);n<0&&_("editor.unknownScene",{scene:t});const s=a[n],r=s.start+s.duration,l=s.start+i,d=l-r;if(Math.abs(d)<=ee)return;const c=n===a.length-1,u=e.duration,p=Ki(e.fps),h=Vt(e).map(({track:g,clip:S})=>({track:g,clip:S,owner:Yi(S,a)})),b=(g,S,L)=>{const A=K(L-S.start);A<p-ee&&_("composition.clipOutsideScene",{clip:S.id,scene:s.id,start:K(s.start),end:K(l)}),(S.locked||Ct(g))&&_("editor.locked",{clip:S.id}),un(S,A,e.fps),S.duration=A};for(const{track:g,clip:S,owner:L}of h){if(S.id===o||S.type==="subtitles")continue;const A=S.start+S.duration,$=L?a.indexOf(L):-1;if(L&&$>n){ki(S,d);continue}if(!(L&&$<n)){if(L){A>l+ee&&b(g,S,l);continue}if(S.start>=r-ee)ki(S,d);else if(S.type==="audio")A>=u-ee?(d<0||!(S.locked||Ct(g)))&&b(g,S,A+d):A>u+d+ee&&b(g,S,u+d);else if(A>r+ee||c&&A>=r-ee){if(d>0&&(S.locked||Ct(g)))continue;b(g,S,A+d)}else A>l+ee&&b(g,S,l)}}s.duration=K(i);for(let g=n+1;g<a.length;g++)a[g].start=K(a[g].start+d);e.duration=K(a.reduce((g,S)=>Math.max(g,S.start+S.duration),0));for(const{clip:g}of Vt(e))g.type==="subtitles"&&(g.duration=e.duration)}function oc(e,t,i){switch(t.kind){case"clipProps":return ac(e,t);case"clipTiming":return nc(e,t);case"clipMedia":return sc(e,t,i);case"clipFlags":{const{clip:o}=dn(e,t.clipId);st(o,"hidden",t.hidden),st(o,"locked",t.locked);return}case"trackFlags":{const o=e.tracks.find(a=>a.id===t.trackId)??_("editor.unknownTrack",{track:t.trackId});st(o,"hidden",t.hidden),st(o,"locked",t.locked),st(o,"muted",t.muted);return}case"sceneDuration":return e.duration===0&&_("editor.stillTiming",{clip:t.sceneId}),typeof t.duration=="number"&&Number.isFinite(t.duration)&&t.duration>0&&t.duration<=D.durationSec||_("editor.badValue",{clip:t.sceneId,key:"duration"}),mn(e,t.sceneId,K(t.duration));case"sceneOrder":return rc(e,t);case"animationPreset":return lc(e,t);case"htmlParam":return dc(e,t,i);case"addFont":return cc(e,t,i);case"svgContent":{const{clip:o}=it(e,t.clipId);o.type!=="svg"&&_("editor.wrongType",{clip:o.id,type:o.type});for(const a of["colors","texts","hidden"]){const n=t[a];typeof n=="number"&&Number.isInteger(n)&&n>=0&&n<=1e6||_("editor.badValue",{clip:o.id,key:a})}return}default:return _("editor.badOp")}}function st(e,t,i){i!==void 0&&(typeof i!="boolean"&&_("editor.badValue",{clip:"",key:t}),i?e[t]=!0:delete e[t])}function ac(e,t){const{clip:i}=it(e,t.clipId);ln(t.props)||_("editor.badValue",{clip:i.id,key:"props"});const o=ec[i.type],a=i.props;for(const n of Object.keys(t.props))(!o.includes(n)||!a)&&_("editor.badProp",{clip:i.id,key:n});for(const[n,s]of Object.entries(t.props)){if(s===void 0){delete a[n];continue}if(n==="fontFamily"){const r=String(s).toLowerCase();e.fonts.some(l=>l.family.toLowerCase()===r)||_("composition.unknownFont",{clip:i.id,family:String(s)})}a[n]=s}if(i.type==="text"&&("fontWeight"in t.props||"fontFamily"in t.props)){const n=i.props.fontFamily??e.fonts[0]?.family,s=n?on(e.fonts,n):null,r=Gi(i.props.fontWeight);n&&s&&!s.includes(r)&&_("editor.badWeight",{clip:i.id,family:n,weight:r,declared:s.join(", ")})}}function nc(e,t){const{clip:i}=it(e,t.clipId);e.duration===0&&_("editor.stillTiming",{clip:i.id});const o=jt(t.start,i.id,"start"),a=jt(t.duration,i.id,"duration"),n=Ki(e.fps),s=i.scene!==void 0?e.scenes.find(u=>u.id===i.scene):void 0,r=s?s.start:0,l=s?s.start+s.duration:e.duration,d=K(Wt(o,r,l-n));let c=Math.max(a,n);s&&t.ripple===!0&&d+c>l+ee?(c=K(c),mn(e,s.id,K(s.duration+(d+c-l)),i.id)):c=K(Wt(c,n,l-d)),un(i,c,e.fps),i.start=d,i.duration=c}function Xi(e,t,i,o){return typeof i!="string"||!Fi(i)||!i.startsWith("assets/")?_("editor.badAsset",{clip:e,path:String(i).slice(0,100)}):o.files&&!o.files.has(i)&&!o.files.has(i.normalize("NFC"))?_("editor.badAsset",{clip:e,path:i}):i}function sc(e,t,i){const{clip:o}=it(e,t.clipId);o.type==="image"||o.type==="svg"||o.type==="video"||o.type==="audio"||_("editor.wrongType",{clip:o.id,type:o.type});const a=o.type==="video"||o.type==="audio";t.src!==void 0&&(o.src=Xi(o.id,"src",t.src,i));const n=(s,r,l)=>{r!==void 0&&(l||_("editor.badProp",{clip:o.id,key:s}),o[s]=jt(r,o.id,s))};n("trimStart",t.trimStart,a),n("volume",t.volume,a),n("fadeIn",t.fadeIn,o.type==="audio"),n("fadeOut",t.fadeOut,o.type==="audio")}function rc(e,t){e.duration===0&&_("editor.stillTiming",{clip:""});const i=Qi(e),o=t.order;(!Array.isArray(o)||o.length!==i.length||new Set(o).size!==o.length||!o.every(d=>i.some(c=>c.id===d)))&&_("editor.badOrder");const a=tc(e);a.ok||_("editor.sceneOrderBlocked",{clip:a.clipId});const n=Vt(e).map(({clip:d})=>({clip:d,owner:Yi(d,i)})),s=new Map(i.map(d=>[d.id,d.start])),r=o.map(d=>i.find(c=>c.id===d));let l=0;for(const d of r)d.start=K(l),l+=d.duration;for(const{clip:d,owner:c}of n)c&&ki(d,c.start-s.get(c.id));e.scenes=r}function lc(e,t){const{clip:i}=it(e,t.clipId);(i.type==="audio"||i.type==="subtitles")&&_("editor.wrongType",{clip:i.id,type:i.type}),e.duration===0&&_("editor.stillTiming",{clip:i.id}),t.slot!=="in"&&t.slot!=="out"&&_("editor.badValue",{clip:i.id,key:"slot"});const o=i.animations??[],a=d=>t.slot==="in"?(d.start??0)<=ee:(d.start??0)>ee&&Math.abs((d.start??0)+d.duration-i.duration)<=ee,n=o.filter(a),s=n.find(cn);if(t.preset===null){s&&(i.animations=o.filter(d=>d!==s)),i.animations&&i.animations.length===0&&delete i.animations;return}!s&&n.length>0&&_("editor.customAnimation",{clip:i.id,slot:t.slot});const r=K(Wt(jt(t.duration,i.id,"duration"),Ki(e.fps),i.duration));if(s){s.preset=t.preset,s.duration=r,t.slot==="out"&&(s.start=K(i.duration-r));return}const l=t.slot==="in"?{preset:t.preset,duration:r}:{preset:t.preset,start:K(i.duration-r),duration:r};i.animations=[...o,l]}function dc(e,t,i){const{clip:o}=it(e,t.clipId);o.type!=="html"&&_("editor.wrongType",{clip:o.id,type:o.type});const a=o.params&&Object.hasOwn(o.params,t.key)?o.params[t.key]:void 0;if(!a)return _("editor.unknownParam",{clip:o.id,key:t.key});const n=()=>_("editor.badParam",{clip:o.id,key:t.key}),s=t.value;switch(a.type){case"text":(typeof s!="string"||s.length>D.text)&&n(),a.value=s;break;case"color":(typeof s!="string"||!Yd.test(s))&&n(),a.value=s;break;case"number":(typeof s!="number"||!Number.isFinite(s)||Math.abs(s)>1e9)&&n(),a.value=s;break;case"image":a.value=Xi(o.id,t.key,s,i);break}}function cc(e,t,i){const o=t.font;if(!ln(o)||typeof o.family!="string"||typeof o.src!="string")return _("editor.badFont",{family:""});const a=Xi("","src",o.src,i);if(Xd.some(s=>a.toLowerCase().endsWith(s))||_("editor.badFont",{family:o.family}),e.fonts.some(s=>s.family.toLowerCase()===o.family.toLowerCase())&&_("editor.fontExists",{family:o.family}),t.weights===void 0){e.fonts.push({...o,src:a});return}const n=t.weights;(!Array.isArray(n)||n.length===0||n.length>nn||new Set(n).size!==n.length||!n.every(s=>Number.isInteger(s)&&s>=1&&s<=1e3))&&_("editor.badFont",{family:o.family}),e.fonts.length+n.length>D.fonts&&_("editor.badFont",{family:o.family});for(const s of[...n].sort((r,l)=>r-l))e.fonts.push({...o,src:a,weight:s})}function im(e,t){if(!e.key.startsWith("editor."))return Dd(e,t);const i=Ee(t).editor,o=e.key.slice(7);if(!Object.hasOwn(i,o))return e.key;const a=i[o];return typeof a=="string"?a:a(e.params)}const rt=e=>Math.round(e*1e6)/1e6;function om(e,t,i){let o=null,a=1/0;for(const n of t){const s=Math.abs(n-e);s>i+1e-9||(s<a-1e-9||Math.abs(s-a)<=1e-9&&o!==null&&n<o)&&(o=n,a=s)}return o===null?{t:e,snappedTo:null}:{t:o,snappedTo:o}}function am(e,t){const i=new Set([0,rt(e.duration)]);for(const o of e.scenes)i.add(rt(o.start)),i.add(rt(o.start+o.duration));for(const o of e.tracks)for(const a of o.clips)a.id!==t&&(i.add(rt(a.start)),i.add(rt(a.start+a.duration)));return[...i].sort((o,a)=>o-a)}function nm(e,t){return e.startsWith("creative:")?`render:${e.slice(9)}:v${t}`:null}function sm(e){return e.startsWith("creative:")?`export:${e.slice(9)}:`:null}function uc(e,t){const i=e.progress;return!i||i.format!==t||i.phase==="media"?0:i.phase==="finishing"?99:i.total>0?Math.min(99,Math.floor(i.done/i.total*100)):0}function rm(e){const t=e.filter(o=>o!==void 0);if(!t.length)return null;const i=o=>{if(o.state==="succeeded")return 100;if(o.state!=="running"||!o.progress)return 0;const a=o.formats?.length?o.formats:[o.progress.format];return(Math.max(0,a.indexOf(o.progress.format))+uc(o,o.progress.format)/100)/a.length*100};return Math.round(t.reduce((o,a)=>o+i(a),0)/t.length)}const lm=220,pn=["fill","stroke","stop-color","flood-color","lighting-color","color"],mc=new Set(pn),pc="http://www.w3.org/2000/svg",fc="aliceblue:f0f8ff antiquewhite:faebd7 aqua:00ffff aquamarine:7fffd4 azure:f0ffff beige:f5f5dc bisque:ffe4c4 black:000000 blanchedalmond:ffebcd blue:0000ff blueviolet:8a2be2 brown:a52a2a burlywood:deb887 cadetblue:5f9ea0 chartreuse:7fff00 chocolate:d2691e coral:ff7f50 cornflowerblue:6495ed cornsilk:fff8dc crimson:dc143c cyan:00ffff darkblue:00008b darkcyan:008b8b darkgoldenrod:b8860b darkgray:a9a9a9 darkgreen:006400 darkgrey:a9a9a9 darkkhaki:bdb76b darkmagenta:8b008b darkolivegreen:556b2f darkorange:ff8c00 darkorchid:9932cc darkred:8b0000 darksalmon:e9967a darkseagreen:8fbc8f darkslateblue:483d8b darkslategray:2f4f4f darkslategrey:2f4f4f darkturquoise:00ced1 darkviolet:9400d3 deeppink:ff1493 deepskyblue:00bfff dimgray:696969 dimgrey:696969 dodgerblue:1e90ff firebrick:b22222 floralwhite:fffaf0 forestgreen:228b22 fuchsia:ff00ff gainsboro:dcdcdc ghostwhite:f8f8ff gold:ffd700 goldenrod:daa520 gray:808080 green:008000 greenyellow:adff2f grey:808080 honeydew:f0fff0 hotpink:ff69b4 indianred:cd5c5c indigo:4b0082 ivory:fffff0 khaki:f0e68c lavender:e6e6fa lavenderblush:fff0f5 lawngreen:7cfc00 lemonchiffon:fffacd lightblue:add8e6 lightcoral:f08080 lightcyan:e0ffff lightgoldenrodyellow:fafad2 lightgray:d3d3d3 lightgreen:90ee90 lightgrey:d3d3d3 lightpink:ffb6c1 lightsalmon:ffa07a lightseagreen:20b2aa lightskyblue:87cefa lightslategray:778899 lightslategrey:778899 lightsteelblue:b0c4de lightyellow:ffffe0 lime:00ff00 limegreen:32cd32 linen:faf0e6 magenta:ff00ff maroon:800000 mediumaquamarine:66cdaa mediumblue:0000cd mediumorchid:ba55d3 mediumpurple:9370db mediumseagreen:3cb371 mediumslateblue:7b68ee mediumspringgreen:00fa9a mediumturquoise:48d1cc mediumvioletred:c71585 midnightblue:191970 mintcream:f5fffa mistyrose:ffe4e1 moccasin:ffe4b5 navajowhite:ffdead navy:000080 oldlace:fdf5e6 olive:808000 olivedrab:6b8e23 orange:ffa500 orangered:ff4500 orchid:da70d6 palegoldenrod:eee8aa palegreen:98fb98 paleturquoise:afeeee palevioletred:db7093 papayawhip:ffefd5 peachpuff:ffdab9 peru:cd853f pink:ffc0cb plum:dda0dd powderblue:b0e0e6 purple:800080 rebeccapurple:663399 red:ff0000 rosybrown:bc8f8f royalblue:4169e1 saddlebrown:8b4513 salmon:fa8072 sandybrown:f4a460 seagreen:2e8b57 seashell:fff5ee sienna:a0522d silver:c0c0c0 skyblue:87ceeb slateblue:6a5acd slategray:708090 slategrey:708090 snow:fffafa springgreen:00ff7f steelblue:4682b4 tan:d2b48c teal:008080 thistle:d8bfd8 tomato:ff6347 turquoise:40e0d0 violet:ee82ee wheat:f5deb3 white:ffffff whitesmoke:f5f5f5 yellow:ffff00 yellowgreen:9acd32",hc=new Map(fc.split(" ").map(e=>{const[t,i]=e.split(":");return[t,`#${i}`]})),Ho=e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,"0");function Zi(e){const t=e.trim();if(t.startsWith("#")){const o=t.slice(1).toLowerCase();if(!/^[0-9a-f]+$/.test(o))return null;const a=o.length===3||o.length===4?[...o].map(n=>n+n).join(""):o.length===6||o.length===8?o:null;return a===null?null:a.length===8&&a.endsWith("ff")?`#${a.slice(0,6)}`:`#${a}`}const i=/^(rgba?)\s*\(([^)]*)\)$/i.exec(t);if(i){const o=i[2].trim().split(/\s*[,/]\s*|\s+/).filter(d=>d!=="");if(o.length!==3&&o.length!==4)return null;const a=(d,c)=>{const u=/^([+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)(%?)$/i.exec(d);if(!u)return null;const p=Number(u[1]);return Number.isFinite(p)?u[2]?p/100*c:p:null},n=o.slice(0,3).map(d=>a(d,255)),s=o[3]===void 0?1:a(o[3],1);if(n.some(d=>d===null)||s===null)return null;const r=Math.min(1,Math.max(0,s)),l=`#${n.map(d=>Ho(d)).join("")}`;return r>=1?l:`${l}${Ho(r*255)}`}return/^[a-z]+$/i.test(t)?hc.get(t.toLowerCase())??null:null}const gc=e=>e.replace(/\/\*[\s\S]*?(?:\*\/|$)/g,t=>" ".repeat(t.length));function Ko(e,t,i){const o=/url\s*\([^)]*\)?|#[0-9a-zA-Z]+|rgba?\s*\([^)]*\)|[a-zA-Z_-][a-zA-Z0-9_-]*/gi;for(let a=o.exec(e);a;a=o.exec(e)){if(/^url/i.test(a[0])&&a[0].includes("("))continue;const n=Zi(a[0]);n&&i.push({start:t+a.index,end:t+a.index+a[0].length,hex:n})}}function fn(e,t=0,i=e.length){const o=[];let a=t;for(;a<i;){const n=e.indexOf(";",a),s=n<0||n>i?i:n,r=e.indexOf(":",a);r>=0&&r<s&&o.push({prop:e.slice(a,r).trim().toLowerCase(),start:r+1,end:s}),a=s+1}return o}function hn(e,t){const i=[];if(t==="value")return Ko(e,0,i),i;const o=gc(e),a=[];if(t==="decls")a.push([0,o.length]);else for(let n=o.indexOf("{");n>=0;n=o.indexOf("{",n+1)){const s=o.indexOf("}",n+1);if(a.push([n+1,s<0?o.length:s]),s<0)break;n=s}for(const[n,s]of a)for(const r of fn(o,n,s))mc.has(r.prop)&&Ko(o.slice(r.start,r.end),r.start,i);return i}function gn(e){const t=[],i=e.getElementsByTagName("*");for(let o=0;o<i.length;o++){const a=i[o];for(const s of pn){const r=a.getAttribute(s);r!==null&&t.push({text:r,mode:"value",write:l=>a.setAttribute(s,l)})}const n=a.getAttribute("style");if(n!==null&&t.push({text:n,mode:"decls",write:s=>a.setAttribute("style",s)}),a.localName==="style"&&a.namespaceURI===pc)for(const s of Array.from(a.childNodes))(s.nodeType===3||s.nodeType===4)&&t.push({text:s.nodeValue??"",mode:"sheet",write:r=>{s.nodeValue=r}})}return t}function dm(e){const t=new Map;for(const i of gn(e))for(const o of hn(i.text,i.mode))t.set(o.hex,(t.get(o.hex)??0)+1);return[...t].map(([i,o])=>({hex:i,count:o})).sort((i,o)=>o.count-i.count)}function Si(e){const t=Zi(e);if(!t)throw new Error(`not a colour: ${e.slice(0,40)}`);return t}function cm(e,t,i){const o=Si(t),a=Si(i);let n=0;for(const s of gn(e)){const r=hn(s.text,s.mode).filter(d=>d.hex===o);if(r.length===0)continue;let l=s.text;for(const d of r.reverse())l=l.slice(0,d.start)+a+l.slice(d.end);s.write(l),n+=r.length}return n}const vn="http://www.w3.org/2000/svg",Qo=new Set(["g","path","rect","circle","ellipse","line","polyline","polygon","text","use"]),vc=new Set(["g","svg"]),bc=new Set(["tspan","textPath"]),mt=(e,t)=>e.namespaceURI===vn&&(t===void 0||e.localName===t);function um(e){let t;try{t=new DOMParser().parseFromString(e,"image/svg+xml")}catch{return{ok:!1,reason:"parse"}}if(t.getElementsByTagName("parsererror").length>0)return{ok:!1,reason:"parse"};const i=t.documentElement;return!i||!mt(i,"svg")?{ok:!1,reason:"not-svg"}:{ok:!0,doc:t}}function mm(e){return new XMLSerializer().serializeToString(e)}function $c(e,t){let i=e.documentElement;if(t==="")return i;for(const o of t.split("/")){if(!/^\d{1,6}$/.test(o)||!i)return null;i=i.children[Number(o)]??null}return i}function bn(e,t){const i=[];for(let o=t;o!==e;){const a=o.parentElement;if(!a)return null;i.push(Array.prototype.indexOf.call(a.children,o)),o=a}return i.reverse().join("/")}const Ji=(e,t)=>{const i=$c(e,t);if(!i)throw new Error(`no element at ${t.slice(0,40)}`);return i},$n=e=>Array.from(e.children).filter(t=>mt(t)&&bc.has(t.localName)),yn=e=>Array.from(e.childNodes).filter(t=>t.nodeType===3||t.nodeType===4),yc=e=>e.replace(/[\r\n]+/g,"").replace(/\t/g," ").replace(/ {2,}/g," ");function wc(e){const t=$n(e);if(t.length===0)return[yn(e).map(o=>o.data).join("")];let i="";for(const o of Array.from(e.childNodes))o===t[0]?i+=t[0].textContent??"":(o.nodeType===3||o.nodeType===4)&&o.data.trim()!==""&&(i+=yc(o.data));return[i.trimStart(),...t.slice(1).map(o=>o.textContent??"")]}function pm(e){const t=e.documentElement;return Array.from(e.getElementsByTagNameNS(vn,"text")).map(i=>({path:bn(t,i),text:wc(i).join(`
24
+ $"'\\;&|)},`.includes(s)))return!0;o=a+1}}function Nt(e,t){return t.add("complex","medium"),(xt(e,"rm")||["rmtree","rmdir","-delete","unlink","shred","rmSync"].some(i=>e.includes(i)))&&t.add("deletes-files","high"),xt(e,"sudo")&&t.add("elevated","high"),(xt(e,"curl")||xt(e,"wget")||e.includes("://"))&&t.add("uses-network","medium"),[Ye("complex")]}function Cd(e,t,i){const o=el(e);if(!o.parsed)return{phrases:Nt(e,i),parsed:!1};if(Ad(o))return{phrases:Nt(e,i),parsed:!1};const a={ctx:t,cwd:be(t.cwd??t.projectDir),altCwds:[],ind:i,phrases:[],parsed:!0,pipedIn:!1,pipeNet:!1,usedNet:!1,chainNet:!1,written:[],found:null,stdout:null,stdinFile:null},n=8,s=(...b)=>{const g=[...new Set(b.flat())];return g.length>n?[null]:g};let r=[a.cwd],l=[a.cwd],d=[],c=[a.cwd],u=[],p=[],h=0;return o.commands.forEach((b,g)=>{if(!a.parsed)return;const S=g>0?o.separators[g-1]:void 0,L=o.separators[g];if(S!=="|"){if(h=g,S==="&&")c=l,u=[],p=d;else if(S==="||")c=d,u=l,p=[];else{const w=s(l,d);c=S==="&"?s(w,r):w,r=c,u=[],p=[]}c.length===0&&(c=[null])}if(a.pipedIn=S==="|",a.pipedIn||(a.pipeNet=!1),a.usedNet=!1,a.cdTarget=void 0,a.cwd=c[0]??null,a.altCwds=c.slice(1),yd(b,a),a.usedNet&&(a.pipeNet=!0,a.chainNet=!0),L==="|")return;const A=h===g;let $=c,I=c;a.cdTarget!==void 0?A?$=s(a.cdTarget):($=s(c,a.cdTarget),I=$):A&&b.argv[0]==="exit"&&b.wrappers.length===0&&($=[],I=[]),l=s(u,$),d=s(p,I)}),a.parsed?{phrases:a.phrases,parsed:!0}:{phrases:Nt(e,i),parsed:!1}}const Td=e=>e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{};function Wu(e,t,i){const o=new tl,a=Td(t);a.dangerouslyDisableSandbox===!0&&o.add("outside-sandbox","high");let n,s=!0;const r=be(i.cwd??i.projectDir),l=d=>typeof d=="string"&&d!==""?gi(d,r,i):[];switch(e){case"Bash":{const d=a.command;if(typeof d!="string"||d.trim()===""){n=Nt("",o),s=!1;break}({phrases:n,parsed:s}=Cd(d,i,o));break}case"Edit":case"Write":case"MultiEdit":case"NotebookEdit":{const d=l(a.file_path??a.notebook_path);(d.length===0||d.some(c=>c.cls!=="work"&&c.cls!=="project"))&&o.add("writes-outside-project","high",d[0]?{path:ne(d[0],i)}:void 0);for(const c of d)ja(o,c.abs,ne(c,i));n=[Ye("edit",{path:d[0]?ne(d[0],i):"?"})];break}case"Read":{const d=l(a.file_path);(d.length===0||d.some(c=>c.cls==="outside"||c.cls==="unknown"))&&o.add("reads-outside-project","medium",d[0]?{path:ne(d[0],i)}:void 0),n=[Ye("read",{path:d[0]?ne(d[0],i):"?"})];break}case"WebFetch":{const d=typeof a.url=="string"?he(a.url):"…";o.add("uses-network","medium",{host:d}),n=[Ye("webFetch",{host:d})];break}case"WebSearch":o.add("uses-network","medium"),n=[Ye("webSearch")];break;default:o.add("unknown-command","medium"),n=[Ye("tool",{tool:e})]}return ol(n,o,s,i.home)}function ci(e,t,i={}){let o=e;for(const a of t.split(".")){if(o===null||typeof o!="object"||!Object.hasOwn(o,a))return t;o=o[a]}if(typeof o=="string")return o;if(typeof o=="function")try{const a=o(i);return typeof a=="string"?a:t}catch{return t}return t}const zd=e=>e.replace(/-([a-z])/g,(t,i)=>i.toUpperCase());function ju(e,t){return{summary:e.summary.map(i=>ci(t,i.key,i.params)),indicators:e.indicators.map(i=>({id:i.id,risk:i.risk,label:ci(t,`explain.indicators.${zd(i.id)}`,i.params??{})})),risk:e.risk,riskLabel:ci(t,`explain.risk.${e.risk}`)}}const Id=["title","channel","format","ratio","v","date","locale"],Vu="{title}-{format}-v{v}",tn=120,yi=e=>e==="-"||e==="_"||e===".",Fd=e=>e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||yi(e);function je(e){return Dt(e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-"))}function Dt(e){let t=0,i=e.length;for(;t<i&&yi(e[t]);)t++;for(;i>t&&yi(e[i-1]);)i--;return e.slice(t,i)}function Ld(e,t){if(e.length<=t)return e;const i=e.charCodeAt(t-1);return e.slice(0,i>=55296&&i<=56319?t-1:t)}function Gu(e,t){const i=new Set;let o="";for(let s=0;s<e.length;s++){const r=e[s];if(r==="{"){let l=s+1;for(;l<e.length&&Nd(e[l]);)l++;if(l>s+1&&e[l]==="}"){const d=e.slice(s+1,l);Id.includes(d)?o+=je(String(t[d]??"")):i.add(d),s=l;continue}}o+=Fd(r)?r:"-"}const a=o.replace(/[-_.]{2,}/g,s=>s[0]),n=Rd(Dt(Ld(Dt(a),tn)));return n?{ok:!0,name:n,unknown:[...i]}:{ok:!1,error:"empty",unknown:[...i]}}const Nd=e=>e>="a"&&e<="z"||e>="A"&&e<="Z",Pd=new Set(["con","prn","aux","nul",...[1,2,3,4,5,6,7,8,9].flatMap(e=>[`com${e}`,`lpt${e}`])]);function Rd(e){const t=e.indexOf("."),i=t===-1?e:e.slice(0,t);return Pd.has(i.toLowerCase())?t===-1?`${e}_`:`${i}_${e.slice(t+1)}`:e}function Vi(e,t){const i=tn-t.length-1;let o=e.length>i?e.slice(0,i):e;for(;o.length>0&&"-_.".includes(o.at(-1));)o=o.slice(0,-1);return`${o}-${t}`}function Od(e,t){return Vi(e,je(t))}function Hu(e,t){return Vi(e,`sub-${je(t)}`)}function Ku(e,t,i,o){return o&&i&&!e.includes("{locale}")?Od(t,i):t}function Qu(e){const t=new Map;for(const i of e){const o=`${i.stem}${i.ext}`.toLowerCase();t.set(o,(t.get(o)??0)+1)}return e.map(i=>t.get(`${i.stem}${i.ext}`.toLowerCase())>1&&na(i.format)>1?Vi(i.stem,je(i.format)):i.stem)}function Yu(e){const t=new Set,i=new Set;for(const o of e){const a=o.toLowerCase();t.has(a)?i.add(a):t.add(a)}return[...i]}function Md(e){const t=i=>String(i).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function Xu(e){const t=e.lastIndexOf("."),i=t>0?e.slice(t+1).toLowerCase():"";return i?`.${i.replace(/[^a-z0-9]/g,"_")}`:""}function Ed(e,t){if(!(e>0&&t>0)||!Number.isInteger(e)||!Number.isInteger(t))return"";let i=e,o=t;for(;o;)[i,o]=[o,i%o];return`${e/i}x${t/i}`}function qd(e){const t=je(e??"").slice(0,40);return Dt(t)||null}function Zu(e){const t=e.preset??e.size;return{title:qd(e.title)??je(e.slug),channel:e.preset?je(e.preset.channel):"",format:e.format,ratio:t?Ed(t.width,t.height):"",v:e.version,date:typeof e.date=="string"?e.date:Md(e.date),...e.locale!==void 0?{locale:e.locale}:{}}}const Gi=e=>e==="bold"?700:typeof e=="number"?e:400;function on(e,t){const i=t.toLowerCase(),o=e.filter(a=>a.family.toLowerCase()===i&&a.weight!==void 0).map(a=>Gi(a.weight));return o.length>0?[...new Set(o)].sort((a,n)=>a-n):null}const Wo="composition.",jo=120;function Hi(e,t={}){const i={};for(const[o,a]of Object.entries(t)){if(typeof a!="string"||a.length<=jo){i[o]=a;continue}let n=a.slice(0,jo);const s=n.charCodeAt(n.length-1);s>=55296&&s<=56319&&(n=n.slice(0,-1)),i[o]=`${n}…`}return{key:e,params:i}}function Dd(e,t){if(!e.key.startsWith(Wo))return e.key;const i=Ee(t).composition,o=e.key.slice(Wo.length);if(!Object.hasOwn(i,o))return e.key;const a=i[o];return typeof a=="string"?a:a(e.params)}function Ut(e){if(!Fe(e))return e;let t=e;const i=()=>{t===e&&(t={...e})},o=e.fonts,a=Array.isArray(o)&&Fe(o[0])&&typeof o[0].family=="string"?o[0].family:void 0;if(a!==void 0&&Array.isArray(e.tracks)){let n=!1;const s=e.tracks.map(r=>{if(!Fe(r)||!Array.isArray(r.clips))return r;let l=!1;const d=r.clips.map(c=>!Fe(c)||c.type!=="text"||!Fe(c.props)||c.props.fontFamily!==void 0?c:(l=!0,{...c,props:{...c.props,fontFamily:a}}));return l?(n=!0,{...r,clips:d}):r});n&&(i(),t.tracks=s)}return typeof e.duration=="number"&&e.duration>0&&Array.isArray(e.scenes)&&e.scenes.length===0&&(i(),t.scenes=[{id:an(e),start:0,duration:e.duration}]),t}function an(e){const t=new Set;if(Fe(e)&&Array.isArray(e.tracks)){for(const o of e.tracks)if(Fe(o)&&(typeof o.id=="string"&&t.add(o.id),Array.isArray(o.clips)))for(const a of o.clips)Fe(a)&&typeof a.id=="string"&&t.add(a.id)}let i=1;for(;t.has(`scene-${i}`);)i++;return`scene-${i}`}function Fe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}const Ud=500*1024*1024,de=1e-4,_t=1024*1024,_d=[".ttf",".otf",".woff",".woff2"],R=(e,t={})=>Hi(`composition.${e}`,t),Bt=e=>Math.round(e*10)/10,ve=e=>Math.round(e*1e3)/1e3;function Bd(e){return new TextEncoder().encode(JSON.stringify(Ut(e))).length}function Ju(e){const t=Bd(e);return t>D.jsonBytes?R("jsonTooLarge",{sizeMB:Bt(t/_t),maxMB:Bt(D.jsonBytes/_t)}):null}function em(e,t){const i=Wd(e);if(i)return{ok:!1,problems:[i],warnings:[]};const o=wa.safeParse(e),{problems:a,warnings:n}=o.success?Hd(o.data,t):{problems:wi(o.error.issues,e),warnings:[]};return{ok:a.length===0,problems:Vo(Go(a)),warnings:Vo(Go(n))}}function Vo(e){return e.length<=D.problems?e:[...e.slice(0,D.problems),R("moreProblems")]}function Go(e){const t=new Set;return e.filter(i=>{const o=JSON.stringify(i);return t.has(o)?!1:(t.add(o),!0)})}const at=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),nt=(e,t)=>Array.isArray(e)&&e.length>t;function Wd(e){if(!at(e))return R("wrongType",{path:"$",expected:"object"});if(nt(e.tracks,D.tracks))return R("limit",{path:"tracks",max:D.tracks});if(nt(e.scenes,D.scenes))return R("limit",{path:"scenes",max:D.scenes});if(nt(e.fonts,D.fonts))return R("limit",{path:"fonts",max:D.fonts});if(!Array.isArray(e.tracks))return null;let t=0;for(let i=0;i<e.tracks.length;i++){const o=at(e.tracks[i])?e.tracks[i].clips:void 0;if(Array.isArray(o)){if(o.length>D.clipsPerTrack)return R("limit",{path:`tracks[${i}].clips`,max:D.clipsPerTrack});t+=o.length}}if(t>D.clips)return R("limit",{path:"tracks[].clips",max:D.clips});for(let i=0;i<e.tracks.length;i++){const o=e.tracks[i]?.clips;if(Array.isArray(o))for(let a=0;a<o.length;a++){const n=o[a];if(!at(n))continue;const s=`tracks[${i}].clips[${a}]`;if(nt(n.animations,D.animations))return R("limit",{path:`${s}.animations`,max:D.animations});if(at(n.params)){let r=0;for(const l in n.params)if(Object.hasOwn(n.params,l)&&++r>D.params)return R("limit",{path:`${s}.params`,max:D.params})}if(Array.isArray(n.animations))for(let r=0;r<n.animations.length;r++){const l=n.animations[r];if(at(l)&&nt(l.keyframes,D.keyframes))return R("limit",{path:`${s}.animations[${r}].keyframes`,max:D.keyframes})}}}return null}const jd=e=>{let t="";for(const i of e)t+=typeof i=="number"?`[${i}]`:t===""?String(i):`.${String(i)}`;return t===""?"$":t};function Vd(e,t){let i=e;for(const o of t){if(typeof i!="object"||i===null||!Object.hasOwn(i,o))return{found:!1,value:void 0};i=i[o]}return{found:!0,value:i}}function wi(e,t,i=[]){return e.flatMap(o=>Gd(o,t,[...i,...o.path]))}function Gd(e,t,i){const o=jd(i);if(e.message.startsWith("composition."))return[{key:e.message,params:{path:o}}];const a=!Vd(t,i).found;switch(e.code){case"unrecognized_keys":return e.keys.map(n=>R("unknownField",{path:o,field:n}));case"invalid_type":return[a?R("missingField",{path:o}):R("wrongType",{path:o,expected:String(e.expected)})];case"invalid_value":return[a?R("missingField",{path:o}):R("badValue",{path:o,allowed:e.values.map(String).join(", ")})];case"too_big":return e.origin==="array"?[R("limit",{path:o,max:Number(e.maximum)})]:e.origin==="string"?[R("tooLong",{path:o,max:Number(e.maximum)})]:[R("tooBig",{path:o,max:Number(e.maximum)})];case"invalid_key":return wi(e.issues??[],t,i);case"too_small":return[R(e.inclusive===!1?"notAbove":"tooSmall",{path:o,min:Number(e.minimum)})];case"invalid_union":{if(a)return[R("missingField",{path:o})];if(e.note==="No matching discriminator")return[R("badValue",{path:o,allowed:e.options.map(String).join(", ")})];const n=i.length;if(n>=2&&typeof i[n-1]=="number"&&i[n-2]==="animations")return[R("badAnimation",{path:o})];const s=e.errors??[];if(s.every(d=>d.length===1&&d[0].path.length===0&&(d[0].code==="invalid_type"||d[0].code==="invalid_value"))){const d=s.map(c=>c[0].code==="invalid_value"?c[0].values.map(String).join(", "):`a ${String(c[0].expected)}`);return[R("badValue",{path:o,allowed:d.join(", ")})]}const l=s.filter(d=>d.length>0&&d[0].code!=="invalid_type").sort((d,c)=>d.length-c.length)[0];return l?wi(l,t,i):[R("invalid",{path:o})]}default:return[R("invalid",{path:o})]}}function Hd(e,t){const i=[],o=[],a=e.duration===0,n=1/e.fps,s=new Set,r=new Set,l=$=>{s.has($)&&!r.has($)&&(r.add($),i.push(R("duplicateId",{id:$}))),s.add($)};for(const $ of e.scenes)l($.id);for(const $ of e.tracks){l($.id);for(const I of $.clips)l(I.id)}const d=e.scenes.length===0&&!a?[{id:an(e),start:0,duration:e.duration}]:[...e.scenes].sort(($,I)=>$.start-I.start),c=new Map;for(const $ of d)c.has($.id)||c.set($.id,{start:$.start,end:$.start+$.duration});if(a)e.scenes.length>0&&o.push(R("stillScenes"));else{const $=d[0];$.start>de&&i.push(R("sceneStart",{scene:$.id,start:ve($.start)}));for(let w=1;w<d.length;w++){const X=d[w-1],j=d[w],N=X.start+X.duration,x={scene:j.id,previous:X.id,from:ve(N),to:ve(j.start)};j.start<N-de?i.push(R("sceneOverlap",x)):j.start>N+de&&i.push(R("sceneGap",x))}const I=d.reduce((w,X)=>Math.max(w,X.start+X.duration),0);Math.abs(I-e.duration)>de&&i.push(R("scenesEnd",{end:ve(I),duration:e.duration}))}const u=new Set,p=[];for(const $ of e.fonts){u.add($.family.toLowerCase());const I=$.src.toLowerCase();(!$.src.startsWith("assets/")||!_d.some(w=>I.endsWith(w)))&&i.push(R("fontNotAsset",{family:$.family,src:$.src})),p.push($.src)}const h=e.tracks.filter($=>$.kind==="subtitles");h.length>1&&i.push(R("subtitlesTwice")),h.length>0&&a&&i.push(R("subtitlesOnStill"));for(const $ of h){const I=$.clips[0];a||($.clips.length!==1||I&&(I.start>de||Math.abs(I.duration-e.duration)>de||I.scene!==void 0))&&i.push(R("subtitlesSpan",{track:$.id,duration:e.duration}))}for(const $ of e.tracks){let I=!1;for(const w of $.clips){($.kind==="audio"!=(w.type==="audio")||$.kind==="subtitles"!=(w.type==="subtitles"))&&i.push(R("trackKind",{track:$.id,clip:w.id,kind:$.kind,type:w.type}));const X=w.start+w.duration;if(a?(w.type==="audio"&&!I&&(I=!0,o.push(R("stillAudio",{track:$.id}))),w.type!=="audio"&&w.type!=="subtitles"&&w.animations&&w.animations.length>0&&o.push(R("stillAnimations",{clip:w.id})),w.start>de&&i.push(R("clipStill",{clip:w.id}))):w.duration<=0?i.push(R("clipZero",{clip:w.id})):(X>e.duration+de||w.start>=e.duration)&&i.push(R("clipOutside",{clip:w.id,start:ve(w.start),end:ve(X),duration:e.duration})),w.scene!==void 0){const j=c.get(w.scene);j?!a&&(w.start<j.start-de||X>j.end+de)&&i.push(R("clipOutsideScene",{clip:w.id,scene:w.scene,start:ve(j.start),end:ve(j.end)})):i.push(R("unknownScene",{clip:w.id,scene:w.scene}))}if(!a&&w.type!=="audio"&&w.type!=="subtitles"&&w.animations&&Kd(w.id,w.duration,w.animations,n,i),w.type==="text"){const j=w.props.fontFamily??e.fonts[0]?.family;if(j===void 0)i.push(R("fontMissing",{clip:w.id}));else if(!u.has(j.toLowerCase()))i.push(R("unknownFont",{clip:w.id,family:j}));else{const N=on(e.fonts,j),x=Gi(w.props.fontWeight);N&&!N.includes(x)&&o.push(R("fontWeightUndeclared",{clip:w.id,family:j,weight:x,declared:N.join(", ")}))}}if(w.type==="subtitles"){const j=w.props.fontFamily??e.fonts[0]?.family;j===void 0?i.push(R("fontMissing",{clip:w.id})):u.has(j.toLowerCase())||i.push(R("unknownFont",{clip:w.id,family:j})),w.template!==void 0&&((!w.template.startsWith("layers/")||!w.template.toLowerCase().endsWith(".html"))&&i.push(R("layerNotHtml",{clip:w.id,src:w.template})),p.push(w.template))}else if(w.type==="html"){(!w.src.startsWith("layers/")||!w.src.toLowerCase().endsWith(".html"))&&i.push(R("layerNotHtml",{clip:w.id,src:w.src})),p.push(w.src);for(const j of Object.values(w.params??{}))j.type==="image"&&(j.value.startsWith("assets/")||i.push(R("mediaNotAsset",{clip:w.id,src:j.value})),p.push(j.value))}else(w.type==="image"||w.type==="svg"||w.type==="video"||w.type==="audio")&&(w.src.startsWith("assets/")||i.push(R("mediaNotAsset",{clip:w.id,src:w.src})),p.push(w.src))}}const b=new Set;let g=0;for(const[$,I]of t.files)b.add($.normalize("NFC")),g+=Number.isFinite(I.size)&&I.size>0?I.size:0;const S=new Set;for(const $ of p){const I=$.normalize("NFC");b.has(I)||S.has(I)||(S.add(I),i.push(R("assetMissing",{path:$})))}const L=t.maxBytes??Ud;g>L&&i.push(R("assetsTooLarge",{sizeMB:Bt(g/_t),maxMB:Bt(L/_t)}));const A=t.format;return(e.width!==A.width||e.height!==A.height)&&i.push(R("sizeMismatch",{width:e.width,height:e.height,expectedWidth:A.width,expectedHeight:A.height,format:A.id})),A.kind==="video"?a?i.push(R("stillForVideo",{format:A.id})):A.maxDurationSec!==void 0&&e.duration>A.maxDurationSec+de&&i.push(R("durationOverMax",{duration:e.duration,max:A.maxDurationSec,format:A.id})):a||i.push(R("durationForImage",{format:A.id,duration:e.duration})),{problems:i,warnings:o}}function Kd(e,t,i,o,a){let n=!1,s=!1,r=!1;for(const l of i){const d=(l.start??0)+l.duration;if(!n&&d>t+o+de&&(n=!0,a.push(R("animationOutside",{clip:e,end:ve(d),duration:ve(t)}))),!("prop"in l))continue;const c=l.prop==="color",u="keyframes"in l?l.keyframes.map(p=>p.v):[l.from,l.to];!r&&u.some(p=>typeof p=="string"!==c)&&(r=!0,a.push(R("animationValue",{clip:e,prop:l.prop}))),!s&&"keyframes"in l&&l.keyframes.some((p,h)=>h>0&&p.t<l.keyframes[h-1].t)&&(s=!0,a.push(R("keyframesOrder",{clip:e})))}}const nn=9,ge=m().min(1).max(D.id),Ge=v().min(0).max(D.durationSec),sn=m().max(D.text),ui=v().int().min(0).max(1e6),Qd=U({x:v().optional(),y:v().optional(),width:v().optional(),height:v().optional(),rotation:v().optional(),scale:v().optional(),opacity:v().optional(),text:sn.optional(),fontFamily:m().max(D.family).optional(),fontSize:v().optional(),fontWeight:Ie([v().int(),z(["normal","bold"])]).optional(),color:m().max(9).optional(),align:z(["left","center","right"]).optional(),fill:m().max(9).optional(),radius:v().optional()});Kt("kind",[U({kind:E("clipProps"),clipId:ge,props:Qd}),U({kind:E("clipTiming"),clipId:ge,start:Ge,duration:Ge,ripple:B()}),U({kind:E("clipMedia"),clipId:ge,src:m().max(Qt).optional(),trimStart:v().min(0).max(36e3).optional(),volume:v().min(0).max(2).optional(),fadeIn:Ge.optional(),fadeOut:Ge.optional()}),U({kind:E("clipFlags"),clipId:ge,hidden:B().optional(),locked:B().optional()}),U({kind:E("trackFlags"),trackId:ge,hidden:B().optional(),locked:B().optional(),muted:B().optional()}),U({kind:E("sceneDuration"),sceneId:ge,duration:Ge}),U({kind:E("sceneOrder"),order:k(ge).max(D.scenes)}),U({kind:E("animationPreset"),clipId:ge,slot:z(["in","out"]),preset:z(va).nullable(),duration:Ge}),U({kind:E("svgContent"),clipId:ge,colors:ui,texts:ui,hidden:ui}),U({kind:E("htmlParam"),clipId:ge,key:m().min(1).max(64),value:Ie([sn,v()])}),U({kind:E("addFont"),font:ga,weights:k(v().int().min(1).max(1e3)).min(1).max(nn).optional()})]);const ee=1e-4,Yd=/^#(?:[0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,Xd=[".ttf",".otf",".woff",".woff2"],He=["x","y","width","height","rotation","scale","opacity"],Zd=["text","fontFamily","fontSize","fontWeight","color","align"],Jd=["fill","radius"],ec={text:[...He,...Zd],shape:[...He,...Jd],image:He,svg:He,video:He,html:He,audio:[],subtitles:[]};class rn extends Error{constructor(t){super(t.key),this.problem=t}problem}function _(e,t={}){throw new rn(Hi(e,t))}const K=e=>Math.round(e*1e6)/1e6,Ki=e=>Math.ceil(1e6/e)/1e6,Wt=(e,t,i)=>Math.min(Math.max(e,t),Math.max(t,i)),ln=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),jt=(e,t,i)=>typeof e=="number"&&Number.isFinite(e)?e:_("editor.badValue",{clip:t,key:i});function tm(e,t,i={}){try{const o=Ut(structuredClone(e));oc(o,t,i);const a=Ut(o),n=wa.safeParse(a);if(!n.success){const s=n.error.issues[0];return{ok:!1,problem:Hi("editor.invalid",{path:s.path.map(String).join(".")||"$"})}}return{ok:!0,composition:a}}catch(o){if(o instanceof rn)return{ok:!1,problem:o.problem};throw o}}function dn(e,t){for(const i of e.tracks)for(const o of i.clips)if(o.id===t)return{track:i,clip:o};return _("editor.unknownClip",{clip:t})}function it(e,t){const i=dn(e,t);return(i.clip.locked||Ct(i.track))&&_("editor.locked",{clip:t}),i}const Qi=e=>[...e.scenes].sort((t,i)=>t.start-i.start),Vt=e=>e.tracks.flatMap(t=>t.clips.map(i=>({track:t,clip:i})));function Yi(e,t){if(e.scene!==void 0)return t.find(a=>a.id===e.scene);const i=e.start+e.duration,o=t.filter(a=>e.start>=a.start-ee&&i<=a.start+a.duration+ee);return o.length===1?o[0]:void 0}function tc(e){const t=Ut(e);if(t.duration===0)return{ok:!0};const i=Qi(t);for(const{clip:o}of Vt(t))if(!(o.type==="audio"||o.type==="subtitles")&&!Yi(o,i))return{ok:!1,clipId:o.id};return{ok:!0}}const cn=e=>"preset"in e,ic=e=>e.type==="audio"||e.type==="subtitles"?void 0:e.animations;function un(e,t,i){const o=ic(e);if(!o||t===e.duration)return;const a=e.duration,n=1/i;for(const s of o){const r=s.start??0;if(!cn(s)){const d=r+s.duration;d>t+n+ee&&_("composition.animationOutside",{clip:e.id,end:K(d),duration:K(t)});continue}if(r<=ee){s.duration=K(Math.min(s.duration,t));continue}if(Math.abs(r+s.duration-a)<=ee){s.duration=K(Math.min(s.duration,t)),s.start=K(t-s.duration);continue}const l=Wt(r,0,t-n);s.start=K(l),s.duration=K(Math.min(s.duration,t-l))}}function ki(e,t){e.start=K(e.start+t)}function mn(e,t,i,o){const a=Qi(e),n=a.findIndex(g=>g.id===t);n<0&&_("editor.unknownScene",{scene:t});const s=a[n],r=s.start+s.duration,l=s.start+i,d=l-r;if(Math.abs(d)<=ee)return;const c=n===a.length-1,u=e.duration,p=Ki(e.fps),h=Vt(e).map(({track:g,clip:S})=>({track:g,clip:S,owner:Yi(S,a)})),b=(g,S,L)=>{const A=K(L-S.start);A<p-ee&&_("composition.clipOutsideScene",{clip:S.id,scene:s.id,start:K(s.start),end:K(l)}),(S.locked||Ct(g))&&_("editor.locked",{clip:S.id}),un(S,A,e.fps),S.duration=A};for(const{track:g,clip:S,owner:L}of h){if(S.id===o||S.type==="subtitles")continue;const A=S.start+S.duration,$=L?a.indexOf(L):-1;if(L&&$>n){ki(S,d);continue}if(!(L&&$<n)){if(L){A>l+ee&&b(g,S,l);continue}if(S.start>=r-ee)ki(S,d);else if(S.type==="audio")A>=u-ee?(d<0||!(S.locked||Ct(g)))&&b(g,S,A+d):A>u+d+ee&&b(g,S,u+d);else if(A>r+ee||c&&A>=r-ee){if(d>0&&(S.locked||Ct(g)))continue;b(g,S,A+d)}else A>l+ee&&b(g,S,l)}}s.duration=K(i);for(let g=n+1;g<a.length;g++)a[g].start=K(a[g].start+d);e.duration=K(a.reduce((g,S)=>Math.max(g,S.start+S.duration),0));for(const{clip:g}of Vt(e))g.type==="subtitles"&&(g.duration=e.duration)}function oc(e,t,i){switch(t.kind){case"clipProps":return ac(e,t);case"clipTiming":return nc(e,t);case"clipMedia":return sc(e,t,i);case"clipFlags":{const{clip:o}=dn(e,t.clipId);st(o,"hidden",t.hidden),st(o,"locked",t.locked);return}case"trackFlags":{const o=e.tracks.find(a=>a.id===t.trackId)??_("editor.unknownTrack",{track:t.trackId});st(o,"hidden",t.hidden),st(o,"locked",t.locked),st(o,"muted",t.muted);return}case"sceneDuration":return e.duration===0&&_("editor.stillTiming",{clip:t.sceneId}),typeof t.duration=="number"&&Number.isFinite(t.duration)&&t.duration>0&&t.duration<=D.durationSec||_("editor.badValue",{clip:t.sceneId,key:"duration"}),mn(e,t.sceneId,K(t.duration));case"sceneOrder":return rc(e,t);case"animationPreset":return lc(e,t);case"htmlParam":return dc(e,t,i);case"addFont":return cc(e,t,i);case"svgContent":{const{clip:o}=it(e,t.clipId);o.type!=="svg"&&_("editor.wrongType",{clip:o.id,type:o.type});for(const a of["colors","texts","hidden"]){const n=t[a];typeof n=="number"&&Number.isInteger(n)&&n>=0&&n<=1e6||_("editor.badValue",{clip:o.id,key:a})}return}default:return _("editor.badOp")}}function st(e,t,i){i!==void 0&&(typeof i!="boolean"&&_("editor.badValue",{clip:"",key:t}),i?e[t]=!0:delete e[t])}function ac(e,t){const{clip:i}=it(e,t.clipId);ln(t.props)||_("editor.badValue",{clip:i.id,key:"props"});const o=ec[i.type],a=i.props;for(const n of Object.keys(t.props))(!o.includes(n)||!a)&&_("editor.badProp",{clip:i.id,key:n});for(const[n,s]of Object.entries(t.props)){if(s===void 0){delete a[n];continue}if(n==="fontFamily"){const r=String(s).toLowerCase();e.fonts.some(l=>l.family.toLowerCase()===r)||_("composition.unknownFont",{clip:i.id,family:String(s)})}a[n]=s}if(i.type==="text"&&("fontWeight"in t.props||"fontFamily"in t.props)){const n=i.props.fontFamily??e.fonts[0]?.family,s=n?on(e.fonts,n):null,r=Gi(i.props.fontWeight);n&&s&&!s.includes(r)&&_("editor.badWeight",{clip:i.id,family:n,weight:r,declared:s.join(", ")})}}function nc(e,t){const{clip:i}=it(e,t.clipId);e.duration===0&&_("editor.stillTiming",{clip:i.id});const o=jt(t.start,i.id,"start"),a=jt(t.duration,i.id,"duration"),n=Ki(e.fps),s=i.scene!==void 0?e.scenes.find(u=>u.id===i.scene):void 0,r=s?s.start:0,l=s?s.start+s.duration:e.duration,d=K(Wt(o,r,l-n));let c=Math.max(a,n);s&&t.ripple===!0&&d+c>l+ee?(c=K(c),mn(e,s.id,K(s.duration+(d+c-l)),i.id)):c=K(Wt(c,n,l-d)),un(i,c,e.fps),i.start=d,i.duration=c}function Xi(e,t,i,o){return typeof i!="string"||!Fi(i)||!i.startsWith("assets/")?_("editor.badAsset",{clip:e,path:String(i).slice(0,100)}):o.files&&!o.files.has(i)&&!o.files.has(i.normalize("NFC"))?_("editor.badAsset",{clip:e,path:i}):i}function sc(e,t,i){const{clip:o}=it(e,t.clipId);o.type==="image"||o.type==="svg"||o.type==="video"||o.type==="audio"||_("editor.wrongType",{clip:o.id,type:o.type});const a=o.type==="video"||o.type==="audio";t.src!==void 0&&(o.src=Xi(o.id,"src",t.src,i));const n=(s,r,l)=>{r!==void 0&&(l||_("editor.badProp",{clip:o.id,key:s}),o[s]=jt(r,o.id,s))};n("trimStart",t.trimStart,a),n("volume",t.volume,a),n("fadeIn",t.fadeIn,o.type==="audio"),n("fadeOut",t.fadeOut,o.type==="audio")}function rc(e,t){e.duration===0&&_("editor.stillTiming",{clip:""});const i=Qi(e),o=t.order;(!Array.isArray(o)||o.length!==i.length||new Set(o).size!==o.length||!o.every(d=>i.some(c=>c.id===d)))&&_("editor.badOrder");const a=tc(e);a.ok||_("editor.sceneOrderBlocked",{clip:a.clipId});const n=Vt(e).map(({clip:d})=>({clip:d,owner:Yi(d,i)})),s=new Map(i.map(d=>[d.id,d.start])),r=o.map(d=>i.find(c=>c.id===d));let l=0;for(const d of r)d.start=K(l),l+=d.duration;for(const{clip:d,owner:c}of n)c&&ki(d,c.start-s.get(c.id));e.scenes=r}function lc(e,t){const{clip:i}=it(e,t.clipId);(i.type==="audio"||i.type==="subtitles")&&_("editor.wrongType",{clip:i.id,type:i.type}),e.duration===0&&_("editor.stillTiming",{clip:i.id}),t.slot!=="in"&&t.slot!=="out"&&_("editor.badValue",{clip:i.id,key:"slot"});const o=i.animations??[],a=d=>t.slot==="in"?(d.start??0)<=ee:(d.start??0)>ee&&Math.abs((d.start??0)+d.duration-i.duration)<=ee,n=o.filter(a),s=n.find(cn);if(t.preset===null){s&&(i.animations=o.filter(d=>d!==s)),i.animations&&i.animations.length===0&&delete i.animations;return}!s&&n.length>0&&_("editor.customAnimation",{clip:i.id,slot:t.slot});const r=K(Wt(jt(t.duration,i.id,"duration"),Ki(e.fps),i.duration));if(s){s.preset=t.preset,s.duration=r,t.slot==="out"&&(s.start=K(i.duration-r));return}const l=t.slot==="in"?{preset:t.preset,duration:r}:{preset:t.preset,start:K(i.duration-r),duration:r};i.animations=[...o,l]}function dc(e,t,i){const{clip:o}=it(e,t.clipId);o.type!=="html"&&_("editor.wrongType",{clip:o.id,type:o.type});const a=o.params&&Object.hasOwn(o.params,t.key)?o.params[t.key]:void 0;if(!a)return _("editor.unknownParam",{clip:o.id,key:t.key});const n=()=>_("editor.badParam",{clip:o.id,key:t.key}),s=t.value;switch(a.type){case"text":(typeof s!="string"||s.length>D.text)&&n(),a.value=s;break;case"color":(typeof s!="string"||!Yd.test(s))&&n(),a.value=s;break;case"number":(typeof s!="number"||!Number.isFinite(s)||Math.abs(s)>1e9)&&n(),a.value=s;break;case"image":a.value=Xi(o.id,t.key,s,i);break}}function cc(e,t,i){const o=t.font;if(!ln(o)||typeof o.family!="string"||typeof o.src!="string")return _("editor.badFont",{family:""});const a=Xi("","src",o.src,i);if(Xd.some(s=>a.toLowerCase().endsWith(s))||_("editor.badFont",{family:o.family}),e.fonts.some(s=>s.family.toLowerCase()===o.family.toLowerCase())&&_("editor.fontExists",{family:o.family}),t.weights===void 0){e.fonts.push({...o,src:a});return}const n=t.weights;(!Array.isArray(n)||n.length===0||n.length>nn||new Set(n).size!==n.length||!n.every(s=>Number.isInteger(s)&&s>=1&&s<=1e3))&&_("editor.badFont",{family:o.family}),e.fonts.length+n.length>D.fonts&&_("editor.badFont",{family:o.family});for(const s of[...n].sort((r,l)=>r-l))e.fonts.push({...o,src:a,weight:s})}function im(e,t){if(!e.key.startsWith("editor."))return Dd(e,t);const i=Ee(t).editor,o=e.key.slice(7);if(!Object.hasOwn(i,o))return e.key;const a=i[o];return typeof a=="string"?a:a(e.params)}const rt=e=>Math.round(e*1e6)/1e6;function om(e,t,i){let o=null,a=1/0;for(const n of t){const s=Math.abs(n-e);s>i+1e-9||(s<a-1e-9||Math.abs(s-a)<=1e-9&&o!==null&&n<o)&&(o=n,a=s)}return o===null?{t:e,snappedTo:null}:{t:o,snappedTo:o}}function am(e,t){const i=new Set([0,rt(e.duration)]);for(const o of e.scenes)i.add(rt(o.start)),i.add(rt(o.start+o.duration));for(const o of e.tracks)for(const a of o.clips)a.id!==t&&(i.add(rt(a.start)),i.add(rt(a.start+a.duration)));return[...i].sort((o,a)=>o-a)}function nm(e,t){return e.startsWith("creative:")?`render:${e.slice(9)}:v${t}`:null}function sm(e){return e.startsWith("creative:")?`export:${e.slice(9)}:`:null}function uc(e,t){const i=e.progress;return!i||i.format!==t||i.phase==="media"?0:i.phase==="finishing"?99:i.total>0?Math.min(99,Math.floor(i.done/i.total*100)):0}function rm(e){const t=e.filter(o=>o!==void 0);if(!t.length)return null;const i=o=>{if(o.state==="succeeded")return 100;if(o.state!=="running"||!o.progress)return 0;const a=o.formats?.length?o.formats:[o.progress.format];return(Math.max(0,a.indexOf(o.progress.format))+uc(o,o.progress.format)/100)/a.length*100};return Math.round(t.reduce((o,a)=>o+i(a),0)/t.length)}const lm=220,pn=["fill","stroke","stop-color","flood-color","lighting-color","color"],mc=new Set(pn),pc="http://www.w3.org/2000/svg",fc="aliceblue:f0f8ff antiquewhite:faebd7 aqua:00ffff aquamarine:7fffd4 azure:f0ffff beige:f5f5dc bisque:ffe4c4 black:000000 blanchedalmond:ffebcd blue:0000ff blueviolet:8a2be2 brown:a52a2a burlywood:deb887 cadetblue:5f9ea0 chartreuse:7fff00 chocolate:d2691e coral:ff7f50 cornflowerblue:6495ed cornsilk:fff8dc crimson:dc143c cyan:00ffff darkblue:00008b darkcyan:008b8b darkgoldenrod:b8860b darkgray:a9a9a9 darkgreen:006400 darkgrey:a9a9a9 darkkhaki:bdb76b darkmagenta:8b008b darkolivegreen:556b2f darkorange:ff8c00 darkorchid:9932cc darkred:8b0000 darksalmon:e9967a darkseagreen:8fbc8f darkslateblue:483d8b darkslategray:2f4f4f darkslategrey:2f4f4f darkturquoise:00ced1 darkviolet:9400d3 deeppink:ff1493 deepskyblue:00bfff dimgray:696969 dimgrey:696969 dodgerblue:1e90ff firebrick:b22222 floralwhite:fffaf0 forestgreen:228b22 fuchsia:ff00ff gainsboro:dcdcdc ghostwhite:f8f8ff gold:ffd700 goldenrod:daa520 gray:808080 green:008000 greenyellow:adff2f grey:808080 honeydew:f0fff0 hotpink:ff69b4 indianred:cd5c5c indigo:4b0082 ivory:fffff0 khaki:f0e68c lavender:e6e6fa lavenderblush:fff0f5 lawngreen:7cfc00 lemonchiffon:fffacd lightblue:add8e6 lightcoral:f08080 lightcyan:e0ffff lightgoldenrodyellow:fafad2 lightgray:d3d3d3 lightgreen:90ee90 lightgrey:d3d3d3 lightpink:ffb6c1 lightsalmon:ffa07a lightseagreen:20b2aa lightskyblue:87cefa lightslategray:778899 lightslategrey:778899 lightsteelblue:b0c4de lightyellow:ffffe0 lime:00ff00 limegreen:32cd32 linen:faf0e6 magenta:ff00ff maroon:800000 mediumaquamarine:66cdaa mediumblue:0000cd mediumorchid:ba55d3 mediumpurple:9370db mediumseagreen:3cb371 mediumslateblue:7b68ee mediumspringgreen:00fa9a mediumturquoise:48d1cc mediumvioletred:c71585 midnightblue:191970 mintcream:f5fffa mistyrose:ffe4e1 moccasin:ffe4b5 navajowhite:ffdead navy:000080 oldlace:fdf5e6 olive:808000 olivedrab:6b8e23 orange:ffa500 orangered:ff4500 orchid:da70d6 palegoldenrod:eee8aa palegreen:98fb98 paleturquoise:afeeee palevioletred:db7093 papayawhip:ffefd5 peachpuff:ffdab9 peru:cd853f pink:ffc0cb plum:dda0dd powderblue:b0e0e6 purple:800080 rebeccapurple:663399 red:ff0000 rosybrown:bc8f8f royalblue:4169e1 saddlebrown:8b4513 salmon:fa8072 sandybrown:f4a460 seagreen:2e8b57 seashell:fff5ee sienna:a0522d silver:c0c0c0 skyblue:87ceeb slateblue:6a5acd slategray:708090 slategrey:708090 snow:fffafa springgreen:00ff7f steelblue:4682b4 tan:d2b48c teal:008080 thistle:d8bfd8 tomato:ff6347 turquoise:40e0d0 violet:ee82ee wheat:f5deb3 white:ffffff whitesmoke:f5f5f5 yellow:ffff00 yellowgreen:9acd32",hc=new Map(fc.split(" ").map(e=>{const[t,i]=e.split(":");return[t,`#${i}`]})),Ho=e=>Math.round(Math.min(255,Math.max(0,e))).toString(16).padStart(2,"0");function Zi(e){const t=e.trim();if(t.startsWith("#")){const o=t.slice(1).toLowerCase();if(!/^[0-9a-f]+$/.test(o))return null;const a=o.length===3||o.length===4?[...o].map(n=>n+n).join(""):o.length===6||o.length===8?o:null;return a===null?null:a.length===8&&a.endsWith("ff")?`#${a.slice(0,6)}`:`#${a}`}const i=/^(rgba?)\s*\(([^)]*)\)$/i.exec(t);if(i){const o=i[2].trim().split(/\s*[,/]\s*|\s+/).filter(d=>d!=="");if(o.length!==3&&o.length!==4)return null;const a=(d,c)=>{const u=/^([+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)(%?)$/i.exec(d);if(!u)return null;const p=Number(u[1]);return Number.isFinite(p)?u[2]?p/100*c:p:null},n=o.slice(0,3).map(d=>a(d,255)),s=o[3]===void 0?1:a(o[3],1);if(n.some(d=>d===null)||s===null)return null;const r=Math.min(1,Math.max(0,s)),l=`#${n.map(d=>Ho(d)).join("")}`;return r>=1?l:`${l}${Ho(r*255)}`}return/^[a-z]+$/i.test(t)?hc.get(t.toLowerCase())??null:null}const gc=e=>e.replace(/\/\*[\s\S]*?(?:\*\/|$)/g,t=>" ".repeat(t.length));function Ko(e,t,i){const o=/url\s*\([^)]*\)?|#[0-9a-zA-Z]+|rgba?\s*\([^)]*\)|[a-zA-Z_-][a-zA-Z0-9_-]*/gi;for(let a=o.exec(e);a;a=o.exec(e)){if(/^url/i.test(a[0])&&a[0].includes("("))continue;const n=Zi(a[0]);n&&i.push({start:t+a.index,end:t+a.index+a[0].length,hex:n})}}function fn(e,t=0,i=e.length){const o=[];let a=t;for(;a<i;){const n=e.indexOf(";",a),s=n<0||n>i?i:n,r=e.indexOf(":",a);r>=0&&r<s&&o.push({prop:e.slice(a,r).trim().toLowerCase(),start:r+1,end:s}),a=s+1}return o}function hn(e,t){const i=[];if(t==="value")return Ko(e,0,i),i;const o=gc(e),a=[];if(t==="decls")a.push([0,o.length]);else for(let n=o.indexOf("{");n>=0;n=o.indexOf("{",n+1)){const s=o.indexOf("}",n+1);if(a.push([n+1,s<0?o.length:s]),s<0)break;n=s}for(const[n,s]of a)for(const r of fn(o,n,s))mc.has(r.prop)&&Ko(o.slice(r.start,r.end),r.start,i);return i}function gn(e){const t=[],i=e.getElementsByTagName("*");for(let o=0;o<i.length;o++){const a=i[o];for(const s of pn){const r=a.getAttribute(s);r!==null&&t.push({text:r,mode:"value",write:l=>a.setAttribute(s,l)})}const n=a.getAttribute("style");if(n!==null&&t.push({text:n,mode:"decls",write:s=>a.setAttribute("style",s)}),a.localName==="style"&&a.namespaceURI===pc)for(const s of Array.from(a.childNodes))(s.nodeType===3||s.nodeType===4)&&t.push({text:s.nodeValue??"",mode:"sheet",write:r=>{s.nodeValue=r}})}return t}function dm(e){const t=new Map;for(const i of gn(e))for(const o of hn(i.text,i.mode))t.set(o.hex,(t.get(o.hex)??0)+1);return[...t].map(([i,o])=>({hex:i,count:o})).sort((i,o)=>o.count-i.count)}function Si(e){const t=Zi(e);if(!t)throw new Error(`not a colour: ${e.slice(0,40)}`);return t}function cm(e,t,i){const o=Si(t),a=Si(i);let n=0;for(const s of gn(e)){const r=hn(s.text,s.mode).filter(d=>d.hex===o);if(r.length===0)continue;let l=s.text;for(const d of r.reverse())l=l.slice(0,d.start)+a+l.slice(d.end);s.write(l),n+=r.length}return n}const vn="http://www.w3.org/2000/svg",Qo=new Set(["g","path","rect","circle","ellipse","line","polyline","polygon","text","use"]),vc=new Set(["g","svg"]),bc=new Set(["tspan","textPath"]),mt=(e,t)=>e.namespaceURI===vn&&(t===void 0||e.localName===t);function um(e){let t;try{t=new DOMParser().parseFromString(e,"image/svg+xml")}catch{return{ok:!1,reason:"parse"}}if(t.getElementsByTagName("parsererror").length>0)return{ok:!1,reason:"parse"};const i=t.documentElement;return!i||!mt(i,"svg")?{ok:!1,reason:"not-svg"}:{ok:!0,doc:t}}function mm(e){return new XMLSerializer().serializeToString(e)}function $c(e,t){let i=e.documentElement;if(t==="")return i;for(const o of t.split("/")){if(!/^\d{1,6}$/.test(o)||!i)return null;i=i.children[Number(o)]??null}return i}function bn(e,t){const i=[];for(let o=t;o!==e;){const a=o.parentElement;if(!a)return null;i.push(Array.prototype.indexOf.call(a.children,o)),o=a}return i.reverse().join("/")}const Ji=(e,t)=>{const i=$c(e,t);if(!i)throw new Error(`no element at ${t.slice(0,40)}`);return i},$n=e=>Array.from(e.children).filter(t=>mt(t)&&bc.has(t.localName)),yn=e=>Array.from(e.childNodes).filter(t=>t.nodeType===3||t.nodeType===4),yc=e=>e.replace(/[\r\n]+/g,"").replace(/\t/g," ").replace(/ {2,}/g," ");function wc(e){const t=$n(e);if(t.length===0)return[yn(e).map(o=>o.data).join("")];let i="";for(const o of Array.from(e.childNodes))o===t[0]?i+=t[0].textContent??"":(o.nodeType===3||o.nodeType===4)&&o.data.trim()!==""&&(i+=yc(o.data));return[i.trimStart(),...t.slice(1).map(o=>o.textContent??"")]}function pm(e){const t=e.documentElement;return Array.from(e.getElementsByTagNameNS(vn,"text")).map(i=>({path:bn(t,i),text:wc(i).join(`
25
25
  `)}))}function fm(e,t,i){const o=Ji(e,t);if(!mt(o,"text"))throw new Error(`not a <text> at ${t.slice(0,40)}`);const a=i.split(`
26
26
  `),n=$n(o),s=yn(o);if(n.length===0){const r=s.find(l=>l.data.trim()!=="")??s[0]??o.appendChild(e.createTextNode(""));for(const l of s)l!==r&&(l.data="");r.data=a.join(" ");return}for(const r of s)r.data.trim()!==""&&(r.data="");n.forEach((r,l)=>{r.textContent=l<n.length-1?a[l]??"":a.slice(l).join(" ")})}function wn(e,t){const i=e.replace(/\/\*[\s\S]*?(?:\*\/|$)/g,a=>" ".repeat(a.length)),o=fn(i).filter(a=>a.prop===t).at(-1);return o?{start:o.start,end:o.end}:null}function Yo(e,t){const i=e.getAttribute("style"),o=i!==null?wn(i,t):null,a=o?i.slice(o.start,o.end).replace(/!\s*important\s*$/i,""):e.getAttribute(t);if(a===null)return;const n=a.trim();return Zi(n)??n}function hm(e){const t=e.documentElement,i=[],o=new Map,a=(n,s)=>{for(const r of Array.from(n.children)){if(!mt(r))continue;const l=r.localName;if(Qo.has(l)){const d=(o.get(l)??0)+1;o.set(l,d);const c=r.getAttribute("id")?.trim(),u=Array.from(r.children).find(g=>mt(g,"title"))?.textContent?.trim(),p=c||u||"",h=Yo(r,"fill"),b=Yo(r,"stroke");i.push({path:bn(t,r),tag:l,label:p||`${l} ${d}`,named:p!=="",index:d,depth:s,...h!==void 0?{fill:h}:{},...b!==void 0?{stroke:b}:{},hidden:r.getAttribute("display")?.trim()==="none"})}vc.has(l)&&a(r,Qo.has(l)?s+1:s)}};return a(t,0),i}function gm(e,t,i){const o=Ji(e,t);for(const a of["fill","stroke"]){const n=i[a];if(n===void 0)continue;const s=n.trim().toLowerCase()==="none"?"none":Si(n),r=o.getAttribute("style"),l=r!==null?wn(r,a):null;if(r===null||!l){o.setAttribute(a,s);continue}const d=r.slice(l.start,l.end),c=/^\s*/.exec(d)[0],u=/\s*(?:!\s*important\s*)?$/i.exec(d)[0];o.setAttribute("style",r.slice(0,l.start)+c+s+u+r.slice(l.end))}}function vm(e,t,i){const o=Ji(e,t);i?o.setAttribute("display","none"):o.removeAttribute("display")}const kc={a:1,an:1,one:1,un:1,uno:1,two:2,due:2,three:3,tre:3,four:4,quattro:4,five:5,cinque:5},Sc=String.raw`(\d{1,4}(?:[.,]\d)?|an?|one|uno?|two|due|three|tre|four|quattro|five|cinque)`,kn=String.raw`(?:minutes?|mins?|minut[oi])`,Sn=String.raw`(?:seconds?|secs?|second[oi]|s)`,Ue=String.raw`a-zà-öø-ÿ`,xc=new RegExp(String.raw`(?<![${Ue}\d])(?:half\s+an?|mezzo)[\s-]*${kn}(?![${Ue}])`,"giu"),Ac=new RegExp(String.raw`(?<![${Ue}\d])${Sc}[\s-]*${kn}(?![${Ue}])(?:\s*(?:,|and|e)?\s*(\d{1,3})[\s-]*${Sn}(?![${Ue}]))?`,"giu"),Cc=new RegExp(String.raw`(?<![${Ue}\d.,])(\d{1,4})[\s-]*${Sn}(?![${Ue}])`,"giu"),Tc=e=>kc[e.toLowerCase()]??Number(e.replace(",","."));function bm(e){if(!e)return null;let t=e;const i=[],o=(n,s)=>{t=t.replace(n,(...r)=>{const l=r.slice(0,-2);return i.push(s(l))," ".repeat(String(r[0]).length)})};o(xc,()=>30),o(Ac,n=>Tc(n[1])*60+(n[2]?Number(n[2]):0)),o(Cc,n=>Number(n[1]));const a=new Set(i.map(n=>Math.round(n)).filter(n=>n>=1&&n<=600));return a.size===1?[...a][0]:null}const gt=["goal","message","durationSec","assets","linkedCodebases","notes","formats","variants"],ei=z(gt),zc=5,xn=1e4,An=m().min(1).max(1024).regex(/^assets\//),Cn=k(Ci).max(20),Tn=k(m().regex(Je)).max(100).refine(e=>new Set(e).size===e.length,"issue.duplicateFormats"),ti=y({goal:m().max(Tt),message:m().max(Tt),notes:m().max(Tt),durationSec:v().int().min(1).max(600).nullable(),assets:k(An).max(200),linkedCodebases:Cn,formats:Tn,variants:v().int().min(1).max(zc)});ti.extend({goal:m().trim().min(1).max(Tt),formats:Tn.refine(e=>e.length>0,"issue.noFormats")}).partial().extend({reclaim:k(ei).max(gt.length).optional()}).strict().refine(e=>Object.keys(e).some(t=>t!=="reclaim"),"issue.emptyFill");const Ic=y({codebases:Cn,assets:k(An).max(200)}).strict();y({clientId:m().min(1).max(100),text:m().max(xn),context:Ic,form:ti,userEdited:k(ei).max(gt.length),baseRevision:v().int().min(0),mode:z(["live","queued"]).optional()}).strict();y({form:ti,userEdited:k(ei).max(gt.length),baseRevision:v().int().min(0)}).strict();y({form:ti,userEdited:k(ei).max(gt.length)}).strict();y({clientId:m().min(1).max(100),text:m().max(xn),at:Z(),context:y({codebases:k(m()),assets:k(m())})});y({id:m().min(1).max(100),group:B().optional()}).strict();function ct(e){const t=/^(?:(\d{1,3}):)?(\d{1,3}):(\d{2})(?:\.(\d))?$/.exec(e.trim());if(!t)return null;const i=Number(t[1]??0)*3600+Number(t[2])*60+Number(t[3])+(t[4]?Number(t[4])/10:0);return Number.isFinite(i)?i:null}const zn=/^\[([\d:.]+)[–-]([\d:.]+)\]\s*(.*)$/,Fc=e=>e.length>=2&&e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e;function Lc(e){const t=[...e.matchAll(/"([^"]*)"/g)].map(i=>i[1].trim()).filter(Boolean);return t.length?t:e.trim()?[e.trim()]:[]}function Nc(e){const t=new Map;let i=null;for(const o of e.split(/\r?\n/)){const a=/^##\s+(.+?)\s*$/.exec(o);if(a){i=[],t.set(a[1].toLowerCase(),i);continue}i?.push(o)}return t}function Xo(e){const t=[];for(const i of e){const o=/^-\s+(.*)$/.exec(i),a=o?zn.exec(o[1]):null;if(!a)continue;const n=ct(a[1]),s=ct(a[2]);n!==null&&s!==null&&t.push({from:n,to:s,text:a[3].trim()})}return t}function $m(e){const t=Nc(e),i=t.get("timeline");if(!i)return null;const o=[];for(const s of i){const r=/^-\s+(.*)$/.exec(s);if(r){const g=zn.exec(r[1]),S=g?ct(g[1]):null,L=g?ct(g[2]):null;g&&S!==null&&L!==null&&o.push({from:S,to:L,onScreen:g[3].trim(),onScreenText:[],frame:null,speech:[]});continue}const l=/^\s+-\s+(.*)$/.exec(s),d=o.at(-1);if(!l||!d)continue;const c=l[1],u=/^On-screen text:\s*(.*)$/i.exec(c);if(u){d.onScreenText.push(...Lc(u[1]));continue}const p=/^Frame:\s*(.*)$/i.exec(c);if(p){d.frame=p[1].trim()||null;continue}const h=/^\[([\d:.]+)\]\s*(.*)$/.exec(c),b=h?ct(h[1]):null;h&&b!==null&&d.speech.push({at:b,text:Fc(h[2].trim())})}const a=(t.get("summary")??[]).map(s=>s.trim()).filter(s=>s&&s!=="-").join(`
27
- `),n=(t.get("tags")??[]).join(",").split(",").map(s=>s.trim()).filter(s=>s&&s!=="-");return{summary:a,timeline:o,usableMoments:Xo(t.get("usable moments")??[]).map(s=>({from:s.from,to:s.to,why:s.text})),transcript:Xo(t.get("transcript")??[]),tags:n}}const Rc="motion-studio/subtitles@1",Gt={cues:2e3,words:60,text:200},Ht=v().int().min(0),Pc=y({start:Ht,end:Ht,text:m().min(1).max(100)}).strict().refine(e=>e.end>=e.start,{message:"word end before its start"}),Oc=m().min(1).max(Gt.text).refine(e=>e.split(`
27
+ `),n=(t.get("tags")??[]).join(",").split(",").map(s=>s.trim()).filter(s=>s&&s!=="-");return{summary:a,timeline:o,usableMoments:Xo(t.get("usable moments")??[]).map(s=>({from:s.from,to:s.to,why:s.text})),transcript:Xo(t.get("transcript")??[]),tags:n}}const Pc="motion-studio/subtitles@1",Gt={cues:2e3,words:60,text:200},Ht=v().int().min(0),Rc=y({start:Ht,end:Ht,text:m().min(1).max(100)}).strict().refine(e=>e.end>=e.start,{message:"word end before its start"}),Oc=m().min(1).max(Gt.text).refine(e=>e.split(`
28
28
  `).length<=2,{message:"at most two lines"}).refine(e=>e.split(`
29
- `).every(t=>t.trim()!==""),{message:"a line of the text is empty"}),Mc=y({id:m().regex(/^[a-z0-9][a-z0-9-]{0,31}$/),start:Ht,end:Ht,text:Oc,words:k(Pc).max(Gt.words).optional(),edited:E(!0).optional(),source:y({text:m().min(1).max(Gt.text)}).strict().optional()}).strict().refine(e=>e.end>e.start,{message:"cue end must be after its start",path:["end"]});y({$schema:E(Rc),lang:$e,origin:z(["speech","translation"]),sourceLang:$e.optional(),transcript:Jo.nullable(),detected:m().nullable(),timing:y({version:v().int().min(1),format:m(),fingerprint:m().regex(/^[0-9a-f]{64}$/),locale:$e.optional()}).strict(),cues:k(Mc).max(Gt.cues)}).strict().superRefine((e,t)=>{e.origin==="translation"!=(e.sourceLang!==void 0)&&t.addIssue({code:"custom",path:["sourceLang"],message:"sourceLang is required for a translation, and only then"});const i=new Set;e.cues.forEach((o,a)=>{i.has(o.id)&&t.addIssue({code:"custom",path:["cues",a,"id"],message:"duplicate cue id"}),i.add(o.id),a>0&&o.start<e.cues[a-1].start&&t.addIssue({code:"custom",path:["cues",a,"start"],message:"cues must be sorted by start"})})});const Ec={en:"eng",it:"ita",fr:"fra",de:"deu",es:"spa",pt:"por",nl:"nld",sv:"swe",da:"dan",nb:"nob",fi:"fin",pl:"pol",cs:"ces",hu:"hun",ro:"ron",ca:"cat",el:"ell",ru:"rus",uk:"ukr",tr:"tur",id:"ind",vi:"vie","zh-Hans":"zho","zh-Hant":"zho",ja:"jpn",ko:"kor",hi:"hin",th:"tha"};({...Object.fromEntries(Pi.map(e=>[e.tag.toLowerCase(),e.tag])),...Object.fromEntries(Object.entries(Ec).filter(([e])=>e!=="zh-Hant").map(([e,t])=>[t,e]))});const eo={maxLines:2,maxLineChars:42,cjkLineChars:16,minMs:1e3,maxMs:7e3,maxCps:17,pauseMs:500},qc=["zh-Hans","zh-Hant","ja","ko","th"],Dc=["zh-Hans","zh-Hant","ja","th"],Uc=e=>qc.includes(e),to=e=>Dc.includes(e),_c=(e,t)=>Uc(e)?t.cjkLineChars:t.maxLineChars;function Bc(e,t,i){const o=e.replace(/\s+/g," ").trim();if(o==="")return[];if(to(t))return Array.from(o).map(n=>({t:n,glued:!0}));const a=[];for(const n of o.split(" ")){const s=Array.from(n);for(let r=0;r<s.length;r+=i)a.push({t:s.slice(r,r+i).join(""),glued:r>0})}return a}const Wc=e=>to(e)?"":" ",Ae=e=>Array.from(e).length;function Ke(e,t){return e.reduce((i,o,a)=>i+(a>0&&!o.glued?t:"")+o.t,"")}function jc(e,t,i=eo){const o=_c(t,i),a=Bc(e,t,o);if(a.length===0)return[];const n=Wc(t);if(to(t)){const l=Math.ceil(a.length/o),d=Math.ceil(a.length/l),c=[];for(let u=0;u<a.length;u+=d)c.push(Ke(a.slice(u,u+d),n));return c}const s=[];let r=[];for(const l of a){const d=[...r,l];r.length>0&&Ae(Ke(d,n))>o?(s.push(r),r=[{...l,glued:!1}]):r=d}if(s.push(r),s.length===1)return[Ke(s[0],n)];if(s.length===2){let l=null,d=1/0;for(let c=1;c<a.length;c++){const u=Ke(a.slice(0,c),n),p=Ke([{...a[c],glued:!1},...a.slice(c+1)],n);if(Ae(u)>o||Ae(p)>o)continue;const h=Math.abs(Ae(u)-Ae(p));h<d&&(d=h,l=[u,p])}if(l)return l}return s.map(l=>Ke(l,n)).filter(l=>l.trim()!=="")}function ym(e,t,i,o=eo){const a=[],n=e.end-e.start,s=e.text.replace(/\s*\n\s*/g," ");return jc(s,i,o).length>o.maxLines&&a.push("tooLong"),n>0&&Ae(e.text.replace(/\n/g,""))/(n/1e3)>o.maxCps&&a.push("tooFast"),n<o.minMs&&a.push("tooShort"),n>o.maxMs&&a.push("tooLongOnScreen"),t&&t.start<e.end&&a.push("overlap"),a}const io=e=>e.toLowerCase().replace(/[^\p{L}\p{N}]/gu,"");function Vc(e){const t=[],i=[];return e.forEach((o,a)=>{const n=t.length;if(o.words&&o.words.length>0)t.push(...o.words);else{const s=o.text.split(/\s+/).filter(d=>d!==""),r=s.reduce((d,c)=>d+Ae(c),0);let l=0;for(const d of s){const c=o.start+Math.round((o.end-o.start)*l/r);l+=Ae(d),t.push({start:c,end:o.start+Math.round((o.end-o.start)*l/r),text:d})}}for(let s=n;s<t.length;s++)i.push(a)}),{words:t,cueOf:i}}const Gc=e=>Math.max(1e4,2*(e.end-e.start)),mi=e=>Ae(e)<=2;function Hc(e,t,i,o,a=eo){const n=i.words,s=t.map(io).filter(h=>h!=="");if(s.length===0)return null;const r=s.length*2+4,l=Gc(e);let d=null;for(let h=0;h<s.length;h++)for(let b=0;b<n.length;b++){if(o[b]!==s[h])continue;let g=1,S=mi(s[h])?0:1,L=b,A=b,$=h,I=h;const w=Math.min(n.length,b+r);for(let N=h+1,x=b+1;N<s.length;N++){let V=x;for(;V<w&&o[V]!==s[N];)V++;V<w&&(g++,mi(s[N])||S++,A=V,I=N,x=V+1)}const X=Math.max(0,b-r);for(let N=h-1,x=b-1;N>=0;N--){let V=x;for(;V>=X&&o[V]!==s[N];)V--;V>=X&&(g++,mi(s[N])||S++,L=V,$=N,x=V-1)}if(g/s.length<.6||S===0)continue;const j=Math.abs(n[L].start-e.start);j>l||(!d||g>d.count||g===d.count&&j<d.distance)&&(d={count:g,distance:j,first:L,last:A,lead:$,trail:s.length-1-I})}if(!d)return null;let{first:c,last:u}=d;const p=(h,b)=>i.cueOf[h]===i.cueOf[b];for(let h=d.lead;h>0&&c>0&&p(c-1,c)&&n[c].start-n[c-1].end<a.pauseMs;h--)c--;for(let h=d.trail;h>0&&u+1<n.length&&p(u,u+1)&&n[u+1].start-n[u].end<a.pauseMs;h--)u++;return{start:n[c].start,end:Math.max(n[u].end,n[c].start+1)}}function wm(e,t){const i=Vc(t),o=i.words.map(a=>io(a.text));return e.map(a=>{const n=a.words&&a.words.length>0?a.words.map(d=>d.text):a.text.split(/\s+/),s=Hc(a,n,i,o);if(!s)return a;const r=s.start-a.start,l={...a,start:s.start,end:s.end};return a.words&&(l.words=a.words.map(d=>({...d,start:Math.max(0,d.start+r),end:Math.max(0,d.end+r)}))),l})}function km(e,t){const i=[];for(const o of e.cues){if(!o.source)continue;const a=In(o,t.cues);(!a||a.text!==o.source.text)&&i.push(o.id)}return i}const At=e=>e.split(/\s+/).map(io).filter(Boolean).join(" ");function Kc(e,t){const i=e.length,o=t.length,a=o+1,n=new Uint32Array((i+1)*a),s=new Uint32Array((i+1)*a);for(let p=1;p<=i;p++)for(let h=1;h<=o;h++)n[p*a+h]=e[p-1]===t[h-1]?n[(p-1)*a+h-1]+1:Math.max(n[(p-1)*a+h],n[p*a+h-1]);for(let p=i-1;p>=0;p--)for(let h=o-1;h>=0;h--)s[p*a+h]=e[p]===t[h]?s[(p+1)*a+h+1]+1:Math.max(s[(p+1)*a+h],s[p*a+h+1]);const r=n[i*a+o],l=[];for(let p=0;p<i;p++)for(let h=0;h<o;h++)e[p]===t[h]&&n[p*a+h]+1+s[(p+1)*a+h+1]===r&&l.push([p,h]);const d=new Map,c=new Map;for(const[p,h]of l)d.set(p,(d.get(p)??0)+1),c.set(h,(c.get(h)??0)+1);const u=l.filter(([p,h])=>d.get(p)===1&&c.get(h)===1);return u.filter(([p,h])=>u.every(([b,g])=>b===p&&g===h||b<p&&g<h||b>p&&g>h))}function In(e,t){let i=null,o=0;for(const a of t){const n=Math.min(e.end,a.end)-Math.max(e.start,a.start);n>o&&(o=n,i=a)}return i}function Qc(e,t,i){const o=new Map;if(!i){const a=new Set;for(const r of e){const l=r.source?t.find(d=>!a.has(d.id)&&d.start===r.start&&d.end===r.end&&At(d.text)===At(r.source.text)):void 0;l&&(o.set(r.id,l),a.add(l.id))}const n=[...e].filter(r=>r.source&&!o.has(r.id)).sort((r,l)=>r.start-l.start||r.end-l.end),s=t.filter(r=>!a.has(r.id));for(const[r,l]of Kc(n.map(d=>At(d.source.text)),s.map(d=>At(d.text))))o.set(n[r].id,s[l])}return new Map(e.map(a=>[a.id,o.get(a.id)??In(a,t)]))}function Sm(e,t,i){const o=new Set([...Qc(e,t,i).values()].map(a=>a?.id));return t.filter(a=>!o.has(a.id))}function xm(e,t,i){return e.timing.locale!==void 0?e.timing.locale:t.extra.includes(e.lang)&&(i?.(e.lang)??!0)?e.lang:t.primary}export{ku as $,Pu as A,$m as B,hu as C,et as D,_u as E,Mu as F,pt as G,ru as H,lu as I,su as J,uu as K,xi as L,gs as M,du as N,bt as O,pu as P,Bu as Q,yu as R,Pi as S,Zc as T,rr as U,Oi as V,co as W,ka as X,Sa as Y,ur as Z,xu as _,mu as a,ha as a$,tu as a0,au as a1,ou as a2,Jn as a3,Je as a4,wa as a5,D as a6,Du as a7,nu as a8,Md as a9,om as aA,gu as aB,Ou as aC,Hi as aD,tm as aE,Ju as aF,em as aG,tc as aH,im as aI,um as aJ,hm as aK,bn as aL,Ct as aM,am as aN,pm as aO,dm as aP,mm as aQ,Zi as aR,vm as aS,fm as aT,gm as aU,cm as aV,va as aW,Be as aX,Dd as aY,nn as aZ,on as a_,Gu as aa,Qu as ab,Xu as ac,Ku as ad,Hu as ae,Yu as af,Cu as ag,hr as ah,Au as ai,fr as aj,Id as ak,Zu as al,xm as am,zu as an,Tu as ao,sm as ap,rm as aq,xa as ar,Mt as as,Uu as at,vs as au,bs as av,Eu as aw,Vu as ax,Su as ay,bu as az,Rt as b,Gi as b0,lm as b1,Iu as b2,gt as b3,zc as b4,Jc as b5,cs as b6,ms as b7,eu as b8,iu as b9,us as ba,bm as bb,da as bc,Tt as bd,as as be,Zn as bf,na as bg,ps as bh,sa as bi,oa as bj,Gt as bk,ym as bl,eo as bm,jc as bn,wm as bo,$u as bp,km as bq,Sm as br,In as bs,Qc as bt,es as c,Aa as d,Wu as e,os as f,cu as g,fu as h,wu as i,ju as j,pe as k,nm as l,Ee as m,uc as n,ma as o,_e as p,ys as q,Xc as r,vu as s,Fu as t,Ru as u,Lu as v,Nu as w,qu as x,mr as y,la as z};
29
+ `).every(t=>t.trim()!==""),{message:"a line of the text is empty"}),Mc=y({id:m().regex(/^[a-z0-9][a-z0-9-]{0,31}$/),start:Ht,end:Ht,text:Oc,words:k(Rc).max(Gt.words).optional(),edited:E(!0).optional(),source:y({text:m().min(1).max(Gt.text)}).strict().optional()}).strict().refine(e=>e.end>e.start,{message:"cue end must be after its start",path:["end"]});y({$schema:E(Pc),lang:$e,origin:z(["speech","translation"]),sourceLang:$e.optional(),transcript:Jo.nullable(),detected:m().nullable(),timing:y({version:v().int().min(1),format:m(),fingerprint:m().regex(/^[0-9a-f]{64}$/),locale:$e.optional()}).strict(),cues:k(Mc).max(Gt.cues)}).strict().superRefine((e,t)=>{e.origin==="translation"!=(e.sourceLang!==void 0)&&t.addIssue({code:"custom",path:["sourceLang"],message:"sourceLang is required for a translation, and only then"});const i=new Set;e.cues.forEach((o,a)=>{i.has(o.id)&&t.addIssue({code:"custom",path:["cues",a,"id"],message:"duplicate cue id"}),i.add(o.id),a>0&&o.start<e.cues[a-1].start&&t.addIssue({code:"custom",path:["cues",a,"start"],message:"cues must be sorted by start"})})});const Ec={en:"eng",it:"ita",fr:"fra",de:"deu",es:"spa",pt:"por",nl:"nld",sv:"swe",da:"dan",nb:"nob",fi:"fin",pl:"pol",cs:"ces",hu:"hun",ro:"ron",ca:"cat",el:"ell",ru:"rus",uk:"ukr",tr:"tur",id:"ind",vi:"vie","zh-Hans":"zho","zh-Hant":"zho",ja:"jpn",ko:"kor",hi:"hin",th:"tha"};({...Object.fromEntries(Ri.map(e=>[e.tag.toLowerCase(),e.tag])),...Object.fromEntries(Object.entries(Ec).filter(([e])=>e!=="zh-Hant").map(([e,t])=>[t,e]))});const eo={maxLines:2,maxLineChars:42,cjkLineChars:16,minMs:1e3,maxMs:7e3,maxCps:17,pauseMs:500},qc=["zh-Hans","zh-Hant","ja","ko","th"],Dc=["zh-Hans","zh-Hant","ja","th"],Uc=e=>qc.includes(e),to=e=>Dc.includes(e),_c=(e,t)=>Uc(e)?t.cjkLineChars:t.maxLineChars;function Bc(e,t,i){const o=e.replace(/\s+/g," ").trim();if(o==="")return[];if(to(t))return Array.from(o).map(n=>({t:n,glued:!0}));const a=[];for(const n of o.split(" ")){const s=Array.from(n);for(let r=0;r<s.length;r+=i)a.push({t:s.slice(r,r+i).join(""),glued:r>0})}return a}const Wc=e=>to(e)?"":" ",Ae=e=>Array.from(e).length;function Ke(e,t){return e.reduce((i,o,a)=>i+(a>0&&!o.glued?t:"")+o.t,"")}function jc(e,t,i=eo){const o=_c(t,i),a=Bc(e,t,o);if(a.length===0)return[];const n=Wc(t);if(to(t)){const l=Math.ceil(a.length/o),d=Math.ceil(a.length/l),c=[];for(let u=0;u<a.length;u+=d)c.push(Ke(a.slice(u,u+d),n));return c}const s=[];let r=[];for(const l of a){const d=[...r,l];r.length>0&&Ae(Ke(d,n))>o?(s.push(r),r=[{...l,glued:!1}]):r=d}if(s.push(r),s.length===1)return[Ke(s[0],n)];if(s.length===2){let l=null,d=1/0;for(let c=1;c<a.length;c++){const u=Ke(a.slice(0,c),n),p=Ke([{...a[c],glued:!1},...a.slice(c+1)],n);if(Ae(u)>o||Ae(p)>o)continue;const h=Math.abs(Ae(u)-Ae(p));h<d&&(d=h,l=[u,p])}if(l)return l}return s.map(l=>Ke(l,n)).filter(l=>l.trim()!=="")}function ym(e,t,i,o=eo){const a=[],n=e.end-e.start,s=e.text.replace(/\s*\n\s*/g," ");return jc(s,i,o).length>o.maxLines&&a.push("tooLong"),n>0&&Ae(e.text.replace(/\n/g,""))/(n/1e3)>o.maxCps&&a.push("tooFast"),n<o.minMs&&a.push("tooShort"),n>o.maxMs&&a.push("tooLongOnScreen"),t&&t.start<e.end&&a.push("overlap"),a}const io=e=>e.toLowerCase().replace(/[^\p{L}\p{N}]/gu,"");function Vc(e){const t=[],i=[];return e.forEach((o,a)=>{const n=t.length;if(o.words&&o.words.length>0)t.push(...o.words);else{const s=o.text.split(/\s+/).filter(d=>d!==""),r=s.reduce((d,c)=>d+Ae(c),0);let l=0;for(const d of s){const c=o.start+Math.round((o.end-o.start)*l/r);l+=Ae(d),t.push({start:c,end:o.start+Math.round((o.end-o.start)*l/r),text:d})}}for(let s=n;s<t.length;s++)i.push(a)}),{words:t,cueOf:i}}const Gc=e=>Math.max(1e4,2*(e.end-e.start)),mi=e=>Ae(e)<=2;function Hc(e,t,i,o,a=eo){const n=i.words,s=t.map(io).filter(h=>h!=="");if(s.length===0)return null;const r=s.length*2+4,l=Gc(e);let d=null;for(let h=0;h<s.length;h++)for(let b=0;b<n.length;b++){if(o[b]!==s[h])continue;let g=1,S=mi(s[h])?0:1,L=b,A=b,$=h,I=h;const w=Math.min(n.length,b+r);for(let N=h+1,x=b+1;N<s.length;N++){let V=x;for(;V<w&&o[V]!==s[N];)V++;V<w&&(g++,mi(s[N])||S++,A=V,I=N,x=V+1)}const X=Math.max(0,b-r);for(let N=h-1,x=b-1;N>=0;N--){let V=x;for(;V>=X&&o[V]!==s[N];)V--;V>=X&&(g++,mi(s[N])||S++,L=V,$=N,x=V-1)}if(g/s.length<.6||S===0)continue;const j=Math.abs(n[L].start-e.start);j>l||(!d||g>d.count||g===d.count&&j<d.distance)&&(d={count:g,distance:j,first:L,last:A,lead:$,trail:s.length-1-I})}if(!d)return null;let{first:c,last:u}=d;const p=(h,b)=>i.cueOf[h]===i.cueOf[b];for(let h=d.lead;h>0&&c>0&&p(c-1,c)&&n[c].start-n[c-1].end<a.pauseMs;h--)c--;for(let h=d.trail;h>0&&u+1<n.length&&p(u,u+1)&&n[u+1].start-n[u].end<a.pauseMs;h--)u++;return{start:n[c].start,end:Math.max(n[u].end,n[c].start+1)}}function wm(e,t){const i=Vc(t),o=i.words.map(a=>io(a.text));return e.map(a=>{const n=a.words&&a.words.length>0?a.words.map(d=>d.text):a.text.split(/\s+/),s=Hc(a,n,i,o);if(!s)return a;const r=s.start-a.start,l={...a,start:s.start,end:s.end};return a.words&&(l.words=a.words.map(d=>({...d,start:Math.max(0,d.start+r),end:Math.max(0,d.end+r)}))),l})}function km(e,t){const i=[];for(const o of e.cues){if(!o.source)continue;const a=In(o,t.cues);(!a||a.text!==o.source.text)&&i.push(o.id)}return i}const At=e=>e.split(/\s+/).map(io).filter(Boolean).join(" ");function Kc(e,t){const i=e.length,o=t.length,a=o+1,n=new Uint32Array((i+1)*a),s=new Uint32Array((i+1)*a);for(let p=1;p<=i;p++)for(let h=1;h<=o;h++)n[p*a+h]=e[p-1]===t[h-1]?n[(p-1)*a+h-1]+1:Math.max(n[(p-1)*a+h],n[p*a+h-1]);for(let p=i-1;p>=0;p--)for(let h=o-1;h>=0;h--)s[p*a+h]=e[p]===t[h]?s[(p+1)*a+h+1]+1:Math.max(s[(p+1)*a+h],s[p*a+h+1]);const r=n[i*a+o],l=[];for(let p=0;p<i;p++)for(let h=0;h<o;h++)e[p]===t[h]&&n[p*a+h]+1+s[(p+1)*a+h+1]===r&&l.push([p,h]);const d=new Map,c=new Map;for(const[p,h]of l)d.set(p,(d.get(p)??0)+1),c.set(h,(c.get(h)??0)+1);const u=l.filter(([p,h])=>d.get(p)===1&&c.get(h)===1);return u.filter(([p,h])=>u.every(([b,g])=>b===p&&g===h||b<p&&g<h||b>p&&g>h))}function In(e,t){let i=null,o=0;for(const a of t){const n=Math.min(e.end,a.end)-Math.max(e.start,a.start);n>o&&(o=n,i=a)}return i}function Qc(e,t,i){const o=new Map;if(!i){const a=new Set;for(const r of e){const l=r.source?t.find(d=>!a.has(d.id)&&d.start===r.start&&d.end===r.end&&At(d.text)===At(r.source.text)):void 0;l&&(o.set(r.id,l),a.add(l.id))}const n=[...e].filter(r=>r.source&&!o.has(r.id)).sort((r,l)=>r.start-l.start||r.end-l.end),s=t.filter(r=>!a.has(r.id));for(const[r,l]of Kc(n.map(d=>At(d.source.text)),s.map(d=>At(d.text))))o.set(n[r].id,s[l])}return new Map(e.map(a=>[a.id,o.get(a.id)??In(a,t)]))}function Sm(e,t,i){const o=new Set([...Qc(e,t,i).values()].map(a=>a?.id));return t.filter(a=>!o.has(a.id))}function xm(e,t,i){return e.timing.locale!==void 0?e.timing.locale:t.extra.includes(e.lang)&&(i?.(e.lang)??!0)?e.lang:t.primary}export{ku as $,Ru as A,$m as B,hu as C,et as D,_u as E,Mu as F,pt as G,ru as H,lu as I,su as J,uu as K,xi as L,gs as M,du as N,bt as O,pu as P,Bu as Q,yu as R,Ri as S,Zc as T,rr as U,Oi as V,co as W,ka as X,Sa as Y,ur as Z,xu as _,mu as a,ha as a$,tu as a0,au as a1,ou as a2,Jn as a3,Je as a4,wa as a5,D as a6,Du as a7,nu as a8,Md as a9,om as aA,gu as aB,Ou as aC,Hi as aD,tm as aE,Ju as aF,em as aG,tc as aH,im as aI,um as aJ,hm as aK,bn as aL,Ct as aM,am as aN,pm as aO,dm as aP,mm as aQ,Zi as aR,vm as aS,fm as aT,gm as aU,cm as aV,va as aW,Be as aX,Dd as aY,nn as aZ,on as a_,Gu as aa,Qu as ab,Xu as ac,Ku as ad,Hu as ae,Yu as af,Cu as ag,hr as ah,Au as ai,fr as aj,Id as ak,Zu as al,xm as am,zu as an,Tu as ao,sm as ap,rm as aq,xa as ar,Mt as as,Uu as at,vs as au,bs as av,Eu as aw,Vu as ax,Su as ay,bu as az,Pt as b,Gi as b0,lm as b1,Iu as b2,gt as b3,zc as b4,Jc as b5,cs as b6,ms as b7,eu as b8,iu as b9,us as ba,bm as bb,da as bc,Tt as bd,as as be,Zn as bf,na as bg,ps as bh,sa as bi,oa as bj,Gt as bk,ym as bl,eo as bm,jc as bn,wm as bo,$u as bp,km as bq,Sm as br,In as bs,Qc as bt,es as c,Aa as d,Wu as e,os as f,cu as g,fu as h,wu as i,ju as j,pe as k,nm as l,Ee as m,uc as n,ma as o,_e as p,ys as q,Xc as r,vu as s,Fu as t,Pu as u,Lu as v,Nu as w,qu as x,mr as y,la as z};