@cloudhal/cli 0.3.13 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -28
- package/dist/assets/starters/blog/README.md +3 -0
- package/dist/assets/starters/blog/package.json +4 -4
- package/dist/assets/studio/assets/AccountPage-BZMuiZWe.js +2 -0
- package/dist/assets/studio/assets/ActivityPage-D1fYAhjU.js +2 -0
- package/dist/assets/studio/assets/AgentModes-CN_N_dzK.js +2 -0
- package/dist/assets/studio/assets/AgentsPage-5x6KtgXJ.js +2 -0
- package/dist/assets/studio/assets/AnalyticsPage-CH97Ghz2.js +3 -0
- package/dist/assets/studio/assets/{ApprovalDialog-BM4Lzw-L.js → ApprovalDialog-pVaChckR.js} +2 -2
- package/dist/assets/studio/assets/ApprovalsPage-D6JbHazQ.js +3 -0
- package/dist/assets/studio/assets/Archive.es-BXDvdjhh.js +2 -0
- package/dist/assets/studio/assets/ArrowClockwise.es-Cj09cAsd.js +2 -0
- package/dist/assets/studio/assets/ArrowCounterClockwise.es-CdhtUY_8.js +2 -0
- package/dist/assets/studio/assets/ArrowUp.es-XQ9OylS2.js +2 -0
- package/dist/assets/studio/assets/ArrowsMerge.es-D5hM5AVS.js +2 -0
- package/dist/assets/studio/assets/Article.es-GZzVNhDz.js +2 -0
- package/dist/assets/studio/assets/ArticleEditorPage-CSEUdNCR.js +2 -0
- package/dist/assets/studio/assets/ArticlesPage-C_H_YPpe.js +2 -0
- package/dist/assets/studio/assets/AssetPage-Cwta5Ac7.js +2 -0
- package/dist/assets/studio/assets/Audit-DxnnaxFS.js +2 -0
- package/dist/assets/studio/assets/AuditBadges-B1HtAe11.js +2 -0
- package/dist/assets/studio/assets/AuthLayout-D700rA8J.js +2 -0
- package/dist/assets/studio/assets/AutomationsPage-CYFCDBEU.js +2 -0
- package/dist/assets/studio/assets/{BlockPropsForm-BoZ_Rz4z.js → BlockPropsForm-BSlcOmEG.js} +2 -2
- package/dist/assets/studio/assets/{BlockSection-D3AuU_96.js → BlockSection-CwSetvgR.js} +2 -2
- package/dist/assets/studio/assets/{BodyChanges-C67-tSy-.js → BodyChanges-AGt3NBLx.js} +2 -2
- package/dist/assets/studio/assets/BookOpenText.es-DQTJX038.js +2 -0
- package/dist/assets/studio/assets/BuildPage-CX3GQmW4.js +2 -0
- package/dist/assets/studio/assets/CSPContext-ctyrgg64girv38ls-D-cnHPW_.js +2 -0
- package/dist/assets/studio/assets/CalendarBlank.es-CrlLLBR2.js +2 -0
- package/dist/assets/studio/assets/CalendarCheck.es-BLDq8hx4.js +2 -0
- package/dist/assets/studio/assets/CalendarPlus.es-MzN9gM_Q.js +2 -0
- package/dist/assets/studio/assets/CaretLeft.es-BiAN1FFU.js +2 -0
- package/dist/assets/studio/assets/CaretRight.es-Cb35ouk8.js +2 -0
- package/dist/assets/studio/assets/CaretUp.es-C7S0XQPp.js +2 -0
- package/dist/assets/studio/assets/CheckCircle.es-Bm8c2tEP.js +2 -0
- package/dist/assets/studio/assets/ClockClockwise.es-B-MZng7b.js +2 -0
- package/dist/assets/studio/assets/ClockCountdown.es-dAjCY6fZ.js +2 -0
- package/dist/assets/studio/assets/CodeHighlighted-BSHi5gf7.js +4 -0
- package/dist/assets/studio/assets/CollectionSettingsPage-CD-vnk6_.js +2 -0
- package/dist/assets/studio/assets/CollectionsPage--hZkLzwM.js +2 -0
- package/dist/assets/studio/assets/Columns-BAB_FHGY.js +2 -0
- package/dist/assets/studio/assets/CommandMenu-CLNJHIMd.js +2 -0
- package/dist/assets/studio/assets/CommentThreadControls-DTVhaPz-.js +2 -0
- package/dist/assets/studio/assets/CommentThreadPage-w4DVwRfB.js +2 -0
- package/dist/assets/studio/assets/CommenterPage-DSTA9HA7.js +2 -0
- package/dist/assets/studio/assets/Comments-B6fcNv1b.js +2 -0
- package/dist/assets/studio/assets/CommentsPage-CHBj2-ES.js +2 -0
- package/dist/assets/studio/assets/CompositeRoot-g72lchaerolf5dc9-apASeL8u.js +2 -0
- package/dist/assets/studio/assets/{ConfirmDialog-DDDZap6y.js → ConfirmDialog-VlJ6uPok.js} +2 -2
- package/dist/assets/studio/assets/Crumbs-C-GSz9CU.js +2 -0
- package/dist/assets/studio/assets/DeviceMobile.es-Dj4nRR-G.js +2 -0
- package/dist/assets/studio/assets/DeviceTablet.es-CWQu_fi8.js +2 -0
- package/dist/assets/studio/assets/{DialogTrigger-g44cuem7n4wez533-BMsW2jM1.js → DialogTrigger-g44cuem7n4wez533-XYapK_dR.js} +2 -2
- package/dist/assets/studio/assets/{DirectionalIcon-UZJFXGY_.js → DirectionalIcon-DEFwnJvi.js} +2 -2
- package/dist/assets/studio/assets/DotsThree.es-DNhReQZT.js +2 -0
- package/dist/assets/studio/assets/DownloadSimple.es-5bJh64As.js +2 -0
- package/dist/assets/studio/assets/EditorLayout-C7NXl_wL.js +2 -0
- package/dist/assets/studio/assets/{EditorPreview-BZygug8K.js → EditorPreview--tharUQT.js} +2 -2
- package/dist/assets/studio/assets/Elevation-DvH1DCT0.js +2 -0
- package/dist/assets/studio/assets/ElevationRequest-C24O1PdA.js +2 -0
- package/dist/assets/studio/assets/{EntryPath-CCoF3bbW.js → EntryPath-D90NAiK7.js} +2 -2
- package/dist/assets/studio/assets/EnvelopeSimple.es-EeOelenM.js +2 -0
- package/dist/assets/studio/assets/Eye.es-BqzFrrWY.js +2 -0
- package/dist/assets/studio/assets/EyeSlash.es-D_qu-prK.js +2 -0
- package/dist/assets/studio/assets/File.es-BjyWSnBW.js +2 -0
- package/dist/assets/studio/assets/Files.es-C-nA_HHj.js +2 -0
- package/dist/assets/studio/assets/Flag.es-DmQnwi6F.js +2 -0
- package/dist/assets/studio/assets/FolderSimple.es-iBvb358e.js +2 -0
- package/dist/assets/studio/assets/FolderSimplePlus.es-CEDRZQYE.js +2 -0
- package/dist/assets/studio/assets/ForgotPasswordPage-Dag7Tzl5.js +2 -0
- package/dist/assets/studio/assets/Funnel.es-DZl1IfUy.js +2 -0
- package/dist/assets/studio/assets/Gating-C88ZA9Qs.js +2 -0
- package/dist/assets/studio/assets/Gauge.es-DuZzTA2r.js +2 -0
- package/dist/assets/studio/assets/GitDiff.es-CA8Us_5l.js +2 -0
- package/dist/assets/studio/assets/GlobeHemisphereWest.es-BzDIaRRb.js +2 -0
- package/dist/assets/studio/assets/GovernanceDialog-CcNYRQD7.js +2 -0
- package/dist/assets/studio/assets/Heartbeat.es-DoVLpaNV.js +2 -0
- package/dist/assets/studio/assets/Hourglass.es-uvCn7I3a.js +2 -0
- package/dist/assets/studio/assets/House.es-B2xcfdIf.js +2 -0
- package/dist/assets/studio/assets/IconBase.es-BkkQnApg.js +2 -0
- package/dist/assets/studio/assets/Image.es-BBE_um1H.js +2 -0
- package/dist/assets/studio/assets/InsetPanel-BIpYNUj-.js +2 -0
- package/dist/assets/studio/assets/InvitePage-HGUaH1TG.js +2 -0
- package/dist/assets/studio/assets/Key.es-C3cXV_g4.js +2 -0
- package/dist/assets/studio/assets/Lightning.es-B0aCQYgN.js +2 -0
- package/dist/assets/studio/assets/LinkBreak.es-IKiASA1L.js +2 -0
- package/dist/assets/studio/assets/LinkSimple.es-DsT8oyql.js +2 -0
- package/dist/assets/studio/assets/ListBullets.es-m4uKew94.js +2 -0
- package/dist/assets/studio/assets/ListToolbar-DBfQITZ2.js +2 -0
- package/dist/assets/studio/assets/LoginPage-CGhRlin3.js +2 -0
- package/dist/assets/studio/assets/MapPin.es-oHLRbHJ3.js +2 -0
- package/dist/assets/studio/assets/MediaPage-CAa48B-Q.js +2 -0
- package/dist/assets/studio/assets/MediaPicker-BDtOFR6t.js +2 -0
- package/dist/assets/studio/assets/MediaUpload-CnygFV_Q.js +2 -0
- package/dist/assets/studio/assets/MembersPage-8PZDpuOX.js +2 -0
- package/dist/assets/studio/assets/Menus-tsA-vnag.js +2 -0
- package/dist/assets/studio/assets/Monitor.es-CiAXIkNe.js +2 -0
- package/dist/assets/studio/assets/NavigationPage-DH1gi2-e.js +2 -0
- package/dist/assets/studio/assets/{NewSiteDialog-kpjWtalR.js → NewSiteDialog-CZ_cJkxK.js} +2 -2
- package/dist/assets/studio/assets/NotificationItems-XD52jUn_.js +3 -0
- package/dist/assets/studio/assets/Package.es-8Kzld-L5.js +2 -0
- package/dist/assets/studio/assets/PageEditorPage-BJw1rMlt.js +5 -0
- package/dist/assets/studio/assets/PagesPage-DPkMfsL4.js +2 -0
- package/dist/assets/studio/assets/{PasswordField-BgSYGdR_.js → PasswordField-DfmkEzgy.js} +2 -2
- package/dist/assets/studio/assets/PauseCircle.es-DL70zbXk.js +2 -0
- package/dist/assets/studio/assets/PencilSimple.es-CN3ip8Ju.js +2 -0
- package/dist/assets/studio/assets/Plus.es-DJRjBqvc.js +2 -0
- package/dist/assets/studio/assets/PreviewPanel-CijY2t0g.js +2 -0
- package/dist/assets/studio/assets/Prohibit.es-CWkoXr5w.js +2 -0
- package/dist/assets/studio/assets/ProhibitInset.es-BgantO60.js +2 -0
- package/dist/assets/studio/assets/ProjectPage-Dmv_d6l9.js +2 -0
- package/dist/assets/studio/assets/Question.es-BEdDAbLA.js +2 -0
- package/dist/assets/studio/assets/Quotes.es-DQPep8iE.js +2 -0
- package/dist/assets/studio/assets/Readers-CTYDC95t.js +3 -0
- package/dist/assets/studio/assets/RedirectDialog-Bau5is0p.js +2 -0
- package/dist/assets/studio/assets/RedirectsPage-C4BklYAL.js +2 -0
- package/dist/assets/studio/assets/RelativeTime-C9FPjAjB.js +2 -0
- package/dist/assets/studio/assets/ReleaseApproval-CD6-t429.js +2 -0
- package/dist/assets/studio/assets/ReleasePage-CRGKQxMl.js +2 -0
- package/dist/assets/studio/assets/ReleaseParts-AWW3s_gj.js +2 -0
- package/dist/assets/studio/assets/ResetPasswordPage-BoNwh4qA.js +2 -0
- package/dist/assets/studio/assets/RocketLaunch.es-CR3uVhw_.js +2 -0
- package/dist/assets/studio/assets/{RowMenu-CgotKf_E.js → RowMenu-BpnRmIUu.js} +2 -2
- package/dist/assets/studio/assets/ScheduleCard-DP-hCmZT.js +2 -0
- package/dist/assets/studio/assets/ScheduleDialog-DgbjaP59.js +2 -0
- package/dist/assets/studio/assets/ScheduleHistoryPage-BzOeXFA9.js +2 -0
- package/dist/assets/studio/assets/ScheduleStatusBadge-BIRHo4br.js +2 -0
- package/dist/assets/studio/assets/{SchedulerStalled-D5fAOCOD.js → SchedulerStalled-P8iS7BLO.js} +2 -2
- package/dist/assets/studio/assets/Schedules-ul911s72.js +3 -0
- package/dist/assets/studio/assets/SchedulesPage-BYkiIzKQ.js +2 -0
- package/dist/assets/studio/assets/ScopeBadge-2kq0uJ-Z.js +2 -0
- package/dist/assets/studio/assets/SectionCard-BQJGufeD.js +2 -0
- package/dist/assets/studio/assets/Seo-K59qHsA1.js +2 -0
- package/dist/assets/studio/assets/SeoPreview-COKG3mcw.js +2 -0
- package/dist/assets/studio/assets/Settings-Cf4OrEEC.js +2 -0
- package/dist/assets/studio/assets/ShieldCheck.es-Bv8hnLvd.js +2 -0
- package/dist/assets/studio/assets/ShieldWarning.es-tBNqa4Gy.js +2 -0
- package/dist/assets/studio/assets/SignIn.es-CYR5gjp1.js +2 -0
- package/dist/assets/studio/assets/{SiteAccessField-DzJ30NV0.js → SiteAccessField-BesX0L8e.js} +2 -2
- package/dist/assets/studio/assets/SiteOverviewPage-BGIsvNII.js +4 -0
- package/dist/assets/studio/assets/SiteSettingsPage-DZLoyPj5.js +3 -0
- package/dist/assets/studio/assets/SitesPage-6St-lFhp.js +4 -0
- package/dist/assets/studio/assets/SkillsPage-DLR74EXD.js +3 -0
- package/dist/assets/studio/assets/SlidersHorizontal.es-BunTWsru.js +2 -0
- package/dist/assets/studio/assets/SnapshotsPage-Hv3Kd_S0.js +2 -0
- package/dist/assets/studio/assets/Sparkle.es-DCUl2ClV.js +2 -0
- package/dist/assets/studio/assets/Star.es-TkUJHaz_.js +2 -0
- package/dist/assets/studio/assets/StatTile-CS1MnZoG.js +2 -0
- package/dist/assets/studio/assets/{Status-Bl65tSQl.js → Status-CzRAUtkc.js} +2 -2
- package/dist/assets/studio/assets/StatusActions-Za_dkPDn.js +3 -0
- package/dist/assets/studio/assets/StopCircle.es-BLOvBRZ0.js +2 -0
- package/dist/assets/studio/assets/Table.es-DaFFHvUv.js +2 -0
- package/dist/assets/studio/assets/TableSkeleton-BLVjScfh.js +2 -0
- package/dist/assets/studio/assets/TagsMigration-DNuLtuxs.js +2 -0
- package/dist/assets/studio/assets/Taxonomy-S8kCpI-I.js +2 -0
- package/dist/assets/studio/assets/TaxonomyPage-B4qKAM-9.js +2 -0
- package/dist/assets/studio/assets/TaxonomySettingsDialog-CVgH0gDf.js +2 -0
- package/dist/assets/studio/assets/TermEditorPage-D3wg_LXo.js +2 -0
- package/dist/assets/studio/assets/TermPickers-Bq1rnmOE.js +2 -0
- package/dist/assets/studio/assets/TerminalWindow.es-CMYwOwtS.js +2 -0
- package/dist/assets/studio/assets/TextAa.es-BvHRrl8e.js +2 -0
- package/dist/assets/studio/assets/Toast-CLeFqVyq.js +2 -0
- package/dist/assets/studio/assets/TranslationList-DIYZiwqp.js +2 -0
- package/dist/assets/studio/assets/TranslationsPage-DP4E1gtm.js +2 -0
- package/dist/assets/studio/assets/Trash.es-DeP4O_OO.js +2 -0
- package/dist/assets/studio/assets/User.es-DQ28kCCN.js +2 -0
- package/dist/assets/studio/assets/UserCircle.es-B3ucdxgu.js +2 -0
- package/dist/assets/studio/assets/UserPlus.es-Bvwy8dnl.js +2 -0
- package/dist/assets/studio/assets/Warning.es-BxSUvFpP.js +2 -0
- package/dist/assets/studio/assets/XCircle.es-CkK-PtCi.js +2 -0
- package/dist/assets/studio/assets/api-D4xViEXg.js +4 -0
- package/dist/assets/studio/assets/{api-errors-c5QRmg0g.js → api-errors-2ehuTkyf.js} +2 -2
- package/dist/assets/studio/assets/approvals-BXftn58S.js +2 -0
- package/dist/assets/studio/assets/ar-CY9T5sf0.js +2 -0
- package/dist/assets/studio/assets/{ar-Ck0upd5N.js → ar-zrB13yeJ.js} +2 -2
- package/dist/assets/studio/assets/badge-dq8bx752b9dp7dst-CaiSb00a.js +2 -0
- package/dist/assets/studio/assets/banner-msnmqm7of2lck01x-LPHRuEVu.js +2 -0
- package/dist/assets/studio/assets/blockIcon-Bvyjbwy1.js +2 -0
- package/dist/assets/studio/assets/button-pa1bq9b85hawg41a-CZ7DAyL6.js +2 -0
- package/dist/assets/studio/assets/calendar-locale-BMT99H2y.js +2 -0
- package/dist/assets/studio/assets/{charts-B9H-5dY6.js → charts-CZ8ZipPj.js} +3 -3
- package/dist/assets/studio/assets/checkbox-lbo436duy7krxcsk-wm7AjkDD.js +6 -0
- package/dist/assets/studio/assets/clipboard-text-gd6s3n1bqse9zgt8-CnER_xVh.js +2 -0
- package/dist/assets/studio/assets/code-eu8kzwqnlhoyin24-CsATaTMW.js +2 -0
- package/dist/assets/studio/assets/collapsible-l8g94on4w7qfosmn-Ch6HCKIl.js +2 -0
- package/dist/assets/studio/assets/collection-icons-BXliwcMB.js +2 -0
- package/dist/assets/studio/assets/collection-permalinks-DkiQ1tGN.js +2 -0
- package/dist/assets/studio/assets/collections.ar-Db0Jbkvp.js +2 -0
- package/dist/assets/studio/assets/collections.de-BuS6W_7A.js +2 -0
- package/dist/assets/studio/assets/collections.en-BI4rs6RC.js +2 -0
- package/dist/assets/studio/assets/collections.es-DWiR4Urm.js +2 -0
- package/dist/assets/studio/assets/collections.fa-DjC-fOwB.js +2 -0
- package/dist/assets/studio/assets/collections.fr-3vDFCwVZ.js +2 -0
- package/dist/assets/studio/assets/collections.he-Pz2s3q9w.js +2 -0
- package/dist/assets/studio/assets/collections.hi-CZpmugqs.js +2 -0
- package/dist/assets/studio/assets/collections.id-BZWF1L9d.js +2 -0
- package/dist/assets/studio/assets/collections.it-DOso-6wp.js +2 -0
- package/dist/assets/studio/assets/collections.ja-DLT3hSES.js +2 -0
- package/dist/assets/studio/assets/collections.ko-B0sfxpGK.js +2 -0
- package/dist/assets/studio/assets/collections.nl-B1nJT97O.js +2 -0
- package/dist/assets/studio/assets/collections.pl-DWJxTd5J.js +2 -0
- package/dist/assets/studio/assets/collections.pt-BR-gPp-_Pew.js +2 -0
- package/dist/assets/studio/assets/collections.ru-C7yEZJua.js +2 -0
- package/dist/assets/studio/assets/collections.tr-BQ9zBFJ0.js +2 -0
- package/dist/assets/studio/assets/collections.uk-CZMrc7Bj.js +2 -0
- package/dist/assets/studio/assets/collections.zh-Hans-ySZR2cOL.js +2 -0
- package/dist/assets/studio/assets/combobox-hdxtsm2gqcxxgfju-D7zvAnXi.js +2 -0
- package/dist/assets/studio/assets/{createToastManager-onmoqrmr8zo02rif-Dy_9zxLP.js → createToastManager-onmoqrmr8zo02rif-CRrVm56c.js} +2 -2
- package/dist/assets/studio/assets/date-picker-DOjocNTh.js +1 -0
- package/dist/assets/studio/assets/date-picker-cotkexrpqu5tjikv-CHMsbt_a.js +2 -0
- package/dist/assets/studio/assets/{de-DieJfmpi.js → de-CSuIV8BC.js} +2 -2
- package/dist/assets/studio/assets/de-DAKrG4J5.js +2 -0
- package/dist/assets/studio/assets/deleteLabels-BKK8l5WT.js +2 -0
- package/dist/assets/studio/assets/dialog-glpnivujociqs9lh-B7SOThTo.js +2 -0
- package/dist/assets/studio/assets/dropdown-m53ji1d66mws89wh-ka-0zaon.js +2 -0
- package/dist/assets/studio/assets/{editor-DCU0_kqg.js → editor-Gv7l3VOe.js} +5 -5
- package/dist/assets/studio/assets/elevation-DorMcI2T.js +4 -0
- package/dist/assets/studio/assets/empty-hkvg3is3uc6dj1at-DCNoGB3T.js +2 -0
- package/dist/assets/studio/assets/{es-DkZBKZCu.js → es-Bilyaign.js} +2 -2
- package/dist/assets/studio/assets/es-ghW3J_VE.js +2 -0
- package/dist/assets/studio/assets/{fa-Olt9fYoO.js → fa-CPQX96ib.js} +2 -2
- package/dist/assets/studio/assets/fa-DCXNWQFv.js +2 -0
- package/dist/assets/studio/assets/{fr-svFzcZsZ.js → fr-D8Ew5nex.js} +2 -2
- package/dist/assets/studio/assets/fr-lTAz34qv.js +2 -0
- package/dist/assets/studio/assets/he-CG-RJ7FV.js +2 -0
- package/dist/assets/studio/assets/{he-LyIguu2z.js → he-LPu1uvhy.js} +2 -2
- package/dist/assets/studio/assets/hi-CUPp4Z-5.js +2 -0
- package/dist/assets/studio/assets/{hi-IvPiwlEg.js → hi-Dfl8UlTZ.js} +2 -2
- package/dist/assets/studio/assets/{i18n-CCHry74V.js → i18n-fqiUdSL9.js} +4 -4
- package/dist/assets/studio/assets/id-BeAv9jwY.js +2 -0
- package/dist/assets/studio/assets/{id-BHpl7m2-.js → id-CH7z2Skl.js} +2 -2
- package/dist/assets/studio/assets/{index-BxV5L6Ao.css → index-B1Xo22h3.css} +1 -1
- package/dist/assets/studio/assets/index-ycDVgxzM.js +3 -0
- package/dist/assets/studio/assets/inline-copy-text-gbd7jhwpor27l4rq-DVTadm16.js +2 -0
- package/dist/assets/studio/assets/input-c8lv9ulv0kortliq-DdDBVrym.js +5 -0
- package/dist/assets/studio/assets/input-group-fjr4r5ax0x78ppax-CT-8YIOd.js +2 -0
- package/dist/assets/studio/assets/input-h5ox92gf13ge04hp-B_dQ6kse.js +2 -0
- package/dist/assets/studio/assets/isElementDisabled-o0j7po84u0xjuwgg-KSuuBj8D.js +2 -0
- package/dist/assets/studio/assets/{it-DKqn-UZG.js → it-C377PBFl.js} +2 -2
- package/dist/assets/studio/assets/it-CY_74jqq.js +2 -0
- package/dist/assets/studio/assets/{ja-Db1QTfY1.js → ja-EFrK4i7G.js} +2 -2
- package/dist/assets/studio/assets/ja-ZNuVZgva.js +2 -0
- package/dist/assets/studio/assets/{ko-BQPRTMy6.js → ko-BWf7X0gV.js} +2 -2
- package/dist/assets/studio/assets/ko-HiX0t07M.js +2 -0
- package/dist/assets/studio/assets/layer-dialog-j5ywmzs46ccg6oqy-DmVmfjdu.js +2 -0
- package/dist/assets/studio/assets/link-cqyfjezntvr53rh7-hTM4H-hH.js +10 -0
- package/dist/assets/studio/assets/{media-DdL6ngu5.js → media-BpD2_l9g.js} +2 -2
- package/dist/assets/studio/assets/meter-majprsslwmpbmkzg-6rVickao.js +2 -0
- package/dist/assets/studio/assets/{nl-CjRMh9Xq.js → nl-DTwvmUYN.js} +2 -2
- package/dist/assets/studio/assets/nl-g6zWQzPT.js +2 -0
- package/dist/assets/studio/assets/pagination-oaenm9t7ou3lmcgw-CFAXeyOP.js +2 -0
- package/dist/assets/studio/assets/{pl-DEuHicDd.js → pl-824MO57D.js} +2 -2
- package/dist/assets/studio/assets/pl-CQpb8_JW.js +2 -0
- package/dist/assets/studio/assets/pt-BR-BUkZriwP.js +2 -0
- package/dist/assets/studio/assets/{pt-BR-DXBAGGZF.js → pt-BR-DDeM-hcO.js} +2 -2
- package/dist/assets/studio/assets/radio-35dx7y6rjrezbjsp-BKYyxqAv.js +2 -0
- package/dist/assets/studio/assets/resolveAriaLabelledBy-nc8mdie5shy87nsb-ElkMlSS0.js +2 -0
- package/dist/assets/studio/assets/{ru-C4dvq8D2.js → ru-D_WQFs-3.js} +2 -2
- package/dist/assets/studio/assets/ru-ELePwa8w.js +2 -0
- package/dist/assets/studio/assets/{schedules-api-DIiVlJET.js → schedules-api-DjdB_ruw.js} +2 -2
- package/dist/assets/studio/assets/select-futox5zqr3r80y9a-DwUjYDoe.js +2 -0
- package/dist/assets/studio/assets/skeleton-line-m9dyh126t9k07jvg-xeLBEDtm.js +4 -0
- package/dist/assets/studio/assets/switch-cqsvolm7h69z7vgg-BpEnm_Pd.js +2 -0
- package/dist/assets/studio/assets/tabs-gf57qqf1wcclaejq-BLpXPSDg.js +2 -0
- package/dist/assets/studio/assets/tag-input-ohfybx5dbxy3houy-CkPXLUvo.js +2 -0
- package/dist/assets/studio/assets/taxonomy-keys-SEAnJcoP.js +2 -0
- package/dist/assets/studio/assets/toolbar-h213d8e22yjh5cwq-D_B7NxAz.js +2 -0
- package/dist/assets/studio/assets/tr-DCjbU9M-.js +2 -0
- package/dist/assets/studio/assets/{tr-T0Kt-Hwa.js → tr-vHsJMvB6.js} +2 -2
- package/dist/assets/studio/assets/{uk-D1IBYr0G.js → uk-BWPJkCpO.js} +2 -2
- package/dist/assets/studio/assets/uk-DlhhU-7R.js +2 -0
- package/dist/assets/studio/assets/{useAnalyticsCard-CATQU4Bz.js → useAnalyticsCard-BXEfAkwG.js} +2 -2
- package/dist/assets/studio/assets/{useAriaLabelledBy-ox8dum59shmgypq1-Cv8wf0no.js → useAriaLabelledBy-ox8dum59shmgypq1-DiMCXaoD.js} +2 -2
- package/dist/assets/studio/assets/useChartPalette-C180NiLH.js +2 -0
- package/dist/assets/studio/assets/useCollectionView-bMynm9Nh.js +2 -0
- package/dist/assets/studio/assets/{useLiveSite-CUn2kbrj.js → useLiveSite-DTKAFkme.js} +2 -2
- package/dist/assets/studio/assets/{useMe-BkBpEyf5.js → useMe-lbFq_BoK.js} +2 -2
- package/dist/assets/studio/assets/{usePaging-D37ddXyL.js → usePaging-C7VrX4Um.js} +2 -2
- package/dist/assets/studio/assets/{usePendingApprovals-B_xkVaSu.js → usePendingApprovals-CtjRwqZ-.js} +2 -2
- package/dist/assets/studio/assets/vendor-styling-da1xibnxfkjmtglr-BYdxZxc9.js +2 -0
- package/dist/assets/studio/assets/zh-Hans-Chik4lDf.js +2 -0
- package/dist/assets/studio/assets/{zh-Hans-BG8dPvEG.js → zh-Hans-Dw4dO-z7.js} +2 -2
- package/dist/assets/studio/index.html +52 -71
- package/dist/src/render-chrome.js +15 -5
- package/package.json +11 -11
- package/dist/assets/studio/assets/AccountPage-BEFaryjs.js +0 -2
- package/dist/assets/studio/assets/ActivityPage-CaRSJHlv.js +0 -2
- package/dist/assets/studio/assets/AgentModes-758a2e8F.js +0 -2
- package/dist/assets/studio/assets/AgentsPage-DR6s7zaQ.js +0 -2
- package/dist/assets/studio/assets/AnalyticsPage-_JSpo8nQ.js +0 -3
- package/dist/assets/studio/assets/ApprovalsPage-DdPevaLZ.js +0 -3
- package/dist/assets/studio/assets/Archive.es-C0uhxndN.js +0 -2
- package/dist/assets/studio/assets/ArrowClockwise.es-BA0pzb0Y.js +0 -2
- package/dist/assets/studio/assets/ArrowCounterClockwise.es-Bn2jikgp.js +0 -2
- package/dist/assets/studio/assets/ArrowUp.es-Bh0pVk-S.js +0 -2
- package/dist/assets/studio/assets/ArrowsMerge.es-gfKOrxGd.js +0 -2
- package/dist/assets/studio/assets/ArticleEditorPage-C2asHmlW.js +0 -2
- package/dist/assets/studio/assets/ArticlesPage-bT85JG5s.js +0 -2
- package/dist/assets/studio/assets/AssetPage-Ddy0luOH.js +0 -2
- package/dist/assets/studio/assets/Audit-OmE16Gp0.js +0 -2
- package/dist/assets/studio/assets/AuditBadges-CjoKFkMy.js +0 -2
- package/dist/assets/studio/assets/AuthLayout-HIkVpHM-.js +0 -2
- package/dist/assets/studio/assets/AutomationsPage-BBkyTUDa.js +0 -2
- package/dist/assets/studio/assets/BookOpenText.es-BfXzf_Vn.js +0 -2
- package/dist/assets/studio/assets/BuildPage-F-NRLJNl.js +0 -2
- package/dist/assets/studio/assets/CSPContext-ctyrgg64girv38ls-2UvfJ5m0.js +0 -2
- package/dist/assets/studio/assets/CalendarCheck.es-DWymuVqi.js +0 -2
- package/dist/assets/studio/assets/CalendarPlus.es-YGFiosIm.js +0 -2
- package/dist/assets/studio/assets/CaretLeft.es-BUnHcaxq.js +0 -2
- package/dist/assets/studio/assets/CaretRight.es-D_coqYai.js +0 -2
- package/dist/assets/studio/assets/CaretUp.es-DBg3pdpL.js +0 -2
- package/dist/assets/studio/assets/CheckCircle.es-XJ9Tr9Tu.js +0 -2
- package/dist/assets/studio/assets/ClockClockwise.es-1egHMnBk.js +0 -2
- package/dist/assets/studio/assets/ClockCountdown.es-BR_zz6vi.js +0 -2
- package/dist/assets/studio/assets/CodeHighlighted-BIWFodJr.js +0 -4
- package/dist/assets/studio/assets/Columns-DGrju-Ia.js +0 -2
- package/dist/assets/studio/assets/CommandMenu-CMs1qRHL.js +0 -2
- package/dist/assets/studio/assets/CommentThreadControls-rHn51ZCS.js +0 -2
- package/dist/assets/studio/assets/CommentThreadPage-C8jUBgDF.js +0 -2
- package/dist/assets/studio/assets/CommenterPage-DreEY6Mr.js +0 -2
- package/dist/assets/studio/assets/Comments-DANnAEfG.js +0 -2
- package/dist/assets/studio/assets/CommentsPage-Cra9ji9T.js +0 -2
- package/dist/assets/studio/assets/CompositeRoot-g72lchaerolf5dc9-p9t2l5O6.js +0 -2
- package/dist/assets/studio/assets/Crumbs-B3lDes5a.js +0 -2
- package/dist/assets/studio/assets/DeviceMobile.es-B4PwJ85Q.js +0 -2
- package/dist/assets/studio/assets/DeviceTablet.es-BpxIF5z6.js +0 -2
- package/dist/assets/studio/assets/DotsThree.es-C-pT5SgE.js +0 -2
- package/dist/assets/studio/assets/DownloadSimple.es-Cq4-UK-k.js +0 -2
- package/dist/assets/studio/assets/EditorLayout-BPvUbdqu.js +0 -2
- package/dist/assets/studio/assets/Elevation-C995Cklk.js +0 -2
- package/dist/assets/studio/assets/ElevationRequest-D3eY13xv.js +0 -2
- package/dist/assets/studio/assets/EnvelopeSimple.es-g-hlqV74.js +0 -2
- package/dist/assets/studio/assets/Eye.es-DqovdtPt.js +0 -2
- package/dist/assets/studio/assets/EyeSlash.es-YoqigHIr.js +0 -2
- package/dist/assets/studio/assets/File.es-VYp_u8mn.js +0 -2
- package/dist/assets/studio/assets/FolderSimple.es-CbGWmBJc.js +0 -2
- package/dist/assets/studio/assets/FolderSimplePlus.es-C9Fl6ewY.js +0 -2
- package/dist/assets/studio/assets/ForgotPasswordPage-DYWhKwe7.js +0 -2
- package/dist/assets/studio/assets/Funnel.es-L1Sdi8-A.js +0 -2
- package/dist/assets/studio/assets/Gating-BBlmTEBr.js +0 -2
- package/dist/assets/studio/assets/Gauge.es-D0Pz39Z0.js +0 -2
- package/dist/assets/studio/assets/GitDiff.es-fB1csyEF.js +0 -2
- package/dist/assets/studio/assets/GlobeHemisphereWest.es-C34XiLRk.js +0 -2
- package/dist/assets/studio/assets/GovernanceDialog-YzAT6s-u.js +0 -2
- package/dist/assets/studio/assets/HandPalm.es-CB5OlkOg.js +0 -2
- package/dist/assets/studio/assets/Heartbeat.es-DZziz772.js +0 -2
- package/dist/assets/studio/assets/Hourglass.es-aqS22q0y.js +0 -2
- package/dist/assets/studio/assets/House.es-BQyZgbwu.js +0 -2
- package/dist/assets/studio/assets/IconBase.es-BZDpYMnj.js +0 -2
- package/dist/assets/studio/assets/Image.es-BcOUS77O.js +0 -2
- package/dist/assets/studio/assets/InsetPanel-CHSg953_.js +0 -2
- package/dist/assets/studio/assets/InvitePage-C7316q26.js +0 -2
- package/dist/assets/studio/assets/Key.es-DE551dL3.js +0 -2
- package/dist/assets/studio/assets/Lightning.es-D0IF-5OW.js +0 -2
- package/dist/assets/studio/assets/LinkBreak.es-BvGThatb.js +0 -2
- package/dist/assets/studio/assets/LinkSimple.es-BB_3GfFO.js +0 -2
- package/dist/assets/studio/assets/ListBullets.es-DzSyoNA1.js +0 -2
- package/dist/assets/studio/assets/ListToolbar-BHXRGWj_.js +0 -2
- package/dist/assets/studio/assets/LoginPage-D-hw4Y4b.js +0 -2
- package/dist/assets/studio/assets/MediaPage-BSoK0VVR.js +0 -2
- package/dist/assets/studio/assets/MediaPicker-BrpNGScc.js +0 -2
- package/dist/assets/studio/assets/MediaUpload-DzoYV1Ni.js +0 -2
- package/dist/assets/studio/assets/MembersPage-C0SMkEg9.js +0 -2
- package/dist/assets/studio/assets/Menus-LUcwCsPd.js +0 -2
- package/dist/assets/studio/assets/Monitor.es-CeaPWdET.js +0 -2
- package/dist/assets/studio/assets/NavigationPage-DIIVJdj_.js +0 -2
- package/dist/assets/studio/assets/PageEditorPage-B2f31JCV.js +0 -5
- package/dist/assets/studio/assets/PagesPage-CIohsG0C.js +0 -2
- package/dist/assets/studio/assets/PencilSimple.es-CsZ-k9wK.js +0 -2
- package/dist/assets/studio/assets/Plus.es-XNm1OB5Q.js +0 -2
- package/dist/assets/studio/assets/PreviewPanel-D4f46wMP.js +0 -2
- package/dist/assets/studio/assets/Prohibit.es-CAvPLn3v.js +0 -2
- package/dist/assets/studio/assets/ProhibitInset.es-DsnL02EX.js +0 -2
- package/dist/assets/studio/assets/ProjectPage-CZJ81679.js +0 -2
- package/dist/assets/studio/assets/Question.es-BqQtQle2.js +0 -2
- package/dist/assets/studio/assets/Readers-hc0Z6jdr.js +0 -3
- package/dist/assets/studio/assets/RedirectDialog-RW_zqu_Q.js +0 -2
- package/dist/assets/studio/assets/RedirectsPage-BWRlVePU.js +0 -2
- package/dist/assets/studio/assets/ReleaseApproval-CKy6ADv1.js +0 -2
- package/dist/assets/studio/assets/ReleasePage-C7luZWA1.js +0 -2
- package/dist/assets/studio/assets/ReleaseParts-DvmejDuf.js +0 -2
- package/dist/assets/studio/assets/ResetPasswordPage-COU-1Tr-.js +0 -2
- package/dist/assets/studio/assets/RocketLaunch.es-BTDML1jE.js +0 -2
- package/dist/assets/studio/assets/ScheduleCard-BtnJ_Bzg.js +0 -2
- package/dist/assets/studio/assets/ScheduleDialog-BScv2CDJ.js +0 -2
- package/dist/assets/studio/assets/ScheduleHistoryPage-vEL4E2Gv.js +0 -2
- package/dist/assets/studio/assets/ScheduleStatusBadge-8n3clv2h.js +0 -2
- package/dist/assets/studio/assets/Schedules-CczPJWrl.js +0 -3
- package/dist/assets/studio/assets/SchedulesPage-CPRSdvZG.js +0 -2
- package/dist/assets/studio/assets/ScopeBadge-8ftEPI5M.js +0 -2
- package/dist/assets/studio/assets/SectionCard-Bqvz-NiL.js +0 -2
- package/dist/assets/studio/assets/Seo-C8dMpUy1.js +0 -2
- package/dist/assets/studio/assets/SeoPreview-B0gV3OO-.js +0 -2
- package/dist/assets/studio/assets/Settings-CRS_oj46.js +0 -2
- package/dist/assets/studio/assets/ShieldCheck.es-BOXTHH7h.js +0 -2
- package/dist/assets/studio/assets/ShieldWarning.es-DPxoDMpT.js +0 -2
- package/dist/assets/studio/assets/SignIn.es-jAzHZG6b.js +0 -2
- package/dist/assets/studio/assets/SiteOverviewPage-A_YwaATE.js +0 -4
- package/dist/assets/studio/assets/SiteSettingsPage-C9KidHjf.js +0 -3
- package/dist/assets/studio/assets/SitesPage-BWeCjl6F.js +0 -4
- package/dist/assets/studio/assets/SkillsPage-C4Qx2Q0r.js +0 -3
- package/dist/assets/studio/assets/SlidersHorizontal.es-Bg-14CTG.js +0 -2
- package/dist/assets/studio/assets/SnapshotsPage-BpDI47Nb.js +0 -2
- package/dist/assets/studio/assets/Sparkle.es-OfyfGCDe.js +0 -2
- package/dist/assets/studio/assets/Star.es-DhrrAurR.js +0 -2
- package/dist/assets/studio/assets/StatTile-DJkAsABJ.js +0 -2
- package/dist/assets/studio/assets/StatusActions-CTs-zXTk.js +0 -3
- package/dist/assets/studio/assets/StopCircle.es-a6tRK2fc.js +0 -2
- package/dist/assets/studio/assets/Table.es-6S52tmK7.js +0 -2
- package/dist/assets/studio/assets/TableSkeleton-DWrf88UN.js +0 -2
- package/dist/assets/studio/assets/TagsMigration-CRv_2FkT.js +0 -2
- package/dist/assets/studio/assets/Taxonomy-BGflQo3a.js +0 -2
- package/dist/assets/studio/assets/TaxonomyPage-1NKiEnue.js +0 -2
- package/dist/assets/studio/assets/TermEditorPage-zHbvzgtO.js +0 -2
- package/dist/assets/studio/assets/TermPickers-BlyDJChj.js +0 -2
- package/dist/assets/studio/assets/TerminalWindow.es-DRFBT_Ie.js +0 -2
- package/dist/assets/studio/assets/TextAa.es-CuNv62rI.js +0 -2
- package/dist/assets/studio/assets/Toast-BsM5w6Jh.js +0 -2
- package/dist/assets/studio/assets/TranslationList-DRCdjbvf.js +0 -2
- package/dist/assets/studio/assets/TranslationsPage-BFg-PQAG.js +0 -2
- package/dist/assets/studio/assets/Trash.es-CxKLVMOQ.js +0 -2
- package/dist/assets/studio/assets/User.es-BLqDj7XT.js +0 -2
- package/dist/assets/studio/assets/UserCircle.es-D4ZFhshn.js +0 -2
- package/dist/assets/studio/assets/Warning.es-LZXqwHRF.js +0 -2
- package/dist/assets/studio/assets/XCircle.es-3fJHkmwA.js +0 -2
- package/dist/assets/studio/assets/agents-DGWn1WXw.js +0 -4
- package/dist/assets/studio/assets/api-CHeogUo-.js +0 -4
- package/dist/assets/studio/assets/approvals-Cje6pPn9.js +0 -2
- package/dist/assets/studio/assets/ar-CS6h3U7d.js +0 -2
- package/dist/assets/studio/assets/badge-dq8bx752b9dp7dst--rpq8QXS.js +0 -2
- package/dist/assets/studio/assets/banner-msnmqm7of2lck01x-D6cADEpP.js +0 -2
- package/dist/assets/studio/assets/blockIcon-VJ3KMOyZ.js +0 -2
- package/dist/assets/studio/assets/button-pa1bq9b85hawg41a-CmOCuL-1.js +0 -2
- package/dist/assets/studio/assets/calendar-locale-D4aJYygH.js +0 -2
- package/dist/assets/studio/assets/checkbox-lbo436duy7krxcsk-HiD6vTuC.js +0 -6
- package/dist/assets/studio/assets/clipboard-text-gd6s3n1bqse9zgt8-C151k1zC.js +0 -2
- package/dist/assets/studio/assets/code-eu8kzwqnlhoyin24-6ko8eUbh.js +0 -2
- package/dist/assets/studio/assets/collapsible-l8g94on4w7qfosmn-De4SMvUy.js +0 -2
- package/dist/assets/studio/assets/combobox-hdxtsm2gqcxxgfju-DEsFIzc-.js +0 -2
- package/dist/assets/studio/assets/date-picker-BSgojKR2.js +0 -1
- package/dist/assets/studio/assets/date-picker-cotkexrpqu5tjikv-C9Knj8LQ.js +0 -2
- package/dist/assets/studio/assets/de-COZWf0tz.js +0 -2
- package/dist/assets/studio/assets/deleteLabels-ZHt19si-.js +0 -2
- package/dist/assets/studio/assets/dialog-glpnivujociqs9lh-C_45HVlo.js +0 -2
- package/dist/assets/studio/assets/dropdown-m53ji1d66mws89wh-BTaT-o14.js +0 -2
- package/dist/assets/studio/assets/empty-hkvg3is3uc6dj1at-Cen9KfIy.js +0 -2
- package/dist/assets/studio/assets/es-Cpr7u5Cz.js +0 -2
- package/dist/assets/studio/assets/fa-8y3tvKw6.js +0 -2
- package/dist/assets/studio/assets/fr-IvKa5dhW.js +0 -2
- package/dist/assets/studio/assets/he-DG-oJz8N.js +0 -2
- package/dist/assets/studio/assets/hi-CngsNxV4.js +0 -2
- package/dist/assets/studio/assets/id-CrWAlC6J.js +0 -2
- package/dist/assets/studio/assets/index-OjH3NEOH.js +0 -3
- package/dist/assets/studio/assets/inline-copy-text-gbd7jhwpor27l4rq-BGh10UAA.js +0 -2
- package/dist/assets/studio/assets/input-c8lv9ulv0kortliq-Be2cm12J.js +0 -5
- package/dist/assets/studio/assets/input-group-fjr4r5ax0x78ppax-Bip4khk1.js +0 -2
- package/dist/assets/studio/assets/input-h5ox92gf13ge04hp-CDAaOl0A.js +0 -2
- package/dist/assets/studio/assets/it-BbkGji4q.js +0 -2
- package/dist/assets/studio/assets/ja-CLpIeite.js +0 -2
- package/dist/assets/studio/assets/ko-u0y0T6iL.js +0 -2
- package/dist/assets/studio/assets/layer-dialog-j5ywmzs46ccg6oqy-uKC-1DCk.js +0 -2
- package/dist/assets/studio/assets/link-cqyfjezntvr53rh7-3eczR57J.js +0 -10
- package/dist/assets/studio/assets/meter-majprsslwmpbmkzg-Bio9f57s.js +0 -2
- package/dist/assets/studio/assets/nl-CraQgOQ0.js +0 -2
- package/dist/assets/studio/assets/pagination-oaenm9t7ou3lmcgw-CjvX77_7.js +0 -2
- package/dist/assets/studio/assets/pl-Z99ZIGWL.js +0 -2
- package/dist/assets/studio/assets/pt-BR-CjvH9SeS.js +0 -2
- package/dist/assets/studio/assets/radio-35dx7y6rjrezbjsp-2D7MXAy3.js +0 -2
- package/dist/assets/studio/assets/resolveAriaLabelledBy-nc8mdie5shy87nsb-asx42i8W.js +0 -2
- package/dist/assets/studio/assets/ru-CwyHst7f.js +0 -2
- package/dist/assets/studio/assets/select-futox5zqr3r80y9a-FumEl51u.js +0 -2
- package/dist/assets/studio/assets/skeleton-line-m9dyh126t9k07jvg-BFlcthbF.js +0 -4
- package/dist/assets/studio/assets/switch-cqsvolm7h69z7vgg-DkSvRVQF.js +0 -2
- package/dist/assets/studio/assets/table-yf8ul2e5nbemioi1-KGRDj7XO.js +0 -2
- package/dist/assets/studio/assets/tabs-gf57qqf1wcclaejq-CirIVMnq.js +0 -2
- package/dist/assets/studio/assets/tag-input-ohfybx5dbxy3houy-sHF6otfN.js +0 -2
- package/dist/assets/studio/assets/toolbar-h213d8e22yjh5cwq-DxfVlUi9.js +0 -2
- package/dist/assets/studio/assets/tr-DOAJHdbH.js +0 -2
- package/dist/assets/studio/assets/uk-9ZV1-TPI.js +0 -2
- package/dist/assets/studio/assets/useChartPalette-BnJNJ44v.js +0 -2
- package/dist/assets/studio/assets/zh-Hans-D57DCm9K.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ar-
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,r as n}from"./react-CDCuUAOg.js";import{u as r}from"./intl-C22KAx_l.js";import{i,n as a,t as o}from"./format-DGE2c-4V.js";import{t as s}from"./preload-helper-DjzSQ1t3.js";var c=e(t(),1),l=n(),u={app:{name:`Cloudhal Studio`,tagline:`Sign in to operate your sites.`},playground:{title:`Playground`,description:[[2,`count`,{one:[[4],` minute left`],other:[[4],` minutes left`]}],`. Everything here is deleted when the session ends, so don't enter personal data.`],reset:`Reset`,deploy:`Deploy to Cloudflare`,unavailableTitle:`Available in your own install`,unavailableDescription:`Team members, agent keys and account settings need sign-in, so the playground leaves them out. Deploy Cloudhal to your Cloudflare account to use them.`},common:{save:`Save`,cancel:`Cancel`,delete:`Delete`,publish:`Publish`,rollBack:`Roll back`,loading:`Loading…`,signOut:`Sign out`,live:`Live`,language:`Language`,more:`More`,rev:`rev {rev}`,close:`Close`,optional:`(optional)`,moreInformation:`More information`,copy:`Copy`,copied:`Copied`,retry:`Try again`,discard:`Discard`,saveChanges:`Save changes`,unsaved:`Unsaved changes`,onThisPage:`On this page`,on:`On`,off:`Off`,deleteResource:{title:`Delete {name}`,warning:`This action cannot be undone. This will permanently delete the {name} {type}.`,typeToConfirm:`Type {name} to confirm:`,copy:`Copy {name} to clipboard`,confirmInput:`Type {name} to confirm deletion`,delete:`Delete {type}`}},theme:{label:`Theme`,current:`Theme: {name}`,light:`Light`,dark:`Dark`,system:`System`},auth:{signInTitle:`Welcome back`,signUpTitle:`Create your account`,signUpDescription:`The first account on a new Studio becomes its owner.`,footer:`Open source · Apache-2.0`,signIn:`Sign in`,createAccount:`Create account`,name:`Name`,email:`Email`,password:`Password`,passwordHint:`At least 8 characters`,failed:`Sign-in failed`,setupTitle:`Set up this Studio`,setupDescription:"You opened the setup link from `cloudhal deploy`. The account you create now becomes the owner; afterwards sign-up closes."},sites:{title:`Sites`,description:`Every site is a graph of pages and content that agents operate under your approval.`,columns:{project:`Project`,name:`Name`,slug:`Slug`,pages:`Pages`,status:`Status`},notPublished:`Not published`,empty:`No sites yet`,emptyDescription:`Create one from the terminal and it appears here.`,search:`Search sites`,usageTitle:`From the terminal`,usageDescription:`Everything in Studio is also a CLI command, so agents and scripts can do the same work.`,open:`Open`},pageHeaders:{media:{title:`Media`,description:`Images, video, audio, documents and data files of this site. New files go live with the next publish.`},pages:{title:`Pages`,description:`The routes of this site. Each page is a stack of sections that themes render.`},articles:{title:`Articles`,description:`Posts and other entries, written by people or agents and published with the site.`},snapshots:{title:`Snapshots`,description:`Frozen versions of the site. Publishing points the live site at one; rolling back points it at an earlier one.`},activity:{title:`Activity`,description:`Every tool call an agent or person made on this site, with the policy decision.`},approvals:{title:`Approvals`,description:`Agents' publishes, rollbacks and deletes, their edits in Manual mode, their requests for more autonomy, and publishes people's roles can't make alone wait here until someone who may decide does.`},settings:{title:`Settings`,description:`Name, languages, domains and preview links for this site.`},agents:{title:`Agents`,description:`Keys let agents, CI jobs and MCP clients work on your sites. A key's mode decides what the agent does on its own and what waits for you.`},skills:{title:`Skills`,description:`Playbooks agents read over MCP. A call made under a skill only gets the scopes it declares, and the tools it lists always wait for a person.`},account:{title:`Account`,description:`Your profile, how you sign in, and who else can get into this Studio.`},taxonomy:{title:`Categories & tags`,description:`How articles are filed and found. A rename, merge or retirement is one change and one snapshot, and leaves redirects behind.`},navigation:{title:`Navigation`,description:`The menus visitors find their way with: the header, the footer and any your theme places. Items point at pages and categories, so renames never break them.`},translations:{title:`Translations`,description:`Every page and article by language: what is missing, out of date or waiting for a person's review.`},redirects:{title:`Redirects`,description:`Old addresses and where they send visitors. Slug changes, merges and retirements add them on their own; you can add your own too.`},team:{title:`Team`,description:`Who works on this Studio and in which role. People join with a one-time invite link; their agents never do more than they can.`}},nav:{media:`Media`,comments:`Comments`,overview:`Overview`,content:`Content`,history:`History`,automation:`Automation`,account:`Account`,home:`Overview`,pages:`Pages`,articles:`Articles`,snapshots:`Snapshots`,agents:`Agents`,allSites:`All sites`,sites:`Sites`,switchSite:`Switch site`,search:`Search or run a command…`,shortcutHint:`⌘K`,shortcutHintCtrl:`Ctrl K`,agentSkills:`Skills`,schedules:`Schedules`,activity:`Activity`,agentKeys:`Keys and MCP`,approvals:`Approvals`,settings:`Settings`,siteSettings:`Settings`,taxonomy:`Categories & tags`,navigation:`Navigation`,redirects:`Redirects`,translations:`Translations`,team:`Team`,analytics:`Analytics`},commands:{goMedia:`Go to media`,goComments:`Go to comments`,goAnalytics:`Go to analytics`,placeholder:`Type a command…`,empty:`No matching command`,hintNavigate:`Navigate`,hintSelect:`Run`,hintClose:`Close`,goOverview:`Go to overview`,goArticles:`Go to articles`,goSnapshots:`Go to snapshots`,newArticle:`New article`,createSnapshot:`Create snapshot`,publishSite:`Snapshot and publish site`,goActivity:`Go to activity`,goAgents:`Go to agents`,createAgentKey:`Create agent key`,goSkills:`Go to skills`,goAccount:`Go to account settings`,goTeam:`Go to team`,goSiteSettings:`Go to site settings`,goApprovals:`Go to approvals`,goTaxonomy:`Go to categories and tags`,goNavigation:`Go to navigation menus`,goRedirects:`Go to redirects`,goSchedules:`Go to schedules`,newSchedule:`Schedule a publish…`,searchPlaceholder:`Search content or run a command…`,searchEmpty:`No commands or content match`,hintNewTab:`New tab`,groups:{commands:`Commands`,entry:`Articles`,page:`Pages`,term:`Categories and tags`,asset:`Media`,menu:`Menu items`,redirect:`Redirects`}},overview:{commentsWaiting:[[2,`count`,{one:[[4],` comment is waiting`],other:[[4],` comments are waiting`]}]],commentsWaitingDescription:`Readers don't see them until someone approves them.`,liveSnapshotLabel:`Live snapshot`,notPublished:`Not published yet`,newPage:`New page`,pages:`Pages`,columns:{title:`Title`,path:`Path`,status:`Status`,updated:`Updated`},empty:`No pages yet`,emptyDescription:`Create the first page or ask the agent to scaffold one.`,search:`Search pages`,status:`Status`,live:`Live`,recentArticles:`Recent articles`,viewAll:`View all`,cli:`From the terminal`},pageStatus:{publishTitle:`Publish “{title}”?`,unpublished:`Page moved back to draft`,failed:`The page's status did not change`,leftOut:[[2,`count`,{one:[[4],` page is not published`],other:[[4],` pages are not published`]}]],leftOutDescription:`Drafts and pages in review, new translations included, stay off the live site. Publish them first.`,review:`Review pages`},articles:{description:`Posts in the “posts” collection.`,newArticle:`New article`,empty:`No articles yet`,emptyDescription:`Write the first one, or ask the agent to.`,untitled:`Untitled`,columns:{title:`Title`,author:`Author`,status:`Status`,updated:`Updated`},search:`Search articles`,none:`—`,noCategory:`No category`,primary:`Primary category`,facets:{label:`Filter articles`,category:`Filter by category`,tag:`Filter by tag`,allCategories:`All {label}`,allTags:`All {label}`,clear:`Clear filters`,empty:`No articles match these filters`,emptyDescription:`Try another category or tag, or clear the filters.`}},articleCorrections:{title:`Corrections`,description:`Readers see these at the end of the article, newest first, and the latest is its Updated date. Once published, a correction stays: someone who can publish may reword it, nobody removes it.`,empty:`No corrections`,emptyDescription:`Add one when a published story changes in substance.`,kind:`Kind`,kinds:{correction:`Correction`,clarification:`Clarification`,update:`Update`},note:`What changed`,noteHint:`One or two sentences. Markdown links and emphasis work.`,add:`Add correction`,unsaved:`Not saved`,remove:`Remove correction`,pending:`Save the article to add it; it goes live with the next publish.`},articleTerms:{title:`Categories and tags`,description:`Categories file the article; tags describe it. The primary category appears in breadcrumbs and in the article's metadata.`,legacyDescription:`This site still keeps tags as plain text. Move them to categories and tags to give them names, archives and redirects.`,legacyTitle:`Older tags on this article`,legacyPending:`{tags} become tags when you save.`,required:`Choose a {singular} to send this article to review or publish it.`,requiredToast:`Choose a {singular} first`,slugRedirect:`Lower-case, hyphenated. This article is published: a new slug leaves a redirect from the old address.`},pickers:{under:`in {path}`,clear:`Clear`,showOptions:`Show options`,noMatch:`Nothing matches`,remove:`Remove {name}`,atMost:`At most {max}. Remove one to add another.`,categoryHint:`Up to {max}. Type to search names and synonyms.`,categoryRequiredHint:`Needed to send it to review or publish it. Up to {max}.`,categoryPlaceholder:`Choose categories…`,noCategory:`No category matches. Add categories in Categories & tags.`,primary:`Primary category`,primaryHint:`Shown in breadcrumbs and used as the article's section.`,primaryNone:`Choose one…`,tagHint:`Up to {max}. Existing tags come first, and synonyms find them too.`,tagPlaceholder:`Add a tag…`,tagFull:`Tag limit reached`,viaSynonym:`synonym “{value}”`,similar:`similar`,create:`Create “{name}”`,createNoSlug:`This name has no letters or digits for an address. Try another name.`,nearDuplicate:`Looks like {names}. Use the existing tag if it means the same.`,proposedChip:`Proposed by an agent. It gets a public page once someone approves it.`},editor:{schedule:`Schedule…`,locked:`A scheduled release holds this. Unschedule it to edit.`,heroNoImage:`No hero image`,status:`Status`,title:`Title`,slug:`Slug`,summary:`Summary`,summaryHint:`Used as the meta description in search results and on shared links.`,body:`Body (markdown)`,tags:`Tags`,tagsHint:`Comma separated`,path:`Path`,pathHint:`Absolute, lower-case, no trailing slash`,sections:`Sections`,addSection:`Add section`,noSections:`No sections yet`,noSectionsDescription:`Add a hero, rich text, image or content list.`,remove:`Remove`,moveUp:`Move up`,moveDown:`Move down`,heading:`Heading`,subheading:`Subheading`,caption:`Caption`,collection:`Collection`,limit:`Limit`,sort:`Sort`,sortNewest:`Newest`,sortOldest:`Oldest`,sortTitle:`Title`,saved:`Saved`,sendToReview:`Send to review`,submitForReview:`Submit for review`,backToDraft:`Back to draft`,archive:`Archive`,restore:`Restore to draft`,publishArticleTitle:`Publish this article?`,publishArticleDescription:`It becomes visible on the site the next time the site is snapshotted and published.`,publishPageTitle:`Publish this page?`,publishPageDescription:`It goes live the next time the site is published. Other pages and languages keep their own status.`,deleteArticle:`Delete article`,deletePage:`Delete page`,article:`Article`,page:`Page`,slugHint:`Lower-case, hyphenated; becomes the URL.`,metadata:`Details`,moreActions:`More actions`,unpublish:`Unpublish (back to draft)`,duplicate:`Duplicate`,duplicated:`Copy created`,copyTitle:`{title} (copy)`,dangerZone:`Danger zone`,deletePageTitle:`Delete this page`,deletePageHint:`Removes the page and its sections. Published snapshots keep their copy.`,deleteArticleTitle:`Delete this article`,deleteArticleHint:`Removes the article from the site. Published snapshots keep their copy.`,removeSectionTitle:`Remove this section?`,removeSectionDescription:`The {kind} section is removed from the draft. The page changes only when you save.`,sectionKinds:{hero:`Hero`,richText:`Rich text`,image:`Image`,contentList:`Content list`,component:`Block`,surface:`Generated UI`},buildLive:`Build live`,buildLiveHint:`Watch agents build this page as it happens`,surface:{title:`Generated UI · {count} components`,hint:`Built from the theme's components. Change its texts here; to change the layout, ask the AI.`,json:`Generated UI as data`,showJson:`Show JSON`,outline:`Components of this section`,expand:`Show what is inside {title}`,collapse:`Hide what is inside {title}`,changeWithAi:`Change with AI`,editTexts:`Edit the texts of {title}`,changePart:`Change {title} with AI`,bound:`shows {path}`,computed:`computed ({fn})`,notPlaced:`Not on the page`},blocks:{menu:`Blocks`,unknown:`Unknown block · {type}`,unknownHint:`This deployment has no block type with this name (the theme may have changed). It is kept as is and not shown on the site.`,item:`Item {n}`,addItem:`Add item`,removeItem:`Remove item`,moveUp:`Move up`,moveDown:`Move down`,values:{tone:{info:`Info`,success:`Success`,warning:`Warning`,danger:`Danger`},variant:{primary:`Primary`,secondary:`Secondary`}}},bodyTitle:`Body`,markdown:`Markdown`,words:[[2,`count`,{one:[[4],` word`],other:[[4],` words`]}]],id:`ID`,revision:`Revision`,locale:`Language`,author:`Author`,updatedAt:`Updated`,publishedAt:`Published`},seo:{counter:`{count} / {max}`,fixErrors:`Fix the highlighted fields before saving.`,cover:{title:`Cover image`,description:`Shown above the article and used as its picture when the link is shared. Choose it from the media library, or upload a new one there.`,url:`Image URL`,urlHint:`An https:// address, or a path on your site such as /images/cover.jpg.`,urlPlaceholder:`https://… or /images/cover.jpg`,alt:`Alt text`,altHint:`Describe what the image shows. Screen readers read it to people who can't see the image, and search engines use it to understand it.`,altPlaceholder:`A lighthouse above a calm sea at dusk`,remove:`Remove image`,empty:`No cover image`,loading:`Loading image…`,broken:`Couldn't load this image`,brokenHint:`Check the address and that the image is public.`,brokenPathHost:`Site paths load from {host}. Check the path, or that the site is deployed.`,brokenPathNoDomain:`Site paths load from the primary domain. Add one in Settings › Domains to see them here.`,size:`{width} × {height} px`,errors:{required:`Enter an image address, or remove the image.`,insecure:`Use https://. Browsers block http images on secure sites.`,invalid:`Enter an https:// address or a path that starts with /.`,tooLong:`At most 2,048 characters.`,altRequired:`Describe the image. Alt text is required for a cover image.`,altTooLong:`At most 500 characters.`}},preview:{title:`Search and social preview`,description:`How this article appears in search results and when its link is shared. The summary is used as the meta description and the cover image as the share image.`,search:`Search result`,social:`Social card`,noSummary:`No summary yet. Search engines and social networks pick text from the article.`,noDescription:`No meta description. Search engines pick text from the page.`},checks:{label:`Checks`,title:`Title`,titleGood:`{count} characters. Fits in a search result.`,titleLong:`{count} characters. Search results cut titles after about 60.`,titleMissing:`Add a title.`,description:`Meta description`,summary:`Meta description (summary)`,descriptionGood:`{count} characters. Fits in a search result.`,descriptionShort:`{count} characters. Short descriptions are often replaced; aim for 50–160.`,descriptionLong:`{count} characters. Search results cut it after about 160.`,summaryMissing:`Add a summary. Without one, search engines pick text from the article.`,image:`Share image`,imageSet:`The cover image is used.`,imageMissing:`No cover image, so shared links show no picture.`,imageBroken:`The cover image doesn't load.`,status:{good:`Good`,short:`Short`,long:`Too long`,missing:`Missing`,broken:`Broken`}},page:{title:`Search engines and sharing`,description:`How this page appears in search results and when its link is shared.`,seoTitle:`SEO title`,seoTitleHint:`Leave empty to use the page title.`,seoDescription:`Meta description`,seoDescriptionHint:`One or two sentences on what the page offers. Aim for 50–160 characters.`,seoDescriptionPlaceholder:`What visitors find on this page`,noindex:`Hide from search engines`,noindexHint:`Adds a noindex tag. The page stays reachable through its link.`,noindexWarningTitle:`This page is hidden from search engines`,noindexWarning:`Search engines are asked not to list it, and a page that is already listed drops out after their next visit. Leave this off for pages people should find through search.`,advanced:`Advanced`,custom:`Custom`,canonical:`Canonical URL`,canonicalHintHost:`Usually empty: the page's address on {host} is used. Set it only when the original of this content lives at another address.`,canonicalHint:`Usually empty: the page's address on the site's primary domain is used. Set it only when the original of this content lives at another address.`,canonicalPlaceholder:`https://example.com/original-page`,searchPreview:`Search preview`,hidden:`Hidden from search`,errors:{titleTooLong:`At most 300 characters.`,descriptionTooLong:`At most 500 characters.`,canonicalInvalid:`Enter a full address that starts with https://.`,canonicalTooLong:`At most 2,048 characters.`}},noindexBadge:`noindex`,noindexBadgeHint:`Hidden from search engines. Change it in the page's search settings.`,noCover:`No cover image`,archive:{seoTitleHint:`Leave empty to use the term's name.`,noindexHint:`Adds a noindex tag to the archive. It stays reachable through its link.`,noindexWarningTitle:`This archive is hidden from search engines`,noindexWarning:`Search engines are asked not to list it, and it leaves the sitemap. Leave this off for topics people should find through search.`}},status:{draft:`Draft`,review:`In review`,published:`Published`,archived:`Archived`},site:{publish:`Publish`,publishDescription:`Record a snapshot of the current graph and make it the live version.`,description:`/{slug} · {locale}`,rowMenu:`More actions`},snapshots:{description:`Every snapshot is immutable; publishing points the site at one.`,label:`Label`,labelPlaceholder:`e.g. Morning edition`,empty:`No snapshots yet`,emptyDescription:`Take a snapshot to freeze the current state of the site.`,created:`Snapshot created`,published:`Published`,publishedSnapshot:`Snapshot published`,rolledBack:`Rolled back`,failed:`Failed`,rollbackTitle:`Roll back the live site?`,publishTitle:`Publish to the live site?`,createDescription:`A snapshot of the current graph is recorded and becomes the live version.`,becomesLive:`{name} becomes the live version.`,fromStudio:`Snapshot from Studio`,publishedFromStudio:`Published from Studio`,compare:`Compare`,create:`Create snapshot`,createTitle:`Create a snapshot`,createIntro:`Freezes the site's current pages, articles and settings. Snapshots never change once taken.`,labelDescription:`Optional. Shown in the list and in Activity instead of the reason.`,afterCreate:`After creating it`,keepOption:`Keep the live site as it is`,keepOptionDescription:`Save the snapshot only. Publish it or compare it later from this list.`,publishOption:`Publish it to the live site`,publishOptionDescription:`The snapshot becomes the live version. You confirm before anything goes live.`,continueToPublish:`Continue to publish`,search:`Search snapshots`,noMatches:`No snapshots match`,noMatchesDescription:`Try another label or snapshot id.`,actions:`Actions`,columns:{snapshot:`Snapshot`,actor:`Author`,changes:`Changes`,when:`Created`},reasons:{manual:`Manual`,agentMutation:`Agent change`,publish:`Publish`,rollback:`Rollback`,scheduled:`Scheduled`,import:`Import`}},errors:{title:`Something went wrong`,conflict:`Someone else changed this since you opened it. Reload to get the latest version.`,api:{not_found:`It's no longer here. Someone may have deleted it.`,forbidden:`You don't have permission to do this.`,unauthorized:`Your session has ended. Sign in again.`,rank:`Your role doesn't allow this.`,not_own:`You can only do this to your own work.`,missing_scope:`This key or session isn't allowed to do this.`,rate_limited:`Too many requests. Wait a moment and try again.`,internal:`Something went wrong on the server. Try again.`,invalid_json:`The server sent an answer Studio couldn't read. Try again.`,unique:`Something with this name or address already exists.`,slug_taken:`This address is already in use.`,path_conflict:`Another page or article already uses this path.`,reserved_path:`This path is reserved for the site itself (search, media or a language prefix).`,in_use:`It's still in use, so it can't be removed.`,quota_exceeded:`The storage quota is full.`,too_large:`This change is too large for one operation. Split it up.`,state_changed:`This changed in the meantime. Reload and try again.`,network:`Can't reach the server. Check your connection and try again.`,status:`The request failed (HTTP {status}).`}},agents:{description:`Keys let agents, CI jobs and MCP clients work on your sites. Each key has a mode that decides what the agent does on its own and what waits for you. Every call is checked by policy and recorded in the site's activity.`,createKey:`Create key`,search:`Search keys`,columns:{name:`Name`,owner:`Created by`,mode:`Mode`,scopes:`Scopes`,created:`Created`,status:`Status`},views:{mine:`Your keys`,all:`All keys`},all:{title:`Every agent key on this deployment`,description:`As an Administrator you can end an elevation or revoke any key. Only a key's creator changes its mode or elevates it.`,search:`Search keys or people`,empty:`No agent keys yet`,emptyDescription:`Keys people create appear here with who made them.`,unknownOwner:`Removed member`,elevateOnlyCreator:`Only the person who created this key can elevate it. You can end an elevation or revoke the key.`},roleCap:`Your role allows agent keys up to {mode} mode.`,narrowed:{badge:`Narrowed by role`,hint:`The creator's role limits what this key can do right now; these are the scopes it works with.`,hintRole:`The creator's role is {role} now, so this key works with these scopes. A promotion doesn't widen it again.`,stored:`Given: {scopes}`},active:`Active`,disabled:`Disabled`,never:`Never expires`,expires:`Expires {when}`,unnamed:`Unnamed key`,keyPrefix:`{start}…`,fullAccess:`Full access`,scopesModeDefault:`Mode default · {count} scopes`,empty:`No agent keys yet`,emptyDescription:`Create one key per agent or automation, grant only the scopes it needs, and revoke it when the work is done.`,noMatches:`No keys match “{query}”`,notEnabledTitle:`Agent keys aren't available on this server`,notEnabledDescription:`This server runs without sign-in, so it can't issue keys. Agents on your machine can still connect over stdio with cloudhal mcp.`,copyId:`Copy key ID`,revoke:`Revoke`,revokeKey:`Revoke key`,keyResource:`Agent key`,revoked:`Key revoked`,revokedDescription:`{name} can no longer reach Studio.`,scopes:{"site:read":`See sites and snapshots`,"content:read":`Read pages and articles`,"content:write":`Create, edit and delete pages and articles`,"asset:upload":`Upload media and edit its own uploads`,"asset:manage":`Edit, retire and delete any media`,"analytics:read":`Read site analytics (no personal data)`,"site:write":`Change site settings`,"preview:create":`Render draft previews`,"site:publish":`Publish a snapshot to the live site`,"site:rollback":`Roll the live site back`,"content:write:own":`Create articles and change your own`,"content:draft:own":`Write drafts and send them to review`,"content:propose":`Suggest body edits; you accept or reject them`,"site:publish:own":`Publish when every change is your own`,"comments:read":`Read reader comments (never emails)`,"comments:moderate":`Label and hide comments; approvals wait for you`,"comments:moderate:own":`Label and hide comments on your own articles`,"comments:reply":`Draft replies to comments; you publish them`,"comments:reply:own":`Draft replies on your own articles; you publish them`,"schedules:read":`See the schedule, releases and automation runs`,"schedules:write":`Propose and schedule releases, embargoes and expiries`,"schedules:write:own":`Schedule releases of your own pages and articles`,"releases:publish":`Approve releases; in Auto mode, low-risk ones run without you`,"releases:publish:own":`Approve releases when every item is your own`},modes:{legend:`Mode`,names:{plan:`Plan`,manual:`Manual`,edits:`Edits`,auto:`Auto`,bypass:`Bypass`},descriptions:{plan:`Reads your sites and renders previews. It can suggest changes but never makes them.`,manual:`Asks you before every change it makes, however small.`,edits:`Creates and edits content freely. Every change is snapshotted and can be rolled back.`,auto:`Works like Edits, and small article publishes go live without you.`,bypass:`Nothing waits for a person. Only for cloudhal mcp on your own machine.`},waitsFor:[[3,`mode`,{plan:[`Waits for you: nothing, because it can't change anything`],manual:[`Waits for you: every edit, publish, rollback and deletion`],edits:[`Waits for you: publish, rollback and deletions`],auto:[`Waits for you: larger publishes, rollback and deletions`],bypass:[`Waits for you: nothing`],other:[`Waits for you: every edit, publish, rollback and deletion`]}]],risk:{safest:`Safest`,recommended:`Recommended`,caution:`Use with care`},current:`Current`,bypassHint:`Bypass, where nothing waits for a person, isn't available for keys. It exists only for the local server on your own machine:`,autoTitle:`Small publishes go live without you`,autoDescription:`In Auto mode, a publish that only adds or edits articles goes live right away: nothing removed, no pages, menus, site settings, taxonomies or redirects changed, at most {limit} changes. Activity marks it as auto-approved and you can roll it back in one click. Larger publishes, rollback and deletions still wait for you.`,autoConfirm:`I understand that this agent can publish without my approval`,autoConfirmRequired:`Confirm that you understand what Auto mode does`},howModes:{title:`How modes work`,description:`A mode decides what an agent does on its own and what waits for you. Scopes stay the hard limit: a mode never grants more.`,columns:{mode:`Mode`,edits:`Content`,publish:`Publish`,rollback:`Rollback, delete`},rules:{denied:`Blocked`,waits:`Waits`,free:`Free`,lowRisk:`Small: free`},rulesHint:{denied:`The agent can't do this in this mode.`,waits:`The agent asks; you approve in the site's Activity › Approvals.`,free:`The agent does this on its own. Every change is snapshotted.`,lowRisk:`Only articles added or edited, nothing removed, at most {limit} changes. Anything larger waits for you.`},gated:`Always waits for you with a key`,bypass:`Bypass is for your own machine only:`},changeMode:{menu:`Change mode`,title:`Change mode`,description:`Choose how “{name}” works from now on.`,from:`Now`,to:`New`,nextCallTitle:`Applies on the agent's next call`,nextCall:`Calls already running finish in the current mode. The change is recorded in the audit log.`,submit:`Change mode`,failed:`Couldn't change the mode`,changed:`Mode changed`,changedDescription:`{name} now works in {mode} mode.`,elevatedTitle:`Elevated to {mode} until {time}`,elevationKeeps:`The elevation stays in force until {time}, then the key works in {mode} mode.`,elevationEnds:`{mode} reaches the elevated mode, so this change ends the elevation.`},elevate:{menu:`Elevate temporarily`,menuDisabled:`Already in Auto, the most autonomous mode a key can have.`,title:`Elevate temporarily`,description:`Let “{name}” work in a more autonomous mode for a while. When the time is up, it goes back to its own mode by itself.`,ownMode:`Own mode`,ownModeHint:`Stays as it is. The key returns to it when the elevation ends.`,legend:`Elevate to`,duration:`Duration`,presets:{15:`15 min`,60:`1 hour`,240:`4 hours`,1440:`1 day`,custom:`Custom`},customValue:`Custom duration`,customUnit:`Unit`,units:{minutes:`Minutes`,hours:`Hours`},customHint:`Between {min} and {max}.`,customErrors:{invalid:`Enter a number`,tooShort:`At least {min}`,tooLong:`At most {max}`},reason:`Reason`,reasonPlaceholder:`e.g. Launch day: publish small updates on its own`,reasonHint:`Optional. Shown in the audit log.`,replacesTitle:`This replaces the elevation in force`,replaces:`“{name}” works in {mode} mode until {time}. The new elevation takes its place.`,now:`Now`,elevated:`Elevated`,summary:`Until {time} (in {duration}), then back to {from}.`,nextCall:`Applies on the agent's next call. You can end it early from the key's menu.`,submit:`Elevate`,failed:`Couldn't elevate the key`,done:`Key elevated`,doneDescription:`{name} works in {mode} mode until {time}, then back to {from}.`},elevation:{left:`{time} left`,ownMode:`Own mode: {mode}`,tooltip:`Elevated from {from} until {time} by {who}`,requestedReason:`Requested by the agent: “{reason}”`,byYou:`you`,temporary:`Temporarily elevated`,marker:`Temporarily elevated from {from} until {time}`,endMenu:`End elevation now`,ended:`Elevation ended`,endedDescription:`{name} is back in {mode} mode.`,endFailed:`Couldn't end the elevation`,bannerTitle:[[2,`count`,{one:[[4],` agent key is elevated`],other:[[4],` agent keys are elevated`]}]],bannerItem:`{name}: {from} → {to} until {time}`,endNow:`End now`,endAll:`End all now`,endsIn:`Ends in {time}`,extendAll:`Extend all {duration}`,howModes:`Need more autonomy for a while? Elevate a key temporarily instead of leaving it in Auto: it returns to its own mode by itself.`},create:{title:`Create agent key`,description:`The key acts as an agent on every site you can open, in the mode you choose.`,stepMode:`Step 1 of 2 · Choose a mode`,stepDetails:`Step 2 of 2 · Name and scopes`,continue:`Continue`,mode:`Mode`,changeMode:`Change`,name:`Name`,namePlaceholder:`e.g. Claude Code on my laptop`,nameHint:`Agents appear under this name in the activity log.`,nameRequired:`Give the key a name`,advanced:`Advanced: scopes`,advancedHint:`Prefilled for {mode} mode. Scopes are the hard limit; the mode decides what waits for you.`,customised:`Customised`,resetScopes:`Use the mode's scopes`,missingScopesTitle:`Some of what this mode allows won't work`,missingScopes:`Without {scopes}, the agent can't do everything {mode} mode allows.`,scopes:`Scopes`,scopesRequired:`Choose at least one scope`,groups:{read:`Read`,write:`Write`,release:`Publish and roll back`},groupHints:{read:`Enough for agents that research, summarise or review.`,write:`Changes are snapshotted and can be rolled back.`,release:`Lets the agent change, or ask to change, what visitors see.`},submit:`Create key`,failed:`Couldn't create the key`,scopeAboveRole:`Your role can't give this to a key.`,scopeNarrowed:`Your role gives {scope} only for your own work.`,errors:{scopeAboveRole:`Your role can't give a key some of these scopes. Untick them and try again.`,modeAboveRole:`Your role doesn't allow keys in this mode. Choose a less autonomous one.`}},reveal:{title:`Copy your new key`,description:`“{name}” is ready. Your agent sends it as a bearer token or in the x-api-key header.`,warningTitle:`You won't see this key again`,warning:`Store it now in your password manager or the agent's secret store. If it's lost, revoke it and create a new one.`,key:`Agent key`,config:`Client configuration`,done:`I've stored the key`},connect:{title:`Connect an MCP client`,description:`Agents reach Studio over MCP at this address and send their key in a header. When it connects, the agent is told its key's mode, so it knows what waits for you.`,endpoint:`MCP endpoint`,header:`Header`,client:`Client`,clients:{claude:`Claude Code`,codex:`Codex`,cursor:`Cursor`,vscode:`VS Code`,generic:`Other client`,stdio:`Local (stdio)`},hints:{claude:`Run it in a terminal, then check the connection with /mcp inside Claude Code.`,codex:`Codex reads the key from CLOUDHAL_API_KEY and sends it as a bearer token. Put the export line in your shell profile so the key is set whenever Codex starts.`,cursor:`Paste it into ~/.cursor/mcp.json, or .cursor/mcp.json in a project. The file holds the key, so keep it out of version control.`,vscode:`Save it as .vscode/mcp.json in your project. VS Code asks for the key once and keeps it in its secret storage.`,generic:`Any client that speaks streamable HTTP: this URL, with the key in the Authorization header as a bearer token. The x-api-key header works too.`,stdio:`On your own machine, run the stdio server inside the site folder; no key needed. --mode sets how it works, and only here can it be bypass.`}}},activity:{search:`Search tool, actor or skill`,refresh:`Refresh activity`,filters:{label:`Filters`,kind:`Actor type`,decision:`Decision`,allKinds:`All actors`,allDecisions:`All decisions`},kinds:{agent:`Agent`,human:`Person`,system:`System`},decisions:{allow:`Allowed`,deny:`Denied`,"approval-required":`Needs approval`},outcomes:{ok:`Succeeded`,error:`Failed`,pending:`Pending`},columns:{when:`When`,actor:`Actor`,tool:`Tool`,decision:`Decision`,outcome:`Outcome`,skill:`Skill`,snapshot:`Snapshot`},empty:`No activity yet`,emptyDescription:`Every tool call an agent or person makes over MCP is recorded here: allowed, denied or waiting for approval.`,noMatches:`No events match these filters`,noMatchesDescription:`Filters apply to the events loaded so far. Load more to look further back.`,clearFilters:`Clear filters`,showing:`Showing {shown} of {loaded} loaded events`,allLoaded:`You've reached the first recorded event.`,loadMore:`Load more`,notEnabledTitle:`This server doesn't keep an activity log`,notEnabledDescription:`Run Studio with cloudhal studio to record every agent and human tool call.`,ownOnlyTitle:`Your activity`,ownOnly:`You see what you and your agents did on this site. Editors and above see everyone's activity.`,viewEvent:`Show details`,detail:{when:`Time`,actor:`Actor`,decision:`Decision`,outcome:`Outcome`,skill:`Skill`,duration:`Duration`,durationValue:`{ms} ms`,snapshot:`Snapshot`,viewChanges:`View changes`,reason:`Why`,input:`Input`,noInput:`This call had no input.`,event:`Event #{id}`,mode:`Mode`,modeHint:`The mode the agent's key had when it made this call.`,elevation:`Elevation`,elevationHint:`The key's own mode is {from}. Its owner granted more autonomy for a while; when the elevation ends, the key works in {from} mode again.`,elevationGranted:`Elevation granted`,elevationGrantedUntil:`{mode} mode until {time}, then back to {from}.`,requestedByAgent:`Answers the agent's request`},autoApproved:`Auto-approved`,autoApprovedHint:`Went live without a person: the agent works in Auto mode and this publish was low risk.`,autoApprovedTitle:`Published without a person`,autoApprovedCount:`Article changes published: {count}`,autoApprovedDescription:`The agent works in Auto mode and this publish only added or edited articles. You can roll it back from Snapshots.`,autoApprovedDescriptionCount:`The agent works in Auto mode and this publish only added or edited articles ({count} in total). You can roll it back from Snapshots.`,requestedByAgent:`Requested by the agent`,requestedByAgentHint:`The agent asked for this elevation and a person granted it in Approvals.`,recent:`Recent activity`,recentEmpty:`No agent activity yet`,recentEmptyDescription:`Connect an agent and its tool calls appear here.`},account:{description:`Your profile, how you sign in, and who else can get into this Studio.`,sections:{profile:`Profile`,password:`Password`,sessions:`Active sessions`,notifications:`Notifications`,access:`Studio access`,server:`This server`},notifications:{description:`The bell in the top bar lists elevations that are about to end and agents that ask for one. Studio can also tell you while it's in a background tab.`,switch:`Notify me in this browser when an elevation is about to end or an agent asks for one`,switchHint:`Only while Studio is open in a tab. Each notice appears once.`,permission:`Browser permission`,permissions:{granted:`Allowed`,default:`Not asked yet`,denied:`Blocked`},permissionHints:{granted:`This browser lets Studio show notifications.`,default:`Your browser asks when you turn notifications on.`,denied:`Changed in your browser, not in Studio.`},deniedTitle:`Notifications are blocked for Studio`,denied:`To turn them on, allow notifications for this site in your browser's site settings (the icon next to the address), then reload Studio.`,unsupported:`This browser can't show notifications. The bell in the top bar still lists everything.`,enabled:`Browser notifications are on`,test:`Send a test notification`,testTitle:`Notifications are on`,testBody:`This is how Studio tells you when an elevation is about to end or an agent asks for one.`},profile:{description:`How you appear in Studio and in each site's activity log.`,name:`Name`,nameHint:`Shown next to the changes and approvals you make.`,email:`Email`,emailHint:`You sign in with this address. It can't be changed here.`,memberSince:`Member since {date}`,actorId:`Actor ID`,actorIdHint:`How activity and snapshots identify you.`,role:`Role`,roleHint:`What you can do here. An Administrator or the Owner changes it.`,saved:`Profile saved`,failed:`Couldn't save your profile`,errors:{required:`Enter your name`,tooLong:`Use at most {max} characters`}},password:{description:`Use a long passphrase you don't use anywhere else.`,current:`Current password`,new:`New password`,newHint:`At least {min} characters.`,confirmHint:`Type the new password again.`,confirm:`Confirm new password`,show:`Show password`,hide:`Hide password`,signOutOthers:`Sign out of all other sessions`,signOutOthersHint:`Recommended if someone else might know your old password.`,submit:`Change password`,changed:`Password changed`,changedOthers:`Your other sessions were signed out.`,failed:`Couldn't change your password`,errors:{currentRequired:`Enter your current password`,currentWrong:`That isn't your current password`,newRequired:`Enter a new password`,tooShort:`Use at least {min} characters`,tooLong:`Use at most {max} characters`,same:`Choose a password different from the current one`,confirmRequired:`Repeat the new password`,mismatch:`The passwords don't match`}},sessions:{showAll:`Show all {count}`,showFewer:`Show fewer`,description:`Browsers and clients signed in to your account. Sign out any you don't recognise. Agent keys are listed under Agents.`,columns:{device:`Device`,ip:`IP address`,lastActive:`Last active`,signedIn:`Signed in`},current:`This device`,unknownDevice:`Unknown device`,unknownIp:`Unknown`,deviceOn:`{browser} on {os}`,revoke:`Sign out`,revokeLabel:`Sign out {device}`,signOutOthers:`Sign out other sessions`,onlyThis:`This is your only active session.`,count:`{count} active`,revokeTitle:`Sign out this session?`,revokeDescription:`{device} will have to sign in again.`,revokeOthersTitle:`Sign out all other sessions?`,revokeOthersDescription:`Every browser and client except this one will have to sign in again. Agent keys keep working.`,revoked:`Session signed out`,revokedOthers:`Other sessions signed out`,staleTitle:`Sign in again to see your sessions`,staleDescription:`For your security, the session list needs a sign-in from the last 24 hours.`,signInAgain:`Sign in again`},access:{description:`Who can create an account on this Studio. It's set where the server runs, not here.`,signUp:`Sign-up`,policies:{"first-user":`Owner only`,closed:`Closed`,open:`Open to anyone`,unknown:`Not reported`},explanations:{"first-user":`The first person to sign up became the owner, and sign-up closed right after. Anyone else needs an account created for them.`,closed:`Nobody can sign up. Accounts are created by the owner.`,open:`Anyone who can reach this address can create an account, and every account has full access to every site.`,unknown:`This server doesn't report how sign-up is configured.`},openWarningTitle:`Anyone can sign up`,openWarning:`Every account gets full access to every site. Close sign-up before you share this address.`,howToChange:`On Cloudflare, set CLOUDHAL_SIGNUP on the admin Worker to open or closed (unset means owner only). cloudhal studio on your machine is always owner only.`,serverDescription:`What this Studio deployment runs.`,features:{members:`Team and roles`,agentKeys:`Agent keys`,mcp:`MCP server`,activity:`Activity log`,previewLinks:`Preview links`,deployTransfer:`Deploy and transfer`,approvals:`Approvals in Studio`,elevationRequests:`Elevation requests`},featureHints:{members:`People join by invite link and work in a role: Owner, Administrator, Editor, Author or Contributor.`,agentKeys:`Agents and CI jobs sign in with keys you create.`,mcp:`Agents connect at /mcp.`,activity:`Every tool call is recorded per site.`,previewLinks:`Signed links that show drafts on the deployed site.`,deployTransfer:`cloudhal push and pull can reach this server.`,approvals:`Agents' publish, rollback and delete requests wait here for a person.`,elevationRequests:`Agents can ask for a more autonomous mode for a while; a person grants it in Approvals.`}}},siteSettings:{sections:{general:`General`,domains:`Domains`,collections:`Collections`,appearance:`Appearance`,design:`Design rules`,previews:`Preview links`},design:{description:`Your brand and design rules in Markdown (DESIGN.md). Every agent and Build chat reads them before building: what the site is for, its colors and type, the layouts and components to prefer, page recipes, and what to avoid. They shape choices, never permissions.`,label:`This site's rules`,placeholder:`## Brand
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ar-CY9T5sf0.js","assets/preload-helper-DjzSQ1t3.js","assets/de-DAKrG4J5.js","assets/es-ghW3J_VE.js","assets/fa-DCXNWQFv.js","assets/fr-lTAz34qv.js","assets/he-CG-RJ7FV.js","assets/hi-CUPp4Z-5.js","assets/id-BeAv9jwY.js","assets/it-CY_74jqq.js","assets/ja-ZNuVZgva.js","assets/ko-HiX0t07M.js","assets/nl-g6zWQzPT.js","assets/pl-CQpb8_JW.js","assets/pt-BR-BUkZriwP.js","assets/ru-ELePwa8w.js","assets/tr-DCjbU9M-.js","assets/uk-DlhhU-7R.js","assets/zh-Hans-Chik4lDf.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,r as n}from"./react-CDCuUAOg.js";import{u as r}from"./intl-C22KAx_l.js";import{i,n as a,t as o}from"./format-DGE2c-4V.js";import{t as s}from"./preload-helper-DjzSQ1t3.js";var c=e(t(),1),l=n(),u={app:{name:`Cloudhal Studio`,tagline:`Sign in to operate your sites.`},playground:{title:`Playground`,description:[[2,`count`,{one:[[4],` minute left`],other:[[4],` minutes left`]}],`. Everything here is deleted when the session ends, so don't enter personal data.`],reset:`Reset`,deploy:`Deploy to Cloudflare`,unavailableTitle:`Available in your own install`,unavailableDescription:`Team members, agent keys and account settings need sign-in, so the playground leaves them out. Deploy Cloudhal to your Cloudflare account to use them.`},common:{save:`Save`,cancel:`Cancel`,delete:`Delete`,publish:`Publish`,rollBack:`Roll back`,loading:`Loading…`,signOut:`Sign out`,live:`Live`,language:`Language`,more:`More`,rev:`rev {rev}`,close:`Close`,optional:`(optional)`,moreInformation:`More information`,copy:`Copy`,copied:`Copied`,retry:`Try again`,discard:`Discard`,saveChanges:`Save changes`,unsaved:`Unsaved changes`,onThisPage:`On this page`,on:`On`,off:`Off`,deleteResource:{title:`Delete {name}`,warning:`This action cannot be undone. This will permanently delete the {name} {type}.`,typeToConfirm:`Type {name} to confirm:`,copy:`Copy {name} to clipboard`,confirmInput:`Type {name} to confirm deletion`,delete:`Delete {type}`}},theme:{label:`Theme`,current:`Theme: {name}`,light:`Light`,dark:`Dark`,system:`System`},auth:{signInTitle:`Welcome back`,signUpTitle:`Create your account`,signUpDescription:`The first account on a new Studio becomes its owner.`,footer:`Open source · Apache-2.0`,signIn:`Sign in`,createAccount:`Create account`,name:`Name`,email:`Email`,password:`Password`,passwordHint:`At least 8 characters`,failed:`Sign-in failed`,setupTitle:`Set up this Studio`,setupDescription:"You opened the setup link from `cloudhal deploy`. The account you create now becomes the owner; afterwards sign-up closes."},sites:{title:`Sites`,description:`Every site is a graph of pages and content that agents operate under your approval.`,columns:{project:`Project`,name:`Name`,slug:`Slug`,pages:`Pages`,status:`Status`},notPublished:`Not published`,empty:`No sites yet`,emptyDescription:`Create one from the terminal and it appears here.`,search:`Search sites`,usageTitle:`From the terminal`,usageDescription:`Everything in Studio is also a CLI command, so agents and scripts can do the same work.`,open:`Open`},pageHeaders:{media:{title:`Media`,description:`Images, video, audio, documents and data files of this site. New files go live with the next publish.`},pages:{title:`Pages`,description:`The routes of this site. Each page is a stack of sections that themes render.`},articles:{title:`Articles`,description:`Posts and other entries, written by people or agents and published with the site.`},snapshots:{title:`Snapshots`,description:`Frozen versions of the site. Publishing points the live site at one; rolling back points it at an earlier one.`},activity:{title:`Activity`,description:`Every tool call an agent or person made on this site, with the policy decision.`},approvals:{title:`Approvals`,description:`Agents' publishes, rollbacks and deletes, their edits in Manual mode, their requests for more autonomy, and publishes people's roles can't make alone wait here until someone who may decide does.`},settings:{title:`Settings`,description:`Name, languages, domains and preview links for this site.`},agents:{title:`Agents`,description:`Keys let agents, CI jobs and MCP clients work on your sites. A key's mode decides what the agent does on its own and what waits for you.`},skills:{title:`Skills`,description:`Playbooks agents read over MCP. A call made under a skill only gets the scopes it declares, and the tools it lists always wait for a person.`},account:{title:`Account`,description:`Your profile, how you sign in, and who else can get into this Studio.`},taxonomy:{title:`Categories & tags`,description:`How articles are filed and found. A rename, merge or retirement is one change and one snapshot, and leaves redirects behind.`},navigation:{title:`Navigation`,description:`The menus visitors find their way with: the header, the footer and any your theme places. Items point at pages and categories, so renames never break them.`},translations:{title:`Translations`,description:`Every page and article by language: what is missing, out of date or waiting for a person's review.`},redirects:{title:`Redirects`,description:`Old addresses and where they send visitors. Slug changes, merges and retirements add them on their own; you can add your own too.`},team:{title:`Team`,description:`Who works on this Studio and in which role. People join with a one-time invite link; their agents never do more than they can.`}},nav:{media:`Media`,comments:`Comments`,overview:`Overview`,content:`Content`,history:`History`,automation:`Automation`,account:`Account`,home:`Overview`,pages:`Pages`,articles:`Articles`,collections:`Collections`,snapshots:`Snapshots`,agents:`Agents`,allSites:`All sites`,sites:`Sites`,switchSite:`Switch site`,search:`Search or run a command…`,shortcutHint:`⌘K`,shortcutHintCtrl:`Ctrl K`,agentSkills:`Skills`,schedules:`Schedules`,activity:`Activity`,agentKeys:`Keys and MCP`,approvals:`Approvals`,settings:`Settings`,siteSettings:`Settings`,taxonomy:`Categories & tags`,navigation:`Navigation`,redirects:`Redirects`,translations:`Translations`,team:`Team`,analytics:`Analytics`},commands:{goMedia:`Go to media`,goComments:`Go to comments`,goAnalytics:`Go to analytics`,placeholder:`Type a command…`,empty:`No matching command`,hintNavigate:`Navigate`,hintSelect:`Run`,hintClose:`Close`,goOverview:`Go to overview`,goArticles:`Go to articles`,goSnapshots:`Go to snapshots`,newArticle:`New article`,createSnapshot:`Create snapshot`,publishSite:`Snapshot and publish site`,goActivity:`Go to activity`,goAgents:`Go to agents`,createAgentKey:`Create agent key`,goSkills:`Go to skills`,goAccount:`Go to account settings`,goTeam:`Go to team`,goSiteSettings:`Go to site settings`,goApprovals:`Go to approvals`,goTaxonomy:`Go to categories and tags`,goNavigation:`Go to navigation menus`,goRedirects:`Go to redirects`,goSchedules:`Go to schedules`,newSchedule:`Schedule a publish…`,searchPlaceholder:`Search content or run a command…`,searchEmpty:`No commands or content match`,hintNewTab:`New tab`,groups:{commands:`Commands`,entry:`Articles`,page:`Pages`,term:`Categories and tags`,asset:`Media`,menu:`Menu items`,redirect:`Redirects`}},overview:{commentsWaiting:[[2,`count`,{one:[[4],` comment is waiting`],other:[[4],` comments are waiting`]}]],commentsWaitingDescription:`Readers don't see them until someone approves them.`,liveSnapshotLabel:`Live snapshot`,notPublished:`Not published yet`,newPage:`New page`,pages:`Pages`,columns:{title:`Title`,path:`Path`,status:`Status`,updated:`Updated`},empty:`No pages yet`,emptyDescription:`Create the first page or ask the agent to scaffold one.`,search:`Search pages`,status:`Status`,live:`Live`,recentArticles:`Recent articles`,viewAll:`View all`,cli:`From the terminal`},pageStatus:{publishTitle:`Publish “{title}”?`,unpublished:`Page moved back to draft`,failed:`The page's status did not change`,leftOut:[[2,`count`,{one:[[4],` page is not published`],other:[[4],` pages are not published`]}]],leftOutDescription:`Drafts and pages in review, new translations included, stay off the live site. Publish them first.`,review:`Review pages`},articles:{description:`Posts in the “posts” collection.`,newArticle:`New article`,empty:`No articles yet`,emptyDescription:`Write the first one, or ask the agent to.`,untitled:`Untitled`,columns:{title:`Title`,author:`Author`,status:`Status`,updated:`Updated`},search:`Search articles`,none:`—`,noCategory:`No category`,primary:`Primary category`,facets:{label:`Filter articles`,category:`Filter by category`,tag:`Filter by tag`,allCategories:`All {label}`,allTags:`All {label}`,clear:`Clear filters`,empty:`No articles match these filters`,emptyDescription:`Try another category or tag, or clear the filters.`}},collectionList:{description:`Entries of the “{key}” collection.`,newEntry:`New entry`,search:`Search entries`,empty:`No entries yet`,settings:`Settings`},articleCorrections:{title:`Corrections`,description:`Readers see these at the end of the article, newest first, and the latest is its Updated date. Once published, a correction stays: someone who can publish may reword it, nobody removes it.`,empty:`No corrections`,emptyDescription:`Add one when a published story changes in substance.`,kind:`Kind`,kinds:{correction:`Correction`,clarification:`Clarification`,update:`Update`},note:`What changed`,noteHint:`One or two sentences. Markdown links and emphasis work.`,add:`Add correction`,unsaved:`Not saved`,remove:`Remove correction`,pending:`Save the article to add it; it goes live with the next publish.`},articleTerms:{title:`Categories and tags`,description:`Categories file the article; tags describe it. The primary category appears in breadcrumbs and in the article's metadata.`,legacyDescription:`This site still keeps tags as plain text. Move them to categories and tags to give them names, archives and redirects.`,legacyTitle:`Older tags on this article`,legacyPending:`{tags} become tags when you save.`,required:`Choose a {singular} to send this article to review or publish it.`,requiredToast:`Choose a {singular} first`,slugRedirect:`Lower-case, hyphenated. This article is published: a new slug leaves a redirect from the old address.`},pickers:{under:`in {path}`,clear:`Clear`,showOptions:`Show options`,noMatch:`Nothing matches`,remove:`Remove {name}`,atMost:`At most {max}. Remove one to add another.`,categoryHint:`Up to {max}. Type to search names and synonyms.`,categoryRequiredHint:`Needed to send it to review or publish it. Up to {max}.`,categoryPlaceholder:`Choose categories…`,noCategory:`No category matches. Add categories in Categories & tags.`,primary:`Primary category`,primaryHint:`Shown in breadcrumbs and used as the article's section.`,primaryNone:`Choose one…`,tagHint:`Up to {max}. Existing tags come first, and synonyms find them too.`,tagPlaceholder:`Add a tag…`,tagFull:`Tag limit reached`,viaSynonym:`synonym “{value}”`,similar:`similar`,create:`Create “{name}”`,createNoSlug:`This name has no letters or digits for an address. Try another name.`,nearDuplicate:`Looks like {names}. Use the existing tag if it means the same.`,proposedChip:`Proposed by an agent. It gets a public page once someone approves it.`},editor:{schedule:`Schedule…`,locked:`A scheduled release holds this. Unschedule it to edit.`,heroNoImage:`No hero image`,status:`Status`,title:`Title`,slug:`Slug`,summary:`Summary`,summaryHint:`Used as the meta description in search results and on shared links.`,body:`Body (markdown)`,tags:`Tags`,tagsHint:`Comma separated`,path:`Path`,pathHint:`Absolute, lower-case, no trailing slash`,sections:`Sections`,addSection:`Add section`,noSections:`No sections yet`,noSectionsDescription:`Add a hero, rich text, image or content list.`,remove:`Remove`,moveUp:`Move up`,moveDown:`Move down`,heading:`Heading`,subheading:`Subheading`,caption:`Caption`,collection:`Collection`,limit:`Limit`,sort:`Sort`,sortNewest:`Newest`,sortOldest:`Oldest`,sortTitle:`Title`,saved:`Saved`,sendToReview:`Send to review`,submitForReview:`Submit for review`,backToDraft:`Back to draft`,archive:`Archive`,restore:`Restore to draft`,publishArticleTitle:`Publish this article?`,publishArticleDescription:`It becomes visible on the site the next time the site is snapshotted and published.`,publishPageTitle:`Publish this page?`,publishPageDescription:`It goes live the next time the site is published. Other pages and languages keep their own status.`,deleteArticle:`Delete article`,deletePage:`Delete page`,article:`Article`,page:`Page`,slugHint:`Lower-case, hyphenated; becomes the URL.`,metadata:`Details`,moreActions:`More actions`,unpublish:`Unpublish (back to draft)`,duplicate:`Duplicate`,duplicated:`Copy created`,copyTitle:`{title} (copy)`,dangerZone:`Danger zone`,deletePageTitle:`Delete this page`,deletePageHint:`Removes the page and its sections. Published snapshots keep their copy.`,deleteArticleTitle:`Delete this article`,deleteArticleHint:`Removes the article from the site. Published snapshots keep their copy.`,removeSectionTitle:`Remove this section?`,removeSectionDescription:`The {kind} section is removed from the draft. The page changes only when you save.`,sectionKinds:{hero:`Hero`,richText:`Rich text`,image:`Image`,contentList:`Content list`,component:`Block`,surface:`Generated UI`},buildLive:`Build live`,buildLiveHint:`Watch agents build this page as it happens`,surface:{title:`Generated UI · {count} components`,hint:`Built from the theme's components. Change its texts here; to change the layout, ask the AI.`,json:`Generated UI as data`,showJson:`Show JSON`,outline:`Components of this section`,expand:`Show what is inside {title}`,collapse:`Hide what is inside {title}`,changeWithAi:`Change with AI`,editTexts:`Edit the texts of {title}`,changePart:`Change {title} with AI`,bound:`shows {path}`,computed:`computed ({fn})`,notPlaced:`Not on the page`},blocks:{menu:`Blocks`,unknown:`Unknown block · {type}`,unknownHint:`This deployment has no block type with this name (the theme may have changed). It is kept as is and not shown on the site.`,item:`Item {n}`,addItem:`Add item`,removeItem:`Remove item`,moveUp:`Move up`,moveDown:`Move down`,values:{tone:{info:`Info`,success:`Success`,warning:`Warning`,danger:`Danger`},variant:{primary:`Primary`,secondary:`Secondary`}}},bodyTitle:`Body`,markdown:`Markdown`,words:[[2,`count`,{one:[[4],` word`],other:[[4],` words`]}]],id:`ID`,revision:`Revision`,locale:`Language`,author:`Author`,updatedAt:`Updated`,publishedAt:`Published`},seo:{counter:`{count} / {max}`,fixErrors:`Fix the highlighted fields before saving.`,cover:{title:`Cover image`,description:`Shown above the article and used as its picture when the link is shared. Choose it from the media library, or upload a new one there.`,url:`Image URL`,urlHint:`An https:// address, or a path on your site such as /images/cover.jpg.`,urlPlaceholder:`https://… or /images/cover.jpg`,alt:`Alt text`,altHint:`Describe what the image shows. Screen readers read it to people who can't see the image, and search engines use it to understand it.`,altPlaceholder:`A lighthouse above a calm sea at dusk`,remove:`Remove image`,empty:`No cover image`,loading:`Loading image…`,broken:`Couldn't load this image`,brokenHint:`Check the address and that the image is public.`,brokenPathHost:`Site paths load from {host}. Check the path, or that the site is deployed.`,brokenPathNoDomain:`Site paths load from the primary domain. Add one in Settings › Domains to see them here.`,size:`{width} × {height} px`,errors:{required:`Enter an image address, or remove the image.`,insecure:`Use https://. Browsers block http images on secure sites.`,invalid:`Enter an https:// address or a path that starts with /.`,tooLong:`At most 2,048 characters.`,altRequired:`Describe the image. Alt text is required for a cover image.`,altTooLong:`At most 500 characters.`}},preview:{title:`Search and social preview`,description:`How this article appears in search results and when its link is shared. The summary is used as the meta description and the cover image as the share image.`,search:`Search result`,social:`Social card`,noSummary:`No summary yet. Search engines and social networks pick text from the article.`,noDescription:`No meta description. Search engines pick text from the page.`},checks:{label:`Checks`,title:`Title`,titleGood:`{count} characters. Fits in a search result.`,titleLong:`{count} characters. Search results cut titles after about 60.`,titleMissing:`Add a title.`,description:`Meta description`,summary:`Meta description (summary)`,descriptionGood:`{count} characters. Fits in a search result.`,descriptionShort:`{count} characters. Short descriptions are often replaced; aim for 50–160.`,descriptionLong:`{count} characters. Search results cut it after about 160.`,summaryMissing:`Add a summary. Without one, search engines pick text from the article.`,image:`Share image`,imageSet:`The cover image is used.`,imageMissing:`No cover image, so shared links show no picture.`,imageBroken:`The cover image doesn't load.`,status:{good:`Good`,short:`Short`,long:`Too long`,missing:`Missing`,broken:`Broken`}},page:{title:`Search engines and sharing`,description:`How this page appears in search results and when its link is shared.`,seoTitle:`SEO title`,seoTitleHint:`Leave empty to use the page title.`,seoDescription:`Meta description`,seoDescriptionHint:`One or two sentences on what the page offers. Aim for 50–160 characters.`,seoDescriptionPlaceholder:`What visitors find on this page`,noindex:`Hide from search engines`,noindexHint:`Adds a noindex tag. The page stays reachable through its link.`,noindexWarningTitle:`This page is hidden from search engines`,noindexWarning:`Search engines are asked not to list it, and a page that is already listed drops out after their next visit. Leave this off for pages people should find through search.`,advanced:`Advanced`,custom:`Custom`,canonical:`Canonical URL`,canonicalHintHost:`Usually empty: the page's address on {host} is used. Set it only when the original of this content lives at another address.`,canonicalHint:`Usually empty: the page's address on the site's primary domain is used. Set it only when the original of this content lives at another address.`,canonicalPlaceholder:`https://example.com/original-page`,searchPreview:`Search preview`,hidden:`Hidden from search`,errors:{titleTooLong:`At most 300 characters.`,descriptionTooLong:`At most 500 characters.`,canonicalInvalid:`Enter a full address that starts with https://.`,canonicalTooLong:`At most 2,048 characters.`}},noindexBadge:`noindex`,noindexBadgeHint:`Hidden from search engines. Change it in the page's search settings.`,noCover:`No cover image`,archive:{seoTitleHint:`Leave empty to use the term's name.`,noindexHint:`Adds a noindex tag to the archive. It stays reachable through its link.`,noindexWarningTitle:`This archive is hidden from search engines`,noindexWarning:`Search engines are asked not to list it, and it leaves the sitemap. Leave this off for topics people should find through search.`}},status:{draft:`Draft`,review:`In review`,published:`Published`,archived:`Archived`},site:{publish:`Publish`,publishDescription:`Record a snapshot of the current graph and make it the live version.`,description:`/{slug} · {locale}`,rowMenu:`More actions`},snapshots:{description:`Every snapshot is immutable; publishing points the site at one.`,label:`Label`,labelPlaceholder:`e.g. Morning edition`,empty:`No snapshots yet`,emptyDescription:`Take a snapshot to freeze the current state of the site.`,created:`Snapshot created`,published:`Published`,publishedSnapshot:`Snapshot published`,rolledBack:`Rolled back`,failed:`Failed`,rollbackTitle:`Roll back the live site?`,publishTitle:`Publish to the live site?`,createDescription:`A snapshot of the current graph is recorded and becomes the live version.`,becomesLive:`{name} becomes the live version.`,fromStudio:`Snapshot from Studio`,publishedFromStudio:`Published from Studio`,compare:`Compare`,create:`Create snapshot`,createTitle:`Create a snapshot`,createIntro:`Freezes the site's current pages, articles and settings. Snapshots never change once taken.`,labelDescription:`Optional. Shown in the list and in Activity instead of the reason.`,afterCreate:`After creating it`,keepOption:`Keep the live site as it is`,keepOptionDescription:`Save the snapshot only. Publish it or compare it later from this list.`,publishOption:`Publish it to the live site`,publishOptionDescription:`The snapshot becomes the live version. You confirm before anything goes live.`,continueToPublish:`Continue to publish`,search:`Search snapshots`,noMatches:`No snapshots match`,noMatchesDescription:`Try another label or snapshot id.`,actions:`Actions`,columns:{snapshot:`Snapshot`,actor:`Author`,changes:`Changes`,when:`Created`},reasons:{manual:`Manual`,agentMutation:`Agent change`,publish:`Publish`,rollback:`Rollback`,scheduled:`Scheduled`,import:`Import`}},errors:{title:`Something went wrong`,conflict:`Someone else changed this since you opened it. Reload to get the latest version.`,api:{not_found:`It's no longer here. Someone may have deleted it.`,forbidden:`You don't have permission to do this.`,unauthorized:`Your session has ended. Sign in again.`,rank:`Your role doesn't allow this.`,not_own:`You can only do this to your own work.`,missing_scope:`This key or session isn't allowed to do this.`,rate_limited:`Too many requests. Wait a moment and try again.`,internal:`Something went wrong on the server. Try again.`,invalid_json:`The server sent an answer Studio couldn't read. Try again.`,unique:`Something with this name or address already exists.`,slug_taken:`This address is already in use.`,path_conflict:`Another page or article already uses this path.`,reserved_path:`This path is reserved for the site itself (search, media or a language prefix).`,in_use:`It's still in use, so it can't be removed.`,quota_exceeded:`The storage quota is full.`,too_large:`This change is too large for one operation. Split it up.`,state_changed:`This changed in the meantime. Reload and try again.`,network:`Can't reach the server. Check your connection and try again.`,status:`The request failed (HTTP {status}).`}},agents:{description:`Keys let agents, CI jobs and MCP clients work on your sites. Each key has a mode that decides what the agent does on its own and what waits for you. Every call is checked by policy and recorded in the site's activity.`,createKey:`Create key`,search:`Search keys`,columns:{name:`Name`,owner:`Created by`,mode:`Mode`,scopes:`Scopes`,created:`Created`,status:`Status`},views:{mine:`Your keys`,all:`All keys`},all:{title:`Every agent key on this deployment`,description:`As an Administrator you can end an elevation or revoke any key. Only a key's creator changes its mode or elevates it.`,search:`Search keys or people`,empty:`No agent keys yet`,emptyDescription:`Keys people create appear here with who made them.`,unknownOwner:`Removed member`,elevateOnlyCreator:`Only the person who created this key can elevate it. You can end an elevation or revoke the key.`},roleCap:`Your role allows agent keys up to {mode} mode.`,narrowed:{badge:`Narrowed by role`,hint:`The creator's role limits what this key can do right now; these are the scopes it works with.`,hintRole:`The creator's role is {role} now, so this key works with these scopes. A promotion doesn't widen it again.`,stored:`Given: {scopes}`},active:`Active`,disabled:`Disabled`,never:`Never expires`,expires:`Expires {when}`,unnamed:`Unnamed key`,keyPrefix:`{start}…`,fullAccess:`Full access`,scopesModeDefault:`Mode default · {count} scopes`,empty:`No agent keys yet`,emptyDescription:`Create one key per agent or automation, grant only the scopes it needs, and revoke it when the work is done.`,noMatches:`No keys match “{query}”`,notEnabledTitle:`Agent keys aren't available on this server`,notEnabledDescription:`This server runs without sign-in, so it can't issue keys. Agents on your machine can still connect over stdio with cloudhal mcp.`,copyId:`Copy key ID`,revoke:`Revoke`,revokeKey:`Revoke key`,keyResource:`Agent key`,revoked:`Key revoked`,revokedDescription:`{name} can no longer reach Studio.`,scopes:{"site:read":`See sites and snapshots`,"content:read":`Read pages and articles`,"content:write":`Create, edit and delete pages and articles`,"asset:upload":`Upload media and edit its own uploads`,"asset:manage":`Edit, retire and delete any media`,"analytics:read":`Read site analytics (no personal data)`,"site:write":`Change site settings`,"preview:create":`Render draft previews`,"site:publish":`Publish a snapshot to the live site`,"site:rollback":`Roll the live site back`,"content:write:own":`Create articles and change your own`,"content:draft:own":`Write drafts and send them to review`,"content:propose":`Suggest body edits; you accept or reject them`,"site:publish:own":`Publish when every change is your own`,"comments:read":`Read reader comments (never emails)`,"comments:moderate":`Label and hide comments; approvals wait for you`,"comments:moderate:own":`Label and hide comments on your own articles`,"comments:reply":`Draft replies to comments; you publish them`,"comments:reply:own":`Draft replies on your own articles; you publish them`,"schedules:read":`See the schedule, releases and automation runs`,"schedules:write":`Propose and schedule releases, embargoes and expiries`,"schedules:write:own":`Schedule releases of your own pages and articles`,"releases:publish":`Approve releases; in Auto mode, low-risk ones run without you`,"releases:publish:own":`Approve releases when every item is your own`},modes:{legend:`Mode`,names:{plan:`Plan`,manual:`Manual`,edits:`Edits`,auto:`Auto`,bypass:`Bypass`},descriptions:{plan:`Reads your sites and renders previews. It can suggest changes but never makes them.`,manual:`Asks you before every change it makes, however small.`,edits:`Creates and edits content freely. Every change is snapshotted and can be rolled back.`,auto:`Works like Edits, and small article publishes go live without you.`,bypass:`Nothing waits for a person. Only for cloudhal mcp on your own machine.`},waitsFor:[[3,`mode`,{plan:[`Waits for you: nothing, because it can't change anything`],manual:[`Waits for you: every edit, publish, rollback and deletion`],edits:[`Waits for you: publish, rollback and deletions`],auto:[`Waits for you: larger publishes, rollback and deletions`],bypass:[`Waits for you: nothing`],other:[`Waits for you: every edit, publish, rollback and deletion`]}]],risk:{safest:`Safest`,recommended:`Recommended`,caution:`Use with care`},current:`Current`,bypassHint:`Bypass, where nothing waits for a person, isn't available for keys. It exists only for the local server on your own machine:`,autoTitle:`Small publishes go live without you`,autoDescription:`In Auto mode, a publish that only adds or edits articles goes live right away: nothing removed, no pages, menus, site settings, taxonomies or redirects changed, at most {limit} changes. Activity marks it as auto-approved and you can roll it back in one click. Larger publishes, rollback and deletions still wait for you.`,autoConfirm:`I understand that this agent can publish without my approval`,autoConfirmRequired:`Confirm that you understand what Auto mode does`},howModes:{title:`How modes work`,description:`A mode decides what an agent does on its own and what waits for you. Scopes stay the hard limit: a mode never grants more.`,columns:{mode:`Mode`,edits:`Content`,publish:`Publish`,rollback:`Rollback, delete`},rules:{denied:`Blocked`,waits:`Waits`,free:`Free`,lowRisk:`Small: free`},rulesHint:{denied:`The agent can't do this in this mode.`,waits:`The agent asks; you approve in the site's Activity › Approvals.`,free:`The agent does this on its own. Every change is snapshotted.`,lowRisk:`Only articles added or edited, nothing removed, at most {limit} changes. Anything larger waits for you.`},gated:`Always waits for you with a key`,bypass:`Bypass is for your own machine only:`},changeMode:{menu:`Change mode`,title:`Change mode`,description:`Choose how “{name}” works from now on.`,from:`Now`,to:`New`,nextCallTitle:`Applies on the agent's next call`,nextCall:`Calls already running finish in the current mode. The change is recorded in the audit log.`,submit:`Change mode`,failed:`Couldn't change the mode`,changed:`Mode changed`,changedDescription:`{name} now works in {mode} mode.`,elevatedTitle:`Elevated to {mode} until {time}`,elevationKeeps:`The elevation stays in force until {time}, then the key works in {mode} mode.`,elevationEnds:`{mode} reaches the elevated mode, so this change ends the elevation.`},elevate:{menu:`Elevate temporarily`,menuDisabled:`Already in Auto, the most autonomous mode a key can have.`,title:`Elevate temporarily`,description:`Let “{name}” work in a more autonomous mode for a while. When the time is up, it goes back to its own mode by itself.`,ownMode:`Own mode`,ownModeHint:`Stays as it is. The key returns to it when the elevation ends.`,legend:`Elevate to`,duration:`Duration`,presets:{15:`15 min`,60:`1 hour`,240:`4 hours`,1440:`1 day`,custom:`Custom`},customValue:`Custom duration`,customUnit:`Unit`,units:{minutes:`Minutes`,hours:`Hours`},customHint:`Between {min} and {max}.`,customErrors:{invalid:`Enter a number`,tooShort:`At least {min}`,tooLong:`At most {max}`},reason:`Reason`,reasonPlaceholder:`e.g. Launch day: publish small updates on its own`,reasonHint:`Optional. Shown in the audit log.`,replacesTitle:`This replaces the elevation in force`,replaces:`“{name}” works in {mode} mode until {time}. The new elevation takes its place.`,now:`Now`,elevated:`Elevated`,summary:`Until {time} (in {duration}), then back to {from}.`,nextCall:`Applies on the agent's next call. You can end it early from the key's menu.`,submit:`Elevate`,failed:`Couldn't elevate the key`,done:`Key elevated`,doneDescription:`{name} works in {mode} mode until {time}, then back to {from}.`},elevation:{left:`{time} left`,ownMode:`Own mode: {mode}`,tooltip:`Elevated from {from} until {time} by {who}`,requestedReason:`Requested by the agent: “{reason}”`,byYou:`you`,temporary:`Temporarily elevated`,marker:`Temporarily elevated from {from} until {time}`,endMenu:`End elevation now`,ended:`Elevation ended`,endedDescription:`{name} is back in {mode} mode.`,endFailed:`Couldn't end the elevation`,bannerTitle:[[2,`count`,{one:[[4],` agent key is elevated`],other:[[4],` agent keys are elevated`]}]],bannerItem:`{name}: {from} → {to} until {time}`,endNow:`End now`,endAll:`End all now`,endsIn:`Ends in {time}`,extendAll:`Extend all {duration}`,howModes:`Need more autonomy for a while? Elevate a key temporarily instead of leaving it in Auto: it returns to its own mode by itself.`},create:{title:`Create agent key`,description:`The key acts as an agent on every site you can open, in the mode you choose.`,stepMode:`Step 1 of 2 · Choose a mode`,stepDetails:`Step 2 of 2 · Name and scopes`,continue:`Continue`,mode:`Mode`,changeMode:`Change`,name:`Name`,namePlaceholder:`e.g. Claude Code on my laptop`,nameHint:`Agents appear under this name in the activity log.`,nameRequired:`Give the key a name`,advanced:`Advanced: scopes`,advancedHint:`Prefilled for {mode} mode. Scopes are the hard limit; the mode decides what waits for you.`,customised:`Customised`,resetScopes:`Use the mode's scopes`,missingScopesTitle:`Some of what this mode allows won't work`,missingScopes:`Without {scopes}, the agent can't do everything {mode} mode allows.`,scopes:`Scopes`,scopesRequired:`Choose at least one scope`,groups:{read:`Read`,write:`Write`,release:`Publish and roll back`},groupHints:{read:`Enough for agents that research, summarise or review.`,write:`Changes are snapshotted and can be rolled back.`,release:`Lets the agent change, or ask to change, what visitors see.`},submit:`Create key`,failed:`Couldn't create the key`,scopeAboveRole:`Your role can't give this to a key.`,scopeNarrowed:`Your role gives {scope} only for your own work.`,errors:{scopeAboveRole:`Your role can't give a key some of these scopes. Untick them and try again.`,modeAboveRole:`Your role doesn't allow keys in this mode. Choose a less autonomous one.`}},reveal:{title:`Copy your new key`,description:`“{name}” is ready. Your agent sends it as a bearer token or in the x-api-key header.`,warningTitle:`You won't see this key again`,warning:`Store it now in your password manager or the agent's secret store. If it's lost, revoke it and create a new one.`,key:`Agent key`,config:`Client configuration`,done:`I've stored the key`},connect:{title:`Connect an MCP client`,description:`Agents reach Studio over MCP at this address and send their key in a header. When it connects, the agent is told its key's mode, so it knows what waits for you.`,endpoint:`MCP endpoint`,header:`Header`,client:`Client`,clients:{claude:`Claude Code`,codex:`Codex`,cursor:`Cursor`,vscode:`VS Code`,generic:`Other client`,stdio:`Local (stdio)`},hints:{claude:`Run it in a terminal, then check the connection with /mcp inside Claude Code.`,codex:`Codex reads the key from CLOUDHAL_API_KEY and sends it as a bearer token. Put the export line in your shell profile so the key is set whenever Codex starts.`,cursor:`Paste it into ~/.cursor/mcp.json, or .cursor/mcp.json in a project. The file holds the key, so keep it out of version control.`,vscode:`Save it as .vscode/mcp.json in your project. VS Code asks for the key once and keeps it in its secret storage.`,generic:`Any client that speaks streamable HTTP: this URL, with the key in the Authorization header as a bearer token. The x-api-key header works too.`,stdio:`On your own machine, run the stdio server inside the site folder; no key needed. --mode sets how it works, and only here can it be bypass.`}}},activity:{search:`Search tool, actor or skill`,refresh:`Refresh activity`,filters:{label:`Filters`,kind:`Actor type`,decision:`Decision`,allKinds:`All actors`,allDecisions:`All decisions`},kinds:{agent:`Agent`,human:`Person`,system:`System`},decisions:{allow:`Allowed`,deny:`Denied`,"approval-required":`Needs approval`},outcomes:{ok:`Succeeded`,error:`Failed`,pending:`Pending`},columns:{when:`When`,actor:`Actor`,tool:`Tool`,decision:`Decision`,outcome:`Outcome`,skill:`Skill`,snapshot:`Snapshot`},empty:`No activity yet`,emptyDescription:`Every tool call an agent or person makes over MCP is recorded here: allowed, denied or waiting for approval.`,noMatches:`No events match these filters`,noMatchesDescription:`Filters apply to the events loaded so far. Load more to look further back.`,clearFilters:`Clear filters`,showing:`Showing {shown} of {loaded} loaded events`,allLoaded:`You've reached the first recorded event.`,loadMore:`Load more`,notEnabledTitle:`This server doesn't keep an activity log`,notEnabledDescription:`Run Studio with cloudhal studio to record every agent and human tool call.`,ownOnlyTitle:`Your activity`,ownOnly:`You see what you and your agents did on this site. Editors and above see everyone's activity.`,viewEvent:`Show details`,detail:{when:`Time`,actor:`Actor`,decision:`Decision`,outcome:`Outcome`,skill:`Skill`,duration:`Duration`,durationValue:`{ms} ms`,snapshot:`Snapshot`,viewChanges:`View changes`,reason:`Why`,input:`Input`,noInput:`This call had no input.`,event:`Event #{id}`,mode:`Mode`,modeHint:`The mode the agent's key had when it made this call.`,elevation:`Elevation`,elevationHint:`The key's own mode is {from}. Its owner granted more autonomy for a while; when the elevation ends, the key works in {from} mode again.`,elevationGranted:`Elevation granted`,elevationGrantedUntil:`{mode} mode until {time}, then back to {from}.`,requestedByAgent:`Answers the agent's request`},autoApproved:`Auto-approved`,autoApprovedHint:`Went live without a person: the agent works in Auto mode and this publish was low risk.`,autoApprovedTitle:`Published without a person`,autoApprovedCount:`Article changes published: {count}`,autoApprovedDescription:`The agent works in Auto mode and this publish only added or edited articles. You can roll it back from Snapshots.`,autoApprovedDescriptionCount:`The agent works in Auto mode and this publish only added or edited articles ({count} in total). You can roll it back from Snapshots.`,requestedByAgent:`Requested by the agent`,requestedByAgentHint:`The agent asked for this elevation and a person granted it in Approvals.`,recent:`Recent activity`,recentEmpty:`No agent activity yet`,recentEmptyDescription:`Connect an agent and its tool calls appear here.`},account:{description:`Your profile, how you sign in, and who else can get into this Studio.`,sections:{profile:`Profile`,password:`Password`,sessions:`Active sessions`,notifications:`Notifications`,access:`Studio access`,server:`This server`},notifications:{description:`The bell in the top bar lists elevations that are about to end and agents that ask for one. Studio can also tell you while it's in a background tab.`,switch:`Notify me in this browser when an elevation is about to end or an agent asks for one`,switchHint:`Only while Studio is open in a tab. Each notice appears once.`,permission:`Browser permission`,permissions:{granted:`Allowed`,default:`Not asked yet`,denied:`Blocked`},permissionHints:{granted:`This browser lets Studio show notifications.`,default:`Your browser asks when you turn notifications on.`,denied:`Changed in your browser, not in Studio.`},deniedTitle:`Notifications are blocked for Studio`,denied:`To turn them on, allow notifications for this site in your browser's site settings (the icon next to the address), then reload Studio.`,unsupported:`This browser can't show notifications. The bell in the top bar still lists everything.`,enabled:`Browser notifications are on`,test:`Send a test notification`,testTitle:`Notifications are on`,testBody:`This is how Studio tells you when an elevation is about to end or an agent asks for one.`},profile:{description:`How you appear in Studio and in each site's activity log.`,name:`Name`,nameHint:`Shown next to the changes and approvals you make.`,email:`Email`,emailHint:`You sign in with this address. It can't be changed here.`,memberSince:`Member since {date}`,actorId:`Actor ID`,actorIdHint:`How activity and snapshots identify you.`,role:`Role`,roleHint:`What you can do here. An Administrator or the Owner changes it.`,saved:`Profile saved`,failed:`Couldn't save your profile`,errors:{required:`Enter your name`,tooLong:`Use at most {max} characters`}},password:{description:`Use a long passphrase you don't use anywhere else.`,current:`Current password`,new:`New password`,newHint:`At least {min} characters.`,confirmHint:`Type the new password again.`,confirm:`Confirm new password`,show:`Show password`,hide:`Hide password`,signOutOthers:`Sign out of all other sessions`,signOutOthersHint:`Recommended if someone else might know your old password.`,submit:`Change password`,changed:`Password changed`,changedOthers:`Your other sessions were signed out.`,failed:`Couldn't change your password`,errors:{currentRequired:`Enter your current password`,currentWrong:`That isn't your current password`,newRequired:`Enter a new password`,tooShort:`Use at least {min} characters`,tooLong:`Use at most {max} characters`,same:`Choose a password different from the current one`,confirmRequired:`Repeat the new password`,mismatch:`The passwords don't match`}},sessions:{showAll:`Show all {count}`,showFewer:`Show fewer`,description:`Browsers and clients signed in to your account. Sign out any you don't recognise. Agent keys are listed under Agents.`,columns:{device:`Device`,ip:`IP address`,lastActive:`Last active`,signedIn:`Signed in`},current:`This device`,unknownDevice:`Unknown device`,unknownIp:`Unknown`,deviceOn:`{browser} on {os}`,revoke:`Sign out`,revokeLabel:`Sign out {device}`,signOutOthers:`Sign out other sessions`,onlyThis:`This is your only active session.`,count:`{count} active`,revokeTitle:`Sign out this session?`,revokeDescription:`{device} will have to sign in again.`,revokeOthersTitle:`Sign out all other sessions?`,revokeOthersDescription:`Every browser and client except this one will have to sign in again. Agent keys keep working.`,revoked:`Session signed out`,revokedOthers:`Other sessions signed out`,staleTitle:`Sign in again to see your sessions`,staleDescription:`For your security, the session list needs a sign-in from the last 24 hours.`,signInAgain:`Sign in again`},access:{description:`Who can create an account on this Studio. It's set where the server runs, not here.`,signUp:`Sign-up`,policies:{"first-user":`Owner only`,closed:`Closed`,open:`Open to anyone`,unknown:`Not reported`},explanations:{"first-user":`The first person to sign up became the owner, and sign-up closed right after. Anyone else needs an account created for them.`,closed:`Nobody can sign up. Accounts are created by the owner.`,open:`Anyone who can reach this address can create an account, and every account has full access to every site.`,unknown:`This server doesn't report how sign-up is configured.`},openWarningTitle:`Anyone can sign up`,openWarning:`Every account gets full access to every site. Close sign-up before you share this address.`,howToChange:`On Cloudflare, set CLOUDHAL_SIGNUP on the admin Worker to open or closed (unset means owner only). cloudhal studio on your machine is always owner only.`,serverDescription:`What this Studio deployment runs.`,features:{members:`Team and roles`,agentKeys:`Agent keys`,mcp:`MCP server`,activity:`Activity log`,previewLinks:`Preview links`,deployTransfer:`Deploy and transfer`,approvals:`Approvals in Studio`,elevationRequests:`Elevation requests`},featureHints:{members:`People join by invite link and work in a role: Owner, Administrator, Editor, Author or Contributor.`,agentKeys:`Agents and CI jobs sign in with keys you create.`,mcp:`Agents connect at /mcp.`,activity:`Every tool call is recorded per site.`,previewLinks:`Signed links that show drafts on the deployed site.`,deployTransfer:`cloudhal push and pull can reach this server.`,approvals:`Agents' publish, rollback and delete requests wait here for a person.`,elevationRequests:`Agents can ask for a more autonomous mode for a while; a person grants it in Approvals.`}}},siteSettings:{sections:{general:`General`,domains:`Domains`,collections:`Collections`,appearance:`Appearance`,design:`Design rules`,previews:`Preview links`},design:{description:`Your brand and design rules in Markdown (DESIGN.md). Every agent and Build chat reads them before building: what the site is for, its colors and type, the layouts and components to prefer, page recipes, and what to avoid. They shape choices, never permissions.`,label:`This site's rules`,placeholder:`## Brand
|
|
3
3
|
What the site is for, who reads it, its voice.
|
|
4
4
|
|
|
5
5
|
## Layout
|
|
6
|
-
…`,template:`Start from the headings`,theme:`The {theme} theme's rules`,themeHint:`Agents read these first; your rules win where they differ.`,noTheme:`The {theme} theme ships no design rules.`,warnings:`Worth a look`,saved:`Design rules saved`,failed:`Could not save the design rules`,count:`{count} of {max} characters`,agentHint:`Agents can propose changes; they wait for a person in Approvals.`},appearance:{description:`Colors, type and shapes the {theme} theme lets you change.`,none:`The {theme} theme has no design settings to change.`,publishHint:`Saved changes show on the site after the next publish.`,saved:`Appearance saved`,failed:`Could not save the appearance`},collections:{description:`Where each collection's entries live on the site. Changing a prefix moves the address of every entry in that collection; old addresses keep working through a permanent redirect. Leave a field empty for the default, the collection's own name. New addresses go live with the next publish.`,preview:`Entries live at addresses like {url}`,previewMoved:`Entries will live at addresses like {url}. The old address {old} redirects there.`,exampleSlug:`my-article`,empty:`No collections yet`,emptyDescription:`Collections appear here once the site has articles or other entries.`,saved:`Collections saved`,failed:`Couldn't save the collections`,errors:{slash:`Start with a slash, like /blog`,trailingSlash:`Leave out the slash at the end`,invalid:`Use lower-case letters, digits and hyphens between slashes, like /blog or /docs/guides`}},conflictTitle:`This site changed somewhere else`,conflictDescription:`A person or an agent saved this site after you opened it. Load the latest version, check your change and save again.`,loadLatest:`Load latest`,general:{description:`The basics agents and themes see for this site.`,name:`Site name`,nameHint:`Shown in Studio and available to the theme.`,slug:`Slug`,slugHint:`Identifies the site in the CLI and the API. It can't be changed.`,siteId:`Site ID`,defaultLocale:`Default language`,defaultLocaleHint:`Used for new pages and articles that don't name a language.`,locales:`Languages`,localesHint:`The languages this site publishes in.`,saved:`Settings saved`,failed:`Couldn't save the settings`,errors:{required:`Give the site a name`,tooLong:`Use at most {max} characters`}},domains:{description:`Hostnames that serve this site. The primary domain is used for preview links.`,dnsHint:`Adding a domain here records it on the site. Point its DNS at your deployment separately.`,columns:{hostname:`Hostname`,role:`Role`},primary:`Primary`,alias:`Alias`,add:`Add domain`,hostname:`Hostname`,placeholder:`www.example.com`,makePrimary:`Make primary`,remove:`Remove domain`,visit:`Visit`,empty:`No domains yet`,emptyDescription:`Add the hostname visitors use. Until then, preview links come as a token without a URL.`,added:`Domain added`,addedDescription:`{hostname} now serves this site.`,addedPrimaryDescription:`{hostname} is the primary domain.`,removed:`Domain removed`,primaryChanged:`Primary domain changed`,primaryChangedDescription:`{hostname} is now the primary domain.`,removeTitle:`Remove {hostname}?`,removeDescription:`The site stops listing this hostname. Its DNS isn't changed.`,removePrimaryDetail:`{next} becomes the primary domain.`,removeLastDetail:`The site will have no domain, so preview links won't include a URL.`,failed:`Couldn't update the domains`,errors:{required:`Enter a hostname`,invalid:`Use a hostname like blog.example.com: letters, digits and hyphens, no port`,tooLong:`Hostnames are at most 253 characters`,duplicate:`This site already has that domain`}},previews:{description:`Signed links that let someone without a Studio account see drafts or an earlier snapshot on the deployed site.`,target:`Show`,targets:{live:`Current drafts`,snapshot:`A snapshot`},targetHints:{live:`Everything saved in Studio, published or not.`,snapshot:`Exactly what the site looked like at that snapshot.`},snapshot:`Snapshot`,snapshotPlaceholder:`Choose a snapshot`,noSnapshots:`This site has no snapshots yet.`,snapshotRequired:`Choose a snapshot`,live:`live`,path:`Page`,pathHint:`Leave empty for the home page.`,pathPlaceholder:`blog/hello`,pathInvalid:`Use a path like /blog/hello, not a full URL`,ttl:`Expires after`,ttls:{"1h":`1 hour`,"1d":`1 day`,"7d":`7 days`},create:`Create link`,created:`Preview link created`,result:`Preview link`,expires:`Expires {when}`,opens:`Opens {path}`,showing:{live:`Drafts`,snapshot:`Snapshot`},openLink:`Open link`,token:`Token`,noDomainTitle:`This site has no domain, so there's no full URL`,noDomainDescription:`Add a domain above, or append ?cloudhal-preview= and this token to the deployed site's address.`,revokeHint:`Links can't be revoked one by one; they stop working when they expire. Rotating the preview secret ends every link at once.`,notEnabledTitle:`Preview links aren't enabled on this server`,notEnabledDescription:`Set the CLOUDHAL_PREVIEW_SECRET secret on the admin Worker to sign links. cloudhal studio on your machine shows drafts in the editor preview instead.`,failed:`Couldn't create the link`}},skills:{description:`Playbooks agents read over MCP. A call made under a skill can only use the scopes it declares, and the tools it lists always wait for a person.`,search:`Search skills`,columns:{skill:`Skill`,scopes:`Scopes`,approval:`Needs approval`,references:`References`},none:`None`,referenceCount:[[2,`count`,{one:[[4],` file`],other:[[4],` files`]}]],empty:`No skills loaded`,emptyDescription:`Add a folder with a SKILL.md under skills/ in your project, then restart Studio.`,noMatches:`No skills match “{query}”`,notEnabledTitle:`This server doesn't run MCP`,notEnabledDescription:`Skills reach agents over MCP. Start Studio with cloudhal studio, or deploy the admin Worker, to serve them.`,view:`Show details`,detail:{scopes:`Scopes`,scopesHint:`Calls under this skill can use at most these, and never more than the key has.`,approval:`Always approved by a person`,approvalHint:`Under this skill these tools pause for a human, whatever the key allows.`,noApproval:`No extra approvals beyond the tools that always need one.`,requires:`Requires`,references:`Reference files`,noReferences:`No reference files.`,resource:`MCP resource`,call:`Call a tool under this skill`},how:{title:`How agents use skills`,steps:{read:`The agent lists the skill:// resources and reads the SKILL.md that fits the task.`,declare:`Each tool call names the skill in its request metadata:`,narrow:`Policy limits that call to the skill's scopes, and never beyond the key's own scopes.`,approve:`Tools the skill lists for approval pause until a person says yes.`},example:`A tool call under a skill`},add:{title:`Add your own`,description:`Studio loads skills from the skills/ folder of your project. Without one, it serves the official set.`}},notifications:{title:`Notifications`,bellCount:`Notifications ({count})`,empty:`You're all caught up`,emptyDescription:`When an elevation is about to end or an agent asks for one, it shows up here.`,settings:`Notification settings`,openAgents:`Open Agents`,openTeam:`Open Team`,memberJoined:{title:`{name} joined`,body:`accepted your invite.`,toast:`They accepted your invite and work as {role} now.`},roleChanged:{title:`Your role is now {role}`,body:`{name} changed it. What you and your agents can do changed with it.`},ending:{title:`Elevation ending soon`,sentence:`{name}'s {mode} mode ends in {left} ({time}), then back to {from}.`},request:{title:`{agent} asks for {mode} · {duration}`,reason:`“{reason}”`,review:`Review`},comments:{pending:{title:[[2,`count`,{one:[[4],` comment waits for moderation`],other:[[4],` comments wait for moderation`]}]],body:`The oldest has waited {age}.`,bodyNew:`Nobody sees them until someone approves them.`},reported:{title:[[2,`count`,{one:[[4],` comment was reported`],other:[[4],` comments were reported`]}]],body:`Readers flagged them. A report never hides anything by itself.`},paused:{title:`Comments are paused for today`,body:`The daily limit ({cap}) was reached. New comments are refused until midnight UTC.`},purgeWaiting:{title:`A hidden comment may still be on the live page`,body:`{count} pages wait for the cache to refresh.`,purge:`Purge site cache`,purged:`The site's cache was purged`,failed:`Couldn't purge the cache`},approval:{title:`{agent} asks about comments`,tools:{moderate:`It asks to approve or restore comments. They become public once you approve.`,reply:`It drafted a reply that would be published under your name.`,thread:`It asks to open comments on an article again.`,label:`It asks to label comments.`}},review:`Review`,open:`Open comments`,settings:`Comment settings`},toast:{endingTitle:`{name}'s {mode} mode ends in {left}`,endingBody:`At {time} it goes back to {from}. Extend it if the agent still needs it.`},extend:{button:`Extend {duration}`,group:`Extend the elevation`,more:`Other durations`,fromNow:`Counts from now`,presets:{30:`30 min`,60:`1 hour`,240:`4 hours`},presetUntil:`{duration} · until {time}`,done:`Elevation extended`,failed:`Couldn't extend the elevation`,gone:`This elevation has already ended`,goneDescription:`Nothing was extended. To elevate the key again, use Elevate temporarily on the Agents page.`}},approvals:{refresh:`Refresh approvals`,pending:`Waiting for you`,pendingDescription:`Approving lets the agent make that exact call once, or grants the elevation it asked for. Denying tells the agent.`,history:`History`,noPending:`Nothing is waiting for you`,noPendingDescription:`When an agent asks to publish, roll back or delete, asks for a more autonomous mode for a while, or works in Manual mode and wants to change anything, its request appears here and the agent waits for your decision.`,elevation:{badge:`Elevation request`,sentence:`{agent} asks to work in {mode} mode for {duration}.`,history:`Elevation to {mode} · {duration}`,historyShortened:`Elevation to {mode} · {duration} (asked {asked})`,reasonLabel:`The agent's reason`,noReason:`The agent gave no reason.`,untilIfNow:`If you approve now: until {time}`,hint:`Approving grants it on the agent's key for the time you choose, then the key returns to its own mode by itself. Nothing on the site changes.`,granted:`Granted`,cannotTake:`{agent}'s key now works in {own} mode on its own, so there is nothing to grant. Deny the request to let the agent know.`,title:`Grant {mode} mode to {agent}?`,description:`{agent} asked for this. You can shorten the time, not extend it.`,mode:`Mode`,modeFixed:`As requested. To grant another mode, deny this request and elevate the key from Agents.`,presetHours:`{count} hr`,presetMinutes:`{count} min`,requested:`Requested: {duration}. Shorter is fine, longer isn't possible.`,summary:`{agent} works in {mode} mode until {time}, then back to {from}.`,summaryNoOwn:`{agent} works in {mode} mode until {time}, then back to its own mode.`,nextCall:`Applies on the agent's next call. You can end it early from Agents.`,submit:`Grant elevation`,failed:`Couldn't grant the elevation`,stillPending:`The request stays in the list while it is pending. You can deny it, or grant it once the key can take it.`,done:`Elevation granted`,doneDescription:`{agent} works in {mode} mode until {time}, then back to {from}.`,doneDescriptionNoOwn:`{agent} works in {mode} mode until {time}.`,asksFor:`Asks for {mode}`,asksForTooltip:`{agent} asks to work in {mode} mode for {duration}. Open Approvals to decide.`},manualPrompt:`{agent} works in Manual mode, so this change waits for you: {tool}.`,manualPromptShort:`Manual mode: {tool}`,bodyChanges:`What approving changes in “{title}”`,manualHint:`Manual mode asks before every change. Approving lets the agent make this one edit with exactly these arguments; it is snapshotted like any other.`,autoHeldBack:`Auto mode publishes small article updates on its own. This one waits for you because {reason}.`,autoCheck:{"removes-content":`it removes content`,nothing:`there is nothing new to publish`,structure:`it changes pages, menus, site settings, taxonomies or redirects`,"too-many":`it carries {changes} changes and auto mode stops at {limit}`,media:`it adds or changes media that is not part of an article change`,"outside-window":`it would run after the agent's autonomy ends`,correction:`it adds a correction to a published article`},noHistory:`No decisions yet`,noHistoryDescription:`Approved, denied, used and expired requests are listed here.`,requested:`Requested`,expires:`Expires`,expiresSoon:`Expires soon`,arguments:`Arguments`,noArguments:`This call has no arguments.`,approve:`Approve`,deny:`Deny`,withdraw:`Withdraw`,withdrawn:`Request withdrawn`,decide:{own_request:`You can't approve your own request. Someone whose role allows it decides.`,not_key_creator:`Only the person who created this agent's key can grant it more autonomy.`,mode_above_role:`Your role allows agent keys up to {mode} mode, so you can't grant this.`,missing_scope:`Your role can't make this change, so you can't approve it.`,not_own:`This includes work that isn't yours. An Editor or above decides it.`},role:{waiting:`Waiting for an Editor`,yours:`You asked for this. You can withdraw it.`,prompt:`{name} wants to publish the site.`,foreign:`It includes {count} published article(s) by someone else, and their role publishes only their own work.`,structure:`It changes pages, categories, tags or redirects, which their role can't publish alone.`,generic:`Their role can't publish this change set alone.`,published:`Approved and published`,publishedDescription:`{name}'s request is live now.`,stateChanged:`The site changed after this request`,stateChangedDescription:`The request was closed because it no longer matches the site. Publish the current state yourself.`},approved:`Request approved`,approvedDescription:`{agent} can now make this call once.`,denied:`Request denied`,deniedDescription:`{agent} will be told the request was denied.`,failed:`Couldn't record your decision`,noLongerPending:`This request is no longer pending`,noLongerPendingDescription:`It was decided, used or expired in the meantime. The list has been refreshed.`,statuses:{pending:`Pending`,approved:`Approved`,denied:`Denied`,consumed:`Used`,expired:`Expired`},columns:{request:`Request`,status:`Status`,agent:`Requested by`,requested:`Requested`,decided:`Decided`},decidedBy:`by {actor}`,decidedByYou:`by you`,notEnabledTitle:`This server doesn't keep approvals`,notEnabledDescription:`Agents' publish and rollback requests are confirmed in their MCP client here. Approvals in Studio need cloudhal studio or the admin Worker.`,confirm:{title:`Approve “{tool}”?`,requestedBy:`Requested by {agent}`,singleUseTitle:`Single use, for the site as it is now`,singleUse:`{agent} may make this exact call once. If anything on the site changes before the agent calls again, the approval is void and it has to ask again.`,changes:`Approximate changes`,changesHint:`The live version compared with the newest snapshot. Edits saved after that snapshot are published too, but aren't counted here.`,viewChanges:`View changes`,first:`Nothing is live yet: this publish makes the site public for the first time.`,upToDate:`The newest snapshot is already live, so only edits saved since then would be published.`,rollbackTarget:`Live site goes back to`,deleteTarget:`Deletes`,submit:`Approve`},banner:{title:[[2,`count`,{one:[`An agent request is waiting for your approval`],other:[[4],` agent requests are waiting for your approval`]}]],description:`Agents can't publish, roll back or delete, and agents in Manual mode can't change anything, until a person decides.`,action:`Review requests`}},tools:{list_assets:`List media`,get_asset:`Get media file`,upload_asset:`Upload media`,fetch_asset_url:`Add media from a URL`,update_asset:`Update media details`,retire_asset:`Retire media`,restore_asset:`Restore media`,delete_asset:`Delete media`,assetUpload:`Upload file`,assetUpdate:`Update file details`,assetRetire:`Retire file`,assetRestore:`Restore file`,assetDelete:`Delete file`,assetPurge:`Take down file`,assetLiftPurge:`Allow file again`,list_sites:`List sites`,get_site:`Get site`,list_pages:`List pages`,get_page:`Get page`,create_page:`Create page`,update_page:`Update page`,delete_page:`Delete page`,list_entries:`List articles`,get_entry:`Get article`,create_entry:`Create article`,update_entry:`Update article`,add_correction:`Add correction`,delete_entry:`Delete article`,get_theme_settings:`Read design settings`,set_theme_settings:`Change design settings`,list_block_types:`List block types`,get_body:`Read body`,edit_body:`Edit body`,diff_node:`Compare versions`,create_snapshot:`Create snapshot`,list_snapshots:`List snapshots`,diff_snapshots:`Compare snapshots`,preview_page:`Preview page`,publish:`Publish site`,rollback:`Roll back site`,list_menus:`List menus`,get_menu:`Get menu`,update_menu:`Update menu`,set_menu:`Replace menu`,delete_menu:`Delete menu`,request_elevation:`Request elevation`,list_comments:`List comments`,get_comment_thread:`Read comment thread`,comments_summary:`Summarise comments`,label_comments:`Label comments`,moderate_comments:`Moderate comments`,draft_comment_reply:`Draft comment reply`,set_comment_thread:`Change comment thread`,list_schedule:`List the schedule`,get_schedule:`Get a scheduled item`,list_releases:`List releases`,get_release:`Get release`,propose_release:`Propose a release`,schedule_release:`Schedule a release`,reschedule:`Move a release`,cancel_schedule:`Cancel a release`,set_embargo:`Set an embargo`,lift_embargo:`Lift an embargo`,schedule_unpublish:`Schedule an expiry`,list_automations:`List automations`,list_runs:`List runs`,get_run:`Get run`,begin_run:`Begin a run`,end_run:`End a run`,pause_automation:`Pause an automation`,get_mode:`Get mode`,agentKeyMode:`Change agent key mode`,agentKeyElevate:`Elevate agent key`,agentKeyElevationEnd:`End elevation`,agentKeyNarrow:`Narrow agent key`,agentKeyRevoke:`Revoke agent key`,memberInvite:`Invite member`,memberInviteRevoke:`Revoke invite`,memberInviteFailed:`Invite email failed`,memberInviteAccept:`Accept invite`,memberRole:`Change member role`,memberRemove:`Remove member`,memberTransferOwnership:`Transfer ownership`,memberPasswordReset:`Create password reset link`,memberPasswordResetComplete:`Reset password`},preview:{title:`Preview`,frameTitle:`Preview of {name}`,device:`Device width`,desktop:`Desktop`,tablet:`Tablet`,mobile:`Mobile`,reload:`Reload preview`,openInNewTab:`Open preview in a new tab`,loading:`Loading preview…`,unsaved:`Unsaved changes`,unsavedHint:`The preview shows the last saved version. Save to update it.`,edit:`Edit`,show:`Show preview`,hide:`Hide preview`,toggleHint:`Show the last saved version next to the form`,toggleHintLive:`Show the page with your unsaved changes next to the form`,openSaved:`Open the saved version in a new tab`,failed:`Preview unavailable`},proposals:{title:`Suggestions`,count:`{count} open`,from:`{name} suggests`,outOfDate:`Out of date`,outOfDateHint:`The text changed since this suggestion. Reject it, or ask for a new one.`,accept:`Accept`,reject:`Reject`,saveFirst:`Save or discard your changes first.`,accepted:`Suggestion accepted`,rejected:`Suggestion rejected`,failed:`Could not decide on the suggestion`,steps:`Changes to accept`,acceptSome:`Accept {count} of {total}`,chooseRequired:`Choose at least one change.`,step:{replace:`Rewrite “{before}”`,replaceText:`Change “{before}” to “{after}”`,insert:`Add “{after}”`,move:`Move “{before}”`,delete:`Remove “{before}”`},aBlock:`a block`},coverage:{scope:`Which sites`,thisSite:`This site`,allSites:`All sites in the project`,siteLanguage:`{site} · {language}`,search:`Search by title`,filter:`Show`,needsWork:`Needs work`,all:`Everything`,item:`Page or article`,page:`Page`,article:`Article`,missing:`Missing`,toReview:`To review`,oneLanguage:`This site has one language`,oneLanguageDescription:`Add languages in the site's settings; translations show here.`,openSettings:`Open language settings`,allDone:`Nothing needs work`,empty:`Nothing here yet`,emptyDescription:`Every language has an up-to-date, reviewed version.`},languages:{title:`Languages`,description:`The languages this site publishes in and how readers reach them. A page or article in another language is a translation of the original.`,language:`Language`,tag:`Tag`,default:`Default`,remove:`Remove {language}`,add:`Add a language`,addHint:`Pick from the list, or type any BCP 47 tag such as gsw or pt-AO.`,addPlaceholder:`Search languages`,useTag:`Use the tag {tag}`,noMatch:`No language matches. Type a BCP 47 tag to use it.`,clear:`Clear`,showOptions:`Show languages`,routing:`Addresses`,routingHint:`Where each language lives. Other languages always have a prefix.`,routingOptions:{prefixExceptDefault:`The default language at the root, others under their prefix`,prefixAll:`Every language under its prefix`},fallback:`Missing translations`,fallbackHint:`What readers get at an address the language has no version for.`,fallbackOptions:{none:`Not found`,defaultWithNotice:`The original, with a notice, kept out of search engines`},review:`Review before publishing`,reviewHint:`Machine translations of these go live only after a person reviews them.`,reviewOptions:{pages:`Pages`,posts:`Articles`},label:`Machine-translation notice`,labelHint:`When readers see that a page was translated automatically.`,labelOptions:{unreviewed:`Until a person reviews the translation`,always:`Always, also after a review`},saved:`Languages saved`,failed:`Couldn't save the languages`},glossary:{title:`Glossary`,description:`Terms agents keep when they translate: names that are never translated, and the approved word in each language.`,empty:`No terms yet`,emptyDescription:`Add brand and product names, and words with a fixed translation.`,oneLanguage:`Add a second language first: the glossary holds words for the site's other languages.`,term:`Term`,neverTranslate:`Never translate`,translationIn:`In {language}`,add:`Add term`,remove:`Remove {term}`,saved:`Glossary saved`,failed:`Couldn't save the glossary`},translations:{title:`Translations`,none:`Only in {language}`,noneDescription:`Agents translate pages and articles into the site's other languages; every version shows here.`,current:`This version`,method:{original:`Original`,human:`Translated by a person`,machine:`Machine translation`,machineReviewed:`Machine translation, reviewed`},stale:`Out of date`,sourceMissing:`Original removed`,review:`Mark as reviewed`,reviewTitle:`Mark this translation as reviewed?`,reviewDescription:`You confirm that a person read this machine translation against the original. Readers stop seeing the machine-translation notice, unless the site always shows it.`,reviewSaveFirst:`Save your changes before you review.`},translationList:{column:`Languages`,filter:`Language`,grouped:`All languages (grouped)`,state:[[0,`language`],`: `,[3,`state`,{published:[`published`],draft:[`draft`],outdated:[`out of date`],review:[`needs review`],missing:[`missing`],other:[`missing`]}]],summary:[[1,`count`],`/`,[1,`total`]],summaryLabel:[[1,`count`],` of `,[2,`total`,{one:[[4],` language`],other:[[4],` languages`]}]],writeByHand:`Write by hand`},diff:{title:`Changes in {name}`,against:`Compare with`,previous:`Previous snapshot`,live:`Live version`,descriptions:{previous:`What changed since the snapshot before it.`,live:`What would change if this snapshot replaced the live version.`},added:`Added`,changed:`Changed`,removed:`Removed`,counts:{added:`{count} added`,changed:`{count} changed`,removed:`{count} removed`},none:`No differences`,noneDescription:`Both snapshots contain exactly the same content.`,nothingToCompare:`Nothing to compare with`,nothingToCompareDescription:`This is the site's first snapshot and no other version is live, so there is nothing to compare it with yet.`,kinds:{site:`Site settings`,page:`Page`,contentEntry:`Article`,taxonomy:`Taxonomy`,term:`Term`,redirect:`Redirect`,menu:`Menu`,asset:`Media`,glossary:`Glossary`},gone:`No longer exists`,revs:`rev {from} → {to}`,rev:`rev {rev}`,columns:{item:`Item`,revision:`Revision`},textChanges:{show:`Show changes`,hide:`Hide changes`,loading:`Loading both versions…`,body:`Body`,title:`Title`,summary:`Summary`,slug:`Slug`,path:`Path`,section:`{kind} section`,sectionAdded:`Added`,sectionRemoved:`Removed`,sectionChanged:`Changed`,noTextChanges:`Only settings changed; the text is the same.`,added:`Added`,removed:`Removed`,edited:`Edited`,unchanged:[[2,`count`,{one:[[4],` unchanged block`],other:[[4],` unchanged blocks`]}]],wordsAdded:`+{count} words`,wordsRemoved:`−{count} words`,same:`No text changes`},assignments:{added:`+ {taxonomy} {name}`,removed:`− {taxonomy} {name}`,primary:`Primary {taxonomy} → {name}`,none:`none`}},taxonomy:{newTerm:`New {singular}`,search:`Search {plural}`,columns:{name:`Name`,usage:`Articles`,lastUsed:`Last used`,index:`Search engines`,visibility:`Visibility`},filters:{all:`All`,public:`Public`,internal:`Internal`,proposed:`Proposed`,retired:`Retired`},state:{proposed:`Proposed`,proposedHint:`An agent proposed it. It can be assigned, but it has no public page until someone approves it.`,internal:`Internal`,internalHint:`No archive, feed or sitemap entry, and articles don't show it. Themes and filters can still use it.`,retired:`Retired`,mergedInto:`Merged into {name}`},visibility:{public:`Public`,internal:`Internal`,none:`—`},defaults:{category:{singular:`Category`,plural:`Categories`},tag:{singular:`Tag`,plural:`Tags`}},usage:{value:`{published} / {total}`,hint:`{published} published of {total} articles. Opens them in Articles.`,none:`None`},index:{indexed:`Indexed`,indexedHint:`{count} published articles: the archive is listed in search results and in the sitemap.`,thin:`Not indexed: {count} of {min}`,thinHint:`Archives with fewer than {min} published articles are served with noindex, follow and left out of the sitemap.`,empty:`Empty`,emptyHint:`No published articles: the archive answers 404 until one is filed here.`,noindex:`noindex`,noindexHint:`Hidden from search engines in its search settings.`,none:{internal:`No archive`,proposed:`Not public yet`,retired:`Retired`,archiveOff:`Archives off`},noneHint:{internal:`Internal terms have no public archive.`,proposed:`Proposed terms have no public archive until someone approves them.`,retired:`Retired terms have no archive; old links redirect or answer 410 Gone.`,archiveOff:`This taxonomy publishes no archive pages.`}},menu:{label:`Term actions`,edit:`Edit`,view:`View`,rename:`Rename slug`,merge:`Merge into…`,mergeExisting:`Merge into an existing term…`,move:`Move…`,makeInternal:`Make internal`,makePublic:`Make public`,retire:`Retire`},review:{waiting:`Proposals waiting for review: {count}`,waitingDescription:`Agents proposed these {plural}. Approve one to give it a public page, merge it into an existing one, or reject it.`,open:`Review`,approve:`Approve`,approved:`{name} approved`,failed:`Couldn't approve`,reject:`Reject`,merge:`Merge…`,rejectNamed:`Reject {name}`,proposedBy:`Proposed by`},empty:{all:`No {plural} yet`,public:`No public {plural}`,internal:`No internal {plural}`,proposed:`Nothing waiting for review`,retired:`No retired {plural}`,search:`Nothing matches your search`,allDescription:`Create the first one, or let agents propose tags as they write.`,filteredDescription:`Try another filter or search.`,noTaxonomies:`No categories or tags yet`,noTaxonomiesDescription:`This site still keeps tags as plain text on each article. Move them to categories and tags; you see what changes before anything is written.`},create:{title:`New {singular}`,description:`Give it a name. Synonyms, an introduction, an image and search settings can follow in its editor.`,descriptionTree:`Give it a name and, if it belongs under another category, a parent. The rest can follow in its editor.`,name:`Name ({locale})`,slugHint:`The address of its archive. It follows the name until you change it.`,parentHint:`Leave it at the top level, or file it under another category.`,internal:`Internal`,internalHint:`Internal terms get no public page; themes and filters can still use them.`,similarTitle:`This looks like an existing term`,similar:`Similar: {names}. Use that one if it means the same.`,submit:`Create {singular}`,created:`{name} created`},health:{title:`Vocabulary health`,description:`The same report agents read before they tag. Keep one page per topic so readers and search engines find it.`,issues:`{count} to review`,clean:`Nothing to tidy up`,cleanDescription:`No near-duplicates, single-use or empty terms right now.`,nearDuplicates:`Near-duplicates ({count})`,nearDuplicatesHint:`Probably the same topic. Merging keeps the busier one and redirects the other.`,mergeInto:`{source} → {target}`,merge:`Merge`,morePairs:`{count} more pairs`,reasons:{similar:`Spelled almost the same`,plural:`Singular and plural`,synonym:`One's synonym is the other's name`},proposed:`Waiting for review ({count})`,review:`Review`,missingPrimary:`Articles without a primary {singular} ({count})`,missingPrimaryHint:`They can't go to review or be published until one is chosen.`,unfiled:`Articles without a {singular} ({count})`,unfiledHint:`File them so they appear in an archive and in breadcrumbs.`,noIntro:`Indexed archives without an intro ({count})`,noIntroHint:`a short intro helps readers and search engines`,singleUse:`Used once ({count})`,unused:`Not on any article ({count})`,unusedHint:`retire them or file articles under them`,empty:`Empty categories ({count})`,emptyHint:`their archives answer 404 until an article is filed`,oversized:`Very large categories ({count})`,oversizedHint:`over half of all articles; sub-categories would help`,more:[[1,`count`],` more`]},rules:{title:`How {plural} work`,description:`The rules of this taxonomy. Agents see the same ones.`,structure:`Structure`,tree:`Tree`,flat:`Flat list`,treeHint:`A term can sit under a parent, up to 5 levels deep.`,flatHint:`Terms have no parent.`,newTerms:`New terms`,newTermsValue:{none:`People only`,propose:`Agents propose`,free:`Agents add`},newTermsHint:{none:`Only people create them; agents choose from the existing ones.`,propose:`Agents propose new ones, which get a public page once someone approves.`,free:`Agents may add active terms directly.`},perArticle:`Per article`,required:`Required · up to {max}`,optional:`Optional · up to {max}`,requiredHint:`An article needs one, with a primary, to be reviewed or published.`,optionalHint:`Articles may have none.`,archive:`Archives`,archiveHint:`Indexed from {min} published articles; thinner archives are noindex.`,archiveOff:`No archive pages are published.`}},governance:{oneSnapshot:`One change, one snapshot. It goes live with the next publish.`,conflict:`This term changed somewhere else in the meantime. Close the dialog and try again on the latest version.`,rename:{title:`Rename the slug of {name}`,description:`The archive moves to the new address. The old one keeps working through a permanent redirect, and the old slug stays reserved.`,slug:`New slug`,slugHint:`Lower-case letters, digits and single hyphens.`,reclaim:`Reclaim it: free this slug from the earlier term and drop its redirect`,history:`Earlier slugs: {slugs}`,confirm:`Rename`,errors:{required:`Enter a slug.`,invalid:`Use lower-case letters, digits and single hyphens.`,tooLong:`At most 128 characters.`,taken:`Another term uses this slug.`,reserved:`A term used this slug before and its old address redirects. Reclaim it below to use it here.`}},merge:{title:`Merge {name} into…`,description:`Its articles move to the term you choose, which also takes over its names and slugs, so old links and synonyms keep working.`,target:`Merge into`,targetHint:`An active term of the same taxonomy.`,targetPlaceholder:`Search terms…`,confirm:`Merge`},reviewMerge:{title:`Merge the proposal {name} into…`,description:`The proposal is retired and its articles move to the existing term, which keeps its name as a synonym.`,confirm:`Merge`},retire:{title:`Retire {name}`,description:`It is removed from every article and can't be assigned again. Its archive can redirect to another term.`,redirectTo:`Redirect to…`,redirectToHint:`Without a redirect, its archive answers 410 Gone, so search engines drop it for good.`,redirectToParentHint:`Without a choice, the archive redirects to its parent category when that one is public.`,noRedirect:`No redirect`,redirectPlaceholder:`Search terms…`,confirm:`Retire`},move:{title:`Move {name}`,description:`Choose its new parent. Articles and addresses stay as they are; menus, breadcrumbs and the parent's archive change.`,parent:`Parent`,parentHint:`Up to {max} levels deep. A category can't move under itself or below it.`,parentPlaceholder:`Search categories…`,topLevel:`Top level`,confirm:`Move`},visibility:{title:{internal:`Make {name} internal`,public:`Make {name} public`},description:{internal:`Its archive, feed and sitemap entry go away and articles stop showing it. Themes and filters can still use it.`,public:`It gets a public archive, a feed and a sitemap entry, and articles show it.`},confirm:{internal:`Make internal`,public:`Make public`}},reject:{title:`Reject the proposal {name}`,description:`The proposal is retired and removed from the articles that carry it. The agent sees it was rejected.`,confirm:`Reject`},preview:{waiting:`Make a choice to see what changes.`,loading:`Working out what changes`,articles:`Articles`,noArticles:`No article carries it.`,articlesMove:`These articles change in the same operation. One change can touch up to {limit} articles.`,articlesLose:`These articles lose it in the same operation. One change can touch up to {limit} articles.`,articlesKeep:`These articles keep it; their links follow the new address.`,more:`and {count} more`,redirects:`Redirects`,noRedirects:`No redirect is created.`,permanent:`301 permanent`,prefix:`Pages and feeds below the old address follow too.`,repointed:`{count} existing redirects to the old address now point to the new one.`},tooLarge:{title:`Too large for one change`,description:`This would change {count} articles; one change can touch at most {limit}. Split it into smaller steps, or ask for the staged job.`},blocked:{title:`{count} published or in-review articles would lose their only category`,description:`They need a category. Merge this term into another one instead, or file those articles elsewhere first.`},gone:{title:`Its archive will answer 410 Gone`,description:`{path} gets no redirect, so search engines drop it for good. Choose a term above to send visitors there instead.`},hidden:{title:`Its archive stops being public`,description:`{path} answers 404 after the next publish.`},appears:{title:`Its archive becomes public`,description:`{path} goes live with the next publish.`},done:{rename:`{name} renamed`,merge:`{name} merged`,reviewMerge:`{name} merged`,retire:`{name} retired`,reject:`{name} rejected`,move:`{name} moved`,visibility:`Visibility of {name} changed`,detail:`Articles changed: {entries}. Redirects: {redirects}. One snapshot; live with the next publish.`}},taxonomySettings:{titleNew:`New taxonomy`,titleEdit:`{Singular} settings`,descriptionNew:`Group articles another way besides categories and tags, such as a series or a region. Agents read its rules before they file articles.`,descriptionEdit:`The rules people and agents follow for {plural}.`,open:`{Singular} settings`,newTaxonomy:`New taxonomy`,edit:`Edit`,exampleSlug:`summer-2026`,sections:{name:`Name`,terms:`Terms`,termsHint:`Agents always reuse an existing term first. These rules decide what they may do when none fits.`,articles:`On articles`,archive:`Archive pages`},key:`Key`,keyHint:`Used in filters and by agents (series:summer-2026). Lower-case letters, digits and hyphens. It can't be changed later.`,keyFixed:`Keys never change: articles, filters and agents refer to it.`,singular:`Singular ({locale})`,plural:`Plural ({locale})`,singularPlaceholder:`Region`,pluralPlaceholder:`Regions`,labelsHint:`What Studio, the site and agents call it, e.g. Region and Regions.`,labelsOptional:`Optional. Leave both empty to use the {locale} names.`,hierarchical:`Terms can have a parent`,hierarchicalHint:`A tree up to 5 levels deep, like categories; an archive also lists its sub-terms' articles. Off: a flat list, like tags.`,newTerms:`Who adds new terms`,newTermsOptions:{none:`People only`,propose:`Agents propose`,free:`Agents add freely`},newTermsHints:{none:`Agents file articles under existing terms only. If none fits, they say so and ask you.`,propose:`Agents may suggest a new term. It stays private (no archive, not shown on articles) until a person approves, merges or rejects it here.`,free:`Agents create public terms, archives included, without asking. Suits loose vocabularies; keep an eye on vocabulary health.`},badges:{safest:`Safest`,recommended:`Recommended`,careful:`Use with care`},required:`Required`,requiredHint:`An article needs at least one, with a primary, before it goes to review or is published. Drafts can wait.`,maxPerEntry:`At most per article`,maxPerEntryHint:`Empty: up to {max}.`,allCollections:`Applies to every collection`,allCollectionsHint:`Off: choose the collections whose articles can use it.`,collections:`Collections`,archiveEnabled:`Public archive pages`,archiveEnabledHint:`Every public term with a published article gets a page listing its articles.`,basePath:`Address`,basePathHint:`Archives live at addresses like {example}.`,feed:`RSS feed per term`,feedHint:`At {example}/rss.xml.`,feedNeedsArchive:`Needs public archive pages.`,minEntries:`Articles needed for search engines`,minEntriesHint:`Archives with fewer published articles are served with noindex, follow and left out of the sitemap. 0: indexed from the first article.`,move:{title:`Address change`,description:`The archives move. Old addresses keep working through a permanent redirect.`,offTitle:`Archive pages will answer 404`,offDescription:`No redirect is created: links to {path}/… stop working after the next publish.`,onTitle:`Archives become public at {path}/…`,onDescription:`Terms with a published article get a page after the next publish.`},create:`Create taxonomy`,save:`Save settings`,created:`{name} created`,saved:`{name} settings saved`,errors:{keyRequired:`Enter a key.`,keyInvalid:`Use lower-case letters, digits and single hyphens, like series or reading-list.`,keyTooLong:`At most 128 characters.`,keyReserved:`“{key}” is reserved by the filter language (primary, collection, locale, status, id).`,keyTaken:`This site already has a taxonomy with this key.`,labelRequired:`Enter a name in the site's default language.`,labelTooLong:`At most {max} characters.`,labelPair:`Fill in both, or leave both empty.`,pathRequired:`Enter an address.`,pathInvalid:`Start with / and use lower-case words joined by hyphens, like /series.`,pathTooLong:`At most 1,024 characters.`,pathRoot:`Archives can't live at the site root.`,pathTaxonomy:`It overlaps the archives of “{conflict}”.`,pathPage:`The page {conflict} lives there. Choose another address.`,pathCollection:`Article addresses start with {conflict}. Choose another address.`,range:`A whole number from {min} to {max}.`,collections:`Choose at least one collection.`,hasParents:`{count} terms still have a parent. Move them to the top level first.`,hasProposals:`{count} proposals are waiting. Approve, merge or reject them first.`}},termEditor:{language:`Language`,default:`default`,names:{title:`Names and synonyms`,description:`What readers see, and what people and agents may type to find it.`,name:`Name ({locale})`,nameHintDefault:`Required in the site's default language.`,nameHint:`Leave it empty to show the {locale} name.`,altNames:`Synonyms`,altNamesHint:`Other names that find this term when someone types them or an agent assigns by name. Never shown as separate terms.`},intro:{title:`Archive introduction`,description:`Markdown shown at the top of {path}, on its first page only.`,hint:`Markdown. HTML is shown as text.`},image:{title:`Image`,description:`Shown on the archive and used as its picture when the link is shared. Link to an image that is already online.`},seo:{title:`Search engines and sharing`,description:`How the archive appears in search results, in {locale}.`},indexing:{title:`Indexing`,indexed:`{path} is listed by search engines, with {count} published articles.`,thin:`{path} has {count} of the {min} published articles it needs; until then it is served with noindex, follow.`,empty:`{path} has no published articles and answers 404 until one is filed.`,noindex:`{path} is hidden from search engines in its search settings.`},preview:{statusHint:`What {path} answers with these changes: {status}. The preview always shows the page, even before it is public.`},placement:{title:`Placement`,position:`Position`,positionHint:`Lower numbers come first among siblings. Empty: sorted by name.`},history:{title:`Slug history`,description:`Earlier addresses of this archive. They stay reserved and redirect here.`,empty:`No earlier slugs`,emptyDescription:`Its address has always been {path}.`,reserved:`reserved`},details:{taxonomy:`Taxonomy`,visibility:`Visibility`,usage:`Articles`},retire:{title:`Retire this {singular}`,description:`Removes it from every article; its archive redirects or answers 410 Gone.`},retired:{title:`This term is retired`,merged:`This term was merged into {name}`,description:`It has no archive and can't be assigned. Its old addresses redirect when a redirect was set.`},errors:{nameRequired:`Enter a name in the site's default language.`,nameTooLong:`At most 200 characters.`,altTooLong:`“{value}” is longer than 200 characters.`,altDuplicate:`“{value}” is listed twice or repeats the name.`,altCollision:`“{value}” already names {other}. A synonym can't point to two terms.`,introTooLong:`At most 20,000 characters.`,position:`Use a whole number from 0 to {max}.`}},migration:{banner:{title:`Move your tags to categories and tags`,description:`Tags on this site are still plain text. Turn them into tags with names, archives and redirects, and start filing articles under categories. You see the result first, and you can undo it.`,action:`Preview the move`},dialog:{title:`Move tags to categories and tags`,description:`This is a dry run: nothing is written until you run it.`,summary:`What the move does`,tags:`Tags found`,entries:`Articles rewritten`,terms:`Tags`,termsValue:`{created} new, {reused} reused`,taxonomies:`Taxonomies created`,none:`None`,skipped:`{count} articles are skipped`,how:`Studio takes a snapshot before and after. Categories start optional on this site, so nothing is blocked, and nothing goes live until you publish.`,upToDate:`Nothing to move`,upToDateDescription:`Every article already uses tags and categories.`,run:`Run the move`},done:{title:`Tags moved`,description:`Your articles now use tags. Publish when you're ready.`,toast:`Tags moved`,toastDetail:`{tags} tags on {entries} articles, with snapshots before and after.`,undoHint:`Changed your mind? Undo restores the old tags on articles nobody has edited since.`,undo:`Undo the move`,close:`Done`},revert:{toast:`Move undone`,toastDetail:`Old tags restored on {count} articles.`}},redirects:{new:`New redirect`,search:`Search addresses`,menu:`Actions for {from}`,edit:`Edit`,filters:{reason:`Source`,all:`All sources`},reasons:{"slug-change":`Slug change`,merge:`Merge`,retire:`Retired`,manual:`Manual`},columns:{from:`Old address`,to:`Sends to`,type:`Type`,source:`Source`,updated:`Updated`},status:{301:`Permanent (301)`,"301Hint":`Search engines move the old address's standing to the new one. Use it when the move is for good.`,302:`Temporary (302)`,"302Hint":`For a short while, like a campaign; search engines keep the old address.`,short301:`301`,short302:`302`},match:{exact:`This address only`,exactHint:`Only this exact path.`,prefix:`This address and everything below it`,prefixHint:`The rest of the path is kept: /old/a goes to /new/a.`,prefixShort:`and below`},external:{badge:`External`,title:`Send visitors to another site?`,description:`Check the destination before you create the redirect.`,leave:`Visitors will leave for {host}`,warning:`Everyone who opens the old address goes to a site you don't control. Agents can never create this; only people can.`,target:`Destination`,host:`Host`,confirm:`Redirect to {host}`},externalHint:`Sends visitors to {host}, outside this site.`,dialog:{createTitle:`New redirect`,editTitle:`Edit redirect`,description:`Send visitors from an address the site no longer serves to a new one.`,from:`Old address`,fromHint:`A path on this site, like /old-page. It can't be an address the site still serves.`,fromLocked:`The old address can't change. Delete this redirect and create another instead.`,to:`Sends to`,toHint:`A path on this site (/new-page) or an https:// address.`,toExternal:`Outside this site: {host}. You confirm it in the next step.`,toPlaceholder:`/new-page or https://…`,match:`Applies to`,status:`Kind`,automatic:`Automatic redirects are always permanent (301).`,note:`Note`,noteHint:`Optional. Why it exists, for whoever looks next.`,create:`Create redirect`},errors:{fromRequired:`Enter the old address.`,fromInvalid:`Use a path that starts with /, without spaces, ? or #.`,fromTooLong:`At most 1,024 characters.`,fromTaken:`A redirect from this address already exists. Edit that one instead.`,fromServed:`The site serves this address. A redirect can't hide a page, a published article or an archive.`,toRequired:`Enter where it sends visitors.`,toInvalid:`Use a path that starts with / or an https:// address.`,toInsecure:`Use https://.`,toTooLong:`At most 2,048 characters.`,toSelf:`It can't send visitors to the same address.`,toLoop:`That would loop: the target redirects back here.`},saved:`Redirect saved`,created:`Redirect from {from} created`,deleted:`Redirect from {from} deleted`,deleteTitle:`Delete the redirect from {from}?`,deleteDescription:`After the next publish, the old address answers 404.`,deleteAutomatic:`Studio created it when an address changed. After the next publish the old address answers 404, and links to it break.`,deleteConfirm:`Delete redirect`,empty:`No redirects yet`,emptyFiltered:`No redirects from this source`,emptyDescription:`Slug changes, merges and retirements add redirects here on their own. Add your own for addresses that moved.`},roles:{yours:`Your role`,names:{owner:`Owner`,administrator:`Administrator`,editor:`Editor`,author:`Author`,contributor:`Contributor`},plural:{owner:`the Owner`,administrator:`Administrators`,editor:`Editors`,author:`Authors`,contributor:`Contributors`},summaries:{owner:`Everything, including moving ownership. There is exactly one Owner; ownership moves only by transfer.`,administrator:`Runs the deployment: team, roles, site settings and domains, everyone's agent keys. Edits and publishes anything.`,editor:`Edits and publishes anything, structures the site (pages, categories, redirects), rolls back and invites Authors and Contributors.`,author:`Writes, edits and publishes their own articles. Anything more waits for an Editor.`,contributor:`Writes drafts and submits them for review. An Editor publishes them; published work is read-only to them.`},explainer:{role:`Role`,columns:{articles:`Articles`,publish:`Publish`,structure:`Structure`,team:`Team`},levels:{all:`All`,own:`Own`,drafts:`Drafts`,none:`No`,invite:`Invite`,full:`Manage`},hints:{articles:{all:`Writes and edits every article, and can credit someone else as the author.`,own:`Writes articles and edits their own, published or not.`,drafts:`Writes drafts and edits their own until an Editor publishes them.`,none:`Can't change articles.`},publish:{all:`Publishes anything and rolls back.`,own:`Publishes when every public change is their own; anything more becomes a request.`,none:`Submits for review; someone else publishes.`},structure:{all:`Pages, categories and tags, redirects.`,none:`Reads pages, categories and redirects, but doesn't change them.`},team:{full:`Invites, changes roles, removes people, site settings and domains, everyone's agent keys.`,invite:`Invites Authors and Contributors.`,none:`Sees who is on the team.`}}}},gating:{readOnlyTitle:`You can view this`,entryNotOwn:`This article belongs to someone else. Its author and Editors and above can change it.`,entryPublished:`This article has been published. Contributors can't change published work; an Editor can.`,entryDelete:`Only its author (while your role allows it) and Editors and above can delete it.`,abilities:{entries:{create:`Only {roles} and above can write articles.`,editOwnPublished:`Only {roles} and above can publish articles. An Editor publishes yours after review.`,editAny:`Only {roles} and above can change others' articles.`},pages:{write:`Only {roles} and above can change pages.`},publish:{own:`Only {roles} and above can publish. Submit your work for review; an Editor publishes it.`,any:`Only {roles} and above can publish others' work.`},rollback:`Only {roles} and above can roll the site back.`,structure:{write:`Only {roles} and above can change categories, tags and redirects.`},assets:{upload:`Only {roles} and above can upload files.`,manage:`Only {roles} and above can manage every file.`},activity:{all:`Only {roles} and above see the whole team's activity.`},analytics:{read:`Only {roles} and above see analytics.`,settings:`Only {roles} and above can change analytics settings.`},comments:{read:`Only {roles} and above see reader comments.`,moderate:`Only {roles} and above moderate comments.`,moderateAny:`Only {roles} and above moderate comments on others' articles.`,reply:`Only {roles} and above reply to comments.`,replyAny:`Only {roles} and above reply on others' articles.`,settings:`Only {roles} and above can change comment settings.`},commenters:{data:`Only {roles} and above see commenters' emails or erase their data.`},settings:{write:`Only {roles} and above can change site settings and domains.`},members:{invite:`Only {roles} and above can invite people.`,manage:`Only {roles} and above can change roles or remove people.`},agents:{manage:`Only {roles} and above can manage others' agent keys.`},sites:{create:`Only {roles} and above can create sites.`},schedules:{read:`Only {roles} and above see the schedule.`,write:`Only {roles} and above schedule their work.`,writeAny:`Only {roles} and above change others' schedules.`,settings:`Only {roles} and above pause schedules or change their limits.`},releases:{approve:`Only {roles} and above approve releases of their own work.`,approveAny:`Only {roles} and above approve releases.`},automations:{manage:`Only {roles} and above manage automations.`},ai:{invoke:`Only {roles} and above use AI in the editor.`,settings:`Only {roles} and above change the AI settings.`},ownership:{transfer:`Only {roles} can transfer ownership.`}}},publishing:{request:`Request publish`,requestCommand:`Snapshot and request publish`,requestTitle:`Request a publish?`,requestDescription:`Your changes include work by others or changes to the site's structure, so an Editor approves the publish. Studio takes a snapshot now; the request waits in Approvals.`,sendRequest:`Send request`,requestOption:`Request a publish`,requestOptionDescription:`An Editor approves it in Approvals before it goes live.`,requested:`Publish requested`,requestedDescription:`Your changes include work that isn't yours, so an Editor must approve the publish. You'll find the request in Approvals.`,openRequest:`Open Approvals`,refused:`You can't publish`,pending:[[2,`count`,{one:[[4],` change`],other:[[4],` changes`]}]],pendingSummary:[[2,`count`,{one:[[4],` change isn't live yet`],other:[[4],` changes aren't live yet`]}],` · `,[0,`kinds`]],firstPublish:`Not published yet. The first publish puts {kinds} live.`,pendingKind:[[3,`kind`,{page:[[2,`count`,{one:[[4],` page`],other:[[4],` pages`]}]],contentEntry:[[2,`count`,{one:[[4],` article`],other:[[4],` articles`]}]],site:[`site settings`],taxonomy:[[2,`count`,{one:[[4],` taxonomy`],other:[[4],` taxonomies`]}]],term:[[2,`count`,{one:[[4],` term`],other:[[4],` terms`]}]],redirect:[[2,`count`,{one:[[4],` redirect`],other:[[4],` redirects`]}]],menu:[[2,`count`,{one:[[4],` menu`],other:[[4],` menus`]}]],asset:[[2,`count`,{one:[[4],` media file`],other:[[4],` media files`]}]],glossary:[`the glossary`],other:[[2,`count`,{one:[[4],` item`],other:[[4],` items`]}]]}]],withPending:`{action}. {summary}`,notPublished:`Not published`},liveSite:{view:`View site`,open:`Open site`,viewLive:`View live`,copyLink:`Copy link`,noDomain:`Add a domain in Settings`,notPublished:`Not published yet`,markedPublished:`Marked published`,markedPublishedDescription:`It goes live the next time the site is published.`,publishSite:`Publish site`,liveAt:`Live at`,willBeAt:`Will be at`,lastPublished:`Last published`},members:{invite:`Invite people`,search:`Search people`,you:`You`,someone:`Someone`,menu:`Actions for {name}`,tabs:{members:`Members`,activity:`Activity`},columns:{member:`Member`,role:`Role`,joined:`Joined`,actions:`Actions`},empty:`No members yet`,emptyDescription:`The first account on a Studio becomes its Owner. Invite people from here.`,noMatches:`No one matches “{query}”`,notEnabledTitle:`This server has no team`,notEnabledDescription:`Roles and invites need a Studio with accounts (cloudhal studio, or a deployed admin Worker). Without them, every signed-in person can do everything.`,changeRole:`Change role…`,resetLink:`Create password reset link…`,transferOwnership:`Transfer ownership…`,rank:{self:`You can't change your own role or remove yourself.`,owner_role:`The Owner role moves only by transferring ownership.`,target_is_owner:`The Owner can't be demoted or removed. Transfer ownership first.`,role_too_high:`Your role can't give this role.`,not_allowed:`Only Administrators and the Owner can manage members.`},roles:{title:`Roles`,description:`What each role can do. Agent keys never do more than the person who made them.`},how:{title:`How invites work`,single:`Each link works once. Whoever opens it first joins, so share it privately.`,bound:`It is bound to one email address and one role; the invitee can't change either.`,expiry:`Links expire after {default} by default. Administrator invites expire within {admin}.`,keys:`A person's agent keys never do more than their role, and narrow at once when the role goes down.`,owner:`There is one Owner. Ownership moves only to an Administrator, with the Owner's password.`},invites:{title:`Pending invites`,description:`Links that haven't been used yet. Revoke one and it stops working at once.`,empty:`No pending invites`,emptyDescription:`Invite links you create appear here until they're used, revoked or expire.`,columns:{email:`Email`,role:`Role`,expires:`Expires`,inviter:`Invited by`,actions:`Actions`},byLink:`Link`,byEmail:`Sent by email`,expired:`Expired`,incomplete:`Not completed`,incompleteHint:`The link was used, but the account wasn't created. Invite them again to send a new link.`,you:`You`,someone:`A former member`,reinvite:`Re-invite`,menu:`Actions for the invite to {email}`,revoke:`Revoke`,revokeTitle:`Revoke this invite?`,revokeDescription:`The link for {email} stops working at once. You can invite them again later.`,revoked:`Invite revoked`,revokedDescription:`The link for {email} no longer works.`},role:{title:`Change {name}'s role`,description:`Takes effect on their next click or agent call. It's recorded in the activity log.`,member:`Member`,newRole:`New role`,change:`Role change`,now:`Now`,immediate:`Applies at once`,demotionTitle:`Their agent keys narrow too`,demotion:`As {role}, their keys keep only the scopes and modes that role allows, and an elevation above it ends. A later promotion doesn't widen the keys again.`,submit:`Change role`,failed:`Couldn't change the role`,changed:`Role changed`,changedDescription:`{name} is {to} now.`,narrowedTitle:`Agent keys narrowed`,narrowedDescription:`{count} of their agent keys now do only what the new role allows.`,narrowedBanner:`Agent keys narrowed: {count}`,narrowedBannerDescription:`Each key below keeps only what the new role allows. Their agents notice on their next call.`,narrowedMode:`Mode`,narrowedScopes:`Now works with`,elevationEnded:`Its elevation ended because the new role doesn't allow it.`,done:`Done`},remove:{menu:`Remove from team…`,title:`Remove {name} from the team?`,description:`They lose access at once. This is recorded in the activity log.`,signOut:`They're signed out on every device.`,keys:`Their agent keys are disabled (kept for the record, deletable).`,keysCount:`Their agent keys are disabled: {count}.`,invites:`Invites they sent and that are still pending are cancelled.`,invitesCount:`Their pending invites are cancelled: {count}.`,requests:`Requests their agents are waiting on are denied.`,kept:`Their articles and activity stay. Inviting them again restores access.`,submit:`Remove`,failed:`Couldn't remove them`,done:`{name} was removed`,doneDescription:`Agent keys disabled: {keys} · invites cancelled: {invites} · requests denied: {requests}.`},reset:{title:`Create a password reset link?`,description:`{name} can choose a new password with it. There's no email yet, so you share the link yourself.`,once:`It works once and expires in one hour.`,signsOut:`Setting a new password signs them out everywhere.`,replaces:`A new link voids any earlier one.`,submit:`Create link`,failed:`Couldn't create the link`,revealTitle:`Copy the reset link`,revealDescription:`Send it to {name} privately, in a direct message.`,warningTitle:`You won't see this link again`,warning:`Copy it now. Anyone who opens it can set this account's password, so never post it in a shared channel.`,link:`Reset link`,expires:`Expires {relative} ({absolute}).`,done:`I've copied the link`},transfer:{title:`Transfer ownership to {name}?`,description:`The Owner can do everything, including moving ownership. There is exactly one.`,warningTitle:`You can't undo this yourself`,warning:`{name} becomes the Owner and you become an Administrator. Only {name} can give ownership back.`,to:`New Owner`,youBecome:`You become an Administrator straight away.`,keys:`Your agent keys narrow to what an Administrator may do.`,onlyThey:`Only the new Owner can transfer ownership again.`,password:`Your password`,passwordHint:`Enter it again to confirm it's you.`,passwordRequired:`Enter your password`,wrongPassword:`That password isn't right`,notAdministrator:`Ownership goes to an Administrator. Make them one first, then try again.`,needsAdministrator:`Ownership goes only to an Administrator. Change their role first.`,submit:`Transfer ownership`,failed:`Couldn't transfer ownership`,done:`Ownership transferred`,doneDescription:`{name} is the Owner now. You're an Administrator.`},activity:{empty:`No team events yet`,emptyDescription:`Invites, role changes, removals and ownership transfers appear here.`,restrictedTitle:`Team activity is for Editors and above`}},editionGuide:{title:`Another language: here or as its own site?`,hereTitle:`Add it to this site`,here:`Same pages and menus in every language, one team, one publish. Best when the languages mirror each other.`,editionTitle:`Start a language edition`,edition:`A separate site in this project that starts from this one: its own pages, menus, team roles and releases, still linked as translations. Best when a market needs its own structure or team.`,create:`Create a language edition…`},newSite:{open:`New site`,title:`New site`,description:`A site of its own in this installation: its own pages, settings, team roles and analytics. It starts with a home page; nothing is published.`,name:`Name`,nameRequired:`Give the site a name.`,slug:`Short name`,slugHint:`Lower-case letters, digits and hyphens; it identifies the site in Studio and the CLI.`,slugInvalid:`Use lower-case letters, digits and hyphens.`,language:`Language`,languageHint:`The site's default language; add more later in its language settings.`,project:`Project`,projectHint:`Projects group related sites, such as the language editions of one publication.`,newProject:`A new project`,submit:`Create site`,failed:`The site could not be created`,created:`Site created`,createdDescription:`{name} is ready to edit; nothing is published yet.`,from:`Start from`,fromHint:`A blank site starts with a home page and an About page.`,blank:`A blank site`,copyOf:`A copy of {name} (language edition)`,editionHint:`Copies that site's pages as drafts in the new language, its menus and design, linked as translations; articles and media stay. The new site joins that site's project.`,editionCreated:[[0,`name`],` starts with `,[2,`count`,{one:[[4],` page`],other:[[4],` pages`]}],` to translate; nothing is published yet.`]},projects:{title:`Project`,description:`The sites of this project side by side: languages, address, publish state and approvals waiting.`,newSite:`New site in this project`,sites:`Sites`,notFound:`No such project`,notFoundDescription:`It was removed, or none of its sites are yours to open.`,columns:{site:`Site`,languages:`Languages`,address:`Address`,status:`Status`,approvals:`Approvals`},noAddress:`No domain yet`,none:`None`,waiting:[[2,`count`,{one:[[4],` waiting`],other:[[4],` waiting`]}]],summary:{title:`At a glance`,sites:`Sites`,languages:`Languages`,live:`Live`,waiting:`Approvals waiting`}},siteAccess:{legend:`Sites`,all:`Every site`,some:`Only some sites`,roleOn:`Role on {site}`,everySite:`Owners and Administrators work on every site of this installation.`,required:`Pick at least one site.`,menu:`Sites`,title:`Sites for {name}`,description:`Choose which sites this person works on and their role on each. Changes apply at once.`,failed:`The sites could not be saved`,submit:`Save sites`,saved:`Sites saved`,savedDescription:`The sites of {name} were updated.`,count:[[2,`count`,{one:[[4],` site`],other:[[4],` sites`]}]]},invites:{create:{title:`Invite someone`,reinviteTitle:`Invite again`,description:`They get a one-time link to create their account in the role you choose.`,step:`Step 1 of 2 · Who and in which role`,email:`Email`,emailHint:`The account is created with this address; they can't change it.`,emailPlaceholder:`name@example.com`,role:`Role`,roleHint:`Only roles yours may give are listed.`,expiry:`Link expires after`,expiryHint:`Choose the shortest time that works for them.`,expiryAdmin:`Administrator invites expire within {max}.`,explainer:`What each role can do`,delivery:`How to send it`,deliveryLink:`Copy a link`,deliveryLinkHint:`You share it yourself, privately.`,deliveryEmail:`Send by email`,deliveryEmailHint:`Studio emails the link; you won't see it.`,submit:`Create invite link`,send:`Send invite`,failed:`Couldn't create the invite`},reveal:{title:`Copy the invite link`,sentTitle:`Invite sent`,description:`For {email}, as {role}. Step 2 of 2.`,warningTitle:`You won't see this link again`,warning:`Copy it now and share it privately, in a direct message, not a shared channel. Whoever opens it first joins as {role}.`,link:`Invite link`,summary:`Invite`,expires:`Expires {relative} ({absolute}).`,private:`If it reaches the wrong person, revoke it from Pending invites.`,done:`I've copied the link`,sent:`Sent to {email}`,sentDescription:`The link works once. You can revoke it from Pending invites.`},errors:{emailRequired:`Enter an email address`,emailInvalid:`Enter a valid email address, like name@example.com`,rank:`Your role can't invite someone as {role}.`,invalid_expiry:`That expiry isn't allowed for this role. Choose a shorter one.`,delivery_unavailable:`This server can't send email. Copy a link instead.`,delivery_failed:`The email couldn't be sent, so the invite was canceled. Choose Copy a link and try again.`,already_member:`{email} is already on the team.`,too_many_invites:`There are too many pending invites. Revoke some first.`,rate_limited:`You've created a lot of invites in the last hour. Try again later.`}},inviteAccept:{titleGeneric:`Join a Cloudhal Studio`,title:`Join {name}`,descriptionGeneric:`Opening your invite…`,descriptionDead:`This link doesn't work anymore.`,description:`{inviter} invited you as {role}.`,someone:`Someone`,summary:`Your invite`,as:`You'll join as`,expires:`This invite expires {relative} ({absolute}).`,emailHint:`The invite is for this address.`,nameHint:`Shown next to your changes and approvals.`,existingTitle:`You already have an account`,existing:`Enter its password to join with it.`,submit:`Accept invite`,toSignIn:`Go to sign in`,signOutFirst:`Sign out first, then accept the invite.`,welcome:`Welcome to {name}`,welcomeDescription:`You're signed in as {role}.`,missingTitle:`This link is incomplete`,missing:`Open the whole link you were sent; the part after # is missing. If it still doesn't work, ask for a new invite.`,goneTitle:`This invite can't be used`,gone:`It was used, revoked or has expired. Ask the person who invited you for a new one.`,otherSessionTitle:`You're signed in as {email}`,otherSessionTitleGeneric:`You're signed in as someone else`,otherSession:`This invite is for {email}. Sign out, then accept it.`,alreadyMemberTitle:`You're already on the team`,alreadyMember:`This account is already a member. Sign in instead.`,errors:{nameRequired:`Enter your name`,nameTooLong:`At most {max} characters`,weakPassword:`Use at least 8 characters`,wrongPassword:`That password isn't right for this account`}},resetPassword:{title:`Choose a new password`,description:`For {name}'s account.`,descriptionGeneric:`Opening your reset link…`,descriptionDead:`This link doesn't work anymore.`,expires:`This link expires {relative} ({absolute}).`,signsOut:`You'll be signed out on every device; then sign in with the new password.`,submit:`Set new password`,doneTitle:`Password changed`,doneDescription:`Sign in with your new password.`,changed:`Your password is set`,changedDescription:`You've been signed out everywhere.`,missingTitle:`This link is incomplete`,missing:`Open the whole link you were sent; the part after # is missing.`,goneTitle:`This reset link can't be used`,gone:`It was used or has expired. Ask for a new one from the sign-in page, or ask an Administrator.`},forgotPassword:{link:`Forgot password?`,title:`Reset your password`,description:`We'll email you a link to choose a new one.`,submit:`Email me a link`,sentTitle:`Check your email`,sent:`If {email} belongs to an account here, a reset link is on its way. It works once, for one hour.`,unavailableTitle:`This server can't send email`,unavailable:`Ask an Administrator of this Studio for a reset link.`,back:`Back to sign in`},passwords:{new:`New password`,confirm:`Repeat the password`,strength:`Strength: {level}`,levels:{empty:`—`,tooShort:`too short`,weak:`weak`,fair:`fair`,strong:`strong`},advice:{empty:`At least {min} characters. A few unrelated words make a strong one.`,tooShort:`At least {min} characters.`,weak:`Longer is stronger: try 12 characters or more, or a few unrelated words.`,fair:`Good. A few more characters make it strong.`,strong:`Strong password.`},errors:{required:`Enter a password`,tooShort:`Use at least {min} characters`,tooLong:`Use at most {max} characters`,confirmRequired:`Repeat the password`,mismatch:`The passwords don't match`}}},d={en:{name:`English`,dir:`ltr`,fallback:[],reviewed:!0},tr:{name:`Türkçe`,dir:`ltr`,fallback:[`en`],reviewed:!0},de:{name:`Deutsch`,dir:`ltr`,fallback:[`en`],reviewed:!1},es:{name:`Español`,dir:`ltr`,fallback:[`en`],reviewed:!1},fr:{name:`Français`,dir:`ltr`,fallback:[`en`],reviewed:!1},it:{name:`Italiano`,dir:`ltr`,fallback:[`en`],reviewed:!1},"pt-BR":{name:`Português (Brasil)`,dir:`ltr`,fallback:[`en`],reviewed:!1},nl:{name:`Nederlands`,dir:`ltr`,fallback:[`en`],reviewed:!1},pl:{name:`Polski`,dir:`ltr`,fallback:[`en`],reviewed:!1},ru:{name:`Русский`,dir:`ltr`,fallback:[`en`],reviewed:!1},uk:{name:`Українська`,dir:`ltr`,fallback:[`en`],reviewed:!1},ja:{name:`日本語`,dir:`ltr`,fallback:[`en`],reviewed:!1},ko:{name:`한국어`,dir:`ltr`,fallback:[`en`],reviewed:!1},"zh-Hans":{name:`简体中文`,dir:`ltr`,fallback:[`en`],reviewed:!1},hi:{name:`हिन्दी`,dir:`ltr`,fallback:[`en`],reviewed:!1},id:{name:`Bahasa Indonesia`,dir:`ltr`,fallback:[`en`],reviewed:!1},ar:{name:`العربية`,dir:`rtl`,fallback:[`en`],reviewed:!1,intl:`ar-u-nu-latn`},fa:{name:`فارسی`,dir:`rtl`,fallback:[`en`],reviewed:!1,intl:`fa-u-nu-latn`},he:{name:`עברית`,dir:`rtl`,fallback:[`en`],reviewed:!1}},f=Object.fromEntries(Object.entries(d).flatMap(([e,t])=>t.intl?[[e,t.intl]]:[])),p=Object.keys(d),m=Object.fromEntries(p.map(e=>[e,d[e].name])),h=e=>Object.hasOwn(d,e);function g(e){let t=[e,...d[e].fallback];return t.includes(`en`)?t:[...t,`en`]}var _=Object.assign({"./lazy/aiSettings.en.ts":()=>s(()=>import(`./aiSettings.en-C8dj9xkg.js`),[]),"./lazy/analytics.en.ts":()=>s(()=>import(`./analytics.en-BjRe9VE9.js`),[]),"./lazy/analyticsSettings.en.ts":()=>s(()=>import(`./analyticsSettings.en-Dn_QYKbo.js`),[]),"./lazy/appearance.en.ts":()=>s(()=>import(`./appearance.en-mFJuOtIH.js`),[]),"./lazy/bodyEditor.en.ts":()=>s(()=>import(`./bodyEditor.en-B8FW4NF8.js`),[]),"./lazy/build.en.ts":()=>s(()=>import(`./build.en-Byn4-h2I.js`),[]),"./lazy/comments.en.ts":()=>s(()=>import(`./comments.en-DXe1aP-J.js`),[]),"./lazy/commentsSettings.en.ts":()=>s(()=>import(`./commentsSettings.en-CjQdkMZH.js`),[]),"./lazy/media.en.ts":()=>s(()=>import(`./media.en-BT47PRGz.js`),[]),"./lazy/menus.en.ts":()=>s(()=>import(`./menus.en-CJ5d7ms0.js`),[]),"./lazy/readers.en.ts":()=>s(()=>import(`./readers.en-CbmwKSip.js`),[]),"./lazy/scheduleSettings.en.ts":()=>s(()=>import(`./scheduleSettings.en-Ke9GgFqw.js`),[]),"./lazy/schedules.en.ts":()=>s(()=>import(`./schedules.en-D7O8u4iy.js`),[])}),v=Object.assign({"./loaders/ar.ts":()=>s(()=>import(`./ar-CS6h3U7d.js`),__vite__mapDeps([0,1])),"./loaders/de.ts":()=>s(()=>import(`./de-COZWf0tz.js`),__vite__mapDeps([2,1])),"./loaders/es.ts":()=>s(()=>import(`./es-Cpr7u5Cz.js`),__vite__mapDeps([3,1])),"./loaders/fa.ts":()=>s(()=>import(`./fa-8y3tvKw6.js`),__vite__mapDeps([4,1])),"./loaders/fr.ts":()=>s(()=>import(`./fr-IvKa5dhW.js`),__vite__mapDeps([5,1])),"./loaders/he.ts":()=>s(()=>import(`./he-DG-oJz8N.js`),__vite__mapDeps([6,1])),"./loaders/hi.ts":()=>s(()=>import(`./hi-CngsNxV4.js`),__vite__mapDeps([7,1])),"./loaders/id.ts":()=>s(()=>import(`./id-CrWAlC6J.js`),__vite__mapDeps([8,1])),"./loaders/it.ts":()=>s(()=>import(`./it-BbkGji4q.js`),__vite__mapDeps([9,1])),"./loaders/ja.ts":()=>s(()=>import(`./ja-CLpIeite.js`),__vite__mapDeps([10,1])),"./loaders/ko.ts":()=>s(()=>import(`./ko-u0y0T6iL.js`),__vite__mapDeps([11,1])),"./loaders/nl.ts":()=>s(()=>import(`./nl-CraQgOQ0.js`),__vite__mapDeps([12,1])),"./loaders/pl.ts":()=>s(()=>import(`./pl-Z99ZIGWL.js`),__vite__mapDeps([13,1])),"./loaders/pt-BR.ts":()=>s(()=>import(`./pt-BR-CjvH9SeS.js`),__vite__mapDeps([14,1])),"./loaders/ru.ts":()=>s(()=>import(`./ru-CwyHst7f.js`),__vite__mapDeps([15,1])),"./loaders/tr.ts":()=>s(()=>import(`./tr-DOAJHdbH.js`),__vite__mapDeps([16,1])),"./loaders/uk.ts":()=>s(()=>import(`./uk-9ZV1-TPI.js`),__vite__mapDeps([17,1])),"./loaders/zh-Hans.ts":()=>s(()=>import(`./zh-Hans-D57DCm9K.js`),__vite__mapDeps([18,1]))}),y=`./lazy/`,b=`.en.ts`,x=Object.keys(_).map(e=>e.slice(7,-6)).sort();function S(e){return Object.hasOwn(_,`${y}${e}${b}`)}var C=new Map;function w(e){let t=C.get(e);if(!t){let n=v[`./loaders/${e}.ts`];if(!n)return Promise.resolve({});t=n().then(e=>e.loaders,t=>{throw C.delete(e),t}),C.set(e,t)}return t}async function T(e,t){return t===`en`?_[`${y}${e}${b}`]:(await w(t))[`../lazy/${e}.${t}.ts`]}var E=new Map,D=new Map,O=(e,t)=>`${e}:${t}`;function k(e,t){return E.get(O(e,t))}function A(e){return x.filter(t=>E.has(O(t,e)))}function j(e,t){let n=O(e,t);if(E.has(n))return Promise.resolve();let r=D.get(n);return r||(r=T(e,t).then(n=>{if(!n)throw Error(`no "${e}" messages for locale "${t}"`);return n()}).then(t=>{E.set(n,t.messages[e]),D.delete(n)},e=>{throw D.delete(n),e}),D.set(n,r)),r}function M(e,t){return o(V(),e,t)}r(f);var N={en:u},P=Object.assign({"./ar.ts":()=>s(()=>import(`./ar-Ck0upd5N.js`),[]),"./de.ts":()=>s(()=>import(`./de-DieJfmpi.js`),[]),"./es.ts":()=>s(()=>import(`./es-DkZBKZCu.js`),[]),"./fa.ts":()=>s(()=>import(`./fa-Olt9fYoO.js`),[]),"./fr.ts":()=>s(()=>import(`./fr-svFzcZsZ.js`),[]),"./he.ts":()=>s(()=>import(`./he-LyIguu2z.js`),[]),"./hi.ts":()=>s(()=>import(`./hi-IvPiwlEg.js`),[]),"./id.ts":()=>s(()=>import(`./id-BHpl7m2-.js`),[]),"./it.ts":()=>s(()=>import(`./it-DKqn-UZG.js`),[]),"./ja.ts":()=>s(()=>import(`./ja-Db1QTfY1.js`),[]),"./ko.ts":()=>s(()=>import(`./ko-BQPRTMy6.js`),[]),"./nl.ts":()=>s(()=>import(`./nl-CjRMh9Xq.js`),[]),"./pl.ts":()=>s(()=>import(`./pl-DEuHicDd.js`),[]),"./pt-BR.ts":()=>s(()=>import(`./pt-BR-DXBAGGZF.js`),[]),"./ru.ts":()=>s(()=>import(`./ru-C4dvq8D2.js`),[]),"./tr.ts":()=>s(()=>import(`./tr-T0Kt-Hwa.js`),[]),"./uk.ts":()=>s(()=>import(`./uk-D1IBYr0G.js`),[]),"./zh-Hans.ts":()=>s(()=>import(`./zh-Hans-BG8dPvEG.js`),[])}),F=new Map;function I(e){if(N[e])return Promise.resolve();let t=F.get(e);if(!t){let n=P[`./${e}.ts`];if(!n)return Promise.reject(Error(`no core catalog for locale "${e}"`));w(e).catch(()=>{}),t=n().then(({messages:t})=>{N[e]=t,F.delete(e)},t=>{throw F.delete(e),t}),F.set(e,t)}return t}function L(e){return N[e]!==void 0}var R=`cloudhal.studio.locale`;function z(){try{let e=localStorage.getItem(R);if(e&&h(e))return e}catch{}return`en`}var B;function V(){return B??=z(),B}function H(...e){return Object.fromEntries(e.map(e=>[e,`{${e}}`]))}function U(e,t){let n=e;for(let e of t)n=n?.[e];return typeof n==`string`||i(n)?n:void 0}function W(e,t){let n=t.split(`.`),r=n[0]??``;return S(r)?U(k(r,e),n.slice(1)):U(N[e],n)}function G(e){return d[e].dir}function K(e,t,n={}){let r;for(let n of g(e))if(r=W(n,t),r!==void 0)break;return a(e,r??t,n)}var q=(0,c.createContext)(void 0);function J({children:e,initialLocale:t}){let[n,r]=(0,c.useState)(()=>{let e=t??z();return B=e,e}),i=(0,c.useCallback)(e=>{let t=()=>{B=e,(0,c.startTransition)(()=>r(e));try{localStorage.setItem(R,e)}catch{}},i=A(n).filter(t=>!k(t,e));i.length===0&&L(e)?t():Promise.all([I(e),...i.map(t=>j(t,e))]).then(t,()=>{t()})},[n]);(0,c.useEffect)(()=>{document.documentElement.lang=n,document.documentElement.dir=G(n)},[n]),L(n)||(0,c.use)(I(n));let a=(0,c.useMemo)(()=>({locale:n,setLocale:i,t:((e,t)=>K(n,e,t))}),[n,i]);return(0,l.jsx)(q.Provider,{value:a,children:e})}function Y(e,t){let n=(0,c.useContext)(q);if(!n)throw Error(`useMessages must be used inside <I18nProvider>`);for(let r of t??[n.locale])for(let t of e)k(t,r)||(0,c.use)(j(t,r))}function X(...e){let t=(0,c.useContext)(q);if(!t)throw Error(`useI18n must be used inside <I18nProvider>`);return Y(e),t}function Z(...e){return X(...e).t}function Q(e,t,n=[V()]){return Promise.all([e,...n.flatMap(e=>t.map(t=>j(t,e)))]).then(([e])=>e)}export{M as a,X as c,Q as d,j as f,u as h,H as i,Y as l,p as m,V as n,I as o,m as p,G as r,K as s,J as t,Z as u};
|
|
7
|
-
//# sourceMappingURL=i18n-
|
|
6
|
+
…`,template:`Start from the headings`,theme:`The {theme} theme's rules`,themeHint:`Agents read these first; your rules win where they differ.`,noTheme:`The {theme} theme ships no design rules.`,warnings:`Worth a look`,saved:`Design rules saved`,failed:`Could not save the design rules`,count:`{count} of {max} characters`,agentHint:`Agents can propose changes; they wait for a person in Approvals.`},appearance:{description:`Colors, type and shapes the {theme} theme lets you change.`,none:`The {theme} theme has no design settings to change.`,publishHint:`Saved changes show on the site after the next publish.`,saved:`Appearance saved`,failed:`Could not save the appearance`},collections:{description:`Where each collection's entries live on the site. Changing a prefix moves the address of every entry in that collection; old addresses keep working through a permanent redirect. Leave a field empty for the default, the collection's own name. New addresses go live with the next publish.`,preview:`Entries live at addresses like {url}`,previewMoved:`Entries will live at addresses like {url}. The old address {old} redirects there.`,exampleSlug:`my-article`,empty:`No collections yet`,emptyDescription:`Collections appear here once the site has articles or other entries.`,saved:`Collections saved`,failed:`Couldn't save the collections`,errors:{slash:`Start with a slash, like /blog`,trailingSlash:`Leave out the slash at the end`,invalid:`Use lower-case letters, digits and hyphens between slashes, like /blog or /docs/guides`}},conflictTitle:`This site changed somewhere else`,conflictDescription:`A person or an agent saved this site after you opened it. Load the latest version, check your change and save again.`,loadLatest:`Load latest`,general:{description:`The basics agents and themes see for this site.`,name:`Site name`,nameHint:`Shown in Studio and available to the theme.`,slug:`Slug`,slugHint:`Identifies the site in the CLI and the API. It can't be changed.`,siteId:`Site ID`,defaultLocale:`Default language`,defaultLocaleHint:`Used for new pages and articles that don't name a language.`,locales:`Languages`,localesHint:`The languages this site publishes in.`,saved:`Settings saved`,failed:`Couldn't save the settings`,errors:{required:`Give the site a name`,tooLong:`Use at most {max} characters`}},domains:{description:`Hostnames that serve this site. The primary domain is used for preview links.`,dnsHint:`Adding a domain here records it on the site. Point its DNS at your deployment separately.`,columns:{hostname:`Hostname`,role:`Role`},primary:`Primary`,alias:`Alias`,add:`Add domain`,hostname:`Hostname`,placeholder:`www.example.com`,makePrimary:`Make primary`,remove:`Remove domain`,visit:`Visit`,empty:`No domains yet`,emptyDescription:`Add the hostname visitors use. Until then, preview links come as a token without a URL.`,added:`Domain added`,addedDescription:`{hostname} now serves this site.`,addedPrimaryDescription:`{hostname} is the primary domain.`,removed:`Domain removed`,primaryChanged:`Primary domain changed`,primaryChangedDescription:`{hostname} is now the primary domain.`,removeTitle:`Remove {hostname}?`,removeDescription:`The site stops listing this hostname. Its DNS isn't changed.`,removePrimaryDetail:`{next} becomes the primary domain.`,removeLastDetail:`The site will have no domain, so preview links won't include a URL.`,failed:`Couldn't update the domains`,errors:{required:`Enter a hostname`,invalid:`Use a hostname like blog.example.com: letters, digits and hyphens, no port`,tooLong:`Hostnames are at most 253 characters`,duplicate:`This site already has that domain`}},previews:{description:`Signed links that let someone without a Studio account see drafts or an earlier snapshot on the deployed site.`,target:`Show`,targets:{live:`Current drafts`,snapshot:`A snapshot`},targetHints:{live:`Everything saved in Studio, published or not.`,snapshot:`Exactly what the site looked like at that snapshot.`},snapshot:`Snapshot`,snapshotPlaceholder:`Choose a snapshot`,noSnapshots:`This site has no snapshots yet.`,snapshotRequired:`Choose a snapshot`,live:`live`,path:`Page`,pathHint:`Leave empty for the home page.`,pathPlaceholder:`blog/hello`,pathInvalid:`Use a path like /blog/hello, not a full URL`,ttl:`Expires after`,ttls:{"1h":`1 hour`,"1d":`1 day`,"7d":`7 days`},create:`Create link`,created:`Preview link created`,result:`Preview link`,expires:`Expires {when}`,opens:`Opens {path}`,showing:{live:`Drafts`,snapshot:`Snapshot`},openLink:`Open link`,token:`Token`,noDomainTitle:`This site has no domain, so there's no full URL`,noDomainDescription:`Add a domain above, or append ?cloudhal-preview= and this token to the deployed site's address.`,revokeHint:`Links can't be revoked one by one; they stop working when they expire. Rotating the preview secret ends every link at once.`,notEnabledTitle:`Preview links aren't enabled on this server`,notEnabledDescription:`Set the CLOUDHAL_PREVIEW_SECRET secret on the admin Worker to sign links. cloudhal studio on your machine shows drafts in the editor preview instead.`,failed:`Couldn't create the link`}},skills:{description:`Playbooks agents read over MCP. A call made under a skill can only use the scopes it declares, and the tools it lists always wait for a person.`,search:`Search skills`,columns:{skill:`Skill`,scopes:`Scopes`,approval:`Needs approval`,references:`References`},none:`None`,referenceCount:[[2,`count`,{one:[[4],` file`],other:[[4],` files`]}]],empty:`No skills loaded`,emptyDescription:`Add a folder with a SKILL.md under skills/ in your project, then restart Studio.`,noMatches:`No skills match “{query}”`,notEnabledTitle:`This server doesn't run MCP`,notEnabledDescription:`Skills reach agents over MCP. Start Studio with cloudhal studio, or deploy the admin Worker, to serve them.`,view:`Show details`,detail:{scopes:`Scopes`,scopesHint:`Calls under this skill can use at most these, and never more than the key has.`,approval:`Always approved by a person`,approvalHint:`Under this skill these tools pause for a human, whatever the key allows.`,noApproval:`No extra approvals beyond the tools that always need one.`,requires:`Requires`,references:`Reference files`,noReferences:`No reference files.`,resource:`MCP resource`,call:`Call a tool under this skill`},how:{title:`How agents use skills`,steps:{read:`The agent lists the skill:// resources and reads the SKILL.md that fits the task.`,declare:`Each tool call names the skill in its request metadata:`,narrow:`Policy limits that call to the skill's scopes, and never beyond the key's own scopes.`,approve:`Tools the skill lists for approval pause until a person says yes.`},example:`A tool call under a skill`},add:{title:`Add your own`,description:`Studio loads skills from the skills/ folder of your project. Without one, it serves the official set.`}},notifications:{title:`Notifications`,bellCount:`Notifications ({count})`,empty:`You're all caught up`,emptyDescription:`When an elevation is about to end or an agent asks for one, it shows up here.`,settings:`Notification settings`,openAgents:`Open Agents`,openTeam:`Open Team`,memberJoined:{title:`{name} joined`,body:`accepted your invite.`,toast:`They accepted your invite and work as {role} now.`},roleChanged:{title:`Your role is now {role}`,body:`{name} changed it. What you and your agents can do changed with it.`},ending:{title:`Elevation ending soon`,sentence:`{name}'s {mode} mode ends in {left} ({time}), then back to {from}.`},request:{title:`{agent} asks for {mode} · {duration}`,reason:`“{reason}”`,review:`Review`},comments:{pending:{title:[[2,`count`,{one:[[4],` comment waits for moderation`],other:[[4],` comments wait for moderation`]}]],body:`The oldest has waited {age}.`,bodyNew:`Nobody sees them until someone approves them.`},reported:{title:[[2,`count`,{one:[[4],` comment was reported`],other:[[4],` comments were reported`]}]],body:`Readers flagged them. A report never hides anything by itself.`},paused:{title:`Comments are paused for today`,body:`The daily limit ({cap}) was reached. New comments are refused until midnight UTC.`},purgeWaiting:{title:`A hidden comment may still be on the live page`,body:`{count} pages wait for the cache to refresh.`,purge:`Purge site cache`,purged:`The site's cache was purged`,failed:`Couldn't purge the cache`},approval:{title:`{agent} asks about comments`,tools:{moderate:`It asks to approve or restore comments. They become public once you approve.`,reply:`It drafted a reply that would be published under your name.`,thread:`It asks to open comments on an article again.`,label:`It asks to label comments.`}},review:`Review`,open:`Open comments`,settings:`Comment settings`},toast:{endingTitle:`{name}'s {mode} mode ends in {left}`,endingBody:`At {time} it goes back to {from}. Extend it if the agent still needs it.`},extend:{button:`Extend {duration}`,group:`Extend the elevation`,more:`Other durations`,fromNow:`Counts from now`,presets:{30:`30 min`,60:`1 hour`,240:`4 hours`},presetUntil:`{duration} · until {time}`,done:`Elevation extended`,failed:`Couldn't extend the elevation`,gone:`This elevation has already ended`,goneDescription:`Nothing was extended. To elevate the key again, use Elevate temporarily on the Agents page.`}},approvals:{refresh:`Refresh approvals`,pending:`Waiting for you`,pendingDescription:`Approving lets the agent make that exact call once, or grants the elevation it asked for. Denying tells the agent.`,history:`History`,noPending:`Nothing is waiting for you`,noPendingDescription:`When an agent asks to publish, roll back or delete, asks for a more autonomous mode for a while, or works in Manual mode and wants to change anything, its request appears here and the agent waits for your decision.`,elevation:{badge:`Elevation request`,sentence:`{agent} asks to work in {mode} mode for {duration}.`,history:`Elevation to {mode} · {duration}`,historyShortened:`Elevation to {mode} · {duration} (asked {asked})`,reasonLabel:`The agent's reason`,noReason:`The agent gave no reason.`,untilIfNow:`If you approve now: until {time}`,hint:`Approving grants it on the agent's key for the time you choose, then the key returns to its own mode by itself. Nothing on the site changes.`,granted:`Granted`,cannotTake:`{agent}'s key now works in {own} mode on its own, so there is nothing to grant. Deny the request to let the agent know.`,title:`Grant {mode} mode to {agent}?`,description:`{agent} asked for this. You can shorten the time, not extend it.`,mode:`Mode`,modeFixed:`As requested. To grant another mode, deny this request and elevate the key from Agents.`,presetHours:`{count} hr`,presetMinutes:`{count} min`,requested:`Requested: {duration}. Shorter is fine, longer isn't possible.`,summary:`{agent} works in {mode} mode until {time}, then back to {from}.`,summaryNoOwn:`{agent} works in {mode} mode until {time}, then back to its own mode.`,nextCall:`Applies on the agent's next call. You can end it early from Agents.`,submit:`Grant elevation`,failed:`Couldn't grant the elevation`,stillPending:`The request stays in the list while it is pending. You can deny it, or grant it once the key can take it.`,done:`Elevation granted`,doneDescription:`{agent} works in {mode} mode until {time}, then back to {from}.`,doneDescriptionNoOwn:`{agent} works in {mode} mode until {time}.`,asksFor:`Asks for {mode}`,asksForTooltip:`{agent} asks to work in {mode} mode for {duration}. Open Approvals to decide.`},manualPrompt:`{agent} works in Manual mode, so this change waits for you: {tool}.`,manualPromptShort:`Manual mode: {tool}`,bodyChanges:`What approving changes in “{title}”`,manualHint:`Manual mode asks before every change. Approving lets the agent make this one edit with exactly these arguments; it is snapshotted like any other.`,autoHeldBack:`Auto mode publishes small article updates on its own. This one waits for you because {reason}.`,autoCheck:{"removes-content":`it removes content`,nothing:`there is nothing new to publish`,structure:`it changes pages, menus, site settings, taxonomies or redirects`,"too-many":`it carries {changes} changes and auto mode stops at {limit}`,media:`it adds or changes media that is not part of an article change`,"outside-window":`it would run after the agent's autonomy ends`,correction:`it adds a correction to a published article`},noHistory:`No decisions yet`,noHistoryDescription:`Approved, denied, used and expired requests are listed here.`,requested:`Requested`,expires:`Expires`,expiresSoon:`Expires soon`,arguments:`Arguments`,noArguments:`This call has no arguments.`,approve:`Approve`,deny:`Deny`,withdraw:`Withdraw`,withdrawn:`Request withdrawn`,decide:{own_request:`You can't approve your own request. Someone whose role allows it decides.`,not_key_creator:`Only the person who created this agent's key can grant it more autonomy.`,mode_above_role:`Your role allows agent keys up to {mode} mode, so you can't grant this.`,missing_scope:`Your role can't make this change, so you can't approve it.`,not_own:`This includes work that isn't yours. An Editor or above decides it.`},role:{waiting:`Waiting for an Editor`,yours:`You asked for this. You can withdraw it.`,prompt:`{name} wants to publish the site.`,foreign:`It includes {count} published article(s) by someone else, and their role publishes only their own work.`,structure:`It changes pages, categories, tags or redirects, which their role can't publish alone.`,generic:`Their role can't publish this change set alone.`,published:`Approved and published`,publishedDescription:`{name}'s request is live now.`,stateChanged:`The site changed after this request`,stateChangedDescription:`The request was closed because it no longer matches the site. Publish the current state yourself.`},approved:`Request approved`,approvedDescription:`{agent} can now make this call once.`,denied:`Request denied`,deniedDescription:`{agent} will be told the request was denied.`,failed:`Couldn't record your decision`,noLongerPending:`This request is no longer pending`,noLongerPendingDescription:`It was decided, used or expired in the meantime. The list has been refreshed.`,statuses:{pending:`Pending`,approved:`Approved`,denied:`Denied`,consumed:`Used`,expired:`Expired`},columns:{request:`Request`,status:`Status`,agent:`Requested by`,requested:`Requested`,decided:`Decided`},decidedBy:`by {actor}`,decidedByYou:`by you`,notEnabledTitle:`This server doesn't keep approvals`,notEnabledDescription:`Agents' publish and rollback requests are confirmed in their MCP client here. Approvals in Studio need cloudhal studio or the admin Worker.`,confirm:{title:`Approve “{tool}”?`,requestedBy:`Requested by {agent}`,singleUseTitle:`Single use, for the site as it is now`,singleUse:`{agent} may make this exact call once. If anything on the site changes before the agent calls again, the approval is void and it has to ask again.`,changes:`Approximate changes`,changesHint:`The live version compared with the newest snapshot. Edits saved after that snapshot are published too, but aren't counted here.`,viewChanges:`View changes`,first:`Nothing is live yet: this publish makes the site public for the first time.`,upToDate:`The newest snapshot is already live, so only edits saved since then would be published.`,rollbackTarget:`Live site goes back to`,deleteTarget:`Deletes`,submit:`Approve`},banner:{title:[[2,`count`,{one:[`An agent request is waiting for your approval`],other:[[4],` agent requests are waiting for your approval`]}]],description:`Agents can't publish, roll back or delete, and agents in Manual mode can't change anything, until a person decides.`,action:`Review requests`}},tools:{list_assets:`List media`,get_asset:`Get media file`,upload_asset:`Upload media`,fetch_asset_url:`Add media from a URL`,update_asset:`Update media details`,retire_asset:`Retire media`,restore_asset:`Restore media`,delete_asset:`Delete media`,assetUpload:`Upload file`,assetUpdate:`Update file details`,assetRetire:`Retire file`,assetRestore:`Restore file`,assetDelete:`Delete file`,assetPurge:`Take down file`,assetLiftPurge:`Allow file again`,list_sites:`List sites`,get_site:`Get site`,list_pages:`List pages`,get_page:`Get page`,create_page:`Create page`,update_page:`Update page`,delete_page:`Delete page`,list_entries:`List articles`,get_entry:`Get article`,create_entry:`Create article`,update_entry:`Update article`,add_correction:`Add correction`,delete_entry:`Delete article`,get_theme_settings:`Read design settings`,set_theme_settings:`Change design settings`,list_block_types:`List block types`,get_body:`Read body`,edit_body:`Edit body`,diff_node:`Compare versions`,create_snapshot:`Create snapshot`,list_snapshots:`List snapshots`,diff_snapshots:`Compare snapshots`,preview_page:`Preview page`,publish:`Publish site`,rollback:`Roll back site`,list_menus:`List menus`,get_menu:`Get menu`,update_menu:`Update menu`,set_menu:`Replace menu`,delete_menu:`Delete menu`,request_elevation:`Request elevation`,list_comments:`List comments`,get_comment_thread:`Read comment thread`,comments_summary:`Summarise comments`,label_comments:`Label comments`,moderate_comments:`Moderate comments`,draft_comment_reply:`Draft comment reply`,set_comment_thread:`Change comment thread`,list_schedule:`List the schedule`,get_schedule:`Get a scheduled item`,list_releases:`List releases`,get_release:`Get release`,propose_release:`Propose a release`,schedule_release:`Schedule a release`,reschedule:`Move a release`,cancel_schedule:`Cancel a release`,set_embargo:`Set an embargo`,lift_embargo:`Lift an embargo`,schedule_unpublish:`Schedule an expiry`,list_automations:`List automations`,list_runs:`List runs`,get_run:`Get run`,begin_run:`Begin a run`,end_run:`End a run`,pause_automation:`Pause an automation`,get_mode:`Get mode`,agentKeyMode:`Change agent key mode`,agentKeyElevate:`Elevate agent key`,agentKeyElevationEnd:`End elevation`,agentKeyNarrow:`Narrow agent key`,agentKeyRevoke:`Revoke agent key`,memberInvite:`Invite member`,memberInviteRevoke:`Revoke invite`,memberInviteFailed:`Invite email failed`,memberInviteAccept:`Accept invite`,memberRole:`Change member role`,memberRemove:`Remove member`,memberTransferOwnership:`Transfer ownership`,memberPasswordReset:`Create password reset link`,memberPasswordResetComplete:`Reset password`},preview:{title:`Preview`,frameTitle:`Preview of {name}`,device:`Device width`,desktop:`Desktop`,tablet:`Tablet`,mobile:`Mobile`,reload:`Reload preview`,openInNewTab:`Open preview in a new tab`,loading:`Loading preview…`,unsaved:`Unsaved changes`,unsavedHint:`The preview shows the last saved version. Save to update it.`,edit:`Edit`,show:`Show preview`,hide:`Hide preview`,toggleHint:`Show the last saved version next to the form`,toggleHintLive:`Show the page with your unsaved changes next to the form`,openSaved:`Open the saved version in a new tab`,failed:`Preview unavailable`},proposals:{title:`Suggestions`,count:`{count} open`,from:`{name} suggests`,outOfDate:`Out of date`,outOfDateHint:`The text changed since this suggestion. Reject it, or ask for a new one.`,accept:`Accept`,reject:`Reject`,saveFirst:`Save or discard your changes first.`,accepted:`Suggestion accepted`,rejected:`Suggestion rejected`,failed:`Could not decide on the suggestion`,steps:`Changes to accept`,acceptSome:`Accept {count} of {total}`,chooseRequired:`Choose at least one change.`,step:{replace:`Rewrite “{before}”`,replaceText:`Change “{before}” to “{after}”`,insert:`Add “{after}”`,move:`Move “{before}”`,delete:`Remove “{before}”`},aBlock:`a block`},coverage:{scope:`Which sites`,thisSite:`This site`,allSites:`All sites in the project`,siteLanguage:`{site} · {language}`,search:`Search by title`,filter:`Show`,needsWork:`Needs work`,all:`Everything`,item:`Page or article`,page:`Page`,article:`Article`,missing:`Missing`,toReview:`To review`,oneLanguage:`This site has one language`,oneLanguageDescription:`Add languages in the site's settings; translations show here.`,openSettings:`Open language settings`,allDone:`Nothing needs work`,empty:`Nothing here yet`,emptyDescription:`Every language has an up-to-date, reviewed version.`},languages:{title:`Languages`,description:`The languages this site publishes in and how readers reach them. A page or article in another language is a translation of the original.`,language:`Language`,tag:`Tag`,default:`Default`,remove:`Remove {language}`,add:`Add a language`,addHint:`Pick from the list, or type any BCP 47 tag such as gsw or pt-AO.`,addPlaceholder:`Search languages`,useTag:`Use the tag {tag}`,noMatch:`No language matches. Type a BCP 47 tag to use it.`,clear:`Clear`,showOptions:`Show languages`,routing:`Addresses`,routingHint:`Where each language lives. Other languages always have a prefix.`,routingOptions:{prefixExceptDefault:`The default language at the root, others under their prefix`,prefixAll:`Every language under its prefix`},fallback:`Missing translations`,fallbackHint:`What readers get at an address the language has no version for.`,fallbackOptions:{none:`Not found`,defaultWithNotice:`The original, with a notice, kept out of search engines`},review:`Review before publishing`,reviewHint:`Machine translations of these go live only after a person reviews them.`,reviewOptions:{pages:`Pages`,posts:`Articles`},label:`Machine-translation notice`,labelHint:`When readers see that a page was translated automatically.`,labelOptions:{unreviewed:`Until a person reviews the translation`,always:`Always, also after a review`},saved:`Languages saved`,failed:`Couldn't save the languages`},glossary:{title:`Glossary`,description:`Terms agents keep when they translate: names that are never translated, and the approved word in each language.`,empty:`No terms yet`,emptyDescription:`Add brand and product names, and words with a fixed translation.`,oneLanguage:`Add a second language first: the glossary holds words for the site's other languages.`,term:`Term`,neverTranslate:`Never translate`,translationIn:`In {language}`,add:`Add term`,remove:`Remove {term}`,saved:`Glossary saved`,failed:`Couldn't save the glossary`},translations:{title:`Translations`,none:`Only in {language}`,noneDescription:`Agents translate pages and articles into the site's other languages; every version shows here.`,current:`This version`,method:{original:`Original`,human:`Translated by a person`,machine:`Machine translation`,machineReviewed:`Machine translation, reviewed`},stale:`Out of date`,sourceMissing:`Original removed`,review:`Mark as reviewed`,reviewTitle:`Mark this translation as reviewed?`,reviewDescription:`You confirm that a person read this machine translation against the original. Readers stop seeing the machine-translation notice, unless the site always shows it.`,reviewSaveFirst:`Save your changes before you review.`},translationList:{column:`Languages`,filter:`Language`,grouped:`All languages (grouped)`,state:[[0,`language`],`: `,[3,`state`,{published:[`published`],draft:[`draft`],outdated:[`out of date`],review:[`needs review`],missing:[`missing`],other:[`missing`]}]],summary:[[1,`count`],`/`,[1,`total`]],summaryLabel:[[1,`count`],` of `,[2,`total`,{one:[[4],` language`],other:[[4],` languages`]}]],writeByHand:`Write by hand`},diff:{title:`Changes in {name}`,against:`Compare with`,previous:`Previous snapshot`,live:`Live version`,descriptions:{previous:`What changed since the snapshot before it.`,live:`What would change if this snapshot replaced the live version.`},added:`Added`,changed:`Changed`,removed:`Removed`,counts:{added:`{count} added`,changed:`{count} changed`,removed:`{count} removed`},none:`No differences`,noneDescription:`Both snapshots contain exactly the same content.`,nothingToCompare:`Nothing to compare with`,nothingToCompareDescription:`This is the site's first snapshot and no other version is live, so there is nothing to compare it with yet.`,kinds:{site:`Site settings`,page:`Page`,contentEntry:`Article`,taxonomy:`Taxonomy`,term:`Term`,redirect:`Redirect`,menu:`Menu`,asset:`Media`,glossary:`Glossary`},gone:`No longer exists`,revs:`rev {from} → {to}`,rev:`rev {rev}`,columns:{item:`Item`,revision:`Revision`},textChanges:{show:`Show changes`,hide:`Hide changes`,loading:`Loading both versions…`,body:`Body`,title:`Title`,summary:`Summary`,slug:`Slug`,path:`Path`,section:`{kind} section`,sectionAdded:`Added`,sectionRemoved:`Removed`,sectionChanged:`Changed`,noTextChanges:`Only settings changed; the text is the same.`,added:`Added`,removed:`Removed`,edited:`Edited`,unchanged:[[2,`count`,{one:[[4],` unchanged block`],other:[[4],` unchanged blocks`]}]],wordsAdded:`+{count} words`,wordsRemoved:`−{count} words`,same:`No text changes`},assignments:{added:`+ {taxonomy} {name}`,removed:`− {taxonomy} {name}`,primary:`Primary {taxonomy} → {name}`,none:`none`}},taxonomy:{newTerm:`New {singular}`,search:`Search {plural}`,columns:{name:`Name`,usage:`Articles`,lastUsed:`Last used`,index:`Search engines`,visibility:`Visibility`},filters:{all:`All`,public:`Public`,internal:`Internal`,proposed:`Proposed`,retired:`Retired`},state:{proposed:`Proposed`,proposedHint:`An agent proposed it. It can be assigned, but it has no public page until someone approves it.`,internal:`Internal`,internalHint:`No archive, feed or sitemap entry, and articles don't show it. Themes and filters can still use it.`,retired:`Retired`,mergedInto:`Merged into {name}`},visibility:{public:`Public`,internal:`Internal`,none:`—`},defaults:{category:{singular:`Category`,plural:`Categories`},tag:{singular:`Tag`,plural:`Tags`}},usage:{value:`{published} / {total}`,hint:`{published} published of {total} articles. Opens them in Articles.`,none:`None`},index:{indexed:`Indexed`,indexedHint:`{count} published articles: the archive is listed in search results and in the sitemap.`,thin:`Not indexed: {count} of {min}`,thinHint:`Archives with fewer than {min} published articles are served with noindex, follow and left out of the sitemap.`,empty:`Empty`,emptyHint:`No published articles: the archive answers 404 until one is filed here.`,noindex:`noindex`,noindexHint:`Hidden from search engines in its search settings.`,none:{internal:`No archive`,proposed:`Not public yet`,retired:`Retired`,archiveOff:`Archives off`},noneHint:{internal:`Internal terms have no public archive.`,proposed:`Proposed terms have no public archive until someone approves them.`,retired:`Retired terms have no archive; old links redirect or answer 410 Gone.`,archiveOff:`This taxonomy publishes no archive pages.`}},menu:{label:`Term actions`,edit:`Edit`,view:`View`,rename:`Rename slug`,merge:`Merge into…`,mergeExisting:`Merge into an existing term…`,move:`Move…`,makeInternal:`Make internal`,makePublic:`Make public`,retire:`Retire`},review:{waiting:`Proposals waiting for review: {count}`,waitingDescription:`Agents proposed these {plural}. Approve one to give it a public page, merge it into an existing one, or reject it.`,open:`Review`,approve:`Approve`,approved:`{name} approved`,failed:`Couldn't approve`,reject:`Reject`,merge:`Merge…`,rejectNamed:`Reject {name}`,proposedBy:`Proposed by`},empty:{all:`No {plural} yet`,public:`No public {plural}`,internal:`No internal {plural}`,proposed:`Nothing waiting for review`,retired:`No retired {plural}`,search:`Nothing matches your search`,allDescription:`Create the first one, or let agents propose tags as they write.`,filteredDescription:`Try another filter or search.`,noTaxonomies:`No categories or tags yet`,noTaxonomiesDescription:`This site still keeps tags as plain text on each article. Move them to categories and tags; you see what changes before anything is written.`},create:{title:`New {singular}`,description:`Give it a name. Synonyms, an introduction, an image and search settings can follow in its editor.`,descriptionTree:`Give it a name and, if it belongs under another category, a parent. The rest can follow in its editor.`,name:`Name ({locale})`,slugHint:`The address of its archive. It follows the name until you change it.`,parentHint:`Leave it at the top level, or file it under another category.`,internal:`Internal`,internalHint:`Internal terms get no public page; themes and filters can still use them.`,similarTitle:`This looks like an existing term`,similar:`Similar: {names}. Use that one if it means the same.`,submit:`Create {singular}`,created:`{name} created`},health:{title:`Vocabulary health`,description:`The same report agents read before they tag. Keep one page per topic so readers and search engines find it.`,issues:`{count} to review`,clean:`Nothing to tidy up`,cleanDescription:`No near-duplicates, single-use or empty terms right now.`,nearDuplicates:`Near-duplicates ({count})`,nearDuplicatesHint:`Probably the same topic. Merging keeps the busier one and redirects the other.`,mergeInto:`{source} → {target}`,merge:`Merge`,morePairs:`{count} more pairs`,reasons:{similar:`Spelled almost the same`,plural:`Singular and plural`,synonym:`One's synonym is the other's name`},proposed:`Waiting for review ({count})`,review:`Review`,missingPrimary:`Articles without a primary {singular} ({count})`,missingPrimaryHint:`They can't go to review or be published until one is chosen.`,unfiled:`Articles without a {singular} ({count})`,unfiledHint:`File them so they appear in an archive and in breadcrumbs.`,noIntro:`Indexed archives without an intro ({count})`,noIntroHint:`a short intro helps readers and search engines`,singleUse:`Used once ({count})`,unused:`Not on any article ({count})`,unusedHint:`retire them or file articles under them`,empty:`Empty categories ({count})`,emptyHint:`their archives answer 404 until an article is filed`,oversized:`Very large categories ({count})`,oversizedHint:`over half of all articles; sub-categories would help`,more:[[1,`count`],` more`]},rules:{title:`How {plural} work`,description:`The rules of this taxonomy. Agents see the same ones.`,structure:`Structure`,tree:`Tree`,flat:`Flat list`,treeHint:`A term can sit under a parent, up to 5 levels deep.`,flatHint:`Terms have no parent.`,newTerms:`New terms`,newTermsValue:{none:`People only`,propose:`Agents propose`,free:`Agents add`},newTermsHint:{none:`Only people create them; agents choose from the existing ones.`,propose:`Agents propose new ones, which get a public page once someone approves.`,free:`Agents may add active terms directly.`},perArticle:`Per article`,required:`Required · up to {max}`,optional:`Optional · up to {max}`,requiredHint:`An article needs one, with a primary, to be reviewed or published.`,optionalHint:`Articles may have none.`,archive:`Archives`,archiveHint:`Indexed from {min} published articles; thinner archives are noindex.`,archiveOff:`No archive pages are published.`}},governance:{oneSnapshot:`One change, one snapshot. It goes live with the next publish.`,conflict:`This term changed somewhere else in the meantime. Close the dialog and try again on the latest version.`,rename:{title:`Rename the slug of {name}`,description:`The archive moves to the new address. The old one keeps working through a permanent redirect, and the old slug stays reserved.`,slug:`New slug`,slugHint:`Lower-case letters, digits and single hyphens.`,reclaim:`Reclaim it: free this slug from the earlier term and drop its redirect`,history:`Earlier slugs: {slugs}`,confirm:`Rename`,errors:{required:`Enter a slug.`,invalid:`Use lower-case letters, digits and single hyphens.`,tooLong:`At most 128 characters.`,taken:`Another term uses this slug.`,reserved:`A term used this slug before and its old address redirects. Reclaim it below to use it here.`}},merge:{title:`Merge {name} into…`,description:`Its articles move to the term you choose, which also takes over its names and slugs, so old links and synonyms keep working.`,target:`Merge into`,targetHint:`An active term of the same taxonomy.`,targetPlaceholder:`Search terms…`,confirm:`Merge`},reviewMerge:{title:`Merge the proposal {name} into…`,description:`The proposal is retired and its articles move to the existing term, which keeps its name as a synonym.`,confirm:`Merge`},retire:{title:`Retire {name}`,description:`It is removed from every article and can't be assigned again. Its archive can redirect to another term.`,redirectTo:`Redirect to…`,redirectToHint:`Without a redirect, its archive answers 410 Gone, so search engines drop it for good.`,redirectToParentHint:`Without a choice, the archive redirects to its parent category when that one is public.`,noRedirect:`No redirect`,redirectPlaceholder:`Search terms…`,confirm:`Retire`},move:{title:`Move {name}`,description:`Choose its new parent. Articles and addresses stay as they are; menus, breadcrumbs and the parent's archive change.`,parent:`Parent`,parentHint:`Up to {max} levels deep. A category can't move under itself or below it.`,parentPlaceholder:`Search categories…`,topLevel:`Top level`,confirm:`Move`},visibility:{title:{internal:`Make {name} internal`,public:`Make {name} public`},description:{internal:`Its archive, feed and sitemap entry go away and articles stop showing it. Themes and filters can still use it.`,public:`It gets a public archive, a feed and a sitemap entry, and articles show it.`},confirm:{internal:`Make internal`,public:`Make public`}},reject:{title:`Reject the proposal {name}`,description:`The proposal is retired and removed from the articles that carry it. The agent sees it was rejected.`,confirm:`Reject`},preview:{waiting:`Make a choice to see what changes.`,loading:`Working out what changes`,articles:`Articles`,noArticles:`No article carries it.`,articlesMove:`These articles change in the same operation. One change can touch up to {limit} articles.`,articlesLose:`These articles lose it in the same operation. One change can touch up to {limit} articles.`,articlesKeep:`These articles keep it; their links follow the new address.`,more:`and {count} more`,redirects:`Redirects`,noRedirects:`No redirect is created.`,permanent:`301 permanent`,prefix:`Pages and feeds below the old address follow too.`,repointed:`{count} existing redirects to the old address now point to the new one.`},tooLarge:{title:`Too large for one change`,description:`This would change {count} articles; one change can touch at most {limit}. Split it into smaller steps, or ask for the staged job.`},blocked:{title:`{count} published or in-review articles would lose their only category`,description:`They need a category. Merge this term into another one instead, or file those articles elsewhere first.`},gone:{title:`Its archive will answer 410 Gone`,description:`{path} gets no redirect, so search engines drop it for good. Choose a term above to send visitors there instead.`},hidden:{title:`Its archive stops being public`,description:`{path} answers 404 after the next publish.`},appears:{title:`Its archive becomes public`,description:`{path} goes live with the next publish.`},done:{rename:`{name} renamed`,merge:`{name} merged`,reviewMerge:`{name} merged`,retire:`{name} retired`,reject:`{name} rejected`,move:`{name} moved`,visibility:`Visibility of {name} changed`,detail:`Articles changed: {entries}. Redirects: {redirects}. One snapshot; live with the next publish.`}},taxonomySettings:{titleNew:`New taxonomy`,titleEdit:`{Singular} settings`,descriptionNew:`Group articles another way besides categories and tags, such as a series or a region. Agents read its rules before they file articles.`,descriptionEdit:`The rules people and agents follow for {plural}.`,open:`{Singular} settings`,newTaxonomy:`New taxonomy`,edit:`Edit`,exampleSlug:`summer-2026`,sections:{name:`Name`,terms:`Terms`,termsHint:`Agents always reuse an existing term first. These rules decide what they may do when none fits.`,articles:`On articles`,archive:`Archive pages`},key:`Key`,keyHint:`Used in filters and by agents (series:summer-2026). Lower-case letters, digits and hyphens. It can't be changed later.`,keyFixed:`Keys never change: articles, filters and agents refer to it.`,singular:`Singular ({locale})`,plural:`Plural ({locale})`,singularPlaceholder:`Region`,pluralPlaceholder:`Regions`,labelsHint:`What Studio, the site and agents call it, e.g. Region and Regions.`,labelsOptional:`Optional. Leave both empty to use the {locale} names.`,hierarchical:`Terms can have a parent`,hierarchicalHint:`A tree up to 5 levels deep, like categories; an archive also lists its sub-terms' articles. Off: a flat list, like tags.`,newTerms:`Who adds new terms`,newTermsOptions:{none:`People only`,propose:`Agents propose`,free:`Agents add freely`},newTermsHints:{none:`Agents file articles under existing terms only. If none fits, they say so and ask you.`,propose:`Agents may suggest a new term. It stays private (no archive, not shown on articles) until a person approves, merges or rejects it here.`,free:`Agents create public terms, archives included, without asking. Suits loose vocabularies; keep an eye on vocabulary health.`},badges:{safest:`Safest`,recommended:`Recommended`,careful:`Use with care`},required:`Required`,requiredHint:`An article needs at least one, with a primary, before it goes to review or is published. Drafts can wait.`,maxPerEntry:`At most per article`,maxPerEntryHint:`Empty: up to {max}.`,allCollections:`Applies to every collection`,allCollectionsHint:`Off: choose the collections whose articles can use it.`,collections:`Collections`,archiveEnabled:`Public archive pages`,archiveEnabledHint:`Every public term with a published article gets a page listing its articles.`,basePath:`Address`,basePathHint:`Archives live at addresses like {example}.`,feed:`RSS feed per term`,feedHint:`At {example}/rss.xml.`,feedNeedsArchive:`Needs public archive pages.`,minEntries:`Articles needed for search engines`,minEntriesHint:`Archives with fewer published articles are served with noindex, follow and left out of the sitemap. 0: indexed from the first article.`,move:{title:`Address change`,description:`The archives move. Old addresses keep working through a permanent redirect.`,offTitle:`Archive pages will answer 404`,offDescription:`No redirect is created: links to {path}/… stop working after the next publish.`,onTitle:`Archives become public at {path}/…`,onDescription:`Terms with a published article get a page after the next publish.`},create:`Create taxonomy`,save:`Save settings`,created:`{name} created`,saved:`{name} settings saved`,errors:{keyRequired:`Enter a key.`,keyInvalid:`Use lower-case letters, digits and single hyphens, like series or reading-list.`,keyTooLong:`At most 128 characters.`,keyReserved:`“{key}” is reserved by the filter language (primary, collection, locale, status, id).`,keyTaken:`This site already has a taxonomy with this key.`,labelRequired:`Enter a name in the site's default language.`,labelTooLong:`At most {max} characters.`,labelPair:`Fill in both, or leave both empty.`,pathRequired:`Enter an address.`,pathInvalid:`Start with / and use lower-case words joined by hyphens, like /series.`,pathTooLong:`At most 1,024 characters.`,pathRoot:`Archives can't live at the site root.`,pathTaxonomy:`It overlaps the archives of “{conflict}”.`,pathPage:`The page {conflict} lives there. Choose another address.`,pathCollection:`Article addresses start with {conflict}. Choose another address.`,range:`A whole number from {min} to {max}.`,collections:`Choose at least one collection.`,hasParents:`{count} terms still have a parent. Move them to the top level first.`,hasProposals:`{count} proposals are waiting. Approve, merge or reject them first.`}},termEditor:{language:`Language`,default:`default`,names:{title:`Names and synonyms`,description:`What readers see, and what people and agents may type to find it.`,name:`Name ({locale})`,nameHintDefault:`Required in the site's default language.`,nameHint:`Leave it empty to show the {locale} name.`,altNames:`Synonyms`,altNamesHint:`Other names that find this term when someone types them or an agent assigns by name. Never shown as separate terms.`},intro:{title:`Archive introduction`,description:`Markdown shown at the top of {path}, on its first page only.`,hint:`Markdown. HTML is shown as text.`},image:{title:`Image`,description:`Shown on the archive and used as its picture when the link is shared. Link to an image that is already online.`},seo:{title:`Search engines and sharing`,description:`How the archive appears in search results, in {locale}.`},indexing:{title:`Indexing`,indexed:`{path} is listed by search engines, with {count} published articles.`,thin:`{path} has {count} of the {min} published articles it needs; until then it is served with noindex, follow.`,empty:`{path} has no published articles and answers 404 until one is filed.`,noindex:`{path} is hidden from search engines in its search settings.`},preview:{statusHint:`What {path} answers with these changes: {status}. The preview always shows the page, even before it is public.`},placement:{title:`Placement`,position:`Position`,positionHint:`Lower numbers come first among siblings. Empty: sorted by name.`},history:{title:`Slug history`,description:`Earlier addresses of this archive. They stay reserved and redirect here.`,empty:`No earlier slugs`,emptyDescription:`Its address has always been {path}.`,reserved:`reserved`},details:{taxonomy:`Taxonomy`,visibility:`Visibility`,usage:`Articles`},retire:{title:`Retire this {singular}`,description:`Removes it from every article; its archive redirects or answers 410 Gone.`},retired:{title:`This term is retired`,merged:`This term was merged into {name}`,description:`It has no archive and can't be assigned. Its old addresses redirect when a redirect was set.`},errors:{nameRequired:`Enter a name in the site's default language.`,nameTooLong:`At most 200 characters.`,altTooLong:`“{value}” is longer than 200 characters.`,altDuplicate:`“{value}” is listed twice or repeats the name.`,altCollision:`“{value}” already names {other}. A synonym can't point to two terms.`,introTooLong:`At most 20,000 characters.`,position:`Use a whole number from 0 to {max}.`}},migration:{banner:{title:`Move your tags to categories and tags`,description:`Tags on this site are still plain text. Turn them into tags with names, archives and redirects, and start filing articles under categories. You see the result first, and you can undo it.`,action:`Preview the move`},dialog:{title:`Move tags to categories and tags`,description:`This is a dry run: nothing is written until you run it.`,summary:`What the move does`,tags:`Tags found`,entries:`Articles rewritten`,terms:`Tags`,termsValue:`{created} new, {reused} reused`,taxonomies:`Taxonomies created`,none:`None`,skipped:`{count} articles are skipped`,how:`Studio takes a snapshot before and after. Categories start optional on this site, so nothing is blocked, and nothing goes live until you publish.`,upToDate:`Nothing to move`,upToDateDescription:`Every article already uses tags and categories.`,run:`Run the move`},done:{title:`Tags moved`,description:`Your articles now use tags. Publish when you're ready.`,toast:`Tags moved`,toastDetail:`{tags} tags on {entries} articles, with snapshots before and after.`,undoHint:`Changed your mind? Undo restores the old tags on articles nobody has edited since.`,undo:`Undo the move`,close:`Done`},revert:{toast:`Move undone`,toastDetail:`Old tags restored on {count} articles.`}},redirects:{new:`New redirect`,search:`Search addresses`,menu:`Actions for {from}`,edit:`Edit`,filters:{reason:`Source`,all:`All sources`},reasons:{"slug-change":`Slug change`,merge:`Merge`,retire:`Retired`,manual:`Manual`},columns:{from:`Old address`,to:`Sends to`,type:`Type`,source:`Source`,updated:`Updated`},status:{301:`Permanent (301)`,"301Hint":`Search engines move the old address's standing to the new one. Use it when the move is for good.`,302:`Temporary (302)`,"302Hint":`For a short while, like a campaign; search engines keep the old address.`,short301:`301`,short302:`302`},match:{exact:`This address only`,exactHint:`Only this exact path.`,prefix:`This address and everything below it`,prefixHint:`The rest of the path is kept: /old/a goes to /new/a.`,prefixShort:`and below`},external:{badge:`External`,title:`Send visitors to another site?`,description:`Check the destination before you create the redirect.`,leave:`Visitors will leave for {host}`,warning:`Everyone who opens the old address goes to a site you don't control. Agents can never create this; only people can.`,target:`Destination`,host:`Host`,confirm:`Redirect to {host}`},externalHint:`Sends visitors to {host}, outside this site.`,dialog:{createTitle:`New redirect`,editTitle:`Edit redirect`,description:`Send visitors from an address the site no longer serves to a new one.`,from:`Old address`,fromHint:`A path on this site, like /old-page. It can't be an address the site still serves.`,fromLocked:`The old address can't change. Delete this redirect and create another instead.`,to:`Sends to`,toHint:`A path on this site (/new-page) or an https:// address.`,toExternal:`Outside this site: {host}. You confirm it in the next step.`,toPlaceholder:`/new-page or https://…`,match:`Applies to`,status:`Kind`,automatic:`Automatic redirects are always permanent (301).`,note:`Note`,noteHint:`Optional. Why it exists, for whoever looks next.`,create:`Create redirect`},errors:{fromRequired:`Enter the old address.`,fromInvalid:`Use a path that starts with /, without spaces, ? or #.`,fromTooLong:`At most 1,024 characters.`,fromTaken:`A redirect from this address already exists. Edit that one instead.`,fromServed:`The site serves this address. A redirect can't hide a page, a published article or an archive.`,toRequired:`Enter where it sends visitors.`,toInvalid:`Use a path that starts with / or an https:// address.`,toInsecure:`Use https://.`,toTooLong:`At most 2,048 characters.`,toSelf:`It can't send visitors to the same address.`,toLoop:`That would loop: the target redirects back here.`},saved:`Redirect saved`,created:`Redirect from {from} created`,deleted:`Redirect from {from} deleted`,deleteTitle:`Delete the redirect from {from}?`,deleteDescription:`After the next publish, the old address answers 404.`,deleteAutomatic:`Studio created it when an address changed. After the next publish the old address answers 404, and links to it break.`,deleteConfirm:`Delete redirect`,empty:`No redirects yet`,emptyFiltered:`No redirects from this source`,emptyDescription:`Slug changes, merges and retirements add redirects here on their own. Add your own for addresses that moved.`},roles:{yours:`Your role`,names:{owner:`Owner`,administrator:`Administrator`,editor:`Editor`,author:`Author`,contributor:`Contributor`},plural:{owner:`the Owner`,administrator:`Administrators`,editor:`Editors`,author:`Authors`,contributor:`Contributors`},summaries:{owner:`Everything, including moving ownership. There is exactly one Owner; ownership moves only by transfer.`,administrator:`Runs the deployment: team, roles, site settings and domains, everyone's agent keys. Edits and publishes anything.`,editor:`Edits and publishes anything, structures the site (pages, categories, redirects), rolls back and invites Authors and Contributors.`,author:`Writes, edits and publishes their own articles. Anything more waits for an Editor.`,contributor:`Writes drafts and submits them for review. An Editor publishes them; published work is read-only to them.`},explainer:{role:`Role`,columns:{articles:`Articles`,publish:`Publish`,structure:`Structure`,team:`Team`},levels:{all:`All`,own:`Own`,drafts:`Drafts`,none:`No`,invite:`Invite`,full:`Manage`},hints:{articles:{all:`Writes and edits every article, and can credit someone else as the author.`,own:`Writes articles and edits their own, published or not.`,drafts:`Writes drafts and edits their own until an Editor publishes them.`,none:`Can't change articles.`},publish:{all:`Publishes anything and rolls back.`,own:`Publishes when every public change is their own; anything more becomes a request.`,none:`Submits for review; someone else publishes.`},structure:{all:`Pages, categories and tags, redirects.`,none:`Reads pages, categories and redirects, but doesn't change them.`},team:{full:`Invites, changes roles, removes people, site settings and domains, everyone's agent keys.`,invite:`Invites Authors and Contributors.`,none:`Sees who is on the team.`}}}},gating:{readOnlyTitle:`You can view this`,entryNotOwn:`This article belongs to someone else. Its author and Editors and above can change it.`,entryPublished:`This article has been published. Contributors can't change published work; an Editor can.`,entryDelete:`Only its author (while your role allows it) and Editors and above can delete it.`,abilities:{entries:{create:`Only {roles} and above can write articles.`,editOwnPublished:`Only {roles} and above can publish articles. An Editor publishes yours after review.`,editAny:`Only {roles} and above can change others' articles.`},pages:{write:`Only {roles} and above can change pages.`},publish:{own:`Only {roles} and above can publish. Submit your work for review; an Editor publishes it.`,any:`Only {roles} and above can publish others' work.`},rollback:`Only {roles} and above can roll the site back.`,structure:{write:`Only {roles} and above can change categories, tags and redirects.`},assets:{upload:`Only {roles} and above can upload files.`,manage:`Only {roles} and above can manage every file.`},activity:{all:`Only {roles} and above see the whole team's activity.`},analytics:{read:`Only {roles} and above see analytics.`,settings:`Only {roles} and above can change analytics settings.`},comments:{read:`Only {roles} and above see reader comments.`,moderate:`Only {roles} and above moderate comments.`,moderateAny:`Only {roles} and above moderate comments on others' articles.`,reply:`Only {roles} and above reply to comments.`,replyAny:`Only {roles} and above reply on others' articles.`,settings:`Only {roles} and above can change comment settings.`},commenters:{data:`Only {roles} and above see commenters' emails or erase their data.`},settings:{write:`Only {roles} and above can change site settings and domains.`},members:{invite:`Only {roles} and above can invite people.`,manage:`Only {roles} and above can change roles or remove people.`},agents:{manage:`Only {roles} and above can manage others' agent keys.`},sites:{create:`Only {roles} and above can create sites.`},schedules:{read:`Only {roles} and above see the schedule.`,write:`Only {roles} and above schedule their work.`,writeAny:`Only {roles} and above change others' schedules.`,settings:`Only {roles} and above pause schedules or change their limits.`},releases:{approve:`Only {roles} and above approve releases of their own work.`,approveAny:`Only {roles} and above approve releases.`},automations:{manage:`Only {roles} and above manage automations.`},ai:{invoke:`Only {roles} and above use AI in the editor.`,settings:`Only {roles} and above change the AI settings.`},ownership:{transfer:`Only {roles} can transfer ownership.`}}},publishing:{request:`Request publish`,requestCommand:`Snapshot and request publish`,requestTitle:`Request a publish?`,requestDescription:`Your changes include work by others or changes to the site's structure, so an Editor approves the publish. Studio takes a snapshot now; the request waits in Approvals.`,sendRequest:`Send request`,requestOption:`Request a publish`,requestOptionDescription:`An Editor approves it in Approvals before it goes live.`,requested:`Publish requested`,requestedDescription:`Your changes include work that isn't yours, so an Editor must approve the publish. You'll find the request in Approvals.`,openRequest:`Open Approvals`,refused:`You can't publish`,pending:[[2,`count`,{one:[[4],` change`],other:[[4],` changes`]}]],pendingSummary:[[2,`count`,{one:[[4],` change isn't live yet`],other:[[4],` changes aren't live yet`]}],` · `,[0,`kinds`]],firstPublish:`Not published yet. The first publish puts {kinds} live.`,pendingKind:[[3,`kind`,{page:[[2,`count`,{one:[[4],` page`],other:[[4],` pages`]}]],contentEntry:[[2,`count`,{one:[[4],` article`],other:[[4],` articles`]}]],site:[`site settings`],taxonomy:[[2,`count`,{one:[[4],` taxonomy`],other:[[4],` taxonomies`]}]],term:[[2,`count`,{one:[[4],` term`],other:[[4],` terms`]}]],redirect:[[2,`count`,{one:[[4],` redirect`],other:[[4],` redirects`]}]],menu:[[2,`count`,{one:[[4],` menu`],other:[[4],` menus`]}]],asset:[[2,`count`,{one:[[4],` media file`],other:[[4],` media files`]}]],glossary:[`the glossary`],other:[[2,`count`,{one:[[4],` item`],other:[[4],` items`]}]]}]],withPending:`{action}. {summary}`,notPublished:`Not published`},liveSite:{view:`View site`,open:`Open site`,viewLive:`View live`,copyLink:`Copy link`,noDomain:`Add a domain in Settings`,notPublished:`Not published yet`,markedPublished:`Marked published`,markedPublishedDescription:`It goes live the next time the site is published.`,publishSite:`Publish site`,liveAt:`Live at`,willBeAt:`Will be at`,lastPublished:`Last published`},members:{invite:`Invite people`,search:`Search people`,you:`You`,someone:`Someone`,menu:`Actions for {name}`,tabs:{members:`Members`,activity:`Activity`},columns:{member:`Member`,role:`Role`,joined:`Joined`,actions:`Actions`},empty:`No members yet`,emptyDescription:`The first account on a Studio becomes its Owner. Invite people from here.`,noMatches:`No one matches “{query}”`,notEnabledTitle:`This server has no team`,notEnabledDescription:`Roles and invites need a Studio with accounts (cloudhal studio, or a deployed admin Worker). Without them, every signed-in person can do everything.`,changeRole:`Change role…`,resetLink:`Create password reset link…`,transferOwnership:`Transfer ownership…`,rank:{self:`You can't change your own role or remove yourself.`,owner_role:`The Owner role moves only by transferring ownership.`,target_is_owner:`The Owner can't be demoted or removed. Transfer ownership first.`,role_too_high:`Your role can't give this role.`,not_allowed:`Only Administrators and the Owner can manage members.`},roles:{title:`Roles`,description:`What each role can do. Agent keys never do more than the person who made them.`},how:{title:`How invites work`,single:`Each link works once. Whoever opens it first joins, so share it privately.`,bound:`It is bound to one email address and one role; the invitee can't change either.`,expiry:`Links expire after {default} by default. Administrator invites expire within {admin}.`,keys:`A person's agent keys never do more than their role, and narrow at once when the role goes down.`,owner:`There is one Owner. Ownership moves only to an Administrator, with the Owner's password.`},invites:{title:`Pending invites`,description:`Links that haven't been used yet. Revoke one and it stops working at once.`,empty:`No pending invites`,emptyDescription:`Invite links you create appear here until they're used, revoked or expire.`,columns:{email:`Email`,role:`Role`,expires:`Expires`,inviter:`Invited by`,actions:`Actions`},byLink:`Link`,byEmail:`Sent by email`,expired:`Expired`,incomplete:`Not completed`,incompleteHint:`The link was used, but the account wasn't created. Invite them again to send a new link.`,you:`You`,someone:`A former member`,reinvite:`Re-invite`,menu:`Actions for the invite to {email}`,revoke:`Revoke`,revokeTitle:`Revoke this invite?`,revokeDescription:`The link for {email} stops working at once. You can invite them again later.`,revoked:`Invite revoked`,revokedDescription:`The link for {email} no longer works.`},role:{title:`Change {name}'s role`,description:`Takes effect on their next click or agent call. It's recorded in the activity log.`,member:`Member`,newRole:`New role`,change:`Role change`,now:`Now`,immediate:`Applies at once`,demotionTitle:`Their agent keys narrow too`,demotion:`As {role}, their keys keep only the scopes and modes that role allows, and an elevation above it ends. A later promotion doesn't widen the keys again.`,submit:`Change role`,failed:`Couldn't change the role`,changed:`Role changed`,changedDescription:`{name} is {to} now.`,narrowedTitle:`Agent keys narrowed`,narrowedDescription:`{count} of their agent keys now do only what the new role allows.`,narrowedBanner:`Agent keys narrowed: {count}`,narrowedBannerDescription:`Each key below keeps only what the new role allows. Their agents notice on their next call.`,narrowedMode:`Mode`,narrowedScopes:`Now works with`,elevationEnded:`Its elevation ended because the new role doesn't allow it.`,done:`Done`},remove:{menu:`Remove from team…`,title:`Remove {name} from the team?`,description:`They lose access at once. This is recorded in the activity log.`,signOut:`They're signed out on every device.`,keys:`Their agent keys are disabled (kept for the record, deletable).`,keysCount:`Their agent keys are disabled: {count}.`,invites:`Invites they sent and that are still pending are cancelled.`,invitesCount:`Their pending invites are cancelled: {count}.`,requests:`Requests their agents are waiting on are denied.`,kept:`Their articles and activity stay. Inviting them again restores access.`,submit:`Remove`,failed:`Couldn't remove them`,done:`{name} was removed`,doneDescription:`Agent keys disabled: {keys} · invites cancelled: {invites} · requests denied: {requests}.`},reset:{title:`Create a password reset link?`,description:`{name} can choose a new password with it. There's no email yet, so you share the link yourself.`,once:`It works once and expires in one hour.`,signsOut:`Setting a new password signs them out everywhere.`,replaces:`A new link voids any earlier one.`,submit:`Create link`,failed:`Couldn't create the link`,revealTitle:`Copy the reset link`,revealDescription:`Send it to {name} privately, in a direct message.`,warningTitle:`You won't see this link again`,warning:`Copy it now. Anyone who opens it can set this account's password, so never post it in a shared channel.`,link:`Reset link`,expires:`Expires {relative} ({absolute}).`,done:`I've copied the link`},transfer:{title:`Transfer ownership to {name}?`,description:`The Owner can do everything, including moving ownership. There is exactly one.`,warningTitle:`You can't undo this yourself`,warning:`{name} becomes the Owner and you become an Administrator. Only {name} can give ownership back.`,to:`New Owner`,youBecome:`You become an Administrator straight away.`,keys:`Your agent keys narrow to what an Administrator may do.`,onlyThey:`Only the new Owner can transfer ownership again.`,password:`Your password`,passwordHint:`Enter it again to confirm it's you.`,passwordRequired:`Enter your password`,wrongPassword:`That password isn't right`,notAdministrator:`Ownership goes to an Administrator. Make them one first, then try again.`,needsAdministrator:`Ownership goes only to an Administrator. Change their role first.`,submit:`Transfer ownership`,failed:`Couldn't transfer ownership`,done:`Ownership transferred`,doneDescription:`{name} is the Owner now. You're an Administrator.`},activity:{empty:`No team events yet`,emptyDescription:`Invites, role changes, removals and ownership transfers appear here.`,restrictedTitle:`Team activity is for Editors and above`}},editionGuide:{title:`Another language: here or as its own site?`,hereTitle:`Add it to this site`,here:`Same pages and menus in every language, one team, one publish. Best when the languages mirror each other.`,editionTitle:`Start a language edition`,edition:`A separate site in this project that starts from this one: its own pages, menus, team roles and releases, still linked as translations. Best when a market needs its own structure or team.`,create:`Create a language edition…`},newSite:{open:`New site`,title:`New site`,description:`A site of its own in this installation: its own pages, settings, team roles and analytics. It starts with a home page; nothing is published.`,name:`Name`,nameRequired:`Give the site a name.`,slug:`Short name`,slugHint:`Lower-case letters, digits and hyphens; it identifies the site in Studio and the CLI.`,slugInvalid:`Use lower-case letters, digits and hyphens.`,language:`Language`,languageHint:`The site's default language; add more later in its language settings.`,project:`Project`,projectHint:`Projects group related sites, such as the language editions of one publication.`,newProject:`A new project`,submit:`Create site`,failed:`The site could not be created`,created:`Site created`,createdDescription:`{name} is ready to edit; nothing is published yet.`,from:`Start from`,fromHint:`A blank site starts with a home page and an About page.`,blank:`A blank site`,copyOf:`A copy of {name} (language edition)`,editionHint:`Copies that site's pages as drafts in the new language, its menus and design, linked as translations; articles and media stay. The new site joins that site's project.`,editionCreated:[[0,`name`],` starts with `,[2,`count`,{one:[[4],` page`],other:[[4],` pages`]}],` to translate; nothing is published yet.`]},projects:{title:`Project`,description:`The sites of this project side by side: languages, address, publish state and approvals waiting.`,newSite:`New site in this project`,sites:`Sites`,notFound:`No such project`,notFoundDescription:`It was removed, or none of its sites are yours to open.`,columns:{site:`Site`,languages:`Languages`,address:`Address`,status:`Status`,approvals:`Approvals`},noAddress:`No domain yet`,none:`None`,waiting:[[2,`count`,{one:[[4],` waiting`],other:[[4],` waiting`]}]],summary:{title:`At a glance`,sites:`Sites`,languages:`Languages`,live:`Live`,waiting:`Approvals waiting`}},siteAccess:{legend:`Sites`,all:`Every site`,some:`Only some sites`,roleOn:`Role on {site}`,everySite:`Owners and Administrators work on every site of this installation.`,required:`Pick at least one site.`,menu:`Sites`,title:`Sites for {name}`,description:`Choose which sites this person works on and their role on each. Changes apply at once.`,failed:`The sites could not be saved`,submit:`Save sites`,saved:`Sites saved`,savedDescription:`The sites of {name} were updated.`,count:[[2,`count`,{one:[[4],` site`],other:[[4],` sites`]}]]},invites:{create:{title:`Invite someone`,reinviteTitle:`Invite again`,description:`They get a one-time link to create their account in the role you choose.`,step:`Step 1 of 2 · Who and in which role`,email:`Email`,emailHint:`The account is created with this address; they can't change it.`,emailPlaceholder:`name@example.com`,role:`Role`,roleHint:`Only roles yours may give are listed.`,expiry:`Link expires after`,expiryHint:`Choose the shortest time that works for them.`,expiryAdmin:`Administrator invites expire within {max}.`,explainer:`What each role can do`,delivery:`How to send it`,deliveryLink:`Copy a link`,deliveryLinkHint:`You share it yourself, privately.`,deliveryEmail:`Send by email`,deliveryEmailHint:`Studio emails the link; you won't see it.`,submit:`Create invite link`,send:`Send invite`,failed:`Couldn't create the invite`},reveal:{title:`Copy the invite link`,sentTitle:`Invite sent`,description:`For {email}, as {role}. Step 2 of 2.`,warningTitle:`You won't see this link again`,warning:`Copy it now and share it privately, in a direct message, not a shared channel. Whoever opens it first joins as {role}.`,link:`Invite link`,summary:`Invite`,expires:`Expires {relative} ({absolute}).`,private:`If it reaches the wrong person, revoke it from Pending invites.`,done:`I've copied the link`,sent:`Sent to {email}`,sentDescription:`The link works once. You can revoke it from Pending invites.`},errors:{emailRequired:`Enter an email address`,emailInvalid:`Enter a valid email address, like name@example.com`,rank:`Your role can't invite someone as {role}.`,invalid_expiry:`That expiry isn't allowed for this role. Choose a shorter one.`,delivery_unavailable:`This server can't send email. Copy a link instead.`,delivery_failed:`The email couldn't be sent, so the invite was canceled. Choose Copy a link and try again.`,already_member:`{email} is already on the team.`,too_many_invites:`There are too many pending invites. Revoke some first.`,rate_limited:`You've created a lot of invites in the last hour. Try again later.`}},inviteAccept:{titleGeneric:`Join a Cloudhal Studio`,title:`Join {name}`,descriptionGeneric:`Opening your invite…`,descriptionDead:`This link doesn't work anymore.`,description:`{inviter} invited you as {role}.`,someone:`Someone`,summary:`Your invite`,as:`You'll join as`,expires:`This invite expires {relative} ({absolute}).`,emailHint:`The invite is for this address.`,nameHint:`Shown next to your changes and approvals.`,existingTitle:`You already have an account`,existing:`Enter its password to join with it.`,submit:`Accept invite`,toSignIn:`Go to sign in`,signOutFirst:`Sign out first, then accept the invite.`,welcome:`Welcome to {name}`,welcomeDescription:`You're signed in as {role}.`,missingTitle:`This link is incomplete`,missing:`Open the whole link you were sent; the part after # is missing. If it still doesn't work, ask for a new invite.`,goneTitle:`This invite can't be used`,gone:`It was used, revoked or has expired. Ask the person who invited you for a new one.`,otherSessionTitle:`You're signed in as {email}`,otherSessionTitleGeneric:`You're signed in as someone else`,otherSession:`This invite is for {email}. Sign out, then accept it.`,alreadyMemberTitle:`You're already on the team`,alreadyMember:`This account is already a member. Sign in instead.`,errors:{nameRequired:`Enter your name`,nameTooLong:`At most {max} characters`,weakPassword:`Use at least 8 characters`,wrongPassword:`That password isn't right for this account`}},resetPassword:{title:`Choose a new password`,description:`For {name}'s account.`,descriptionGeneric:`Opening your reset link…`,descriptionDead:`This link doesn't work anymore.`,expires:`This link expires {relative} ({absolute}).`,signsOut:`You'll be signed out on every device; then sign in with the new password.`,submit:`Set new password`,doneTitle:`Password changed`,doneDescription:`Sign in with your new password.`,changed:`Your password is set`,changedDescription:`You've been signed out everywhere.`,missingTitle:`This link is incomplete`,missing:`Open the whole link you were sent; the part after # is missing.`,goneTitle:`This reset link can't be used`,gone:`It was used or has expired. Ask for a new one from the sign-in page, or ask an Administrator.`},forgotPassword:{link:`Forgot password?`,title:`Reset your password`,description:`We'll email you a link to choose a new one.`,submit:`Email me a link`,sentTitle:`Check your email`,sent:`If {email} belongs to an account here, a reset link is on its way. It works once, for one hour.`,unavailableTitle:`This server can't send email`,unavailable:`Ask an Administrator of this Studio for a reset link.`,back:`Back to sign in`},passwords:{new:`New password`,confirm:`Repeat the password`,strength:`Strength: {level}`,levels:{empty:`—`,tooShort:`too short`,weak:`weak`,fair:`fair`,strong:`strong`},advice:{empty:`At least {min} characters. A few unrelated words make a strong one.`,tooShort:`At least {min} characters.`,weak:`Longer is stronger: try 12 characters or more, or a few unrelated words.`,fair:`Good. A few more characters make it strong.`,strong:`Strong password.`},errors:{required:`Enter a password`,tooShort:`Use at least {min} characters`,tooLong:`Use at most {max} characters`,confirmRequired:`Repeat the password`,mismatch:`The passwords don't match`}}},d={en:{name:`English`,dir:`ltr`,fallback:[],reviewed:!0},tr:{name:`Türkçe`,dir:`ltr`,fallback:[`en`],reviewed:!0},de:{name:`Deutsch`,dir:`ltr`,fallback:[`en`],reviewed:!1},es:{name:`Español`,dir:`ltr`,fallback:[`en`],reviewed:!1},fr:{name:`Français`,dir:`ltr`,fallback:[`en`],reviewed:!1},it:{name:`Italiano`,dir:`ltr`,fallback:[`en`],reviewed:!1},"pt-BR":{name:`Português (Brasil)`,dir:`ltr`,fallback:[`en`],reviewed:!1},nl:{name:`Nederlands`,dir:`ltr`,fallback:[`en`],reviewed:!1},pl:{name:`Polski`,dir:`ltr`,fallback:[`en`],reviewed:!1},ru:{name:`Русский`,dir:`ltr`,fallback:[`en`],reviewed:!1},uk:{name:`Українська`,dir:`ltr`,fallback:[`en`],reviewed:!1},ja:{name:`日本語`,dir:`ltr`,fallback:[`en`],reviewed:!1},ko:{name:`한국어`,dir:`ltr`,fallback:[`en`],reviewed:!1},"zh-Hans":{name:`简体中文`,dir:`ltr`,fallback:[`en`],reviewed:!1},hi:{name:`हिन्दी`,dir:`ltr`,fallback:[`en`],reviewed:!1},id:{name:`Bahasa Indonesia`,dir:`ltr`,fallback:[`en`],reviewed:!1},ar:{name:`العربية`,dir:`rtl`,fallback:[`en`],reviewed:!1,intl:`ar-u-nu-latn`},fa:{name:`فارسی`,dir:`rtl`,fallback:[`en`],reviewed:!1,intl:`fa-u-nu-latn`},he:{name:`עברית`,dir:`rtl`,fallback:[`en`],reviewed:!1}},f=Object.fromEntries(Object.entries(d).flatMap(([e,t])=>t.intl?[[e,t.intl]]:[])),p=Object.keys(d),m=Object.fromEntries(p.map(e=>[e,d[e].name])),h=e=>Object.hasOwn(d,e);function g(e){let t=[e,...d[e].fallback];return t.includes(`en`)?t:[...t,`en`]}var _=Object.assign({"./lazy/aiSettings.en.ts":()=>s(()=>import(`./aiSettings.en-C8dj9xkg.js`),[]),"./lazy/analytics.en.ts":()=>s(()=>import(`./analytics.en-BjRe9VE9.js`),[]),"./lazy/analyticsSettings.en.ts":()=>s(()=>import(`./analyticsSettings.en-Dn_QYKbo.js`),[]),"./lazy/appearance.en.ts":()=>s(()=>import(`./appearance.en-mFJuOtIH.js`),[]),"./lazy/bodyEditor.en.ts":()=>s(()=>import(`./bodyEditor.en-B8FW4NF8.js`),[]),"./lazy/build.en.ts":()=>s(()=>import(`./build.en-Byn4-h2I.js`),[]),"./lazy/collections.en.ts":()=>s(()=>import(`./collections.en-BI4rs6RC.js`),[]),"./lazy/comments.en.ts":()=>s(()=>import(`./comments.en-DXe1aP-J.js`),[]),"./lazy/commentsSettings.en.ts":()=>s(()=>import(`./commentsSettings.en-CjQdkMZH.js`),[]),"./lazy/media.en.ts":()=>s(()=>import(`./media.en-BT47PRGz.js`),[]),"./lazy/menus.en.ts":()=>s(()=>import(`./menus.en-CJ5d7ms0.js`),[]),"./lazy/readers.en.ts":()=>s(()=>import(`./readers.en-CbmwKSip.js`),[]),"./lazy/scheduleSettings.en.ts":()=>s(()=>import(`./scheduleSettings.en-Ke9GgFqw.js`),[]),"./lazy/schedules.en.ts":()=>s(()=>import(`./schedules.en-D7O8u4iy.js`),[])}),v=Object.assign({"./loaders/ar.ts":()=>s(()=>import(`./ar-CY9T5sf0.js`),__vite__mapDeps([0,1])),"./loaders/de.ts":()=>s(()=>import(`./de-DAKrG4J5.js`),__vite__mapDeps([2,1])),"./loaders/es.ts":()=>s(()=>import(`./es-ghW3J_VE.js`),__vite__mapDeps([3,1])),"./loaders/fa.ts":()=>s(()=>import(`./fa-DCXNWQFv.js`),__vite__mapDeps([4,1])),"./loaders/fr.ts":()=>s(()=>import(`./fr-lTAz34qv.js`),__vite__mapDeps([5,1])),"./loaders/he.ts":()=>s(()=>import(`./he-CG-RJ7FV.js`),__vite__mapDeps([6,1])),"./loaders/hi.ts":()=>s(()=>import(`./hi-CUPp4Z-5.js`),__vite__mapDeps([7,1])),"./loaders/id.ts":()=>s(()=>import(`./id-BeAv9jwY.js`),__vite__mapDeps([8,1])),"./loaders/it.ts":()=>s(()=>import(`./it-CY_74jqq.js`),__vite__mapDeps([9,1])),"./loaders/ja.ts":()=>s(()=>import(`./ja-ZNuVZgva.js`),__vite__mapDeps([10,1])),"./loaders/ko.ts":()=>s(()=>import(`./ko-HiX0t07M.js`),__vite__mapDeps([11,1])),"./loaders/nl.ts":()=>s(()=>import(`./nl-g6zWQzPT.js`),__vite__mapDeps([12,1])),"./loaders/pl.ts":()=>s(()=>import(`./pl-CQpb8_JW.js`),__vite__mapDeps([13,1])),"./loaders/pt-BR.ts":()=>s(()=>import(`./pt-BR-BUkZriwP.js`),__vite__mapDeps([14,1])),"./loaders/ru.ts":()=>s(()=>import(`./ru-ELePwa8w.js`),__vite__mapDeps([15,1])),"./loaders/tr.ts":()=>s(()=>import(`./tr-DCjbU9M-.js`),__vite__mapDeps([16,1])),"./loaders/uk.ts":()=>s(()=>import(`./uk-DlhhU-7R.js`),__vite__mapDeps([17,1])),"./loaders/zh-Hans.ts":()=>s(()=>import(`./zh-Hans-Chik4lDf.js`),__vite__mapDeps([18,1]))}),y=`./lazy/`,b=`.en.ts`,x=Object.keys(_).map(e=>e.slice(7,-6)).sort();function S(e){return Object.hasOwn(_,`${y}${e}${b}`)}var C=new Map;function w(e){let t=C.get(e);if(!t){let n=v[`./loaders/${e}.ts`];if(!n)return Promise.resolve({});t=n().then(e=>e.loaders,t=>{throw C.delete(e),t}),C.set(e,t)}return t}async function T(e,t){return t===`en`?_[`${y}${e}${b}`]:(await w(t))[`../lazy/${e}.${t}.ts`]}var E=new Map,D=new Map,O=(e,t)=>`${e}:${t}`;function k(e,t){return E.get(O(e,t))}function A(e){return x.filter(t=>E.has(O(t,e)))}function j(e,t){let n=O(e,t);if(E.has(n))return Promise.resolve();let r=D.get(n);return r||(r=T(e,t).then(n=>{if(!n)throw Error(`no "${e}" messages for locale "${t}"`);return n()}).then(t=>{E.set(n,t.messages[e]),D.delete(n)},e=>{throw D.delete(n),e}),D.set(n,r)),r}function M(e,t){return o(V(),e,t)}r(f);var N={en:u},P=Object.assign({"./ar.ts":()=>s(()=>import(`./ar-zrB13yeJ.js`),[]),"./de.ts":()=>s(()=>import(`./de-CSuIV8BC.js`),[]),"./es.ts":()=>s(()=>import(`./es-Bilyaign.js`),[]),"./fa.ts":()=>s(()=>import(`./fa-CPQX96ib.js`),[]),"./fr.ts":()=>s(()=>import(`./fr-D8Ew5nex.js`),[]),"./he.ts":()=>s(()=>import(`./he-LPu1uvhy.js`),[]),"./hi.ts":()=>s(()=>import(`./hi-Dfl8UlTZ.js`),[]),"./id.ts":()=>s(()=>import(`./id-CH7z2Skl.js`),[]),"./it.ts":()=>s(()=>import(`./it-C377PBFl.js`),[]),"./ja.ts":()=>s(()=>import(`./ja-EFrK4i7G.js`),[]),"./ko.ts":()=>s(()=>import(`./ko-BWf7X0gV.js`),[]),"./nl.ts":()=>s(()=>import(`./nl-DTwvmUYN.js`),[]),"./pl.ts":()=>s(()=>import(`./pl-824MO57D.js`),[]),"./pt-BR.ts":()=>s(()=>import(`./pt-BR-DDeM-hcO.js`),[]),"./ru.ts":()=>s(()=>import(`./ru-D_WQFs-3.js`),[]),"./tr.ts":()=>s(()=>import(`./tr-vHsJMvB6.js`),[]),"./uk.ts":()=>s(()=>import(`./uk-BWPJkCpO.js`),[]),"./zh-Hans.ts":()=>s(()=>import(`./zh-Hans-Dw4dO-z7.js`),[])}),F=new Map;function I(e){if(N[e])return Promise.resolve();let t=F.get(e);if(!t){let n=P[`./${e}.ts`];if(!n)return Promise.reject(Error(`no core catalog for locale "${e}"`));w(e).catch(()=>{}),t=n().then(({messages:t})=>{N[e]=t,F.delete(e)},t=>{throw F.delete(e),t}),F.set(e,t)}return t}function L(e){return N[e]!==void 0}var R=`cloudhal.studio.locale`;function z(){try{let e=localStorage.getItem(R);if(e&&h(e))return e}catch{}return`en`}var B;function V(){return B??=z(),B}function H(...e){return Object.fromEntries(e.map(e=>[e,`{${e}}`]))}function U(e,t){let n=e;for(let e of t)n=n?.[e];return typeof n==`string`||i(n)?n:void 0}function W(e,t){let n=t.split(`.`),r=n[0]??``;return S(r)?U(k(r,e),n.slice(1)):U(N[e],n)}function G(e){return d[e].dir}function K(e,t,n={}){let r;for(let n of g(e))if(r=W(n,t),r!==void 0)break;return a(e,r??t,n)}var q=(0,c.createContext)(void 0);function J({children:e,initialLocale:t}){let[n,r]=(0,c.useState)(()=>{let e=t??z();return B=e,e}),i=(0,c.useCallback)(e=>{let t=()=>{B=e,(0,c.startTransition)(()=>r(e));try{localStorage.setItem(R,e)}catch{}},i=A(n).filter(t=>!k(t,e));i.length===0&&L(e)?t():Promise.all([I(e),...i.map(t=>j(t,e))]).then(t,()=>{t()})},[n]);(0,c.useEffect)(()=>{document.documentElement.lang=n,document.documentElement.dir=G(n)},[n]),L(n)||(0,c.use)(I(n));let a=(0,c.useMemo)(()=>({locale:n,setLocale:i,t:((e,t)=>K(n,e,t))}),[n,i]);return(0,l.jsx)(q.Provider,{value:a,children:e})}function Y(e,t){let n=(0,c.useContext)(q);if(!n)throw Error(`useMessages must be used inside <I18nProvider>`);for(let r of t??[n.locale])for(let t of e)k(t,r)||(0,c.use)(j(t,r))}function X(...e){let t=(0,c.useContext)(q);if(!t)throw Error(`useI18n must be used inside <I18nProvider>`);return Y(e),t}function Z(...e){return X(...e).t}function Q(e,t,n=[V()]){return Promise.all([e,...n.flatMap(e=>t.map(t=>j(t,e)))]).then(([e])=>e)}export{M as a,X as c,Q as d,j as f,u as h,H as i,Y as l,p as m,V as n,I as o,m as p,G as r,K as s,J as t,Z as u};
|
|
7
|
+
//# sourceMappingURL=i18n-fqiUdSL9.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./preload-helper-DjzSQ1t3.js";var t=Object.assign({"../lazy/aiSettings.id.ts":()=>e(()=>import(`./aiSettings.id-CO4I-Nr1.js`),[]),"../lazy/analytics.id.ts":()=>e(()=>import(`./analytics.id-CyUlDO82.js`),[]),"../lazy/analyticsSettings.id.ts":()=>e(()=>import(`./analyticsSettings.id-CIZyEXYS.js`),[]),"../lazy/appearance.id.ts":()=>e(()=>import(`./appearance.id-aSp7eOOW.js`),[]),"../lazy/bodyEditor.id.ts":()=>e(()=>import(`./bodyEditor.id-DaiRImPk.js`),[]),"../lazy/build.id.ts":()=>e(()=>import(`./build.id-DYXKpcM4.js`),[]),"../lazy/collections.id.ts":()=>e(()=>import(`./collections.id-BZWF1L9d.js`),[]),"../lazy/comments.id.ts":()=>e(()=>import(`./comments.id-XxjsE0p0.js`),[]),"../lazy/commentsSettings.id.ts":()=>e(()=>import(`./commentsSettings.id-BlqU87IM.js`),[]),"../lazy/media.id.ts":()=>e(()=>import(`./media.id-CAgR7je9.js`),[]),"../lazy/menus.id.ts":()=>e(()=>import(`./menus.id-B5JAh3Kk.js`),[]),"../lazy/readers.id.ts":()=>e(()=>import(`./readers.id-BdaxiKFf.js`),[]),"../lazy/scheduleSettings.id.ts":()=>e(()=>import(`./scheduleSettings.id-TZ0m_tpl.js`),[]),"../lazy/schedules.id.ts":()=>e(()=>import(`./schedules.id-FewyiLfv.js`),[])});export{t as loaders};
|
|
2
|
+
//# sourceMappingURL=id-BeAv9jwY.js.map
|