1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8217],{68217:e=>{e.exports=JSON.parse('{"nav":{"dashboard":"Dashboard","posts":"Posts","pages":"Pages","review":"Review","media":"Media","comments":"Comments","subscribers":"Subscribers","redirects":"Path rules","settings":"Settings","users":"Users","audit":"Audit","public":"Public site","brand":"MyNix Admin","menu":"Admin menu","more":"More","moreMenu":"More admin links","closeMenu":"Close menu","lists":"Lists","categories":"Categories","tags":"Tags"},"profile":{"account":"Account","logOut":"Log out","language":"Admin language","languageHelp":"Staff UI language only â does not change public site locales.","signingOut":"Signing outâ¦"},"login":{"title":"Admin sign-in","metaTitle":"Admin login","email":"Email / username","password":"Password","continue":"Continue","totp":"Authentication code","totpHint":"Enter the 6-digit code from your authenticator app.","submitTotp":"Verify","forgot":"Forgot password?","failed":"Login failed","network":"Network error","invalidCode":"Invalid code","setupBanner":"No owner account yet â complete first-run setup.","setupLink":"Open setup","setupTitle":"No owner account yet","setupBodyBefore":"Complete","setupBodyLink":"first-run setup","setupBodyAfter":"to create the site owner and basic settings.","passwordUpdated":"Password updated. Sign in with your new password.","loading":"Loadingâ¦","rateLimited":"Too many attempts. Try again later.","invali
1dCredentials":"Invalid email or password","accountDisabled":"This account is disabled","challengeRequired":"Sign-in challenge expired. Enter email and password again.","totpError":"Two-factor authentication is not available. Contact an owner.","viewSite":"â Public site"},"forgot":{"title":"Forgot password","metaTitle":"Forgot password","body":"Enter the admin email address. If it matches an account, we send a time-limited reset link.","email":"Email","submit":"Send reset link","back":"Back to login","network":"Network error","smtpMissing":"Mail is not configured (SMTP_HOST). Contact the operator.","mailFailed":"Could not send email. Check SMTP settings and try again.","serviceUnavailable":"Something went wrong while processing your request. Please try again later.","rateLimited":"Too many attempts. Try again later.","genericError":"Something went wrong. Please try again later.","successDefault":"If an account exists for that email, a recovery link has been sent.","invalidEmail":"Enter a valid email address"},"setPassword":{"title":"Set new password","metaTitle":"Set password","password":"New password","confirm":"Confirm password","submit":"Update password","totp":"Authenticator code","inspecting":"Checking recovery linkâ¦","invalidLink":"This recovery link is invalid or has expired.","mismatch":"Passwords do not match","weak":"Password must be at least 10 characters","totpInvalid":"Invalid authenticator code","failed":"Could not set password","network":"Network error","forAccount":"Account: {email}"},"common":{"save":"Save","saving":"Savingâ¦","cancel":"Cancel","delete":"Delete","edit":"Edit","create":"Create","loading":"Loadingâ¦","error":"Something went wrong","retry":"Retry","back":"Back","search":"Search","filter":"Filter","actions":"Actions","confirm":"Confirm","close":"Close","yes":"Yes","no":"No","none":"None","enabled":"Enabled","disabled":"Disabled","default":"Default","add":"Add","remove":"Remove","copy":"Copy","copied":"Copied","unavailable":"Unavailable","discard":"Discard","publish":"Publish","unlisted":"Unlisted","draft":"Draft","previous":"Previous","next":"Next","pageOf":"Page {page} of {total}","total":"Total","empty":"Nothing here yet.","open":"Open","view":"View","upload":"Upload","export":"Export","import":"Import","refresh":"Refresh","all":"All","clear":"Clear","apply":"Apply","status":"Status","role":"Role","email":"Email","name":"Name","path":"Path","title":"Title","slug":"Slug","locale":"Locale","date":"Date","type":"Type","from":"From","to":"To","hits":"Hits","unsaved":"Unsaved","unsavedChanges":"Unsaved changes","leaveSave":"Save","leaveDiscard":"Discard","leaveCancel":"Cancel","leaveBody":"You have unsaved changes. Save them, discard them, or cancel to keep editing.","dbUnavailable":"Database unavailable","dbUnavailableBody":"The admin UI cannot reach the database. Check DATABASE_URL or SQLITE_PATH and that the database is running.","network":"Network error","forbidden":"You do not have permission for this action.","notFound":"Not found","pageSlash":"Page {page} / {totalPages}","rangeOfTotal":"({start}â{end} of {total})","prevShort":"â Prev","prevLower":"â prev","nextLower":"next â","pageOfRows":"Page {page} / {totalPages} \xb7 {total} rows","allLower":"all","swipeHint":"swipe â"},"dbUnavailable":{"title":"Admin temporarily unavailable","body":"The database connection failed, so staff sessions cannot be verified right now. The public site may still work in a degraded mode.","tip":"Tip: check the database (PostgreSQL, MySQL, SQLite, or Neon) and try again shortly.","retry":"Retry admin","publicSite":"Public site"},"dashboard":{"title":"Dashboard","descriptionEditor":"Overview of content and site ops. Each card shows a live count or flag â open one to manage that area.","descriptionAuthor":"Your content workspace. My posts shows draft / in review / scheduled / published counts.","cardPosts":"Posts","cardMyPosts":"My posts","cardPages":"Pages","cardMedia":"Media","cardMyMedia":"My media","cardComments":"Comments","cardMyComments":"My comments","cardReview":"Review queue","cardRedirects":"Path rules","cardSettings":"Settings","cardUsers":"Users","cardAudit":"Audit","cardSubscribers":"Subscribers","sigPublished":"{n} published","sigDraft":"{n} draft","sigInReview":"{n} in review","sigScheduled":"{n} scheduled","sigUnlisted":"{n} unlisted","sigZeroYours":"0 of yours","sigZeroPosts":"0 posts","sigUnavailable":"unavailable","sigZeroFiles":"0 files","sigFiles":"{n} files","sigImg":"{n} img","sigVid":"{n} vid","sigAud":"{n} aud","sigPending":"{n} pending","sigApproved":"{n} approved","sigSpam":"{n} spam","sigZeroOnYourPosts":"0 on your posts","sigZeroRules":"0 rules","sigRuleOne":"{n} rule","sigRules":"{n} rules","sigMaintenanceOn":"maintenance on","sigCommentsOn":"comments on","sigCommentsOff":"comments off","sigLanding":"landing {path}","sigBuiltInHome":"built-in home","sigLast24h":"{n} last 24h","sigTotal":"{n} total","sigZeroWaiting":"0 waiting","sigWaiting":"{n}
1 waiting","sigZeroPages":"0 pages","sigRetired":"{n} retired","sigZeroStaff":"0 staff","sigStaff":"{n} staff","sigRoleOwner":"{n} owner","sigRoleAdmin":"{n} admin","sigRoleAuthor":"{n} author","sigDisabled":"{n} disabled","sigOwnerOnly":"owner only","sigStaffFallback":"staff","cardLists":"Post lists","sigZeroLists":"No lists","sigLists":"{n} total","sigManual":"{n} manual","sigQuery":"{n} query","sigRanked":"{n} ranked","cardCategories":"Categories","cardTags":"Tags","sigZeroCategories":"0 categories","sigCategories":"{n} total","sigZeroTags":"0 tags","sigTags":"{n} total"},"posts":{"title":"Posts","titleMine":"My posts","description":"Create and manage blog posts. Filter by status, year, taxonomy, quality, and translations.","descriptionMine":"Your drafts, reviews, and published posts. Submit for review when ready.","new":"New post","empty":"No posts match these filters.","searchPlaceholder":"Search title or slugâ¦","dbUnavailable":"Database unavailable.","loadFailed":"Failed to load posts."},"pages":{"title":"Pages","description":"Custom public pages built with the visual page editor (Puck). Blog posts stay under Posts.","new":"New page","newTitle":"New page","newDescription":"Choose a public path and title. You can edit layout with Puck next.","editDescription":"Edit layout and content \xb7 /{path}","empty":"No pages yet.","loadFailed":"Failed to load pages","allPages":"â All pages"},"media":{"title":"Media library","description":"Upload and manage images, video, audio, and files. Used for featured images, Puck, and inline content.","descriptionMine":"Files you uploaded. Editors see the full library.","upload":"Upload","empty":"No media yet.","searchPlaceholder":"Search filenameâ¦"},"comments":{"title":"Comment moderation","description":"Approve, spam, or trash public comments. Authors only see comments on their posts.","empty":"No comments in this filter.","pending":"Pending","approved":"Approved","spam":"Spam","trashed":"Trashed"},"subscribers":{"title":"Subscribers","description":"Email alert list (double opt-in) and Web Push registration counts. Export CSV for backups or ESP import.","empty":"No subscribers yet.","exportCsv":"Export CSV"},"redirects":{"title":"Path rules","description":"Redirects (3xx) export to Nginx via npm run redirects:build. Rewrites are internal masks applied in the app proxy. Use Test page to probe live From paths (status stripe on From). Paths ending with / store both slash variants (listed as one \xb1/ row).","empty":"No path rules yet.","add":"Add rule","testPage":"Test page","test":"Test","from":"From","to":"To","type":"Type","status":"Status","hits":"Hits","redirect":"Redirect","rewrite":"Rewrite"},"review":{"title":"Review queue","description":"Posts authors submitted for review (status optimization). Publish or schedule from the editor.","empty":"Nothing waiting for review.","emptyWaiting":"Nothing waiting for review. Authors submit via","submitForReview":"(Submit for review).","reviewPublish":"Review & publish","inPostsList":"In posts list","dbUnavailable":"Database unavailable.","loadFailed":"Failed to load queue.","byAuthor":" \xb7 by {name}","atUsername":" \xb7 @{username}","noAuthor":" \xb7 no author","updatedOn":"updated {date}","showingOf":"Showing {shown} of {total}. Open the posts list for more."},"users":{"title":"Staff users","description":"Create admins and authors. Authors own their posts and cannot publish without editor review. Owner-only.","empty":"No staff users.","create":"Create user"},"audit":{"title":"Audit trail","description":"Owner-only log of admin logins, settings changes, and content mutations. Append-only; no secrets in meta.","empty":"No audit events yet."},"settings":{"title":"Settings","description":"Identity, operations, and writing first. Tools, spam, cache, and account live further down.","accountOnlyTitle":"Account","accountOnlyDescription":"Password and two-factor authentication for your staff login. Site-wide settings are editor-only.","navSite":"Site","navLocales":"Locales","navOps":"Operations","navWriting":"Writing","navAdvanced":"Advanced","navTools":"Tools","navAccount":"Account","navSystem":"System","densityBasic":"Basic","densityAll":"All","densityHint":"Basic view â brand, comments, notify, authors publish.","densityShowAll":"Show all settings","densityShowAllRest":"for spam limits, cache, subscribe layout, Web Push, and more.","saveSite":"Save site settings","savingSite":"Savingâ¦","unsavedAdvanced":"Unsaved changes in identity, operations, writing, or advanced.","unsavedBasic":"Unsaved changes in basic site settings.","noUnsaved":"No unsaved site setting changes.","leaveTitle":"Unsaved changes","leaveBody":"You have unsaved site settings. Save them, discard them, or cancel to keep editing.","localesTitle":"Public locales","localesDescription":"Languages available on the public site and the default used for unprefixed URLs and new content. Admin UI language is separate (profile menu).","defaultLocale":"Default locale","enabledLocales":"Enabled locales","addLocale":"Add locale","code":"Code","name":"Display name","shortName":"Short","setDefault":"Set default","removeLocale":"Remove","cannotRemoveDefault":"Set another default before removing this locale.","cannotRemoveLast":"At least one locale is required.","addCodePlaceholder":"Select from list","addNamePlaceholder":"e.g. 䏿","chromeFallbackNote":"Public UI chrome falls back to English catalogs when messages/\'{\'code\'}\'.json is missing. Content translations are yours to maintain.","removeConfirm":"Hide this locale from the public switcher? Existing post/page translations are kept.","saved":"Locales updated","error":"Could not update locales","toolsTitle":"Tools","toolsDescription":"Specialized site configuration outside this form. Open a tool to edit; each has its own save flow.","accountTitle":"Account","accountDescription":"Profile, notification bell, password, and two-factor auth save independently of site settings.","addLocaleHint":"Choose a product-supported public locale that is not enabled yet. Display name and short code are pre-filled and can be edited.","localePickerPlaceholder":"Search language or codeâ¦","localePickerList":"Available locales","localePickerShow":"Show locale list","localePickerHide":"Hide locale list","localePickerClear":"Clear selection","localePickerNoneLeft":"All product locales are already enabled.","localePickerNoMatch":"No matching locales.","localePickerHint":"Select a locale \xb7 ââ Enter \xb7 Esc to close","allProductLocalesEnabled":"Every product-shipped public locale is already on this site.","addSh
1ortPlaceholder":"e.g. EN","dangerTitle":"Danger zone","dangerDescription":"Wipe all site content and start clean (tabula rasa). This is irreversible. Export or back up first.","dangerDisabledNote":"Content wipe is disabled on this host (ALLOW_SITE_CONTENT_RESET).","dangerBulletContent":"Deletes posts, pages, comments, taxonomy, redirects, media library records, subscribers, notifications, audit log, and custom settings.","dangerBulletKeep":"Keeps your owner account (email, password, and 2FA). Staff accounts stay unless you opt out below.","dangerBulletMediaDefault":"By default, media files on disk are kept even after library rows are cleared. Check âAlso delete media filesâ only if you understand the data loss.","dangerBulletNoUndo":"There is no undo. You will not get seed content back unless you run seed:demo again.","dangerRemoveStaff":"Also remove staff (admin/author) accounts","dangerRemoveStaffHint":"Owner account is never deleted. Sessions for removed staff are dropped.","dangerDeleteMediaFiles":"Also delete media files on disk","dangerDeleteMediaFilesHint":"Removes files under MEDIA_ROOT after clearing the media library. Leave unchecked to free the database only.","dangerPassword":"Your current password","dangerTotp":"Authenticator code","dangerTypePhrase":"Type {phrase} to confirm","dangerAckIrreversible":"I understand this permanently deletes site content and cannot be reversed.","dangerOpenFinal":"Continue to final confirmationâ¦","dangerFinalTitle":"Delete all content permanently?","dangerFinalBody":"This is your last chance. Posts, pages, comments, and customizations will be removed. Your owner login stays.","dangerFinalMediaWarn":"You chose to delete media files on disk. Originals and derivatives under MEDIA_ROOT will be removed.","dangerFinalMediaKeep":"Media files on disk will be kept (library rows only are cleared).","dangerFinalCancel":"Cancel","dangerFinalConfirm":"Yes, wipe all content","dangerRunning":"Wipingâ¦","dangerSuccess":"Site content wiped. Reconfigure Settings and publish when ready.","dangerErrPassword":"Incorrect password.","dangerErrTotp":"Invalid authenticator code.","dangerErrPhrase":"Confirmation phrase does not match.","dangerErrDisabled":"Content wipe is disabled on this server.","dangerErrRateLimit":"Too many attempts. Wait and try again.","dangerErrForbidden":"Only the site owner can wipe content.","dangerErrFailed":"Content wipe failed.","dangerErrNetwork":"Network error. Try again.","exportJson":"Export JSON","importJson":"Import JSON","resetDefaults":"Reset to defaults","exported":"Exported site settings JSON.","imported":"Imported site settings (not saved yet). Save to apply on the server.","importParseError":"Could not parse the file as site settings JSON.","importConfirmTitle":"Import site settings?","importConfirmBody":"This replaces the form with values from the file. Unsaved edits in the form will be lost. Nothing is written to the server until you save.","importConfirm":"Import","resetConfirmTitle":"Reset site settings to defaults?","resetConfirmBody":"This restores product defaults in the form (site name, comments, cache, etc.). Unsaved edits will be lost. Nothing is written to the server until you save.","resetConfirm":"Reset form","resetMsg":"Reset form to product defaults (not saved yet).","resetAlreadyDefault":"Already at product defaults (matches last saved â nothing to save).","importedNoChange":"Imported settings match last saved â nothing to save."},"externalMediaUi":{"metaTitle":"External media \xb7 Admin","title":"External media","description":"Third-party images and video in posts. The hourly timer copies a live or archived file into the library and rewrites every post that used that URL. Ignore a row to leave it hotlinked.","enabledNote":"Automatic recovery is on.","disabledNote":"Automatic recovery is off (no outbound fetches).","count":"{total} cataloged URL(s).","empty":"No hotlinked media found yet. The next timer run will scan published posts and pages.","colUrl":"URL","colStatus":"Status","colKind":"Kind","colHits":"Hits","colRefs":"Used in","colActions":"Actions","status_pending":"pending","status_recovering":"recovering","status_recovered":"recovered","status_failed":"failed","
1status_ignored":"ignored","ignore":"Ignore","unignore":"Unignore","runNow":"Run recovery now","running":"Recoveringâ¦","runResult":"Recovered {recovered}, rewritten {rewritten}, failed {failed}.","search":"Search","searchPlaceholder":"URL or used-in (slug, titleâ¦)","filterStatus":"Status","filterKind":"Kind","showAll":"Show all","emptySearch":"No rows match â{query}â.","emptyFilter":"No rows match these filters.","matchesOf":"{shown} of {pool} on this page \xb7 {total} cataloged","showingLoaded":"{pool} on this page \xb7 {total} cataloged","kind_image":"image","kind_video":"video","kind_audio":"audio","kind_file":"file","pageOf":"Page {page} / {totalPages}","rangeOfTotal":"{start}â{end} of {total}"},"tools":{"menuTitle":"Main menu","menuDescription":"Public primary navigation (desktop + mobile). Labels are per locale. Missing DB key uses the slim code default until you save or import.","logoTitle":"Site logo","logoDescription":"Built-in HTML mark, media library image (optional dark variant), or sanitized SVG. Defaults match the current MyNix logo.","faviconTitle":"Site icon","faviconDescription":"Browser tab, bookmarks, and iOS home screen. Built-in $_ mark, or a square image from the media library (optional dark variant).","themeTitle":"Theme tokens","themeDescription":"Override public light and dark color tokens, apply starter theme packs, or import/export pack JSON. Leave a field empty to use the default.","pagesToolTitle":"Custom pages","pagesToolDescription":"Visual page builder (Puck) for landing and marketing pages. Not blog posts.","importToolTitle":"Import","importToolDescription":"Import posts, media, and more from WordPress (WXR) or future CMS sources.","backupToolTitle":"Backup","backupToolDescription":"Backup and restore site data and media. Owner only.","customCodeTitle":"Custom code","customCodeDescription":"Owner-injected CSS and scripts on the public site only. Kill switch and CSS-only mode. Owner only.","footerTitle":"Footer","footerDescription":"Public footer layout (classic / columns / stacked), link columns, and optional social badges. Localized labels. Editor+.","privacyTitle":"Privacy","privacyDescription":"Controller identity and the public /privacy notice (generated default or an assigned custom page). Editor+.","headerTitle":"Header","headerDescription":"Public header layout (classic / logo center / split), chrome toggles, and optional CTA. Editor+.","postCardsTitle":"Post cards","postCardsDescription":"Archive layout: cards per row, posts per page, featured-image placement, excerpt/read-more, and starter packs. Colors follow Theme tokens. Editor+.","externalMediaTitle":"External media","externalMediaDescription":"Hotlinked images and video. A timer copies live or archived files into the library and rewrites posts automatically."},"session":{"expired":"Your session expired. Sign in again to continue.","signIn":"Sign in"},"status":{"draft":"Draft","editing":"Editing","optimization":"In review","scheduled":"Scheduled","published":"Published","retired":"Retired","unlisted":"Unlisted","pending":"Pending","approved":"Approved","spam":"Spam","trashed":"Trashed","missing":"Missing","machine":"Machine","human":"Human","reviewed":"Reviewed","all":"All"},"leave":{"title":"Unsaved changes","bodyWithSave":"You have unsaved {entity} changes. Save them, discard them, or cancel to keep editing.","bodyDiscardOnly":"You have unsaved {entity} changes. Discard them, or cancel to keep editing."},"lists":{"search":"Search","filter":"Filter","clearFilters":"Clear filters","apply":"Apply","empty":"Nothing matches these filters.","count":"{count}","untitled":"(untitled)","edit":"Edit","open":"Open","delete":"Delete","confirmDelete":"Delete this item? This cannot be undone.","actions":"Actions","updated":"Updated","created":"Created","locales":"Locales","status":"Status","title":"Title","path":"Path","type":"Type","from":"From","to":"To","hits":"Hits","source":"Source","code":"Code","size":"Size","dims":"Dims","added":"Added","name":"Name","email":"Email","role":"Role","username":"Username","actor":"Actor","action":"Action","entity":"Entity","when":"When","meta":"Meta","loadingMore":"Loading moreâ¦","noResults":"No results.","pagination":"Pagination","prev":"Previous","next":"Next"},"postsUi":{"newDraft":"New draft","create":"Create","createTitle":"New post title","createPlaceholder":"Title for the new draft","assignTo":"Assign to","assignMe":"Me (create as self)","untitled":"Untitled","networkError":"Network error","searchPlaceholder":"Search title or slugâ¦","bulkBar":"Selected posts","empty":"No posts match these filters.","creating":"Creatingâ¦","createDraft":"Create draft","assignDraft":"Assign draft","assignOptional":"Assign to (optional)"},"pagesUi":{"search":"Search","searchPlaceholder":"Title or pathâ¦","status":"Status","locales":"Locales","filter":"Filter","filterStatus":"Filter by status","count":"{count} pages","empty":"No pages yet.","createOne":"Create one","edit":"Edit","title":"Title","path":"Path","updated":"Updated"},"redirectsUi":{"filterLabel":"Filter path rules","filterPlaceholder":"Filter path, source, typeâ¦","add":"Add rule","testPage":"Test page","test":"Test","probeSummary":"Probe summary","probeHelp":"Probe each From path on this page against expected To / status.","probeThis":"Probe this From path","fromPath":"From path","toPath":"To path","typeRedirect":"redirect (3xx â Nginx)","typeRewrite":"rewrite (internal â proxy)","slashPair":"Also matches the same path without trailing slash","empty":"No path rules yet.","save":"Save","delete":"Delete","buildHint":"npm run redirects:build","fromCol":"From","typeCol":"Type","codeCol":"Code","sourceCol":"Source","actionsCol":"Actions","internalRewrite":"Internal rewrite (proxy)","rewrite":"rewrite","clientRedirect":"Client redirect (Nginx)","redirect":"redirect","pagination":"Path rules pagination","next":"Next â","fromPathHelp":"with and without trailing slash (listed as one row). Omit for a single exact path only.","buildExports":"redirect exports to Nginx via","prev":"â Previous","cancel":"Cancel","deleteRuleTitle":"Delete path rule?","deletePairTitle":"Delete path rule pair?","deleted":"Deleted","deletedPair":"Deleted slash pair","newPathRule":"New path rule","rewriteInternalHint":"rewrite is internal (app proxy; URL bar stays on From)","fromPathSlashHelp":"End with / to store both with and without trailing slash (listed as one row). Omit / for a single exact path only.","pageOf":"Page {page} / {totalPages}","rangeOfTotal":"({start}â{end} of {total})","prevShort":"â Prev","rewriteCreated":"Rewrite created â active in the app proxy within ~30s (no Nginx deploy)","noProbePaths":"No probe paths","emptyImport":"No redirects yet. Import or add date permalinks before cutover.","networkError":"Network error","redirectCreated":"Redirect created â run npm run redirects:build before deploy"},"commentsUi":{"search":"Search","searchPlaceholder":"Author, email, URL, IP, user-agent, or bodyâ¦","searchHint":"Server-side substring match on author name, email, URL, IP, user-agent, and body","approve":"Approve","approveTitle":"Publish this comment on the post (status â approved).","spam":"Spam","spamTitle":"Mark as spam (hidden from public; kept for review).","trash":"Trash","restore":"Restore","empty":"No comments yet.","pagination":"Comments pagination","deletePermanentTitle":"Permanently delete this comment from the database. Cannot be undone (unlike Trash).","delete":"Delete","rePend":"Re-pend","rePendTitle":"Send back to the moderation queue (status â pending). Use after a mistake or for re-review.","tags":"Tags","deleteCommentTitle":"Delete comment?","deleteCommentBody":"Permanently delete this comment. This cannot be undone.","trashTitle":"Soft-remove: hide from public and move to Trash (recoverable via Re-pend or Approve).","cancel":"Cancel","clear":"Clear","dimensionFiltersHint":"Filters apply to the post the comment is on (category, tag, year, post author).","pageOf":"Page {page} / {totalPages}","prevShort":"â prev","nextShort":"next â","networkError":"Network error","noResponse":"No response","deleted":"Deleted","filterAll":"All","filterPending":"Pending","filterApproved":"Approved","filterSpam":"Spam","filterTrashed":"Trashed","zeroMatches":"0 matches for â{query}â","zeroInFilter":"0 in current filter","rangeHint":"{from}â{to} of {total} \xb7 page {page}/{totalPages} \xb7 {pageSize}/page","rangeHintQuery":"{from}â{to} of {total} \xb7 page {page}/{totalPages} \xb7 {pageSize}/page \xb7 q={query}","emptySearchInFilter":"No comments match â{query}â in this filter.","emptyInFilter":"No comments in this filter.","emptyInFilterPage":"No comments in this filter on this page.","statusChanged":"Comment â {status}","metaStatus":"status={status}","metaSpamScore":" \xb7 spam={score}","metaReply":" \xb7 reply","metaPost":" \xb7 post ","metaUrl":"url: {url}","metaIp":"ip: {ip}","metaUa":"ua: {ua}"},"mediaUi":{"search":"Search media","searchPlaceholder":"Search name, path, alt, captionâ¦","clearSearch":"Clear search","upload":"Upload","loading":"Loadingâ¦","empty":"No media yet.","size":"Size","type":"Type","dims":"Dims","added":"Added","updated":"Updated","siteBadge":"Site","uploadFile":"Upload file","uploading":"Uploadingâ¦","delete":"Delete","scrollMore":"Scroll for more","copyUrl":"C
1opy URL","loadingMore":"Loading moreâ¦","tags":"Tags","endOfLibrary":"End of library","cancel":"Cancel","deleteMediaTitle":"Delete media row?","deleteRow":"Delete row","deleteMediaBody":"Removes the database row only. The file remains on disk under MEDIA_ROOT.","dimensionFiltersHint":"Category / tag / year match media linked to those posts. Author = post author for linked media, uploader for unlinked.","failedLoad":"Failed to load media","failedLoadMore":"Failed to load more","networkError":"Network error","uploadFailed":"Upload failed","errUnauthenticated":"Sign in required to upload","errMissingFile":"Choose a file to upload","errFileTooLarge":"File is too large (max 20 MB)","errMimeNotAllowed":"This file type is not allowed","uploadedUrl":"Uploaded {url}","emptySearch":"No media match â{query}â.","copiedUrl":"Copied {url}"},"usersUi":{"create":"Create user","directory":"Directory","empty":"No staff users.","email":"Email","username":"Username","usernameHint":"2â32 letters, numbers, _ or -","displayName":"Display name","password":"Password (min 10)","role":"Role","roleAdmin":"admin (full content + settings)","roleAuthor":"author (own posts)","optional":"Optional","revokeSessions":"Revoke sessions","disable":"Disable","enable":"Enable","sendInvite":"Send invite email","cancel":"Cancel","forceLogoutTitle":"Force logout?","inviteHint":"User sets their own password via link (requires SMTP). Recommended.","createFailed":"Create failed","updateFailed":"Update failed","disableAccount":"Disable account?","reenableAccount":"Re-enable account?","revokeFailed":"Revoke failed","roleOwner":"owner","roleAdminShort":"admin","roleAuthorShort":"author","you":"you","postsCount":"{count} posts","totpOn":"TOTP"},"auditUi":{"actor":"Actor","anyActor":"Any actor","action":"Action","actionPlaceholder":"auth.* or exact","entityType":"Entity type","entity":"Entity","postAuthor":"Post author","anyPostAuthor":"Any post author","postAuthorHint":"Events on posts owned by this author","fromDay":"From (UTC day)","toDay":"To (UTC day)","whenUtc":"When (UTC)","meta":"Meta","system":"system","openInAdmin":"Open in admin","filterActor":"Filter by this actor","filterAction":"Filter by this action","toggleMeta":"Toggle full meta","pagination":"Audit pagination","empty":"No audit events yet.","apply":"Apply filters","clear":"Clear","all":"All","settings":"Settings","posts":"Posts","edits":"Edits","pages":"Pages","comments":"Comments","redirects":"Redirects","pageOf":"Page {page} / {totalPages}","prevShort":"â prev","nextShort":"next â","emptyFilters":"No events match these filters.","eventCount":"{count} events","eventCountOne":"{count} event","auth":"Auth","loginFail":"Login fail","media":"Media","ai":"AI","anyEntity":"Any entity","entityPost":"post","entityPage":"page","entityComment":"comment","entityMedia":"media","entityRedirect":"redirect","entitySettings":"settings","entitySession":"session","entityAi":"ai"},"accountUi":{"passwordTitle":"Password","currentPassword":"Current password","newPassword":"New password","confirmPassword":"Confirm new password","totpCode":"Authenticator code","changePassword":"Change password","emailReset":"Email me a recovery link","passwordUpdated":"Password updated. Other sessions were signed out.","recoverySent":"Recovery link sent.","errInvalidPassword":"Current password is incorrect","errWeak":"New password must be at least 10 characters","errMismatch":"New passwords do not match","errTotp":"Invalid authenticator code","errSmtp":"Mail is not configured (SMTP_HOST)","errMail":"Could not send recovery email â check SMTP","errSession":"Session expired â sign in again","errFailed":"Request failed","errEnterTotp":"Enter the 6-digit authenticator code","network":"Network error","totpTitle":"Two-factor authentication","totpLoading":"Loadingâ¦","totpEnable":"Enable authenticator","totpDisable":"Disable 2FA","totpConfirmSetup":"Authenticator code to confirm setup","totpConfirmDisable":"Authenticator code to disable 2FA","profileTitle":"Public author profile","displayName":"Display name","bio":"Bio","website":"Website URL","avatar":"Avatar","chooseAvatar":"Choose avatar","avatarHint":"Pick or upload an image for your public author profile.","saveProfile":"Save profile","bellTitle":"Notification bell","bellDescription":"Choose when the header bell appears. Saved on this device only (like theme).","bellAlways":"Always show","bellAlwaysDesc":"Bell stays visible in the admin header.","bellUnread":"Only with unread","bellUnreadDesc":"Hide the bell when you have no unread notifications.","bellNever":"Hide","bellNeverDesc":"Never show the notification bell on this device.","recoverySentTo":"Recovery link sent to {email}.","passwordDescription":"Change your admin password here, or email yourself a recovery link (same flow as forgot-password).","updatePassword":"Update password","working":"Workingâ¦","forgotCurrent":"Forgot your current password? Send a time-limited recovery link to your account email.","emailResetLink":"Email me a reset link","bellWhenAny":"When there are notifications","bellWhenAnyDesc":"Show the bell only if you have at least one notification (read or unread).","bellWhenUnread":"When there are unread","bellWhenUnreadDesc":"Show the bell only while something is unread.","bellAlwaysTitle":"Always","bellAlwaysDescLong":"Keep the bell in the admin header at all times.","bellNeverTitle":"Never","bellNeverDescLong":"Hide the bell completely. Change this anytime in settings."},"postsList":{"titleCol":"Title","slugCol":"Slug","statusCol":"Status","updatedCol":"Updated","actionsCol":"Actions","qualityCol":"Quality","requestCol":"Request","filterStatus":"Filter by status","fuzzyFilter":"Fuzzy filter this page","fuzzyPlaceholder":"Optional: narrow loaded rowsâ¦","serverSearch":"Server search across all postsâ¦","fullCatalog":"full catalog","selectAll":"Select all visible posts","schedulePosts":"Schedule posts","empty":"No posts match these filters.","newDraft":"New draft","sortQuality":"Sort by average of SEO + readability (missing scores last)","bulkSelected":"{count} selected","bulkClear":"Clear","bulkClearTitle":"Clear selection (Esc)","bulkTips":"Shift+click range \xb7 Esc clear","bulkRegion":"Bulk post actions","bulkStatus":"Status","bulkNoCommon":"No common status actions for this selection","searchCatalogLabel":"Search catalog (title / slug)","search":"Search","clearSearch":"Clear search","showingRange":"Showing {start}â{end} of {total} matching posts. Status, year, quality, category, tag{authorPart} filters apply to the","authorPart":", and author","saveQualityHint":"Save the post in the editor to cache quality scores","qualityTooltip":"SEO {seo} \xb7 Readability {readability} \xb7 Avg {avg}","readability":"Readability","selectPost":"Select {title}","hasTranslation":"Has {locale} translation","cancel":"Cancel","request":"Request","failed":"Failed","networkError":"Network error","deleteOneStatus":"Delete {status} post?","deleteMany":"Delete {count} posts?","deletePost":"Delete post","deletePosts":"Delete posts","deleteVerb":"Delete","scheduleVerb":"Schedule","pickFutureTime":"Pick a future time","bulkVerb":"Bulk: {verb}","emptyPageQuery":"No posts on this page match â{query}â.","emptyCatalogFilters":"No posts match the selected catalog filters.","emptyPage":"No posts on this page.","postsPagination":"Posts pagination","cancelEsc":"Cancel (Esc)","confirmSchedule":"C
1onfirm schedule","fuzzyFilterPageOnly":"Fuzzy filter (this page only)","showAll":"Show all","nextArrow":"Next â","prevArrow":"â Previous","pageOf":"Page {page} / {totalPages}","rangeOfTotal":"({start}â{end} of {total})","matchesOf":"{shown} matches of {pool}","matchOf":"{shown} match of {pool}","postsOfLoaded":"{pool} of {count} posts","postOfLoaded":"{pool} of {count} post","postsCount":"{count} posts","postCount":"{count} post","loadedOf":"(loaded {loaded} of {total})","prevShort":"â Prev","emptyYet":"No posts yet â use {newDraft} above to create one.","emptyYetBefore":"No posts yet â use","emptyYetAfter":"above to create one.","bulkForSelected":"{verb} for {count} selected posts?","qualityWarnBelow":"One or more posts have SEO or readability below {threshold} â {prompt}","scheduleAnyway":"schedule anyway?","publishAnyway":"publish anyway?","continueAnyway":"continue anyway?","permanentlyDelete":"Permanently delete","permanentlyDeleteCannotUndo":"? This cannot be undone.","postsWord":"{count} posts","nPosts":"{count} posts"},"totpUi":{"title":"Two-factor authentication","loading":"Loadingâ¦","enabled":"Authenticator is enabled on this account.","disabled":"Authenticator is not enabled.","startSetup":"Set up authenticator","confirmEnable":"Confirm and enable","disable":"Disable 2FA","secret":"Secret","scanQr":"Scan this QR code with your authenticator app, then enter a code.","codeConfirm":"Authenticator code to confirm setup","codeDisable":"Authenticator code to disable 2FA","enabledOk":"Two-factor authentication is on.","disabledOk":"Two-factor authentication is off.","errInvalid":"Invalid authentication code","errAlready":"2FA is already enabled","errNotEnabled":"2FA is not enabled","errSetupFirst":"Start setup first","errSession":"Session expired â sign in again","errStart":"Could not start setup","errEnable":"Could not enable 2FA","errDisable":"Could not disable 2FA","network":"Network error","cancelSetup":"Cancel setup"},"profileUi":{"title":"Public author profile","description":"Shown on your public author page and post bylines.","displayName":"Display name","bio":"Bio","website":"Website URL","websitePlaceholder":"https://â¦","avatar":"Avatar","chooseAvatar":"Choose avatar","removeAvatar":"Remove","avatarHint":"Pick or upload an image for your public author profile.","useAsAvatar":"Use as avatar","save":"Save profile","saving":"Savingâ¦","saved":"Profile saved.","network":"Network error"},"workflow":{"moveToDraft":"Move to draft","startEditing":"Start editing","submitForReview":"Submit for review","moveToOptimization":"Move to optimization","schedule":"Scheduleâ¦","publish":"Publish","unlist":"Unlist","retire":"Retire","viewOnSite":"View on site â","edit":"Edit","deletePermanently":"Delete permanentlyâ¦","postActions":"Post actions","status":"Status","actionsFor":"Actions for {title}","sendBackEditing":"Send back to editing","sendBackDraft":"Send back to draft","unschedule":"(unschedule)","discardDraft":"Discard draft","deletePost":"Delete post"},"postEditor":{"workflow":"Workflow","savePost":"Save post","saving":"Savingâ¦","autosaving":"Auto-savingâ¦","discard":"Discard","reviewLockedAuthor":"In review â content is locked until an editor publishes or sends it back.","submittedReview":"Submitted for review â an editor will publish or schedule.","reviewQueueEditor":"In review queue â publish, schedule, or send back (â editing / draft) with an optional note.","jumpPreview":"HTML preview","jumpQuality":"Quality scores","jumpSeo":"SEO meta","jumpDetails":"Post details","jumpTerms":"Categories & tags","jumpAi":"AI assist","jumpFeatured":"Featured image","title":"Title","slug":"Slug","excerpt":"Excerpt","body":"Body","locale":"Locale","seo":"SEO","metaTitle":"Meta title","metaDescription":"Meta description","focusKeyphrase":"Focus keyphrase","categories":"Categories","tags":"Tags","notes":"Notes","author":"Author / assignment","created":"Created","updated":"Last updated","published":"Published","scheduledFor":"Scheduled for","openPublic":"Open public post","focusKeyphraseHint":"Optional. Quality scoring checks natural presence in title, meta, slug, intro, and H2s â not keyword density.","metaTitlePlaceholder":"Seeded from title on publish if empty","metaDescriptionPlaceholder":"Seeded from excerpt on publish if empty","focusKeyphrasePlaceholder":"e.g. decoupling capacitor","categoryPlaceholder":"Search or create a categoryâ¦","tagPlaceholder":"Search or create a tagâ¦","termsTitle":"Categories & tags","termsHint":"Type to filter or create. Selected chips stay local until you save the post.","postMetadata":"Post metadata","
1showDetails":"Show post details","hideDetails":"Hide post details","showSeo":"Show SEO meta","hideSeo":"Hide SEO meta","showTerms":"Show categories & tags","hideTerms":"Hide categories & tags","showAi":"Show AI assist","hideAi":"Hide AI assist","aiAssist":"AI assist (opt-in)","proofread":"Proofread","seoSuggest":"SEO suggest","rewrite":"Rewrite","internalLinks":"Internal links","noSuggestions":"No suggestions.","seoSuggestions":"SEO suggestions","proofreadSuggestions":"Proofread suggestions","readability":"Readability","applied":"Applied","openPublicTab":"Open public post in a new tab","openPublicMaybe404":"Open public URL (may 404 if not published)","slugFollowsTitle":"Slug follows the title until you edit it here","slugManual":"Slug is manual (no longer follows the title)","qualityTitle":"Quality below threshold","qualityBody":"SEO or readability is under {floor}. Live visitors and search engines will see this content if you continue.","translate":"Translate","showFeatured":"Show featured image","hideFeatured":"Hide featured image","related":"Related","dismiss":"Dismiss","bodyOnly":"Body only","titleExcerpt":"Title + excerpt","titleExcerptBodySeo":"Title, excerpt, body, SEO","defaultLocale":"Default","featuredTitle":"Featured image","featuredHint":"Upload, pick from the library, or generate with AI. Saved with the post.","noFeatured":"No featured image","clearFeatured":"Clear","coAuthorsTitle":"Co-authors / bylines","guestContributor":"Guest contributor","guestName":"Guest name","noCoAuthors":"No co-authors.","selectEllipsis":"Selectâ¦","staff":"Staff","reviewNotes":"Review notes","reviewNotesHint":"Internal editorial thread â not public comments.","noNotesYet":"No notes yet.","addNotePlaceholder":"Add an internal noteâ¦","rewritePersona":"Rewrite / persona","rewritePlaceholder":"Write as if for / as â¦","aiFixSuggestions":"AI fix suggestions","noImprovements":"No improvements needed here.","previewFullscreen":"Full-screen publish preview","previewExpand":"Expand preview under the admin header (full content area)","previewTitle":"Publish preview","previewRenderHint":"Render + sanitize \xb7 Escape to exit full screen","exitFullscreen":"Exit full screen","noCommentsYet":"No comments yet","noLinkedMedia":"No linked media","newMetaTitle":"New meta title","newMetaDescription":"New meta description","jumpSection":"Jump to editor section","searchLibrary":"Search library","searchMediaPlaceholder":"Search name, path, alt, captionâ¦","clearSearch":"Clear search","openIn":"Open in","newTab":"New tab (_blank)","sameTab":"Same tab (_self)","inline":"Inline","block":"Block","changeImage":"Change image","chooseImage":"Choose image","addNote":"Add note","posting":"Postingâ¦","rewriteHint":"Adapt voice for an audience. Does not auto-save â review then Save.","profile":"Profile","goal":"Goal","scope":"Scope","runRewrite":"Rewrite","applyMetaTitle":"Apply meta title","applyMetaDescription":"Apply meta description","applyKeyphrase":"Apply keyphrase","applyExcerpt":"Apply excerpt","aiFixesGrounded":"Grounded in the top {count} failing checks â never auto-applies.","hidePreview":"Hide preview","applyAllPending":"Apply all pending","cancel":"Cancel","continueAnyway":"Continue anyway","forceApply":"Force apply","insert":"Insert","openPublicPost":"Open public post","replaceBody":"Replace body","
1settings":"Settings","unsavedChanges":"Unsaved changes","updateSchedule":"Update schedule","fullScreen":"Full screen","previewFullscreenNote":"Preview is open full screen under the admin bar.","goToField":"Go to {field}","addGuest":"Add guest","addStaff":"Add staff","aiTranslateFromSource":"AI translate from source locale","authorAssignment":"Author / assignment","categoriesAndTags":"Categories & tags","deletePost":"Delete post","internalLinkSuggestions":"Internal link suggestions","lastUpdated":"Last updated","qualityBelowThreshold":"Quality below threshold","reassignAuthorTitle":"Reassign author?","reassignAuthor":"Reassign author","retirePostTitle":"Retire post?","retirePost":"Retire post","sendBackTitle":"Send back for edits?","sendBackNote":"Optional note for the author (also emailed if SMTP is configured).","noteToAuthor":"Note to author","whatNeedsChanging":"What needs changingâ¦","sendBack":"Send back","rewriteWithAiTitle":"Rewrite with AI?","rewriteWithAiBody":"This replaces the selected fields in the form with a rewritten version. You can still Discard or Save afterward.","translateFromSourceTitle":"Translate from source?","translateReplace":"Translate & replace","overwriteSeoTitle":"Overwrite existing SEO meta?","overwriteApply":"Overwrite & apply","setLabel":"Set","collapseEditor":"Collapse editor","expandEditor":"Expand editor","readOnlyParen":" (read-only)","editorCollapsedLocked":"Editor collapsed â content is locked by site policy. Expand for read-only view, or use the publish preview below.","editorCollapsed":"Editor collapsed. Expand to edit the body.","derivedMarkdownPreview":"derived markdown preview","hideAppliedSuggestions":"Hide applied suggestions","showAppliedSuggestion":"Show {count} applied suggestion","showAppliedSuggestions":"Show {count} applied suggestions","autosaveThisPost":"Auto-save this post","autosaveEveryPost":"(every {seconds}s while dirty \xb7 same site setting as pages)","autosaveOffSitePost":"(off site-wide for posts & pages â enable in","autosaveOffSitePostClose":")","manualSaveHint":"Manual save writes slug, content, SEO, categories/tags, and featured image. Workflow buttons publish/schedule/delete immediately.","showPreview":"Show preview","tiptapFeatures":"TipTap \xb7 math \xb7 callout \xb7 button \xb7 image+caption \xb7 video/audio/embed \xb7 tables \xb7 Markdown paste","dismissedProofread":"Dismissed proofread suggestions.","leaveWithSave":"You have unsaved edits to this post. Save them, discard them, or cancel to keep editing.","leaveDiscardOnly":"You have unsaved edits to this post. Discard them, or cancel to keep editing.","aiAppliedSave":"AI suggestion applied to the form â Save post to persist.","postSaved":"Post saved.","networkError":"Network error","discardedUnsaved":"Discarded unsaved changes.","authorReassigned":"Author reassigned.","failedReassignAuthor":"Failed to reassign author","saveAndUpdateLive":"Save and update the live post","scheduleThisPost":"Schedule this post","publishThisPost":"Publish this post","pickFutureSchedule":"Pick a future schedule time.","transitionedTo":"Transitioned to {status}.","mustRetireNotDelete":"Published or unlisted posts must be retired, not deleted.","deleteFailed":"Delete failed","postDeleted":"Post deleted.","scheduleUpdated":"Schedule updated.","appliedTitleSave":"Applied suggested title â Save post to persist.","appliedExcerptSave":"Applied suggested excerpt â Save post to persist.","forcedBodyApply":"Forced body apply (structure drift accepted) â review carefully, then Save post.","appliedBodyReview":"Applied suggested body into the editor â review carefully, then Save post.","structureTitleExcerptBodyBlocked":"{guard}\\nTitle/excerpt applied where pending; body blocked.","appliedProofreadFieldsReview":"Applied available proofread fields into the editor â review carefully, then Save post.","appliedProofreadFieldsSave":"Applied available proofread fields â Save post to persist.","proofreadCompleteApply":"Proofread complete â use Apply buttons below (saved locally until dismissed; nothing is in the DB until Save post).","proofreadCompleteNotesOnly":"Proofread complete â notes only (no title/body suggestions to apply).","aiNetworkError":"AI network error","seoReadyApply":"SEO suggestions ready â Apply below (saved locally until dismissed; nothing is in the DB until Save post).","nothingToRewrite":"Nothing to rewrite in the selected scope","enterCustomPersona":"Enter a custom persona, or pick a preset profile","rewriteApplied":"Rewrite applied ({provider}/{model}) â Save post to persist.{bodyNote}","failedLoadLinkCandidates":"Failed to load link candidates","internalLinksFailed":"Internal links failed","internalLinksResult":"Internal links: {count} suggestion(s). Copy markdown into the body (Save to persist).","insertedLinkSave":"Inserted link â{anchor}â â Save post to persist.","noSourceLocale":"No source locale translation to translate from","switchLocaleTranslate":"Switch to a non-source locale to use AI translate","translateBodyWriteFailed":"Translation map had changes but {failed} leaf path(s) failed to write into the document. See [ai-translate] console logs.","translateNoBodyChange":"Translation did not change body text in the document (check [ai-translate] logs).","translatedFrom":"Translated from {from} â {to} ({provider}/{model}) â Save post to persist.","appliedSeoTitle":"Applied SEO meta title â Save post to persist.","appliedSeoDescription":"Applied SEO meta description â Save post to persist.","seoMetaApplied":"SEO meta applied to form â Save post to persist.","dismissedSeo":"Dismissed SEO suggestions.","autosaveOnPost":"Auto-save on for this post (every {seconds}s while dirty).","autosaveOffPost":"Auto-save off for this post.","dueAt":" \xb7 due {when} ({tz})","arrowStatus":"â {status}","unscheduleParen":" (unschedule)","rescheduleLocal":"Reschedule (local time)","
1scheduleForLocal":"Schedule for (local time)","applyAgain":"Apply again","applyAgainEllipsis":"Apply againâ¦","applyTitle":"Apply title","applyDescription":"Apply description","applyBodyEllipsis":"Apply bodyâ¦","bodyStructureChanged":"Body structure changed","replacePostBody":"Replace post body?","bodyStructureWarn":"The AI body would alter rich structure (links, lists, tables, images, â¦). It was not applied.","bodyStructurePrefer":"Prefer editing manually, re-running proofread, or Force apply only if you accept layout risk. You still need to Save post afterward.","replaceBodyConfirm":"This replaces the current editor content with the AI-suggested Markdown (converted to rich text). Unsaved body edits will be lost. You still need to Save post afterward.","postInReviewLocked":"Post is in review â content is locked","suggestInternalLinks":"Suggest internal links to other published posts","overwrites":"(overwrites)","current":"Current:","emptyParen":"(empty)","suggestedMetaTitle":"Suggested meta title","suggestedMetaDescription":"Suggested meta description","statusDesc":"Status: {status} \xb7 slug: {slug}","statusDescReview":"Status: {status} \xb7 slug: {slug} \xb7 submit for review to publish","allPosts":"â all posts","structureGuardHeader":"Structure guard: AI body would change document structure.","structureGuardForce":"Body was not applied. Use Force apply only if you accept layout risk.","localOnly":" \xb7 local only","savedAt":" \xb7 saved {when}","autosaveFailed":"Auto-save failed â retrying next interval.","suggestedTitle":"Suggested title","suggestedExcerpt":"Suggested excerpt","suggestedBody":"Suggested body","lockBannerReview":"This post is in review â wait for an editor or for send-back before editing","lockBannerScheduled":"This scheduled post is locked for authors under site settings â ask an editor to change it or unschedule","lockBannerLive":"Live posts are locked for authors under site settings â ask an editor to edit","lockBannerDefault":"Content is locked for authors under current site settings","bodyPlaceholder":"Write your post⦠(Markdown paste supported)","showQuality":"Show quality","hideQuality":"Hide quality","primaryAuthorAlreadyMain":"Primary author is already the main byline","jumpToSeoMeta":"SEO meta","jumpToFeaturedImage":"featured image","jumpToBody":"body","seoOrReadabilityUnder":"SEO or readability is under","qualityGateContinue":"Continue anyway?","fieldMetaTitle":"meta title","fieldMetaDescription":"meta description","andJoin":" and ","featuredSet":"set","seoSummarySet":" \xb7 {parts} set","seoPartKeyphrase":"keyphrase","seoPartTitle":"title","seoPartDescription":"description","detailsSummary":" \xb7 {comments} comments \xb7 {media} media","termsSummary":" \xb7 {cats} cat \xb7 {tags} tags","aiOnProvider":" \xb7 on \xb7 {provider}","aiPendingCount":" \xb7 {count} pending","qualityGateBody":"SEO or readability is under {floor}. Live visitors and search engines will see this content if you continue.","savingEllipsis":"Savingâ¦","aiLoadingDots":" \xb7 â¦","aiOff":" \xb7 off","aiSaved":" \xb7 saved"},"chrome":{"openMenu":"Open menu","closeMenu":"Close menu","notifications":"Notifications","notificationsEmpty":"No notifications","bellSettingsHint":"Bell visibility in settings â","themeToggle":"Toggle theme","themeSystem":"Theme: System","themeLight":"Theme: Light","themeDark":"Theme: Dark","themeSystemHint":"Theme: System. Click to change.","themeLightHint":"Theme: Light. Click to change.","themeDarkHint":"Theme: Dark. Click to change.","backToSettings":"â Settings","notificationsHeading":"notifications","markAllRead":"mark all read","refresh":"refresh","notificationsLoading":"Loadingâ¦","notificationsEmptyYet":"No notifications yet.","relativeJustNow":"just now","relativeMinutes":"{n}m","relativeHours":"{n}h","relativeDays":"{n}d"},"filters":{"authorTitle":"Filter posts by author","authorAria":"Filter by author","authorFind":"Find authorâ¦","author":"Author","allAuthors":"All authors","tags":"Tags","category":"Category","clearCategories":"Clear categories","clearTags":"Clear tags","noCategoryFilter":"No category filter","noTagFilter":"No tag filter","searchCategories":"Search categoriesâ¦","searchTags":"Search tagsâ¦","uncategorized":"Uncategorized","untagged":"Untagged","sortByCount":"Sorted by post count (click for AâZ)","sortAZ":"Sorted AâZ (click for ZâA)","sortZA":"Sorted ZâA (click for post count)","labelSortCount":"Label sort: by post count","labelSortAsc":"Label sort: ascending","labelSortDe
1sc":"Label sort: descending","qualityTitle":"Filter by quality band","qualitySearch":"Search SEO, bandâ¦","qualitySearchAria":"Search quality bands","quality":"Quality","clearQuality":"Clear quality","yearTitle":"Filter by year","yearSearch":"Search yearâ¦","noYearsMatch":"No years match.","clearYears":"Clear years","statusYearTitle":"Filter by status and year","statusYearSearch":"Search status or yearâ¦","statusYearSearchAria":"Search status or year","localesTitle":"Filter by translation locales","contentLocaleTitle":"Filter by content locale","contentLocaleAria":"Filter by content locale","clearLocales":"Clear locales","clearPostFilters":"Clear post filters","pathSuggestions":"Path suggestions","dismiss":"Dismiss","noMatchingSuggestions":"No matching suggestions â keep typing a free path (e.g. /blog/my-post).","noSuggestionsLoaded":"No suggestions loaded. Type any site path.","typeToFilterSuggestions":"Type to filter suggestions, or enter any path.","noMatches":"No matches","year":"Year","noYearFilter":"No year filter","noQualityFilter":"No quality filter","selectedCount":"{count} selected","noYearsMatchQuery":"No years match â{query}â.","years":"Years","status":"Status","hasTranslation":"Has translation","missingTranslation":"Missing translation","noLocaleFilter":"No locale filter","locales":"Locales","showPathSuggestions":"Show path suggestions","hidePathSuggestions":"Hide path suggestions"},"settingsForm":{"sectionsAria":"Settings sections","siteIdentity":"Site identity","siteIdentityDesc":"Public brand, appearance defaults, and how dates appear across the site.","siteName":"Site name","siteNamePlaceholder":"My Site","siteNameHint":"Titles, RSS, JSON-LD, footer","tagline":"Tagline","taglineHint":"Footer + SEO description fallback","timezone":"Timezone","timezoneHint":"IANA zone for public + admin dates","defaultTheme":"Default theme","defaultThemeDesc":"Applied for visitors who have not chosen a theme yet (no cookie or local storage). The theme toggle still lets each person override. Light/dark token colors:","toolsTheme":"Tools â Theme tokens","toolsLogo":"Tools â Site logo","toolsFavicon":"Tools â Site icon","themeSystem":"System","themeLight":"Light","themeDark":"Dark","themeDefaultBadge":"default","landingPage":"Default landing page","landingPlaceholder":"(built-in home)","landingHintBefore":"Content at","landingHintAfter":"without changing the URL.","landingCustomPaths":"Custom paths often come from","toolsMenu":"Tools â Public main menu","or":"or","customPages":"custom pages","ownerContact":"Owner contact","ownerContactSummary":"JSON-LD / contact identity â rarely changes","ownerName":"Owner name","ownerEmail":"Owner email","privacyContactEmail":"Privacy contact email","privacyContactEmailPlaceholder":"owner email","privacyContactEmailHint":"Shown on the public Privacy page. Leave blank to use owner email.","privacySettingsHint":"Legal name, privacy contact, and /privacy notice","privacySettingsLink":"Privacy settings","operations":"Operations","operationsDesc":"Kill switches for comments, the public maintenance banner, and backup/restore failure notices.","maintenance":"Maintenance","live":"Live","comments":"Comments","commentsOff":"Comments off","maintenanceBanner":"Maintenance banner","maintenanceBannerDesc":"Show a site-wide banner on the public shell (does not block admin).","bannerMessage":"Banner message","commentsEnabled":"Comments enabled","commentsEnabledDescBefore":"Database flag. Env","commentsEnabledDescAfter":"still disables comments site-wide. Spam limits and rate windows:","backupNotifyOnFailure":"Notify on backup/restore failure","backupNotifyOnFailureDesc":"Email and in-app notification to the owner when a backup or restore job fails or is cancelled. Individual jobs can still opt out in the wizard. Also see","backupNotifyOnFailureLink":"Backup & restore","externalMediaRecoveryEnabled":"Auto-recover hotlinked media","externalMediaRecoveryEnabledDesc":"Copy third-party images and video into the media library (live URL first, Wayback Machine if the origin is gone) and rewrite posts to the local copy. Tur
1n off to stop outbound fetches. Catalog and ignore list:","externalMediaRecoveryEnabledLink":"External media","advancedCommentMod":"Advanced â Comment moderation","commentSection":"Comment section","commentSectionDesc":"How readers see the comment list and form under each post.","alwaysShow":"Always show","alwaysShowCommentsDesc":"List and form are visible as soon as the post loads (classic).","behindButton":"Behind a button","behindButtonCommentsDesc":"Collapsed until âRead commentsâ or âLeave a commentâ is pressed.","subscribePanels":"Subscribe / follow panels","subscribePanelsDesc":"RSS, email, and push CTAs can stay expanded or hide behind a button so readers focus on content. Configure each surface separately.","blogIndex":"Blog index","postPage":"Post page","authorPage":"Author page","postPageHint":"After the article â site + author subscribe","alwaysShowSubscribeDesc":"Subscribe cards visible on load.","behindButtonSubscribeDesc":"Collapsed until âSubscribe / followâ is pressed.","commentNotifyEmail":"Comment notify email","commentNotifyPlaceholder":"owner email \xb7 then NOTIFY_EMAIL env","commentNotifyHintBefore":"Inbox for pending-comment alerts. Leave blank to use","ownerEmailLink":"owner email","commentNotifyHintAfter":", then NOTIFY_EMAIL env. SMTP host/credentials stay in env only.","related":"Related:","commentModeration":"Comment moderation","writingQuality":"Writing & quality","writingDescAdvanced":"Shared editor comfort for posts and custom pages, plus the soft quality gate when publishing posts.","writingDescBasic":"Multi-author publish policy. Autosave, content lock, quality, and AI voice are under All settings.","autosaveOn":"Autosave {seconds}s","autosaveOff":"Autosave off","autosaveDirty":"Auto-save dirty posts and pages","autosaveDirtyDesc":"One site-wide switch for both the post editor and the page (Puck) editor. On by default. Each document can still opt out in its own editor.","autosaveInterval":"Auto-save interval","autosaveHint":"Posts and pages \xb7 only while unsaved","autosaveAria":"Auto-save interval in seconds for posts and pages","authorsCanPublish":"Authors can publish","authorsCanPublishDesc":"When on, role=author may publish and schedule their own posts. When off (default), authors only submit for review.","authorContentLock":"Author content lock","relatedFreeze":"Related freeze rules:","warnOff":"warn off","warnBelow":"warn <{n}","advanced":"Advanced","advancedDesc":"Spam limits, rate windows, cache TTL, and RSS size â tune when needed.","distribution":"Distribution","cacheRss":"Cache & RSS","qualityPublishWarn":"Quality publish warn","aiBrandVoice":"AI brand voice","aiBrandVoicePlaceholder":"e.g. Clear, practical, slightly dry humor. Prefer concrete Linux/sysadmin examples over marketing fluff.","postChrome":"Post chrome","postChromeDesc":"Reading time, relative dates, emoticon glyphs, and optional card meta (authors, categories, tags, comment counts) on public cards, search, articles, and pages. Not a theme-token setting.","showReadingTime":"Reading time","showReadingTimeDesc":"Show a â2 min readâ badge next to the date on cards, search, and articles. Off hides the badge; the value is still computed on save.","showRelativePublished":"Relative published time","showRelativePublishedDesc":"For posts younger than 24 hours, show â7 min agoâ / â9 hours agoâ. Hover still shows the full timestamp. Off always uses the calendar date.","convertEmoticons":"Convert emoticons","convertEmoticonsDesc":"Turn text smilies such as :-) and :) into emoji (\uD83D\uDE42) when rendering published posts and pages. Stored editor content is unchanged; turning this off shows the original text again.","showCardAuthors":"Card authors","showCardAuthorsDesc":"Show the author (and co-authors) on blog cards and search hits. Article pages already show a byline.","showCardCategories":"Card categories","showCardCategoriesDesc":"List the postâs categories on blog cards and search hits, as comma-separated links.","showCardTags":"Card tags","showCardTagsDesc":"List the postâs tags on blog cards and search hits, as comma-separated #links.","showCardCommentCount":"Card comment count","showCardCommentCountDesc":"Show how many approved comments a post has on blog cards and search hits. Hidden when the count is zero.","paginatorPlacement":"List paginator","paginatorPlacementDesc":"Where Previous/Next and âPage X of Yâ appear on the public blog archives and on admin lists that use page navigation (posts, comments, redirects, subscribers, audit, external media).","paginatorBottom":"Bottom","paginatorBottomDesc":"Below the list (default).","paginatorTop":"Top","paginatorTopDesc":"Above the list, so you can go to the next page without scrolling.","paginatorBoth":"Top and bottom","paginatorBothDesc":"The same controls above and below the list.","blogClouds":"Blog index clouds","blogCloudsDesc":"Optional category, tag, and year clouds on the public /blog page only (not on category or tag archives). Each item links to that archive. Off until you pick a look.","blogCloudOff":"Hidden","blogCloudOffDesc":"Do not show this cloud.","blogCloudSize":"Size by count","blogCloudSizeDesc":"More posts â larger type (default look).","blogCloudShade":"Shade by count","blogCloudShadeDesc":"Equal-size pills; more posts â darker fill.","blogCloudDropdown":"Dropdown","blogCloudDropdownDesc":"Select menu; options sorted by post count (highest first).","blogCloudLayout":"Arrangement","blogCloudLayoutDesc":"How enabled clouds sit on /blog.","blogCloudLayoutColumns":"Columns","blogCloudLayoutColumnsDesc":"Side by side on wide screens (current view).","blogCloudLayoutRows":"Rows","blogCloudLayoutRowsDesc":"Each cloud on its own full-width row.","blogCloudCategories":"Category cloud","blogCloudTags":"Tag cloud","blogCloudYears":"Year cloud","blogCloudSummaryOff":"All hidden","relatedListSlug":"Related posts list","relatedListSlugOff":"Hidden (no list)","relatedListSlugMissing":"{slug} (list missing)","relatedListSlugPlaceholder":"you-might-also-like","relatedListSlugHint":"Named list slug shown under each article. Empty hides the band. Create the list under","relatedListSlugLists":"Post lists","publishWebhook":"Publish webhook URL","publishWebhookPlaceholder":"https://hooks.example.com/mynix-publish","webPush":"Web Push for new posts","publicRevalidate":"Public revalidate","feedItemLimit":"RSS feed item limit","maxBodyLength":"Max body length","maxLinks":"Max links in body","minFillTime":"Min fill time","spamThreshold":"Spam score threshold","ipR
1ateLimit":"IP rate limit","ipWindow":"IP window","emailRateLimit":"Email rate limit","emailWindow":"Email window","systemReadOnly":"System \xb7 read-only","whatDoesThisMean":"What does this mean?","siteUrl":"Site URL","mediaRoot":"Media root","notSet":"not set","emailSubscribers":"Email subscribers","systemLabel":"system","helpNextToLabel":"next to a label for a short explanation.","adminSubscribers":"Admin â Subscribers","advancedCacheRss":"Advanced â Cache & RSS","cancel":"Cancel","discard":"Discard","opsCommentsEnabled":"Operations â Comments enabled","subscribeCardsOnLoad":"Subscribe cards visible on load.","behindSubscribeBtn":"Collapsed until âSubscribe / followâ is pressed.","toolsPublicMenu":"Tools â Public main menu","unsavedChanges":"Unsaved changes","freezeReviewOnly":"Review only","freezeFromSchedule":"Freeze from schedule","freezeScheduleAndLive":"Freeze schedule and live","lockReviewOnlyDesc":"Authors can edit drafts, scheduled, and live posts. Content is locked only while in review (optimization).","lockFromScheduleDesc":"Authors are locked in review and on scheduled posts. Editors must change scheduled content.","lockScheduleLiveDesc":"Authors are locked in review, scheduled, published, and unlisted. Strictest editorial freeze.","logoColon":"Logo:","faviconColon":"Site icon:","landingAllowlist":"Empty = built-in home. Allowlist: /blog, /blog/\'{\'slug\'}\', /category/\'{\'slug\'}\', /tag/\'{\'slug\'}\', or a published custom page path (e.g. /about, /links, /contact)","landingPatternTitle":"Use /blog, /blog/\'{\'slug\'}\', /category/\'{\'slug\'}\', /tag/\'{\'slug\'}\', a custom page path like /about or /links, or leave empty","subscribePanelsIntro":"RSS, email, and push CTAs can stay expanded or hide behind a button so readers focus on content. Configure each surface separately. Turn Web Push on/off under Advanced â Distribution; manage subscriber lists in Admin â Subscribers. RSS feed size: Advanced â Cache & RSS.","pushLabel":"push","blogIndexHint":"/blog â site RSS +","authorPageHint":"/author/\'{\'username\'}\'","authorLockDesc":"When authors cannot edit body, title, or slug on their own posts. Editors and owners are never locked by this policy. Publish permission:","authorLockDefault":"Default:","qualitySoftConfirm":"SEO / readability soft confirm","currentGate":"Current gate: {gate}. Confirm dialog on publish/schedule when either score is below the threshold.","aiBrandVoiceHint":"Optional tone for AI proofread, SEO, rewrite, page review, outline, translate ({used}/{max}). Empty = default MyNix persona. Key:","cacheRssSummary":"{seconds}s revalidate \xb7 {items} feed items","commentModRateLimits":"Rate limits and spam heuristics for public submissions. Master switch and display mode:","notifyInbox":"Notify inbox:","cacheRssDesc":"Data-cache TTL and /feed.xml size. Publish tags still bust immediately; page-level ISR stays at the build default. Where subscribe panels appear:","dataCacheTtl":"data-cache TTL","feedItemsCount":"{n} items","distributionWebhookDesc":"When a post becomes published, optionally POST a JSON payload to your automation (n8n, Zapier, Make) for social cross-posts. Never blocks publish. Empty = disabled. Public subscribe CTA layout:","webhookKeyHint":"distribution.publish_webhook_url \xb7 HTTPS recommended \xb7 payload event=post.published","webPushDesc":"Offer browser push on the public site (blog subscribe panel). Requires VAPID_PUBLIC_KEY and VAPID_PRIVATE_KEY in the environment. Readers must opt in. Whether the push control is visible by default:","manageSubscribersBefore":"Manage email subscribers under","digestMailAfter":". Digest mail is sent by","commentsOffSummary":"Comments off â knobs inactive","spamSummary":"Spam â¥{threshold} \xb7 IP {ipLimit}/{ipWindow}m","webhookOn":"webhook","pushOn":"push","summaryOff":"off","qualityOff":"Off","qualityZeroOff":"0 off","afterSanitize":"after sanitize","httpUrls":"http(s) URLs","botHoneypot":"bot honeypot","autoSpamWhen":"auto-spam when â¥","advancedDistribution":"Advanced â Distribution","opsSubscribePanels":"Operations â Subscribe / follow panels","discardedUnsaved":"Discarded unsaved changes.","settingsSaved":"Settings saved.","networkError":"Network error","autosaveOffShort":"Autosave off","maxCommentsIp":"Max comments per IP per window","maxCommentsEmail":"Max comments per email per window"},"themeUi":{"save":"Save theme","saving":"Savingâ¦","discard":"Discard","exportJson":"Export JSON","importJson":"Import JSON","resetAll":"Reset all to defaults","clear":"Clear","unsaved":"Unsaved changes \xb7 ","source":"source: {source}","discarded":"Discarded unsaved changes.","saved":"Theme tokens saved. Public pages pick this up on the next load.","saveFailed":"Save failed","clearedScheme":"Cleared all {scheme} overrides (not saved yet).","resetMsg":"Reset to hardcoded defaults (not saved yet).","exported":"Exported theme overrides JSON.","imported":"Imported theme overrides ({n} token value(s)). Save to publish.","importParseError":"Could not parse import file as JSON.","pickColor":"Pick color","color
1Value":"Color value","colorScheme":"Color scheme","light":"Light","dark":"Dark","entityLabel":"theme","accentButton":"Accent button","sampleLink":"Sample link","loadFailed":"Failed to load theme overrides","weightNormal":"Normal (400)","weightMedium":"Medium (500)","weightSemibold":"Semibold (600)","weightBold":"Bold (700)","defaultOptionSuffix":" (default)","effectiveTitle":"Effective: {value}","clearScheme":"Clear {scheme}","previewNav":"nav","previewBody":"Body","previewAccent":"accent","previewFoot":"foot","previewHeader":"$_ header","previewActive":"active","previewIdleSearch":"idle \xb7 search","previewContentBody":"Content body.","previewMutedBody":"Muted body \xb7","previewSurface":"surface","previewFooterAbout":"footer \xb7","previewAbout":"about","previewScheme":"{scheme} scheme","packsTitle":"Theme packs","packsHelp":"Apply a starter palette to the editor (not published until you Save). Packs are data only â no CSS or scripts. Export a pack to share with other MyNix installs.","applyPack":"Apply pack","exportPack":"Export pack","importPack":"Import pack JSON","packsImportHint":"Accepts theme packs or bare overrides JSON from Export.","packsDarkPreview":"Dark scheme swatches","packApplied":"Applied pack â{name}â ({n} token values). Save to publish.","exportedPack":"Exported theme pack JSON.","exportPackDefaultName":"My theme pack","exportPackDefaultDescription":"Exported from MyNix theme token editor.","importedOverrides":"Imported overrides","exportPackMetaTitle":"Export as pack","exportPackNameLabel":"Pack name (also used for id slug)","exportPackDescLabel":"Description","exportedPackNamed":"Exported pack â{name}â (id: {id}).","sitePackApplied":"Applied site pack â{name}â: {bits}. Theme tokens still need Save. Chrome (header/footer/menu) is saved.","sitePackChromeLoadFailed":"Could not load current header/footer/menu to merge the site pack.","sitePackBitTheme":"theme tokens (editor)","sitePackBitHeader":"header","sitePackBitFooter"
1:"footer","sitePackBitMenu":"menu presentation","sitePackBitMenuItems":"menu items","previewListItem":"List item","previewQuote":"A sample quotation.","previewCalloutNote":"Note","previewCalloutBox":"Box"},"menuUi":{"save":"Save menu","saving":"Savingâ¦","discard":"Discard","exportJson":"Export JSON","importJson":"Import JSON","resetDefault":"Reset to default","unsaved":"Unsaved changes \xb7 ","sourceDefault":" (not in DB until save)","highlightLocale":"Highlight locale column","defaultHint":"â
= default ({locale}); empty other locales use it","dragReorder":"Drag to reorder","hidePrimary":"Hide in primary (structure only)","remove":"Remove","path":"Path","showPathSuggestions":"Show path suggestions","childrenOf":"Children of item {n}","code":"Code","search":"Search","defaultSearch":"Default: Search","livePreview":"Live preview","loadedDefault":"Loaded slim code default (blog / search). Save to publish.","entityLabel":"menu","children":"Children","desktopPrimary":"Desktop primary","exactPathMatch":"Exact path match","mobileDrawerRoot":"Mobile drawer root","noChildrenYet":"No children yet. Add one for a secondary bar / mobile branch.","secondaryIfActive":"Secondary (if section active)","discardedUnsaved":"Discarded unsaved changes.","menuSaved":"Menu saved. Public header will pick this up on the next load.","exported":"Exported menu JSON.","importParseError":"Could not parse import file as JSON.","saveFailed":"Save failed","collapseChildren":"Collapse children","expandChildren":"Expand children","requiredDefaultLabel":"Required default label","defaultLabel":"Default label","loadFailed":"Failed to load menu","navPath":{"groups":{"pages":"Pages","categories":"Categories","customPages":"Custom pages"},"homeRoot":"Home (site root)","blogIndex":"Blog index","search":"Search","about":"About","links":"Links","footerHint":"Free path input \xb7 suggestions optional \xb7 ââ Enter to pick"},"sourcePrefix":"source: {source}","addTopLevel":"+ Add top-level item","addChild":"+ Child","secondaryMobile":"secondary / mobile","structureOnlyHint":"Empty default locale label: item is omitted from desktop primary; children hoist to mobile root / secondary bar when active.","noLabeledPrimaries":"(no labeled primaries)","previewEmpty":"(empty)","labelDefaultSuffix":"(default)","defaultPlaceholder":"Default: {text}","labelAriaDefault":"Label ({locale}, default locale)","labelAriaFallback":"Label ({locale}; empty uses default â{fallback}â)","importedItems":"Imported {count} top-level item(s). Save to publish.","defaultSectionLabel":"Section","sectionDesktopPresentation":"Desktop presentation","desktopPresentationHelp":"How top-level items with children appear on desktop (sm+). Mobile keeps the layered drawer.","desktopPresentation_flat_subnav":"flat + subnav","desktopPresentation_dropdown":"dropdown","desktopPresentationFlatHint":"Primary row is flat links. Children show in the secondary bar when that section is active.","desktopPresentationDropdownHint":"Parents open a compact dropdown for children. The desktop secondary bar is hidden to avoid duplicates.","desktopPresentation_mega":"mega","desktopPresentationMegaHint":"Parents open a full-width multi-column panel under the sticky header. Best when a section has many links. Desktop secondary bar is hidden.","previewDropdown":"Dropdown","previewMega":"Mega panel"},"logoUi":{"save":"Save logo","saving":"Savingâ¦","discard":"Discard","exportJson":"Export JSON","importJson":"Import JSON","resetDefault":"Reset to default","unsaved":"Unsaved changes \xb7 ","showWordmark":"Show wordmark next to mark / image","imageFromMedia":"Image from media library","clear":"Clear","mode":"Mode","builtIn":"Built-in mark & wordmark","inlineSvg":"Inline SVG","altText":"Alt text","markText":"Mark text","title":"Title","subtitle":"Subtitle","height":"Height (px)","none":"None","defaultLight":"Default / light","darkHeader":"Dark header","lightHeader":"Light header","livePreview":"Live preview","resetMsg":"Reset to built-in defaults (not saved yet).","entityLabel":"logo","chooseDarkImage":"Choose dark image","chooseImage":"Choose image","colorsFromTheme":"Colors come from Theme tokens â Public header â logo fields.","darkSchemeOptional":"Dark scheme (optional)","emptySiteName":"Empty â site name","sameAsLight":"Same as light","svgPasteHint":"Paste an SVG. Scripts and unsafe tags are stripped on save. Prefer","discardedUnsaved":"Discarded unsaved changes.","logoSaved":"Logo saved. Public header updates on the next load.","exported":"Exported logo config JSON.","importParseError":"Could not parse import file as JSON.","saveFailed":"Save failed","loadFailed":"Failed to load logo","importedResolve":"Imported logo config. Resolve media images if needed, then save.","builtInHtml":"Built-in HTML","darkLogoImage":"Dark logo image","logoImage":"Logo image","sourcePrefix":"source: {source}","modeImage":"Image","modeSvg":"SVG","svgPasteHintAfter":"fills so header accent tokens can still tint the mark."},"faviconUi":{"save":"Save icon","saving":"Savingâ¦","discard":"Discard","exportJson":"Export JSON","importJson":"Import JSON","resetDefault":"Reset to default","unsaved":"Unsaved changes \xb7 ","entityLabel":"site icon","sourcePrefix":"source: {source}","mode":"Mode","builtInMark":"Built-in $_ mark","modeImage":"Image","modeHint":"The built-in mark is the MyNix prompt $_ on a dark plate. It is the default for every new site.","imageFromMedia":"Image from media library","imageHint":"Prefer a square PNG or WebP at least 180\xd7180. The app generates the tab P
1NG, ICO frames (16â256), and the 180\xd7180 Apple home-screen icon.","defaultLight":"Default / light","darkSchemeOptional":"Dark scheme (optional)","none":"None","sameAsLight":"Same as light","chooseImage":"Choose image","chooseDarkImage":"Choose dark image","clear":"Clear","faviconImage":"Favicon image","darkFaviconImage":"Dark favicon image","livePreview":"Live preview","lightChrome":"Light browser chrome","darkChrome":"Dark browser chrome","tabSize":"{size}\xd7{size} tab","appleSize":"{size}\xd7{size} Apple","resetMsg":"Reset to built-in $_ mark (not saved yet).","discardedUnsaved":"Discarded unsaved changes.","iconSaved":"Site icon saved. Browsers may keep the previous icon until they refresh the tab.","exported":"Exported favicon config JSON.","importParseError":"Could not parse import file as JSON.","saveFailed":"Save failed","loadFailed":"Failed to load site icon","importedResolve":"Imported favicon config. Resolve media images if needed, then save."},"subscribersUi":{"authorFollows":"Author follows","confirmedSite":"Confirmed site-wide","pushOn":"Push on","pushOff":"Push off","pending":"Pending","all":"All","exportCsv":"Export CSV","email":"Email","status":"Status","locale":"Locale","created":"Created","emptyFilter":"No subscriptions in this filter.","emailsFire":"emails fire when a post is published.","queuedBy":"subscribers are queued and mailed by","delivery":"Delivery","digest":"Digest","instant":"Instant","instantDigest":"Instant / digest","scope":"Scope","webPushDevices":"Web Push devices","next":"Next â","prev":"â Previous","confirmed":"Confirmed","unsubscribed":"Unsubscribed","pushSettings":"Push settings","vapidMissing":"VAPID keys missing","pageOfRows":"Page {page} / {totalPages} \xb7 {total} rows","pagination":"Subscribers pagination"},"editorToolbar":{"clearTextColor":"Clear text color","backgroundColor":"Background color","clearHighlight":"Clear highlight","clearFormatting":"Clear formatting","formatting":"Formatting","jumpSection":"Jump to editor section","publishHtmlPreview":"Publish HTML preview (render + sanitize)","show":"Show","undo":"Undo (Ctrl+Z)","redo":"Redo (Ctrl+Shift+Z)","fontFamily":"Font family","fontSize":"Font size","textColor":"Text color","highlightBg":"Highlight / background color","bold":"Bold","italic":"Italic","underline":"Underline (Ctrl+U)","strike":"Strike","clearFormattingFull":"Clear formatting (marks, colors, fonts, alignment, indent)","subscript":"Subscript","superscript":"Superscript","heading2":"Heading 2","heading3":"Heading 3","alignLeft":"Align left","alignCenter":"Align center","alignRight":"Align right","wrapImageLeft":"Float left (wrap text)","wrapImageRight":"Float right (wrap text)","centerImage":"Center image (no wrap)","imageFit":"Image fit","imageFitContain":"Contain","imageFitCover":"Cover","imageFitFill":"Fill","justify":"Justify","bulletList":"Bullet list","orderedList":"Ordered list","listBulletType":"Bullet style","listOrderedType":"Numbering style","listStart":"Start at","listReversed":"Reversed numbering","listCompact":"Compact list","indent":"Increase indent (Tab)","outdent":"Decrease indent (Shift+Tab)","blockquote":"Blockquote","inlineCode":"Inline code","codeBlock":"Code block","link":"Link","insertSymbol":"Insert symbol (\xa9 â â
â â¦)","horizontalRule":"Horizontal rule","table":"Table","insertImage":"Insert image + caption","editImage":"Edit image (or double-click image)","insertVideo":"Insert video","editVideo":"Edit video (or double-click)","insertAudio":"Insert audio","editAudio":"Edit audio (or double-click)","insertFile":"Insert file attachment","editFile":"Edit attachment (or double-click)","youtubeEmbed":"YouTube / embed","math":"Math (LaTeX)","callout":"Callout","button":"Button","insertEmbedTitle":"Insert embed","insertEmbedLabel":"YouTube or embed URL","insert":"Insert","insertMathTitle":"Insert math","latex":"LaTeX","download":"Download","editImageTitle":"Edit image","insertImageTitle":"Insert image","editImageDesc":"Replace or keep this image. Library match, URL, upload, or AI â alt and caption are prefilled.","insertImageDesc":"Upload, pick from the library, generate with AI, or paste a URL. Optional alt and caption below.","updateImage":"Update image","editVideoTitle":"Edit video","insertVideoTitle":"Insert video","editVideoDesc":"Replace or keep this video. Current source is prefilled.","insertVideoDesc":"Upload an MP4, pick from the library, generate with AI, or paste a URL.","updateVideo":"Update video","editAudioTitle":"Edit audio","insertAudioTitle":"Insert audio","editAudioDesc":"Replace or keep this audio. Current source is prefilled.","insertAudioDesc":"Upload an MP3, pick from the library, or paste a URL. AI audio is not available yet.","updateAudio":"Update audio","editFileTitle":"Edit attachment","insertFileTitle":"Insert file attachment","editFileDesc":"Replace or keep this file. Published as a download hyperlink. Link text uses alt field below.","insertFileDesc":"PDF, ZIP, CSV, JSON, Office docs, ⦠Upload, library, or URL. Renders as a hyperlink (not embedded). Optional link text in Alt.","updateFile":"Update attachment","insertFileConfirm":"Insert attachment","editLink":"Edit link","insertLink":"Insert link","linkDialogBody":"Apply a URL to the selection, remove an existing link, or open a test tab. In the body, Ctrl / â / Alt +click also opens a link while editing.","url":"URL","openIn":"Open in","newTab":"New tab","sameTab":"Same tab","apply":"Apply","update":"Update","removeLink":"Remove link","openTest":"Open test tab","cancel":"Cancel","insertSymbolTitle":"Insert symbol","searchSymbols":"Search symbols","searchSymbolsPlaceholder":"Search name, alias, or characterâ¦","clearSearch":"Clear search","recent":"Recent","allCategories":"All","noSymbols":"No symbols match.","symbolPickerBody":"Pick a Unicode character (not an HTML entity). Filter by category and search by name.","symbolCount":"{count} symbols","symbolCountOne":"{count} symbol","symbolTip":"Tip: double-click a cell or press Enter when focu
1sed","testLink":"Test link â open in new tab","remove":"Remove","symbolCategories":{"arrows":"Arrows","checks":"Checks & boxes","stars":"Stars & bullets","math":"Math","currency":"Currency","punctuation":"Punctuation","legal":"Legal & marks","hands":"Hands & pointers","shapes":"Shapes","tech":"Tech & keys","greek":"Greek","music":"Music","weather":"Weather & nature","misc":"Misc"},"optionalTitle":"Optional title","altText":"Alt text","captionWp":"Caption (WP [caption])","imageUrl":"Image URL (/media/⦠or https://â¦)","doubleClickImage":"Double-click image to edit in media chooser","editInChooser":"Edit in chooserâ¦","invalidLatex":"Invalid LaTeX","linkText":"Link text (filename or label)","setFileUrl":"Set a file URL (published as a hyperlink)","setMediaUrl":"Set a media URL","noImageSrc":"No image src"},"themeCatalog":{"custom":"custom","default":"default","usedByPrefix":"Used by:","defaultScheme":"Default ({scheme}): {value}","revertDefault":"Revert to default","categories":{"canvas":{"label":"Body / canvas","description":"Page background and primary text. Sets the overall light or dark feel."},"surfaces":{"label":"Surfaces & panels","description":"Cards, elevated blocks, and code blocks (not header/footer chrome)."},"borders":{"label":"Borders & dividers","description":"Global hairlines on forms, cards, and tables."},"text-secondary":{"label":"Secondary text","description":"Muted body copy: captions, meta lines, blockquotes."},"accent":{"label":"Accent, links & actions","description":"Brand accent for content links, accent buttons, and focus rings."},"focus":{"label":"Focus ring","description":"Keyboard focus outline color (accessibility)."},"layout":{"label":"Layout","description":"Public and admin content column widths. Scheme-independent (same in light and dark)."},"header":{"label":"Public header","description":"Desktop + mobile header bar, logo, primary nav, subnav/breadcrumbs, and mobile drawer. Defaults track body tokens until customized."},"footer":{"label":"Public footer","description":"Site footer strip: background, copy, and links. Defaults track body tokens until customized."},"prose":{"label":"Article prose","description":"Lists, blockquotes, and callouts in published posts and the editor. Color defaults track accent / muted / surface until customized."}},"tokens":{"background":{"label":"Page background","description":"html/body background.","usedBy":"Body, full-page canvas"},"foreground":{"label":"Primary text","description":"Default body text color.","usedBy":"Body text, headings, solid buttons (inverted)"},"surface":{"label":"Surface","description":"Elevated panels and s
1oft fills.","usedBy":"Footer, cards, admin-ish public panels, header marks"},"code-bg":{"label":"Code background","description":"Inline code and preformatted blocks.","usedBy":"Prose code, TipTap code, chip backgrounds"},"border":{"label":"Border","description":"Default border color for UI chrome.","usedBy":"Header/footer borders, inputs, cards, tables"},"muted":{"label":"Muted text","description":"Secondary / de-emphasized copy.","usedBy":"Footer meta, idle nav, captions, blockquotes"},"accent":{"label":"Accent","description":"Primary brand / interactive color.","usedBy":"Links, active menu, accent buttons, logo, selection tint"},"accent-foreground":{"label":"Accent foreground","description":"Text/icon on solid accent backgrounds.","usedBy":"Accent buttons, badges on accent"},"ring":{"label":"Focus ring","description":"Outline for keyboard focus.","usedBy":"Buttons, inputs, nav links (ring-accent / --ring)"},"header-bg":{"label":"Header background","description":"Sticky header bar (desktop + mobile top row).","usedBy":"header shell, search strip base"},"header-fg":{"label":"Header text","description":"Primary text in the header toolbar.","usedBy":"Staff name, drawer titles, logo title"},"header-muted":{"label":"Header muted text","description":"Secondary header text and idle controls.","usedBy":"Idle primary nav, staff name, logo subtitle"},"header-border":{"label":"Header border","description":"Header bottom edge and subnav/breadcrumb separators.","usedBy":"Header, subnav, breadcrumbs, mobile drawer edges"},"header-accent":{"label":"Header accent","description":"Accent used for logo mark and active nav in the header.","usedBy":"Logo mark, active nav, focus rings in chrome"},"header-surface":{"label":"Header surface","description":"Elevated chips in the header (logo mark plate).","usedBy":"Logo mark background"},"header-nav-active-bg":{"label":"Nav active background","description":"Background of the active primary/secondary/mobile nav item.","usedBy":"Desktop primary nav, subnav chips, mobile drawer links"},"header-nav-active-fg":{"label":"Nav active text","description":"Text color of the active nav item.","usedBy":"Desktop primary, subnav, mobile drawer"},"header-nav-idle-fg":{"label":"Nav idle text","description":"Text color of inactive nav links.","usedBy":"Desktop primary, subnav, breadcrumbs"},"header-nav-hover-bg":{"label":"Nav hover background","description":"Hover background for idle nav items.","usedBy":"Desktop primary, mobile drawer rows"},"header-nav-hover-fg":{"label":"Nav hover text","description":"Hover text for idle nav items.","usedBy":"Desktop primary, breadcrumbs, footer-style header links"},"header-subnav-bg":{"label":"Subnav / breadcrumb bar","description":"Background of desktop secondary chips and mobile breadcrumbs.","usedBy":"HeaderSubnav (desktop), HeaderBreadcrumbs (mobile)"},"header-drawer-bg":{"label":"Mobile drawer background","description":"Slide-over menu panel on small screens.","usedBy":"MobileNav drawer layers"},"header-drawer-overlay":{"label":"Mobile drawer scrim","description":"Dimmed overlay behind the mobile menu.","usedBy":"MobileNav backdrop"},"header-logo-mark-bg":{"label":"Logo mark background","description":"Plate behind the $_ glyph.","usedBy":"Logo mark (desktop + mobile header)"},"header-logo-mark-border":{"label":"Logo mark border","description":"Border of the logo mark plate.","usedBy":"Logo mark"},"header-logo-mark-fg":{"label":"Logo mark glyph","description":"Color of the $_ glyph.","usedBy":"Logo mark"},"header-logo-title":{"label":"Logo wordmark title","description":"âMyNixâ w
1ordmark color.","usedBy":"Logo wordmark"},"header-logo-subtitle":{"label":"Logo wordmark subtitle","description":"âworldâ subtitle under the wordmark.","usedBy":"Logo wordmark"},"footer-bg":{"label":"Footer background","description":"Footer strip behind tagline and legal links.","usedBy":"Site footer"},"footer-fg":{"label":"Footer primary text","description":"Tagline and primary footer copy.","usedBy":"Footer tagline"},"footer-muted":{"label":"Footer muted text","description":"MOTD line, copyright, fine print.","usedBy":"Footer meta lines"},"footer-border":{"label":"Footer top border","description":"Separator above the footer.","usedBy":"Footer"},"footer-accent":{"label":"Footer accent","description":"Prompt glyph and highlighted footer links (e.g. MIT).","usedBy":"Footer $ prompt, external MIT link"},"footer-link":{"label":"Footer link","description":"Idle color for About / Links / Privacy / RSS.","usedBy":"Footer nav links"},"footer-link-hover":{"label":"Footer link hover","description":"Hover color for footer links.","usedBy":"Footer nav links"},"layout-max-width":{"label":"Public content max width","description":"Max width of the centered public column (header, main content, footer). Independent of admin chrome.","usedBy":"Container, public header/footer chrome rows"},"admin-layout-max-width":{"label":"Admin content max width","description":"Max width of the admin chrome column (header, primary nav, main). Independent of the public site column.","usedBy":"Admin chrome header, primary nav, main content shell"},"prose-list-indent":{"label":"List indent","description":"Left padding of ordered and unordered lists.","usedBy":"Published .prose-content lists and TipTap editor lists"},"prose-list-margin-block":{"label":"List vertical margin","description":"Space above and below ordered and unordered lists.","usedBy":"Published .prose-content lists and TipTap editor lists"},"prose-blockquote-border-color":{"label":"Blockquote bar color","description":"Left border color of blockquotes. Defaults to the accent.","usedBy":"Published and editor blockquotes"},"prose-blockquote-border-width":{"label":"Blockquote bar width","description":"Thickness of the blockquote left border.","usedBy":"Published and editor blockquotes"},"prose-blockquote-bg":{"label":"Blockquote background","description":"Background fill behind quote text. Default is transparent.","usedBy":"Published and editor blockquotes"},"prose-blockquote-fg":{"label":"Blockquote text","description":"Text color of blockquotes. Defaults to muted body copy.","usedBy":"Published and editor blockquotes"},"prose-blockquote-font-style":{"label":"Blockquote font style","description":"Normal or italic quote text.","usedBy":"Published and editor blockquotes"},"prose-callout-note-bg":{"label":"Note callout background","description":"Fill for note callouts. Defaults to a tint of the accent.","usedBy":"Published .callout-note and editor note variant"},"prose-callout-note-border":{"label":"Note callout border","description":"Border color for note callouts.","usedBy":"Published .callout-note and editor note variant"},"prose-callout-box-bg":{"label":"Box callout background","description":"Fill for box callouts. Defaults to the surface color.","usedBy":"Published .callout-box and editor box variant"},"prose-callout-box-border":{"label":"Box callout border","description":"Border color for box callouts. Defaults to the global border.","usedBy":"Published .callout-box and editor box variant"},"prose-callout-warning-bg":{"label":"Warning callout background","description":"Fill for warning callouts.","usedBy":"Published .callout-warning and editor warning variant"},"prose-callout-warning-border":{"label":"Warning callout border","description":"Border color for warning callouts.","usedBy":"Published .callout-warning and editor warning variant"}}},"systemUi":{"title":"System \xb7 read-only","subtitle":"Owner-only host snapshot â not editable \xb7 secrets never shown","whatMeans":"What does this mean?","yes":"yes","no":"no","on":"on","off":"off","active":"active","configured":"configured","notConfigured":"not configured","none":"none","set":"set","missing":"missing","notSet":"not set","siteUrl":"Site URL","siteUrlHint":"Canonical public origin this Node process uses for absolute links, redirects, and SEO (from NEXT_PUBLIC_SITE_URL). If wrong, feeds and emails point at the wrong host.","environment":"Environment","environmentHint":"NODE_ENV plus runtime versions: Node process, installed Next.js package, app package version, and optional short git SHA when the deploy sets GIT_SHA / GITHUB_SHA. A trailing isolation token (compose/<profile>, docker, podman, kubernetes) means this process is not a native host install.","environmentHintHost":"This Node process is running on the host, not inside a container. NODE_ENV plus runtime versions: Node, installed Next.js, app package, and optional short git SHA when the deploy sets GIT_SHA / GITHUB_SHA.","environmentHintCompose":"This process is the official Docker Compose app service ({service}, profile {profile}). Media, env, and any in-compose engine are isolated from a native host Node install. Rebuild after code changes with npm run docker:up.","environmentHintDocker":"This process looks like a Docker container, but it is not marked as the official Compose stack (no MYNIX_COMPOSE). The same image can be started with docker run or another orchestrator.","environmentHintPodman":"This process looks like a Podman (or compatible) container, not a native host install.","environmentHintKubernetes":"This process looks like a Kubernetes pod (KUBERNETES_SERVICE_HOST or the in-cluster service account), not a native host install.","isolationCompose":"compose","isolationDocker":"docker","isolationPodman":"podman","isolationKubernetes":"kubernetes","isolationUnknown":"unknown","process":"Process","processHint":"Live memory of this app worker: uptime, RSS (total process RAM), and V8 heap. Warnings fire when RSS exceeds the Defense RSS-warn threshold or the heap is nearly full â soft signals only, not secrets.","abuse":"Abuse (5m)","abuseHint":"In-process counters for the last ~5 minutes: public search queries that hit the FTS statement timeout, and comment submits rejected by rate limits (per-IP/email or site-wide). Resets when the process restarts.","defense":"Defense","defenseHint":"Effective app/DB protection knobs (env or code defaults): database pool size (PostgreSQL/MySQL), session statement_timeout, search FTS/timeout and max page, site-wide comment submit budget, and RSS memory warn level. Nginx edge rate limits are on the host config, not listed here.","audit":"Audit","auditHint":"Admin audit_log retention. AUDIT_RETENTION_DAYS (default 180) is how long events are kept. Prune runs on the ops health-check timer unless AUDIT_PRUNE=0. Browse events under /admin/audit (owner only
1).","auth":"Auth","authHint":"Login session lifetime: cookie maxAge, JWT expiry, and sessions.expires_at all use SESSION_TTL_MS (default 10h). Challenge is the TOTP step only (TOTP_CHALLENGE_LIFESPAN_MS, default 5m) â not full login duration.","ga4":"GA4","ga4Hint":"Google Analytics 4 measurement ID from NEXT_PUBLIC_GA4_ID or NEXT_PUBLIC_GA_MEASUREMENT_ID. Empty means analytics is off. When set, gtag.js loads on the public site only after the visitor accepts analytics (EEA cookie consent). The ID is public in page source when set â not a secret.","layoutPublic":"Layout \xb7 public","layoutPublicHint":"Centered public content column (header, Container, footer). Token layout-max-width via Settings â Theme tokens â Layout. CSS var --layout-max-width. Source default = globals.css 5xl; theme = site.theme_overrides.","layoutAdmin":"Layout \xb7 admin","layoutAdminHint":"Admin chrome column (header, primary nav, main). Token admin-layout-max-width via Settings â Theme tokens â Layout. CSS var --admin-layout-max-width. Independent of the public column.","layoutSourceDefault":"default","layoutSourceTheme":"theme override","layoutSourceHardcoded":"hardcoded (P2)","comments":"Comments","commentsHint":"Whether guests can comment: admin settings flag, optional COMMENTS_ENABLED=false env kill-switch (always wins when set), effective result, and public section display mode (always | button).","commentNotify":"Comment notify","commentNotifyHint":"Pending-comment email alerts (and SMTP for reader subscription mail). SMTP host/credentials stay env-only. Inbox is admin notify email, else owner email, else NOTIFY_EMAIL env.","emailSubscribers":"Email subscribers","emailSubscribersHint":"Public double-opt-in email alerts. Confirmed site-wide and author follows, pending confirmations, and instant vs digest delivery counts. Manage under /admin/subscribers. Digest flush: npm run subscriptions:send-digests.","distribution":"Distribution","distributionHint":"Publish webhook (host only â never full URL/tokens) and Web Push: admin push.enabled, VAPID keys present, effective push (settings + VAPID), and registered browser count.","subscribePanels":"Subscribe panels","subscribePanelsHint":"Admin display modes for public Subscribe/follow CTAs: always (expanded) or button (collapsed). Independent for blog index, post page, and author archive.","mediaRoot":"Media root","mediaRootHint":"Filesystem directory for uploaded media (MEDIA_ROOT or default under the app). Paths are shown without secrets.","srcNotifyEmail":"admin notify email","srcOwnerEmail":"owner email","srcEnv":"NOTIFY_EMAIL env","srcNone":"not configured","liveSettings":"Live settings","liveSettingsHint":"Effective admin product knobs (not compile defaults): revalidate TTL, feed size, quality warn, maintenance, default theme, landing path set?, authors publish/lock, autosave.","ai":"AI","aiHint":"AI assist availability: AI_ENABLED flag, whether a provider is usable, Grok (XAI_API_KEY) present, Ollama base URL present. Keys are never shown â only set/missing.","adminIp":"Admin IP filter","adminIpHint":"Whether ADMIN_IP_WHITELIST / ADMIN_IP_BLACKLIST are configured on the host. Only presence is shown â never the actual IPs or CIDRs. Blacklist always wins when set.","mediaRootSet":"MEDIA_ROOT set","mediaRootDefault":"default path","database":"Database","databaseHint":"Engine and live server version (PostgreSQL, MySQL, or SQLite), pooler detection when applicable (Neon -pooler host or DATABASE_PGBOUNCER), and connect timeout. statement_timeout/pool size are under Defense. Hover the engine/version for the full version string. Credentials never shown.","revalidateHop":"Revalidate hop","revalidateHopHint":"INTERNAL_REVALIDATE_SECRET and INTERNAL_REVALIDATE_URL presence for scheduled publish-due soft revalidation. Values never shown.","compileDefaults":"Compile defaults","compileDefaultsHint":"Built-in product defaults used when admin settings are empty or as documented baselines: public revalidate seconds, RSS item limit, quality publish-warn score, primary locale, and display timezone default. Compare with Live settings above.","footerSecrets":"Secrets (AUTH_SECRET, DATABASE_URL, SMTP_PASS, VAPID_PRIVATE_KEY, API keys, full webhook URLs) and IP allowlists live only in the host env â never exposed here. SMTP credentials stay env-only; inbox is the admin notify field (with fallbacks). Click ? next to a label for a short explanation.","open":"open","empty":"empty","pooled":"pooled","direct":"direct","custom"
1:"custom","builtIn":"built-in","node":"node","next":"next","app":"app","git":"git","up":"up","rss":"rss","heap":"heap","searchTimeouts":"search timeouts","commentRateLimits":"comment rate-limits","pool":"pool","stmt":"stmt","search":"search","maxPage":"max page","commentsBudget":"comments","rssWarn":"RSS warn","retain":"retain","prune":"prune","session":"session","challenge":"challenge","settingsWord":"settings","envKillSwitch":"env kill-switch","effective":"effective","display":"display","smtp":"SMTP","inbox":"inbox","site":"site","author":"author","pending":"pending","instant":"instant","digest":"digest","webhook":"webhook","pushSettings":"push settings","vapid":"VAPID","devices":"devices","blog":"blog","post":"post","authorSurface":"author","revalidate":"revalidate","feed":"feed","qualityWarn":"quality warn","maint":"maint","theme":"theme","landing":"landing","authorsPublish":"authors publish","lock":"lock","autosave":"autosave","flag":"flag","grokKey":"Grok key","ollama":"Ollama","whitelist":"whitelist","blacklist":"blacklist","secret":"secret","url":"url","connect":"connect","locale":"locale","tz":"TZ","days":"{n}d","dbVersionUnknown":"version unavailable","copyJson":"Copy JSON","copyJsonDone":"Copied","copyJsonHint":"Copy the full system diagnostic snapshot as formatted JSON (for support tickets or offline inspection). No secrets are included.","copyJsonPrompt":"Copy this diagnostic JSON:"},"pageEditor":{"loadingEditor":"Loading editorâ¦","untitledPage":"Untitled page","status":"Status","seo":"SEO","review":"Review","rewrite":"Rewrite","unsaved":"unsaved","discard":"Discard","discardTitle":"Discard unsaved changes","save":"Save","working":"Workingâ¦","autosaving":"Auto-savingâ¦","saveDirtyTitle":"Save page (unsaved changes)","saveCleanTitle":"Save page (nothing to save)","nothingToSave":"Nothing to save","preview":"Preview","autosaveThisPage":"Auto-save this page","autosaveEvery":"every {seconds}s while dirty \xb7 same site setting as posts","autosaveOffSite":"off site-wide for posts & pages â enable in","settings":"Settings","titleLocale":"Title ({locale})","pageStatus":"Page status","path":"Path","publicLinks":"Public links","viewPublic":"View public","publishOrUnlist":"Publish or unlist to get a public URL","publish":"Publish","unlist":"Unlist","draft":"Draft","retire":"Retire","deletePage":"Delete page","metaTitle":"Meta title","metaDescription":"Meta description","pageReview":"Page review","runReview":"Run review","rerunReview":"Re-run review","runReviewTitle":"Run AI page review on current draft","noReviewYet":"No review yet. Click Run review to analyze this draft.","noFieldSuggestions":"No field suggestions.","dismissReview":"Dismiss","scopeAll":"Title, SEO + all blocks","scopeBlocks":"Blocks only","scopeSeo":"Title + SEO only","rewritePersonaHint":"Enter a custom persona, or pick a preset profile","cancel":"Cancel","applyToForm":"Apply to form","discardAndCopy":"Discard and copy","translateReplace":"Translate & replace","retirePage":"Retire page","retireConfirmTitle":"Retire page?","deleteConfirmTitle":"Delete page?","unsavedTitle":"Unsaved changes","copyPrimaryDesc":"Copying from primary will replace the current locale content. Discard your unsaved edits and continue?","applySeoTitle":"Apply SEO suggestions?","rewriteConfirmTitle":"Rewrite page with AI?","rewriteConfirmBody":"This replaces the selected page fields/blocks in the form. You can still Discard or Save afterward.","translateConfirmTitle":"Translate from primary?","leaveDiscardOnly":"You have unsaved edits for this locale. Discard them, or cancel to keep editing.","leaveWithSave":"You have unsaved edits for this locale. Save them, discard them, or cancel to keep editing.","discarded":"Discarded unsaved changes.","failedLoadLocale":"Failed to load locale","autosaveOnNote":"Auto-save on for this page (every {seconds}s while dirty).","autosaveOffNote":"Auto-save off for this page.","pathUpdateFailed":"Path update failed","saveFailed":"Save failed","autosavedAt":"Auto-saved at {time}","autosaveFailed":"Auto-save failed â retrying next interval.","networkError":"Network error","aiNetworkError":"AI network error","statusChangeFailed":"Status change failed","
1statusSet":"Status: {status}","copyFailed":"Copy failed","copiedFromPrimary":"Copied from primary","seoSuggestFailed":"SEO suggest failed","seoReady":"SEO suggestions ready â open SEO panel notes; not applied.","nothingToRewrite":"Nothing to rewrite in the selected scope","rewriteFailed":"Rewrite failed","pageReviewFailed":"Page review failed","dismissedReview":"Dismissed page review.","appliedField":"Applied â{field}â â Save to persist.","appliedMany":"Applied {count} review suggestion(s) â Save to persist.","translateFailed":"Translate failed","structureWarn":"Warning: some block structure checks failed after leaf apply.","bodyLeavesUnchanged":"Body leaves: 0/{total} changed â model kept source language on rich text.","blocksChanged":"Blocks: {changed}/{total} leaf(s) changed; structure preserved.","retireBeforeDelete":"Retire the page first before deleting.","deleteFailed":"Delete failed","aiTranslate":"AI translate","cssClasses":"CSS classes","addClasses":"Add classesâ¦","cssClass":"CSS class","notInSafelist":"Not in safelist (will be dropped on save)","noImageSelected":"No image selected","changeImage":"Change image","pickImage":"Pick image","clear":"Clear","pageImage":"Page image","writeSection":"Write section contentâ¦","writeAnswer":"Write answerâ¦","newTitle":"Title","newPath":"Path","newPathPlaceholder":"contact","aiOutline":"AI from outline (optional)","outlinePlaceholder":"Describe the page sections you wantâ¦","generateDraft":"Generate draft","creating":"Creatingâ¦","createPage":"Create page","outlineFailed":"Outline generation failed","createFailed":"Create failed","noPageId":"No page id returned","outlineReview":"({provider}/{model}). Review title/path, then create.","unpublishDraft":"Unpublish (draft)","delete":"Delete","applyAll":"Apply all","dismiss":"Dismiss","saved":"Saved","copyFromPrimary":"Copy from primary","suggestSeo":"Suggest SEO","canonicalPath":"Canonical path","layoutTips":"Layout tips","applied":"Applied","current":"Current","suggested":"Suggested","createAndEdit":"Create and edit","pathHint":"Lowercase letters, numbers, hyphen, underscore; max 3 segments; no dots. Example: docs/install","outlineHelp":"Bullet outline â fills title/path and a Puck block draft (applied on create). You can still edit everything after.","outlineReady":"{count} blocks ready. Create page to apply.","outlineReadyOne":"1 block ready. Create page to apply.","apply":"Apply","leaveUnsaved":"Unsaved changes","partialApply":"Applied {applied} review suggestion(s); structure guard blocked {blocked} rich-text field(s). Save to persist.","translateConfirmBody":"This will replace the current {locale} title, SEO meta, and page blocks with an AI translation of the {source} source. Unsaved edits will be lost.","aiProposedMeta":"AI proposed meta for {field}","bodyLeavesUnchangedMsg":"Body leaves: 0/{total} changed â model kept source language on rich text.","schemaPrimary":"Structured data (this page)","schemaPrimaryHelp":"What this URL is. Core still adds breadcrumbs. FAQ uses Accordion items. Draft preview does not emit JSON-LD.","schemaType_WebPage":"Web page (default)","schemaType_AboutPage":"About page","schemaType_CollectionPage":"Collection / listing","schemaType_Article":"Article","schemaType_FAQPage":"FAQ page","schemaType_none":"None (breadcrumbs only)","schemaLocalBusiness":"Also emit LocalBusiness","schemaBizName":"Business name","schemaBizPhone":"Phone","schemaBizEmail":"Email","schemaBizUrl":"URL","schemaBizStreet":"Street address","schemaBizCity":"City","schemaBizPostal":"Postal code","schemaBizCountry":"Country"},"pagePuck":{"n1":"1","layoutStacked":"1 â stacked (image above)","n12":"12","n14":"14","n16":"16","n2":"2","layoutSideBySide":"2 â side by side","n3":"3","ratio3367":"33 / 67","n4":"4","n5":"5","ratio5050":"50 / 50","n6":"6","ratio6733":"67 / 33","n9":"9","about":"About","accent":"Accent","accordion":"Accordion","activeIndex0Based":"Active index (0-based)","alert":"Alert","align":"Align","altText":"Alt text","animation":"Animation","autoCycleIntervalMs0Off":"Auto-cycle interval (ms, 0 = off)","blog":"Blog","body":"Body","bullets":"Bullets","cssClass":"CSS class","ctaBand":"CTA band","caption":"Caption","cardGrid":"Card grid","cards":"Cards","carousel":"Carousel","center":"Center","chromeVariant":"Chrome variant","columns":"Columns","count":"Count","danger":"Danger","dar
1k":"Dark","defaultActiveIndex0Based":"Default active index (0-based)","defaultOpenIndex0Based1None":"Default open index (0-based, â1 = none)","description":"Description","dismissible":"Dismissible","divider":"Divider","excerpt":"Excerpt","excerpts":"Excerpts","expandMode":"Expand mode","eyebrow":"Eyebrow","fade":"Fade","featuredPost":"Featured post","first":"First","heading":"Heading","hero":"Hero","hide":"Hide","image":"Image","imageFit":"Image fit","imagePosition":"Image position","imageSize":"Image size","imageOnBottom":"Image on bottom","imageOnLeft":"Image on left","imageOnRight":"Image on right","imageOnTop":"Image on top","indicatorLabel":"Indicator label","indicatorLabels":"Indicator labels","info":"Info","items":"Items","itemAlignment":"Item alignment","label":"Label","large":"Large","layoutColumns":"Layout columns","left":"Left","light":"Light","line":"Line","link":"Link","linkTitleImage":"Link (title/image)","linkHref":"Link href","linkLabel":"Link label","linkList":"Link list","links":"Links","mediaIdAuto":"Media id (auto)","medium":"Medium","multipleOpen":"Multiple open","navigationControls":"Navigation controls","never":"Never","no":"No","none":"None","numbered":"Numbered","off":"Off","on":"On","onHoverTouch":"On hover / touch","oneAtATime":"One at a time","pauseAutoCycle":"Pause auto-cycle","positionIndicators":"Position indicators","postList":"Post list","chosenSlugs":"Chosen slugs","latestPublished":"Latest published","postSlugs":"Post slugs","slug":"Slug","source":"Source","postSlugEmptyLatest":"Post slug (empty = latest)","primary":"Primary","primaryCta":"Primary CTA","richText":"Rich text","right":"Right","rounded":"Rounded","roundedCircle":"Rounded circle","second":"Second","secondary":"Secondary","secondaryCta":"Secondary CTA","sectionHeader":"Section header","seeAllHref":"See-all href","seeAllLabel":"See-all label","shape":"Shape","show":"Show","slide":"Slide","slides":"Slides","small":"Small","space":"Space","spacer":"Spacer","style":"Style","subtitle":"Subtitle","success":"Success","surface":"Surface","tab":"Tab","tabs":"Tabs","thumbnail":"Thumbn
1ail","title":"Title","top":"Top","bottom":"Bottom","titleOptional":"Title (optional)","transition":"Transition","transitionDurationMs":"Transition duration (ms)","variant":"Variant","warning":"Warning","xl":"XL","yes":"Yes","writeSomething":"Write somethingâ¦","card":"Card","one":"One","two":"Two","three":"Three","question":"Question","answer":"Answer","questionOne":"Question one","questionTwo":"Question two","answerOne":"Answer one","answerTwo":"Answer two","alertMessage":"Alert message","firstTabContent":"First tab content","secondTabContent":"Second tab content","tabContent":"Tab content","callToAction":"Call to action","contain":"Contain","cover":"Cover","fill":"Fill","content":"Content","layout":"Layout","popular":"Popular","recentPosts":"Recent posts","sectionTitle":"Section title","blocks":"Blocks","outline":"Outline","fields":"Fields","transitionDurationMsAuto":"Transition duration (ms, â1 = auto)","transitionEasing":"Transition easing","easeOut":"Ease out","smoothExpoOut":"Smooth (expo-out)","symmetricInOut":"Symmetric (in-out)","materialStandard":"Material standard","linear":"Linear","slideHorizontal":"Slide (horizontal)","slideVertical":"Slide (vertical)","crossfade":"Crossfade","zoomFade":"Zoom-fade","coverflowCards":"Coverflow (cards)","coverflowSelect":"Coverflow (click to select)","zoomScaleInactive":"Zoom scale (inactive)","coverflowPerspectivePx":"Coverflow perspective (px)","coverflowSideScale":"Coverflow side scale","coverflowSideRotateY":"Coverflow side rotate Y (\xb0)","coverflowSideOffsetPct":"Coverflow side offset (%)","coverflowSideOpacity":"Coverflow side opacity","coverflowPreset":"Coverflow preset","coverflowPresetCustom":"Custom (manual P/S/R/O/A)","coverflowPresetClassic":"Classic iTunes / album rack","coverflowPresetSubtle":"Subtle product strip","coverflowPresetTight":"Tight stack (peek)","coverflowPresetWide":"Wide stage (cinematic)","coverflowPresetGhost":"Soft ghost sides","coverflowPresetFlat":"Bold flat-ish cards","coverflowPresetTunnel":"Extreme tunnel","coverflowPresetSelectRack":"Click rack (CSSScript style)","coverflowPresetSelectFlat":"Click rack (flat cards)","coverflowPresetSelectDeep":"Click rack (deep 3D)","direction":"Direction","horizontal":"Horizontal","vertical":"Vertical","zoomScaleTransition":"Zoom / scale","kenBurns":"Ken Burns","flipCardFlip":"Flip / card flip","parallaxLayers":"Parallax layers","wipeReveal":"Wipe / reveal","zoomPreset":"Zoom preset","zoomMode":"Zoom mode","zoomIn":"Zoom in","zoomOut":"Zoom out","kenBurnsPreset":"Ken Burns preset","kenBurnsEndScale":"Ken Burns end scale","kenBurnsPanX":"Ken Burns pan X (%)","kenBurnsPanY":"Ken Burns pan Y (%)","kenBurnsReverse":"Ken Burns reverse","forward":"Forward","reverse":"Reverse","flipPreset":"Flip preset","flipAxis":"Flip axis","flipAxisY":"Y (horizontal)","flipAxisX":"X (vertical)","flipPerspectivePx":"Flip perspective (px)","parallaxPreset":"Parallax preset","parallaxDepth":"Parallax depth","parallaxBgScale":"Parallax background scale","wipePreset":"Wipe preset","wipeDirection":"Wipe direction","wipeLeft":"Wipe left","wipeRight":"Wipe right","wipeUp":"Wipe up","wipeDown":"Wipe down","circleReveal":"Circle reveal","up":"Up","down":"Down","circle":"Circle","customManualKenBurns":"Custom (manual Ken Burns)","customManualZoom":"Custom (manual zoom)","customManualFlip":"Custom (manual flip)","customManualParallax":"Custom (manual parallax)","customManualWipe":"Custom (manual wipe)","slowZoomInCenter":"Slow zoom in (center)","panLeft":"Pan left","panRight":"Pan right","diagonalPanZoom":"Diagonal pan + zoom","subtleDrift":"Subtle drift","softZoomIn":"Soft zoom in","softZoomOut":"Soft zoom out","punchStrongIn":"Punch (strong in)","pullBackStrongOut":"Pull back (strong out)","horizontalFlipY":"Horizontal flip (Y)","verticalFlipX":"Vertical flip (X)","softCard":"Soft card","dramatic":"Dramatic","gentle":"Gentle","strong":"Strong","depthPop":"Depth pop","zoomScaleLabel":"Zoom scale","display":"Display","gridLayout":"Grid","sliderLayout":"Slider","visibleCards":"Visible cards","scrollMode":"Scroll mode","controlsAndScroll":"Controls + scroll","controlsOnly":"Controls only","scrollOnly":"Scroll only","carouselControls":"Carousel controls","carouselIndicators":"C
1arousel indicators","carouselAutoCycle":"Carousel auto-cycle","carouselTransition":"Carousel transition","every4s":"Every 4s","every6s":"Every 6s","every8s":"Every 8s","every10s":"Every 10s","exampleNote":"Example note","tip":"Tip","tone":"Tone","faqStructuredData":"FAQ structured data","namedList":"Named list","category":"Category","tag":"Tag","manualLinks":"Manual links","listSlug":"List slug","listSlugNone":"Choose a list","listSlugMissing":"{slug} (list missing)","categorySlugNone":"Choose a category","tagSlugNone":"Choose a tag","postListEmptyNoSlug":"Pick a list â otherwise this block is hidden on the public page.","postListEmptyListMissing":"This list is not in the catalog â the public block will be empty.","postListEmptyList":"This list has no posts â the public block will be empty.","postListEmptySlugs":"Add at least one post slug â otherwise this block is hidden on the public page.","postListEmptySource":"This source cannot resolve posts â the public block will be empty.","postListEmptyCount":"This count will render no cards on the public page.","postListEmptyNoCategory":"Pick a category â otherwise this block is hidden on the public page.","postListEmptyCategoryMissing":"This category is not in the catalog â the public block will be empty.","postListEmptyNoTag":"Pick a tag â otherwise this block is hidden on the public page.","postListEmptyTagMissing":"This tag is not in the catalog â the public block will be empty."},"puck":{"dismiss":"Dismiss","carousel":"Carousel","prevSlide":"Previous slide","nextSlide":"Next slide","slideN":"Slide {n}","timeUntilNext":"Time until next slide","addSlides":"Add slides with images to this carousel.","selectImage":"Select an image for this block.","latestPostsPlaceholder":"Latest posts appear here on the public page","featuredPlaceholder":"Featured post loads live from the blog (set an optional slug, or leave empty for the latest published post).","featured":"Featured","readMore":"Read more â","minRead":"{minutes, plural, one {# min read} other {# min read}}","justNow":"just now","minutesAgo":"{count, plural, one {# min ago} other {# min ago}}","hoursAgo":"{count, plural, one {# hour ago} other {# hours ago}}","tabs":"Tabs","postListSlider":"Post list slider","prevPosts":"Previous posts","nextPosts":"Next posts","postListCarousel":"Post list carousel","contentStripSlider":"Card slider","contentStripCarousel":"Card carousel","prevItems":"Previous","nextItems":"Next"},"mediaChooser":{"aiPrompt":"AI prompt","allowTextOnImage":"Allow short text on the image (off by default)","aspectRatio":"Aspect ratio","cancel":"Cancel","captionOptional":"Caption (optional)","cleanUnusedAi":"Clean unused AI","delete":"Delete","durationSeconds":"Duration (seconds)","endOfLibrary":"End of library","extraInstructions":"Extra instructions (optional)","generatedSession":"Generated this session (click to select)","hyperlinkInSentence":"Hyperlink in the current sentence","insertAs":"Insert as","loadingMore":"Loading moreâ¦","mediaUrl":"Media URL","ownParagraph":"Own paragraph (download-style link)","promptSent":"Prompt sent to model","scrollMore":"Scroll for more","showLibrary":"Show library","site":"Site","stillImageUrl":"Still image URL (optional â image-to-video)","url":"URL","unlinkFromPost":"Unlink from post","upload":"Upload","useThisUrl":"Use this URL","deleteMediaTitle":"Delete media row?","deleteMediaBody":"Removes the database row (file may remain on disk). This cannot be undone from the UI.","keepLibraryTitle":"Keep in global library only?","keepLibraryBody":"Unlinks this asset from the post. It remains available under All media for other posts.","cleanAiTitle":"Clean up unused AI variants?","unlinkUnusedAi":"Unlink unused AI","clearSearch":"Clear search","searchLibrary":"Search library","searchPlaceholder":"Search name, path, alt, captionâ¦","loading":"Loadingâ¦","inline":"Inline","block":"Block","openIn":"Open in","networkError":"Network error","uploadFailed":"Upload failed","enterMediaUrl":"Enter a media URL.","networkUnlink":"Network error while unlinking","networkDelete":"Network error while deleting","networkCleanup":"Network error during cleanup","networkGenerate":"Network error while generating","postIdRequired":"postId is required to generate and link AI media.","postTitleRequired":"Post title is required for AI context.","audioNotAvailable":"AI audio generation is not available yet. Use Upload or paste a URL.","startingVideo":"Starting video job⦠this can take 1â3 minutes","generatingImage":"Generating imageâ¦","generationNoMedia":"Generation returned no media.","useSelection":"Use selection","showAllProvenance":"Show every provenance: uploads, AI-generated, and site library (import)","onlyAi":"Only assets generated by AI for posts (source = ai)","onlyUpload":"Only files uploaded in admin (source = upload)","onlySiteImport":"Media imported with the site (e.g. WordPress) â shared, read-only for authors","searchFullLibrary":"Search the full library (not limited to this post)","onlyLinkedPost":"Only media already linked to this post (featured or body)","cleanUnusedAiTitle":"Unlink AI media on this post that is not the featured image and not used in the body. Files stay on disk; they remain in the global library.","linkedToPost":"Media linked to this post","globalLibrary":"Global media library","generateVideo":"Generate video","generateImage":"Generate image","linkTextOptional":"Link text (optional)","altTextOptional":"Alt text (optional)","uploading":"Uploadingâ¦","chooseKindFile":"Choose a {kind} file ({accept}).","selectOrUploadKind":"Select or upload a {kind} first.","ogSocial":"OG / social (â16:9)","srcAll":"All","srcAi":"AI","
1srcUpload":"Upload","srcSite":"Site","scopeGlobal":"Global","scopeThisPost":"This post","kindImage":"image","kindVideo":"video","kindAudio":"audio","kindFile":"file","chooseKind":"Choose {kind}","defaultDescription":"Pick from the library or upload a new file.","defaultDescriptionWithUrl":"Pick from the library or upload a new file, or paste a URL.","tabLibrary":"Library","tabUpload":"Upload","tabGenerate":"Generate","tabUrl":"URL","showingOf":" \xb7 showing {shown} of {total}","matchesCount":" \xb7 {count} matches","matchCountOne":" \xb7 {count} match","noMatches":" \xb7 no matches","noKindMatch":"No {kind}s match â{query}â.","noKindYet":"No {kind}s yet. Use Upload.","noKindYetWithUrl":"No {kind}s yet. Use Upload or URL.","expectsKind":"This chooser expects a {kind}. Selected file is {mime}.","cleanupStatus":"Cleanup: unlinked {unlinked} of {scanned} AI (kept featured {featured}, in-body {inBody})","cleanAiBody":"Unlinks AI media attached to this post that is not the featured image and not referenced in the body. Files stay on disk; rows stay in the global library unless you delete them separately.","audioNotAvailableYet":"AI audio generation is not available yet. Use Upload or paste a URL.","fileGenNotWired":"AI file generation is not wired yet (PDF/JSON/XLSX/etc.). Use Upload or paste a URL.","uploadHint":"Uploads go into the media library. Insert into the editor when you confirm.","uploadHintLinked":"Uploads go into the media library and are linked to this post. Insert into the editor when you confirm.","uploadHintFeatured":"Uploads go into the media library and are linked to this post. Insert into the editor when you confirm; featured assignment still needs Save post.","uploadKind":"Upload {kind}","selectedAfterUpload":"Selected after upload: {name}","audioGenUnavailable":"AI audio generation is not available via Grok Imagine yet. Use Upload or URL for MP3 embeds.","fileGenPipeline":"AI generation of binary documents (PDF, JSON, XLSX, ZIP, â¦) is not wired yet. The pipeline is ready for a future model call that writes into the media library. For now use Upload or URL â files publish as download hyperlinks.","generateUsesContext":"Uses post context (title, excerpt, meta, tags, body prose) plus optional instructions. Result is saved to the media library and linked to this post. Uses AI budget (Grok Imagine).","generateUsesContextVideo":"Uses post context (title, excerpt, meta, tags, body prose) plus optional instructions. Result is saved to the media library and linked to this post. Uses AI budget (Grok Imagine video â async, billed per second).","imageGenUnavailable":"Image generation unavailable. Set AI_ENABLED=true and XAI_API_KEY.","videoGenUnavailable":"Video generation unavailable. Set AI_ENABLED=true and XAI_API_KEY.","aspectWide":"16:9 wide","aspectTall":"9:16 tall","aspectSquare":"1:1 square","aspect43":"4:3","aspect32":"3:2","stillUrlPlaceholder":"https://⦠or /media/â¦/still.webp","stillUrlHint":"Leave empty for text-to-video. Public URL or absolute site URL works best for Imagine.","promptVideoPlaceholder":"e.g. slow pan over server racks, subtle particle motionâ¦","promptImagePlaceholder":"e.g. dark terminal aesthetic, abstract circuit boardâ¦","urlHint":"External or relative URLs work for embeds. Featured images need a library media id (use Upload, Library, or Generate).","newTab":"New tab (_blank)","sameTab":"Same tab (_self)","linkTextPlaceholder":"e.g. Download weather script","selected":"Selected","badgeSite":"Site","badgeAi":"AI","aspectOg":"OG / social (â16:9)"},"postQuality":{"allChecks":"All checks & stats","read":"Read","noAiResponse":"No AI response","networkAi":"Network error calling AI","nothingToFix":"Nothing to fix","labelSeo":"SEO","labelRead":"Read"},"meta":{"metaAdmin":"Admin","metaPosts":"Posts \xb7 Admin","metaPages":"Pages \xb7 Admin","metaMedia":"Media \xb7 Admin","metaComments":"Comments \xb7 Admin","metaReview":"Review \xb7 Admin","metaUsers":"Users \xb7 Admin","metaAudit":"Audit \xb7 Admin","metaSubscribers":"Subscribers \xb7 Admin","metaRedirects":"Path rules \xb7 Admin","metaSettings":"Settings \xb7 Admin","metaLogin":"Admin login","metaForgot":"Forgot password \xb7 Admin","metaSetPassword":"Set password \xb7 Admin","metaEditPage":"Edit page \xb7 Admin","metaNewPage":"New page \xb7 Admin","metaEditPost":"Edit post \xb7 Admin","metaLogo":"Site logo \xb7 Admin","metaFavicon":"Site icon \xb7 Admin","metaTheme":"Theme tokens \xb7 Admin","metaMenu":"Main menu \xb7 Admin","admin":"Admin","posts":"Posts \xb7 Admin","editPost":"Edit post \xb7 Admin","pages":"Pages \xb7 Admin","newPage":"New page \xb7 Admin","editPage":"Edit page \xb7 Admin","media":"Media \xb7 Admin","comments":"Comments \xb7 Admin","review":"Review \xb7 Admin","users":"Users \xb7 Admin","audit":"Audit \xb7 Admin","
1subscribers":"Subscribers \xb7 Admin","redirects":"Path rules \xb7 Admin","settings":"Settings \xb7 Admin","theme":"Theme tokens \xb7 Admin","logo":"Site logo \xb7 Admin","favicon":"Site icon \xb7 Admin","menu":"Main menu \xb7 Admin","login":"Admin login","forgot":"Forgot password \xb7 Admin","setPassword":"Set password \xb7 Admin","customCode":"Custom code \xb7 Admin","footer":"Footer \xb7 Admin","header":"Header \xb7 Admin","postCards":"Post cards \xb7 Admin","lists":"Lists \xb7 Admin","newList":"New list \xb7 Admin","editList":"Edit list \xb7 Admin","metaLists":"Lists \xb7 Admin","externalMedia":"External media \xb7 Admin","categories":"Categories \xb7 Admin","tags":"Tags \xb7 Admin","privacy":"Privacy \xb7 Admin"},"filtersUi":{"noYearFilter":"No year filter","noQualityFilter":"No quality filter","selectedCount":"{count} selected","sortedByPostCount":"Sorted by post count (click for AâZ)","labelSortByCount":"Label sort: by post count","labelSortAsc":"Label sort: ascending","labelSortDesc":"Label sort: descending","noYearsMatch":"No years match â{query}â."},"notifications":{"comment_pending":{"title":"New comment pending moderation","body":"{authorName}: {preview}","bodyNoPreview":"{authorName} left a comment"},"review_submitted":{"title":"Post ready for review: {postSlug}","body":"{submitterName} submitted â{postTitle}â"},"post_published":{"title":"Post published: {postSlug}","body":"Your post was published. â{postTitle}â"},"post_scheduled":{"title":"Post scheduled: {postSlug}","body":"Your post was scheduled. â{postTitle}â","bodyWithWhen":"Your post was scheduled for {scheduledFor}. â{postTitle}â"},"review_sent_back":{"title":"Changes requested: {postSlug}","bodyStatus":"Sent back to â{toStatus}â.","bodyEditor":"Editor: {editorName}","bodyNote":"{note}"},"post_assigned":{"title":"Post assigned: {postSlug}","body":"{assignerName} assigned you a post.","anonymousEditor":"An editor"},"external_media_recovery":{"title":"External media recovery","body":"Recovered {recovered}, rewritten {rewritten}, failed {failed}.","bodyWithFailed":"Recovered {recovered}, rewritten {rewritten}, failed {failed}.\\n{failedUrls}"},"backup_job_terminal":{"title":"{kind} {outcome}: {jobName}","body":"Job â{jobName}â ended without success.","bodyWithError":"{error}","kind_backup":"Backup","kind_restore":"Restore","outcome_failed":"failed","outcome_cancelled":"cancelled"},"privacy_erase":{"title":"Privacy erase completed","body":"{email}: removed {comments} comment(s) and {subscriptions} subscription(s)."},"privacy_request":{"title":"Privacy request: {kind}","body":"{name} <{email}> submitted a privacy request."}},"mail":{"passwordReset":{"subject":"Password recovery â site admin","hello":"Hello {name},","blank":"","requested":"A password recovery was requested (IP {ip}) for your admin account ({username}).","useLink":"Use this link to set a new password (valid for {minutes} minutes):","link":"{resetUrl}","ignore":"If you did not request this, ignore this email. Your current password is unchanged.","cancelNote":"You can still sign in with your old password; a successful login cancels the pending request.","signOff":"â Site admin"},"privacyEraseConfirm":{"subject":"Confirm deletion of comments and email alerts","intro":"Someone asked to delete guest comments and email-alert subscriptions for this address.","blank":"","useLink":"If that was you, confirm here (valid {hours} hours):","link":"{confirmUrl}","ignore":"If you did not request this, ignore this email. Nothing is deleted until you confirm."},"privacyEraseDone":{"subject":"[{brand}] Privacy erase completed","intro":"A visitor confirmed deletion of comments and email-alert subscriptions.","blank":"","counts":"Address {email}: {comments} comment(s), {subscriptions} subscription(s) removed."},"privacyRequest":{"subject":"[{brand}] Privacy request: {kind}","intro":"A visitor sent a privacy request from /privacy.","blank":"","from":"From: {name} <{email}>","kind":"Type: {kind}","message":"{message}"},"commentPending":{"subject":"[{brand}] New comment pending moderation","post":"Post: {postRef}","from":"From: {authorName} <{authorEmail}>","blank":"","preview":"{preview}","moderate":"Moderate: {moderateUrl}"},"reviewSubmitted":{"subject":"[{brand}] Post ready for review: {postSlug}","intro":"An author submitted a post for editorial review.","blank":"","title":"Title: {postTitle}","slug":"Slug: {postSlug}","by":"By: {submitter}","reviewQueue":"Review queue: {reviewUrl}","editPost":"Edit post: {editUrl}"},"postPublished":{"subject":"[{brand}] Post {outcome}: {postSlug}","outcomePublished":"Your post was published.","outcomeScheduled":"Your post was scheduled.","outcomeScheduledWhen":"Your post was scheduled for {scheduledFor}.","blank":"","title":"Title: {postTitle}","slug":"Slug: {postSlug}","edit":"Edit: {editUrl}","public":"Public: {publicUrl}"},"reviewSentBack":{"subject":"[{brand}] Changes requested: {postSlug}","intro":"An editor sent your post back to â{toStatus}â for more work.","editor":"Editor: {editorName}","blank":"","title":"Title: {postTitle}","slug":"Slug: {postSlug}","noteHeading":"Note from editor:","note":"{note}","edit":"Edit: {editUrl}"},"postAssigned":{"subject":"[{brand}] Post assigned: {postSlug}","hello":"Hello {name},","blank":"","assigned":"{assignerName} assigned you a post.","slug":"Slug: {postSlug}","edit":"Edit: {editUrl}","anonymousEditor":"An editor"},"backupJobTerminal":{"subject":"[{brand}] {kind} {outcome}: {jobName}","intro":"A site {kind} job {outcome}.","blank":"","jobName":"Job: {jobName}","jobId":"Id: {jobId}","error":"Error: {error}","open":"Open job: {jobUrl}"},"staffInvite":{"subject":"[{brand}] You\'re invited as {role}","hello":"Hello {displayName}
1,","blank":"","invited":"You have been invited to the site admin as â{role}â (username: {username}).","setPassword":"Set your password (valid for {expiresMinutes} minutes):","link":"{setPasswordUrl}","ignore":"If you were not expecting this, ignore this email.","signOff":"â {brand}","htmlInvited":"You have been invited to the site admin as <strong>{role}</strong> (username: {username}).","htmlSetPassword":"<a href=\\"{setPasswordUrl}\\">Set your password</a> (valid for {expiresMinutes} minutes)"}},"setupUi":{"title":"First-run setup","intro":"No owner account exists yet. Configure site basics, create the owner, and optionally seed starter content. Technical users can still use {cli} instead.","sectionSite":"Site","sectionOwner":"Owner account","sectionNotify":"Notifications","sectionSmtp":"SMTP (optional)","sectionSeed":"Starter content","siteTitle":"Site title","description":"Description / tagline","publicUrl":"Public site URL","publicUrlHint":"Used for RSS, emails, and absolute links (e.g. https://blog.example.com).","timezone":"Timezone","ownerEmail":"Owner email","ownerUsername":"Username","ownerPassword":"Password","ownerDisplayName":"Display name","notifyEmail":"Notify email","smtpToggle":"Configure SMTP now","smtpHost":"SMTP host","smtpPort":"Port","smtpUser":"SMTP user","smtpPass":"SMTP password","smtpFrom":"From address","seedStarter":"Seed About + Links pages and menu items","seedDemo":"Seed demo curriculum (guides, Puck lab, sample posts)","seedDemoHint":"Takes a few minutes. Uses multi-role demo staff accounts.","submit":"Complete setup","submitting":"Completing setupâ¦","submittingWithDemo":"Creating owner, starter pages, and demo curriculum. This can take a few minutes â leave this tab open.","submittingBasic":"Creating the owner account and site settings.","doneTitle":"Site ready","doneOwner":"Owner {username} was created.","doneEnvWritten":"Environment values were written to .env.local (restart the app if SMTP or the public URL do not take effect).","doneEnvSkipped":"Site settings are stored in the database; SMTP/public URL env write was skipped or not needed.","doneDemoOk":"Demo curriculum was seeded successfully â posts and the Guide hub are ready.","doneDemoErr":"Demo curriculum finished with errors â check /tmp/mynix-seed-demo.log in the app container.","doneDemoMiss":"Demo seed could not be started â rebuild the app image or run seed:demo manually (see docs/docker.md).","demoStaffTitle":"Demo staff accounts (for review-queue labs)","demoStaffBody":"Created with the curriculum. Change or disable these passwords before any real deployment.","goLogin":"Go to admin login","viewSite":"View public site","networkError":"Network error â is the database reachable?","errAlready":"Setup is already complete.","errBadJson":"Invalid request body.","errTitle":"Site title is required.","errEmail":"Owner email is invalid.","errUsername":"Username must be 2â64 characters: letters, digits, . _ - only.","errPassword":"Password must be at least 10 characters.","errUrl":"Public site URL must be a valid http(s) origin.","errExists":"A user with that email or username already exists.","errOwner":"Could not create owner. Check database and try again.","errSettings":"Owner created but settings failed. Check database logs.","errHash":"Could not hash password.","errGeneric":"Setup failed","languageHelp":"Admin UI and public site default language for this install."},"importUi":{"metaTitle":"Import","title":"Import content","description":"Stage a WordPress export and optional uploads archive, choose what to import, then run the pipeline on the server.","providerWp":"WordPress (WXR)","providerWpHint":"Upload a WordPress eXtended RSS (.xml) export, optionally plus a zip/tar.gz of wp-content/uploads. The server classifies files, then runs the same steps as npm run import:wxr / import:media / import:featured / import:redirects.","backSettings":"Settings","stepCreateHint":"Create an import job to begin staging files. Owner only.","startJob":"New WordPress import job","jobId":"Job","status_draft":"Draft","status_ready":"Ready","status_running":"Running","status_succeeded":"Succeeded","status_failed":"Failed","status_cancelled":"Cancelled","stepUpload":"1. Stage files","dropWxr":"WordPress export (XML)","dropWxrHint":".xml or an archive that contains a single WXR file.","dropUploads":"Media uploads (optional)","dropUploadsHint":"zip/tar.gz of wp-content/uploads (single root folder or raw tree).","removeFile":"Remove","noFiles":"No files staged yet.","stepOptions":"2. What to import","stepOptionsHint":"WXR is required. Media options need an uploads archive.","optPosts":"Posts, c
1ategories, and tags","optComments":"Comments","optMedia":"Media files (from uploads archive)","optMediaNeedUploads":"Upload an uploads archive to enable.","optFeatured":"Featured images (_thumbnail_id)","optRedirects":"Redirects (old WordPress URLs â new paths)","optDryRun":"Dry-run only (no database writes)","runImport":"Start import","runDry":"Run dry-run","working":"Workingâ¦","stepProgress":"Progress","newJob":"Start another job","errLoad":"Could not load job.","errCreate":"Could not create job.","errUpload":"Upload rejected.","errRemove":"Could not remove file.","errStart":"Could not start import.","errNetwork":"Network error.","uploadProgress":"Upload progress","sseLive":"Live progress (SSE). Stay on this page while the import runs.","overlayTitle":"Import in progress","overlayHint":"Please stay on this page. Leaving may abort the import.","overlayAbort":"Abort importâ¦","leaveTitle":"Import still running","leaveBody":"An import is in progress. Leave and abort it, or stay on this page until it finishes. The current step may complete before the job stops.","leaveStay":"Stay on page","leaveAbort":"Leave & abort import","errAbort":"Could not abort import.","classifyWxrDetected":"WordPress WXR export detected","classifyWxrInArchive":"WordPress WXR export found in archive","classifyUploadsFromFolder":"Uploads tree from folder â{name}â","classifyUploadsFromRoot":"Uploads tree from archive root","classifyWxrTooLarge":"WXR file is too large","classifyNotWxr":"File does not look like a WordPress WXR export","classifyInvalidWxr":"Invalid WXR: {detail}","classifyUnsupportedType":"Unsupported file type (use .xml or a zip/tar archive)","classifyExtractTooLarge":"Extracted archive is too large","classifyExtractFailed":"Could not extract archive: {detail}","classifyMultipleWxr":"Archive contains multiple WXR exports","classifyArchiveEmpty":"Archive is empty","classifyUploadsEmpty":"No files found in uploads tree","errKindMismatchWxr":"Expected a WordPress WXR export","errKindMismatchUploads":"Expected a wp-content/uploads archive","errDiskFull":"No space left on the server. Free disk space and try again. ({detail})","errDiskPermission":"Server cannot write import files ({detail})","errDiskReadOnly":"Import storage is read-only ({detail})","errServer":"Server error: {detail}"},"backupUi":{"metaTitle":"Backup","title":"Site backup","description":"Create and download site backups (database and/or media). Owner only. Jobs run via the backup worker (or INLINE in development).","backSettings":"Settings","newBackup":"New backup","edit":"Edit","wizardTitleEdit":"Edit backup schedule","saveJob":"Save changes","saving":"Savingâ¦","errUpdate":"Could not update job.","errNotEditable":"This job cannot be edited. Only scheduled or queued backups (not spawned runs) can be changed.","editHint":"Changes apply to this schedule in place. The next run uses the new scopes, time, and filters. Past runs are not changed.","whenNowEditHint":"âRun nowâ turns this schedule into a one-shot job and stops future repeats.","refresh":"Refresh","jobsTitle":"Backup jobs","jobsEmpty":"No backup jobs yet.","colName":"Name","colStatus":"Status","colKind":"Kind","colSize":"Size","colCreated":"Created","colActions":"Actions","status_draft":"Draft","status_scheduled":"Scheduled","status_queued":"Queued","status_running":"Running","status_succeeded":"Succeeded","status_failed":"Failed","status_cancelled":"Cancelled","kind_backup":"Backup","kind_restore":"Restore","download":"Download","cancel":"Cancel","pin":"Pin","unpin":"Unpin","delete":"Delete","deleteJobTitle":"Delete backup job?","deleteJobBody":"Delete â{name}â and its archive file? This cannot be undone.","wizardTitle":"Create backup","stepScope":"Scope","stepData":"Data","stepMedia":"Media","stepFormat":"Format","stepWhen":"Schedule","stepReview":"Review","scopeData":"Database","scopeDataHint":"Selected FK-safe presets (tables).","scopeMedia":"Media files","scopeMediaHint":"Files under MEDIA_ROOT from the media catalog.","nameLabel":"Job name (optional)","namePlaceholder":"e.g. weekly-full","presetHint":"Choose presets or a shortcut. Free table exclude is not available in v1.","shortcutFull":"Full site (recommended)","shortcutEverything":"Everything (incl. audit & sessions)","preset_settings":"Settings","preset_auth":"Auth (users â secrets)","preset_content":"Content","preset_ops":"Subscriptions & notifications","preset_media_catalog":"Media catalog only","preset_audit":"Audit log","preset_ephemeral":"Ephemeral (sessions, rate buckets)","badgeSecrets":"secrets","badgePii":"PII","mediaIncludeDerivatives":"Include WebP derivatives","mediaTypes":"Media types","type_image":"Images","type_video":"Video","type_audio":"Audio","type_file":"Files","mediaPrefix":"Folder prefix (optional)","mediaPrefixHint":"e.g. 2017/09 â leave empty for all","mediaExt":"Extensions filter (optional, comma-separated)","mediaExtPlaceholder":"png,jpg,pdf","mediaInventory":"{count} files \xb7 {size}","formatLabel":"Archive format","formatTarGz":"tar.gz (mynix-backup v1)","whenNow":"Run now","whenOnce":"Once atâ¦","whenRecurring":"Recurring","runAtLabel":"Run at (local input â stored as UTC ISO)","recurringDaily":"Daily","recurringWeekly":"Weekly","timeUtc":"Time (UTC HH:mm)","dayOfWeek":"Day of week (0=Sun ⦠6=Sat)","dumpMode":"Dump mode","dumpModeHint":"Resolved at create time from server env and dialect (logical dump on MySQL/SQLite; COPY on Neon/PostgreSQL pooler is normal).","reviewScopes":"Scopes","reviewPresets":"Presets","reviewWhen":"Schedule","notifyOnFailure":"Notify me if this job fails or is cancelled","notifyOnFailureHint":"Sends an email and an in-app notification to the site owner. You can turn this off globally under Settings â Operations.","createJob":"Create backup job","creating":"Creatingâ¦","next":"Next","back":"Back","closeWizard":"Close wizard","needScope":"Select database and/or media.","needPresets":"Select at least one data preset when database is enabled.","errLoad":"Could not load jobs.","errInventory":"Could not load inventory.","errCreate":"Could not create job.","errNetwork":"Network error.","errAction":"Action failed.","progress":"Progress","logs":"Logs","inlineHint":"Development INLINE may start the job immediately; production uses the minute worker timer.","sseLive":"Live updates while running.","restoreLink":"Restore loads a completed backup into the live site. Current data for the selected scopes is removed first.","restoreTitle":"Restore from backup","restorePassword":"Password (step-up)","restoreTotp":"TOTP (if enabled)","restoreSubmit":"Queue restore job","errPasswordRequired":"Enter your current password (at least 10 characters).","errInvalidPassword":"Incorrect password.","errTotpRequired":"Enter the 6-digit authenticator code.","errInvalidTotp":"Invalid authenticator code.","errTotpNotConfigured":"Two-factor authentication is misconfigured for this account.","errUnauthenticated":"Your session expired. Sign in again.","errRestoreDisabled":"Restore is disabled on this server (ALLOW_BACKUP_RESTORE).","errConfirmPhrase":"Confirmation phrase is invali
1d.","restoreWarningTitle":"This is a destructive replace â not a merge","restoreWarningReplace":"Live data in the selected scopes will be deleted from the database, then replaced with data from the backup archive.","restoreWarningNoMerge":"Nothing is merged with existing rows. There is no âkeep bothâ or soft import mode in v1.","restoreWarningScope":"Only the scopes you select are replaced. Unselected areas (for example posts when you restore settings only) are left unchanged on the live site.","restoreWarningIrreversible":"You cannot undo this from the admin UI. Recovery only comes from another backup you already keep â or from the automatic safety copy this restore takes of the current site before changing it (when content, users, or media are included).","restoreAckLabel":"I understand that restore will permanently remove the current data for the selected scopes and replace it with the chosen backup.","restoreStepUpLegend":"Password and authenticator confirmation","errRestoreAckRequired":"Confirm the replace warning before continuing.","openRestoreWizard":"Restore wizard","loading":"Loadingâ¦","yes":"Yes","no":"No","diskTitle":"Disk & storage","diskFree":"Free on backup volume: {free} ({root})","diskArtifacts":"Succeeded artifacts: {total} \xb7 pinned: {pinned}","diskOk":"No disk or budget warnings right now.","diskFreeReview":"Free disk for artifacts: {free}","diskEstimateData":"selected data ~{size}","diskEstimateMedia":"selected media ~{size}","warnLowDisk":"Low free disk (below slack): {detail}","warnDiskLow":"Disk free under 1 GiB: {mb}","warnPinsBlockBudget":"Pinned artifacts block the retention budget: {detail}","warnOverBudget":"Succeeded artifacts over max total budget: {detail}","warnFailedJobs":"Failed jobs in last 24h: {n}","retentionTitle":"Retention policy","retentionHint":"Automatic prune for non-pinned succeeded backups (server env). Pins skip age/count prune unless disk emergency rules apply.","retentionKeepLast":"Keep last {n} non-pinned succeeded jobs","retentionMaxAge":"Delete non-pinned older than {days} days","retentionMaxBytes":"Byte budget for succeeded artifacts: {size}","retentionPinHint":"Pin keeps a backup past age/count retention. If free disk is critical or total bytes exceed budget, the worker may still prune oldest pins under emergency policy.","downloadLogs":"Download full logs","logsPreviewHint":"last lines; download for full cap","restoreMetaTitle":"Restore","restorePageTitle":"Restore from backup","restorePageDescription":"Validate an archive, choose which scopes to replace, confirm with phrase and password, then queue a replace_scope restore job.","backToBackup":"â Backup jobs","restoreStepSource":"Source","restoreStepValidate":"Dry-run","restoreStepScopes":"Scopes","restoreStepSafety":"Safety","restoreStepConfirm":"Confirm","restoreSourceHint":"Pick a completed backup job that still has a downloadable archive on this server.","restoreEmptyJobs":"No completed backup artifacts available. Create a backup first.","restoreSourceLabel":"Backup job","restoreSourcePlaceholder":"Select a backupâ¦","restoreValidateHint":"Dry-run checks archive readability, manifest, and schema migration compatibility. Nothing is written to the live database.","validating":"Validatingâ¦","revalidate":"Run dry-run again","validateOk":"Dry-run passed â archive looks restorable.","validateFailed":"Dry-run failed â fix errors before restoring.","validateErrors":"Errors","validateWarnings":"Warnings","validateFormat":"Format","validateSize":"Archive size","validatePresets":"Archive presets","validateMediaScope":"Media in archive","validateMigrations":"Schema migrations recorded","validateMigrationCount":"entries","errValidate":"Could not validate archive.","errValidateBlocking":"Dry-run must pass before choosing scopes.","errRestoreNeedSource":"Select a source backup job.","errRestoreShortcutUnavailable":"That shortcut is not available for this archiveâs presets.","errRestorePresetNotInArchive":"One or more selected presets are not in the archive.","errRestoreMediaNotInArchive":"This archive has no media files to restore.","restoreScopesHint":"Only scopes present in the archive can be selected. Restore replaces live data for those scopes (not a merge).","shortcutSettingsOnly":"Settings only","presetNotInArchive":"Not in this archive","restoreIncludeMedia":"Restore media files from archive","restoreIncludeMediaHint":"Copy files under MEDIA_ROOT from the backup media tree.","restoreMediaNotInArchive":"Archive did not include media files.","dangerMediaCatalogOnly":"Media catalog without Content will clear post attachments and featured images that reference media rows. Prefer Full site (content + media) for disaster recovery.","dangerAuthOnly":"Auth-only restore replaces staff accounts but leaves existing posts/pages in place. Authors who disappear are reassigned to you. Include Content to replace posts from the archive too.","preBackupTitle":"A safety copy of the current site runs first","preBackupBody":"Because this restore will replace content, users, the media library, and/or media files, the system first saves a snapshot of what is live now for those areas. If something goes wrong mid-restore, that snapshot is your recovery copy. A settings-only restore usually skips this step.","preBackupSkipped":"You only selected settings (or other low-risk areas) â no automatic safety copy is required before this restore.","restoreWarningSelectedScopes":"Only the scopes you selected on the previous step ({scopes}) are replaced. Everything else on the live site stays as it is.","restoreConfirmHint":"Acknowledge the risk, type RESTORE exactly, then confirm with your current password (and TOTP if enabled).","restorePhraseLabel":"Type RESTORE to confirm","restorePhrasePlaceholder":"RESTORE","restorePhraseHint":"Must match exactly: RESTORE (uppercase).","restoreSourceClear":"Clear selected backup","restoreSourceShow":"Show backup list","restoreSourceHide":"Hide backup list","restoreSourceList":"Completed backup jobs","restoreSourceNoMatch":"No backups match your search.","needRunAt":"Choose a date and time for a one-time backup.","scheduleDailyNext":"Daily \xb7 next {when}","scheduleWeeklyNext":"Weekly \xb7 next {when}","scheduleOnceAt":"Runs {when}","scheduleRunsAt":"Runs {when}","scheduleTimeUnset":"Time not set","scheduleDetailTitle":"Schedule","scheduleDetailKind":"Kind","scheduleDetailNext":"Next run","scheduleDetailUtc":"UTC","scheduleKindDaily":"Daily","scheduleKindWeekly":"Weekly","scheduleKindOnce":"Once","scheduleKindUnknown":"â","autoRefresh":"Auto-refresh","autoRefreshOn":"Refreshing {seconds}s","autoRefreshOff":"Off","autoRefreshEvery":"Every {seconds}s","autoRefreshEveryDefault":"Every {seconds}s (default)","autoRefreshMenu":"Auto-refresh interval","autoRefreshOnHint":"Auto-refreshing active jobs every {seconds}s. Click again to turn off, or pick another interval in the menu.","autoRefreshOffHint":"Start auto-refresh every {seconds}s (default). Open the menu for other intervals.","elapsedTook":"Took {duration}","searchJobsLabel":"Search jobs","searchJobsPlaceholder":"Name, id, kind, status, scheduleâ¦","searchJobs":"Search","clearSearch":"Clear search","jobsSearchEmpty":"No jobs match this search.","filterKindLabel":"Kind","filterKindAll":"All kinds","filterStatusLabel":"Status","sectionExpand":"Expand","sectionCollapse":"Collapse","diskWarningsBadge":"{n}
1 warnings","filterPinnedLabel":"Pinned","filterPinnedAll":"All","filterPinnedOnly":"Pinned only","filterUnpinnedOnly":"Unpinned only"},"customCodeUi":{"save":"Save custom code","saving":"Savingâ¦","discard":"Discard","killSwitch":"Disable all (kill switch)","scriptsOff":"Scripts off (CSS only)","resetEmpty":"Clear document","unsaved":"Unsaved changes \xb7 ","source":"source: {source}","discarded":"Discarded unsaved changes.","saved":"Custom code saved. Public pages pick this up on the next load.","saveFailed":"Save failed","loadFailed":"Could not read that file.","killSwitchHint":"Master switch off (not saved yet). Nothing will inject until you re-enable and save.","scriptsOffHint":"Scripts disabled (not saved yet). CSS/stylesheets still inject when enabled.","resetMsg":"Cleared to empty disabled document (not saved yet).","entityLabel":"custom code","warningTitle":"Owner-only \xb7 full origin control","warningBody":"Enabled scripts run for every public visitor with the power of your site origin. Prefer CSS and https:// script URLs. Never paste untrusted code. Custom code is not loaded under /admin. Upgrades may change DOM structure â use stable #mynix-slot-* mounts. Disable anytime to revert to pure MyNix.","sectionSwitches":"Kill switches","enabled":"Enable custom code on the public site","enabledHelp":"Global kill switch. When off, nothing is emitted (even if CSS/scripts are filled in).","scriptsEnabled":"Allow scripts (external + inline)","scriptsEnabledHelp":"When off, only additional CSS and stylesheets load (emergency CSS-only mode).","sectionCss":"CSS units","cssHelp":"Named CSS snippets (not a filesystem). Emitted as separate style tags in list order among enabled units. Prefer theme tokens when possible.","cssPlaceholder":"/* e.g. [data-public-chrome] { ⦠} */","cssCount":"Total CSS {n} / {max} characters","sectionStylesheets":"External stylesheets","stylesheetsHelp":"https:// only. Loaded as external stylesheet links on the public site.","noStylesheets":"No external stylesheets.","addStylesheet":"Add stylesheet","sectionScripts":"External scripts","scriptsHelp":"https:// only. Loaded with next/script (afterInteractive or lazyOnload). Requires âAllow scriptsâ.","noScripts":"No external scripts.","addScript":"Add script","sectionInline":"Inline script units (advanced)","inlineHelp":"Named snippets, highest risk. Prefer external URLs. Mute one unit without deleting it. Requires âAllow scriptsâ. Blocked if they contain a closing script sequence.","noInline":"No inline script units.","addInline":"Add inline script unit","sectionSlots":"Stable chrome slots","slotsHelp":"Empty mount points on the public site for your scripts. Prefer these over scraping class names.","fieldId":"Id","fieldHref":"Href","fieldSrc":"Src","fieldMedia":"Media","fieldStrategy":"Strategy","strategyAfterInteractive":"afterInteractive","strategyLazyOnload":"lazyOnload","remove":"Remove","rowIndex":"Row {n}","cssNamePlaceholder":"e.g. footer-layout.css","noCssFiles":"No CSS units yet. Add one to paste styles.","addCssFile":"Add CSS unit","inlineNamePlaceholder":"e.g. mega-menu.js","fieldName":"Name","unitEnabled":"Enabled","unitChars":"{n} / {max} characters","moveUp":"Move up","moveDown":"Move down","loadFromDisk":"Load from disk","loadFromDiskTitle":"Replace this unitâs code from a local file; name becomes the file basename (with a suffix if that name is already used).","addCssFromDisk":"Add from disk","addCssFromDiskTitle":"Create a new CSS unit from a local .css file","addInlineFromDisk":"Add from disk","addInlineFromDiskTitle":"Create a new inline script unit from a local .js file","loadedFromDisk":"Loaded â{name}â from disk (not saved yet).","loadTooLarge":"File is too large (max {max} characters).","sectionJsonLd":"JSON-LD units","jsonLdHelp":"Allowlisted schema.org types only (Organization, LocalBusiness, â¦). Emitted on every public page when custom code is enabled â even if scripts are off. See docs/structured-data.md.","noJsonLd":"No JSON-LD units.","jsonLdPlaceholder":"{ \\"@type\\": \\"Organization\\", \\"name\\": \\"â¦\\" }","addJsonLd":"Add JSON-LD unit","requiresConsent":"Requires analytics consent","requiresConsentHelp":"Do not run until the visitor accepts analytics. Tick this for GA, pixels, and other trackers. Leave off only for strictly functional first-party scripts."},"footerUi":{"save":"Save footer","saving":"Savingâ¦","discard":"Discard","resetDefault":"Reset to default","unsaved":"Unsaved changes \xb7 ","source":"source: {source}","discarded":"Discarded unsaved changes.","saved":"Footer saved. Public pages pick this up on the next load.","saveFailed":"Save failed","loadFailed":"Failed to load footer","resetMsg":"Reset to code default (not saved yet).","entityLabel":"footer","sectionLayout":"Layout","layoutHelp":"How the public footer is arranged. Classic matches the original brand + utility row.","layout_classic":"classic","layout_columns":"columns","layout_stacked":"stacked","showBrand":"Show brand block","showBrandHelp":"MOTD prompt and site tagline.","showLegal":"Show legal strip","showLegalHelp":"Copyright, optional MIT link, and fine print.","showSourceLink":"Show source / MIT link","showSourceLinkHelp":"Links to the public source repository URL.","sectionColumns":"Link columns","columnsHelp":"Classic layout flattens all links into one utility row. Columns and stacked use groups (optional titles).","noColumns":"No columns yet. Add one to manage footer links.","addColumn":"Add column","removeColumn":"Remove c
1olumn","addLink":"Add link","remove":"Remove","fieldColumnId":"Column id","fieldColumnTitle":"Column title","columnTitlePlaceholder":"Optional heading","fieldLabel":"Label","fieldHref":"Path or URL","fieldExternal":"External","emptyDefaultLabel":"Default-locale label is empty â link is hidden.","sectionSocial":"Social links","socialHelp":"Optional profile buttons (GitHub, X, â¦). https:// only â except RSS which may use /feed.xml. Shown near the brand (classic/columns) or centered (stacked).","noSocial":"No social links yet.","addSocial":"Add social link","fieldNetwork":"Network","fieldSocialHref":"Profile URL","fieldSocialLabel":"Label (optional)","socialLabelHelp":"Overrides the default network name for accessibility and title. Empty â network default.","network_github":"GitHub","network_x":"X","network_bluesky":"Bluesky","network_mastodon":"Mastodon","network_youtube":"YouTube","network_linkedin":"LinkedIn","network_instagram":"Instagram","network_facebook":"Facebook","network_rss":"RSS","network_custom":"Custom","sectionContact":"Contact strip","contactHelp":"Optional email, phone, and short blurb under the brand (classic/columns) or centered (stacked). Structured only â no HTML.","contactEnabled":"Show contact strip","contactEnabledHelp":"When on, the strip appears if email, phone, heading, or blurb is set.","fieldContactEmail":"Email","fieldContactPhone":"Phone","fieldContactHeading":"Heading","fieldContactBlurb":"Blurb","contactHeadingPlaceholder":"e.g. Contact","contactBlurbPlaceholder":"e.g. Questions? Reach out any time.","showSubscribe":"Show subscribe widget","showSubscribeHelp":"Built-in RSS / email subscribe CTA (same as the blog). Allowlisted chrome widget â not custom HTML."},"headerUi":{"save":"Save header","saving":"Savingâ¦","discard":"Discard","resetDefault":"Reset to default","unsaved":"Unsaved changes \xb7 ","source":"source: {source}","discarded":"Discarded unsaved changes.","saved":"Header saved. Public pages pick this up on the next load.","saveFailed":"Save failed","loadFailed":"Failed to load header","resetMsg":"Reset to code default (not saved yet).","entityLabel":"header","sectionLayout":"Layout","layoutHelp":"How the sticky public header is arranged on desktop. Mobile keeps the burger + logo + tools pattern.","layout_classic":"classic","layout_logo_center":"logo center","layout_split":"split","layout_classic_hint":"Logo and primary nav on the left; search, locale, theme, and CTA on the right (original MyNix look).","layout_logo_center_hint":"Logo centered; tools on the sides; primary nav on a second row (desktop).","layout_split_hint":"Logo and nav on the left; tools on the right with a divider and a larger accent CTA when enabled.","sectionChrome":"Chrome controls","chromeHelp":"Toggle built-in header tools. Staff admin link still appears when signed in.","showSearch":"Show search","showSearchHelp":"Search toggle and slide-down search strip.","showLocaleSwitcher":"Show locale switcher","showLocaleSwitcherHelp":"Public language switcher when multiple locales are enabled.","showThemeToggle":"Show light/dark toggle","showThemeToggleHelp":"Visitor theme preference control.","showScrollProgress":"Show page-scroll progress","showScrollProgressHelp":"A 6px strip at the top of the public page. Width tracks scroll; the accent colour lightens toward the middle then returns.","sectionCta":"Call-to-action button","ctaHelp":"Optional solid button (e.g. Subscribe). Shown on sm+ next to the tools. Best with split layout.","ctaEnabled":"Enable CTA","ctaEnabledHelp":"Requires a non-empty default-locale label.","fieldLabel":"Label","fieldHref":"Path or URL","fieldExternal":"External (new tab)","menuCrossLink":"Primary links and desktop presentation (flat + subnav, dropdown, or mega) are configured under Tools â Main menu."},"postLists":{"title":"Post lists","description":"Named collections of posts: editor picks, query lists, and ranked snapshots.","new":"New list","newTitle":"New post list","newDescription":"Create a named list, then add posts or a query.","allLists":"All lists","untitled":"(untitled)","searchPlaceholder":"Search title or slug","strategy":"Strategy","allStrategies":"All strategies","strategyManual":"Manual","strategyQuery":"Query","strategyRanked":"Ranked","slug":"Slug","slugHint":"Lowercase letters, numbers, hyphens. 2â64 characters. Not latest, slugs, list, category, tag, or author.","items":"Items","updated":"Updated","count":"{count} lists","empty":"No lists yet.","createOne":"Create one","itemCount":"{count} items","snapshotCount":"{count} snapshot cards","titleField":"Title","createFailed":"Could not create the list.","creating":"Creatingâ¦","createAndEdit":"Create and edit","editDescription":"Slug {slug}. Puck PostList can use source list:{slug}.","saveFailed":"Could not save.","saved":"Saved.","deleteFailed":"Could not delete.","confirmDelete":"Delete this list? Pages that reference it will show an empty band.","delete":"Delete list","metaSection":"List settings","saveMeta":"Save settings","queryKind":"Query kind","kindCategory":"Category","kindTag":"Tag","kindAuthor":"Author","author":"Author","pickAuthor":"Select author","category":"Category","tag":"Tag","pickTerm":"Selectâ¦","snapshotLimit":"Snapshot size","rankedHelp":"Filled from recency, approved comments in the last 30 days, and a weak SEO tie-break. Public label: Popular lately. A timer rebuilds the snapshot every 15 minutes.","refreshNow":"Refresh n
1ow","refreshFailed":"Could not refresh the snapshot.","refreshed":"Snapshot updated.","localeTitles":"Locale titles","localeTitlePlaceholder":"Heading for this locale","saveTranslation":"Save locale title","manualItems":"Manual posts","searchPosts":"Search by title, slug, or content","search":"Search","clearSearchResults":"Clear results","searchHint":"Optional locale, category, tag, year, and author filters shrink the catalog. Locale limits title and body matches to that language.","searchTotal":"{shown} of {total}","clearSearchFilters":"Clear filters","add":"Add","remove":"Remove","saveItems":"Save items","notPublished":"Not published","itemsLimit":"At most 24 items.","searchEmpty":"No posts matched. Try another word or loosen the filters."},"contentPortability":{"exportJson":"Export JSON","importJson":"Import JSON","importAsNew":"Import JSON","exported":"Exported JSON file.","exportFailed":"Export failed","exportDirtyTitle":"Export last saved version?","exportDirtyWarning":"You have unsaved edits. The download is the last saved version, not the form.","exportAnyway":"Export saved version","importParseError":"That file is not valid JSON.","importFileTooLarge":"That file is too large to import.","importConfirmTitle":"Replace this document?","importCreateTitle":"Create from JSON?","importConfirm":"Import","importWillReplace":"This replaces the open document. Destination URL stays","importWillCreate":"This creates a new draft at","importNoWarnings":"No remapping warnings.","importLiveTitle":"Update live document?","importLiveBody":"This item is published or unlisted. Importing writes the new content immediately.","importLiveConfirm":"Update live","importApplied":"Imported. {count} warning(s).","importCreated":"Imported as a new draft.","importFailed":"Import failed","networkError":"Network error","cancel":"Cancel","slugLabel":"slug","pathLabel":"path","importWarning_LOCALE_DROPPED":"Locale not enabled here; skipped.","importWarning_PRIMARY_LOCALE_REMAPPED":"Primary locale remapped to the site default.","importWarning_AUTHOR_FALLBACK":"Author not found; you will own this item.","importWarning_COAUTHOR_DROPPED":"Co-author not found; dropped.","importWarning_TERM_CREATED":"Category or tag will be created.","importWarning_MEDIA_UNRESOLVED":"Media not in this library.","importWarning_SLUG_RENAMED":"Slug was taken; a suffix was added.","importWarning_PATH_RENAMED":"Path was taken; a suffix was added.","importWarning_BLOCK_DROPPED":"Unknown page block was dropped.","importWarning_LIST_MISSING":"Named post list is missing on this site.","importWarning_CANONICAL_CLEARED":"Canonical path was invalid and cleared.","importWarning_LOCALE_UNTOUCHED":"An existing locale is not in the file and was left as-is."},"postCardUi":{"save":"Save layout","saving":"Savingâ¦","discard":"Discard","exportJson":"Export JSON","importJson":"Import JSON","resetDefault":"Reset to default","unsaved":"Unsaved changes \xb7 ","source":"source: {source}","discarded":"Discarded unsaved changes.","saved":"Post card layout saved. Public lists pick this up on the next load.","saveFailed":"Save failed","resetMsg":"Reset to the 1-column list (not saved yet).","exported":"Exported post card layout JSON.","imported":"Imported â{name}â. Save to publish.","importParseError":"Could not parse import file as JSON.","loadFailed":"Failed to load post card layout","entityLabel":"post cards","packsTitle":"Layout packs","packsHelp":"Apply a starter layout to the editor (not published until you Save). Packs are data only.","packApplied":"Applied pack â{name}â. Save to publish.","exportPack":"Export pack","exportPackName":"Pack name","exportPackDefaultName":"My post card pack","exportedPack":"Exported pack â{name}â.","sectionColumns":"Cards per row","columnsHelp":"Desktop count in the public column. Narrower viewports step down so cards stay readable.","columnsN":"{n} across","columnsDerived":"Desktop {desktop} \xb7 tablet {tablet} \xb7 phone {mobile}","featuredLead":"Featured lead","featuredLeadHelp":"The first post spans the full row on multi-column layouts (magazine hero).","pageSize":"Posts per page","pageSizeHelp":"A target ({min}â{max}). Archives fetch {fetched} so the last desktop row fills{lead}. Empty slots only when the catalog runs out.","pageSizeLead":" (featured lead)","sectionImage":"Featured image","imageHelp":"Where the thumbnail sits relative to the title and excerpt.","image_top":"Top","image_bottom":"Bottom","image_left":"Left","image_right":"Right","fit_contain":"Contain","fit_cover":"Cover","showImage":"Show featured image","showImageHelp":"Off hides thumbnails even when a post has a cover.","sectionChrome":"Card chrome","showExcerpt":"Excerpt","showExcerptHelp":"Show the post excerpt under the title.","showReadMore":"Read more link","showReadMoreHelp":"Show the âRead more ââ control. The title still links to the post.","gap":"Gap","gap_sm":"Tight","gap_md":"Default","gap_lg":"Roomy","radius":"Corners","radius_sm":"Subtle","radius_md":"Default","radius_lg":"Soft","titleSize":"Title size","title_sm":"Small","title_md":"Default","title_lg":"Large","colorsFollowTheme":"Card colors (background, border, t
1ype) follow Theme tokens so a pack like Paper or Ocean restyles lists automatically.","previewTitle":"Preview","previewHelp":"Placeholder cards using the current layout. Public pages update after Save.","previewMeta":"date \xb7 4 min read","previewReadMore":"Read more â"},"categories":{"title":"Categories","description":"Name is the public title; slug is the URL. Nested children appear on the parent archive. Delete only empty categories with no posts."},"tags":{"title":"Tags","description":"Labels on posts. Delete a tag only when no posts use it. New tags are created from the post editor."},"categoriesUi":{"search":"Search","searchPlaceholder":"Name or slugâ¦","new":"New category","create":"Create","save":"Save","cancel":"Cancel","edit":"Edit","addChild":"Add child","delete":"Delete","name":"Name","slug":"Slug","parent":"Parent","topLevel":"Top level","posts":"{n} posts","urlHint":"/category/{slug}","count":"{n} categories","empty":"No categories yet.","noMatch":"No categories match this search.","expand":"Expand","collapse":"Collapse","slugTaken":"That slug is already used.","cannotDeletePosts":"Remove posts from this category first.","cannotDeleteChildren":"Move or delete child categories first.","cycle":"Cannot move a category under one of its children.","notFound":"Category not found.","saveFailed":"Could not save category.","createFailed":"Could not create category.","deleteFailed":"Could not delete category.","deleteConfirmTitle":"Delete this category?","deleteConfirmBody":"â{name}â will be removed. This cannot be undone."},"tagsUi":{"search":"Search","searchPlaceholder":"Name or slugâ¦","name":"Name","slug":"Slug","posts":"{n} posts","postsCol":"Posts","actions":"Actions","delete":"Delete","count":"{n} tags","empty":"No tags yet.","noMatch":"No tags match this search.","cannotDelete":"This tag is still used by posts.","deleteFailed":"Could not delete tag.","deleteConfirmTitle":"Delete this tag?","deleteConfirmBody":"â{slug}â will be removed. This cannot be undone.","filter":"Filter","prev":"â Previous","next":"Next â","pageOfRows":"Page {page} / {totalPages} \xb7 {total} tags","pagination":"Tags pagination"},"privacyUi":{"save":"Save privacy","saving":"Savingâ¦","discard":"Discard","unsaved":"Unsaved changes \xb7 ","source":"source: {source}","discarded":"Discarded unsaved changes.","saved":"Privacy settings saved. Public /privacy updates on the next load.","saveFailed":"Save failed","loadFailed":"Failed to load privacy settings","entityLabel":"privacy","sectionIdentity":"Controller identity","identityHelp":"Published on the generated /privacy notice. Required for a usable GDPR/UK/nFADP-style notice.","controllerName":"Legal name","contactEmail":"Privacy contact email","contactEmailHelp":"mailto on /privacy. Empty falls back to owner email.","address":"Postal address (optional)","addressHelp":"Street, city, country â shown as published. Leave blank to omit.","sectionNotice":"Public /privacy notice","noticeHelp":"The URL stays /privacy. You can keep the generated notice or assign a custom page (Puck).","noticeSource":"Notice source","sourceGenerated":"Generated notice","sourceGeneratedHelp":"Filled from this identity plus the built-in processing copy. Always in English/locale catalogs.","sourcePage":"Assigned custom page","sourcePageHelp":"Render a published or unlisted Puck page at /privacy. If the page is missing, the generated notice is shown.","noticePage":"Custom page","noticePageNone":"(choose a page)","noticePageHelp":"Create pages under Pages, then assign one here. The pageâs own path is not used; visitors still open /privacy.","untitled":"(untitled)","sectionBanner":"Cookie banner","bannerHelp":"Controls the first-visit bar. Google Analytics and consent-tagged scripts still never run until the visitor accepts â even if the banner is off.","bannerMode":"Banner mode","bannerAuto":"Auto (recommended)","bannerAutoHelp":"Show the banner only when GA4 or a consent-tagged script is configured.","bannerAlways":"Always","bannerAlwaysHelp":"Show the banner on the first visit even when no optional cookies are configured.","bannerNever":"Never auto-show","bannerNeverHelp":"Do not show the banner automatically. If analytics is on, visitors can still open Cookies in the footer to accept or reject.","warnBannerNeverOptional":"GA4 or a consent-tagged script is configured, but the banner will not appear by itself. Analytics will not load until a visitor opens Cookies in the footer and accepts. That is a poor fit for ePrivacy/PECR-style rules if you have visitors in the EEA or UK.","warn
1BannerNeverRegions":"You marked privacy regimes as relevant and also hid the banner. Recheck whether Never is what you intend.","sectionRegions":"Regimes the operator considers relevant","regionsHelp":"Not geo-IP and not legal advice. Checked items are listed on the generated /privacy notice. Leave all unchecked for generic wording.","region_eea":"EEA (GDPR)","region_uk":"United Kingdom (UK GDPR / PECR)","region_ch":"Switzerland (nFADP)","region_br":"Brazil (LGPD)","region_ca_qc":"Quebec (Law 25)","sectionRetention":"Retention claims (generated notice)","retentionHelp":"Published on the generated /privacy page. MyNix does not automatically delete comments or logs after these periods â write what you actually do.","commentsRetentionDays":"Comment retention (days)","commentsRetentionHelp":"0 = until a moderator deletes them (default). A positive number is published as âup to N daysâ.","logsRetentionDays":"Security log retention (days)","logsRetentionHelp":"0 = short-lived (default copy). A positive number is published as âup to N days on the hostâ.","warnCommentsRetention":"A positive comment retention is a published claim only. This software does not auto-delete comments after that many days.","sectionRights":"Visitor rights tools","rightsHelp":"Optional. Default is mailto on /privacy only. Forms appear on /privacy (generated notice and below an assigned custom page).","requestForm":"Show a privacy-request form","requestFormHelp":"Visitor fills access / rectify / erase / other. Staff get an in-app notification. SMTP also emails the privacy contact.","eraseSelfService":"Self-service comment + alert deletion","eraseSelfServiceHelp":"Visitor enters an email; we send a confirmation link. After they click, comments and email-alert rows for that address are deleted. Requires SMTP.","warnEraseNoSmtp":"Self-service deletion needs SMTP so we can confirm the mailbox. The public form stays hidden until SMTP is configured.","warnRequestFormNoSmtp":"SMTP is off. Requests still create an admin notification; they will not be emailed to the privacy contact."}}')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.