diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e2f58f5e..9a72aff9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,7 +9,7 @@ updates: update-types: ["version-update:semver-major"] - package-ecosystem: "npm" - directory: "/admin" + directory: "/panel" schedule: interval: "monthly" ignore: diff --git a/.gitignore b/.gitignore index b348ede4..71370f39 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,8 @@ php_error.log /vendor/* -/admin/accounts/* -/admin/avatars/* -/admin/logs/* +/panel/accounts/* +/panel/avatars/* +/panel/logs/* !.gitkeep diff --git a/.htaccess b/.htaccess index 5c6c5059..df742121 100644 --- a/.htaccess +++ b/.htaccess @@ -10,8 +10,8 @@ AddDefaultCharset utf-8 ## Prevent direct access to Formwork folders but allow access to assets RewriteRule ^site/templates/assets/.* - [L] - RewriteRule ^admin/(assets|avatars)/.* - [L] - RewriteRule ^(admin|backup|cache|formwork|site|vendor)/.* index.php [L,NC] + RewriteRule ^panel/(assets|avatars)/.* - [L] + RewriteRule ^(panel|backup|cache|formwork|site|vendor)/.* index.php [L,NC] ## Prevent access to specific files RewriteRule ^(.*)\.(md|yml|json)/?$ index.php [L,NC] diff --git a/README.md b/README.md index d09a974c..aa088004 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Formwork +# Formwork [![Discord](https://img.shields.io/discord/637658168754831380?color=%235865f2&label=chat&logo=discord&logoColor=%23fff)](https://discord.gg/5Q3BmNY) [![GitHub Release Date](https://img.shields.io/github/release-date/getformwork/formwork.svg)](https://github.com/getformwork/formwork/releases/latest) diff --git a/admin/translations/en.yml b/admin/translations/en.yml deleted file mode 100644 index bebee96a..00000000 --- a/admin/translations/en.yml +++ /dev/null @@ -1,265 +0,0 @@ -admin.backup.backup: Backup -admin.backup.error.cannot-download: Cannot download backup. %s. -admin.backup.error.cannot-download.invalid-filename: Invalid backup file -admin.backup.error.cannot-make: Cannot make backup. %s. -admin.backup.ready: Backup ready. Starting download... -admin.cache.clear: Clear Cache -admin.cache.cleared: Cache cleared -admin.dashboard.dashboard: Dashboard -admin.dashboard.last-modified-pages: Last Edited Pages -admin.dashboard.quick-actions: Quick Actions -admin.dashboard.statistics: Statistics -admin.dashboard.statistics.unique-visitors: Unique Visitors -admin.dashboard.statistics.visits: Visits -admin.dashboard.welcome: Welcome -admin.drag-to-reorder: Drag to Reorder -admin.errors.action.report-to-github: Report an issue to GitHub -admin.errors.action.return-to-dashboard: Return to Dashboard -admin.errors.error.forbidden.description: You don’t have permission to access this page. -admin.errors.error.forbidden.heading: Oops, permission required! -admin.errors.error.forbidden.status: Forbidden -admin.errors.error.internal-server-error.description: Formwork Admin encountered an error while serving your request. Please check Formwork configuration or the server log for errors. -admin.errors.error.internal-server-error.heading: Oops, something went wrong! -admin.errors.error.internal-server-error.status: Internal Server Error -admin.errors.error.not-found.description: The page does not exist or the request is not valid. -admin.errors.error.not-found.heading: Oops, page not found! -admin.errors.error.not-found.status: Not Found -admin.login.attempt.failed: Login attempt failed! Try again. -admin.login.attempt.too-many: Too many login attempts. Please try again in %d minutes. -admin.login.logged-out: You have been logged out -admin.login.login: Login -admin.login.logout: Logout -admin.login.password: Password -admin.login.suspicious-request-detected: A suspicious request has been detected, and for security reasons you have been logged out. Please log in again. -admin.login.username: Username -admin.manage: Manage -admin.modal.action.cancel: Cancel -admin.modal.action.continue: Continue -admin.modal.action.delete: Delete -admin.modal.action.save: Save -admin.modal.action.upload-file: Upload a File -admin.modal.images.no-images: There are no images here -admin.modal.images.no-images.upload: Please upload some images -admin.modal.images.title: Select an Image -admin.options.info: Info -admin.options.options: Options -admin.options.site: Site -admin.options.site.advanced: Advanced Options -admin.options.site.advanced.aliases: Aliases -admin.options.site.advanced.aliases.alias: Alias -admin.options.site.advanced.aliases.route: Route -admin.options.site.advanced.metadata: HTML Metadata -admin.options.site.advanced.metadata.content: Content -admin.options.site.advanced.metadata.name: Name -admin.options.site.info: Info -admin.options.site.info.author: Author -admin.options.site.info.description: Description -admin.options.site.info.language: Language -admin.options.site.info.title: Title -admin.options.system: System -admin.options.system.admin-panel: Admin Panel -admin.options.system.admin-panel.default-color-scheme: Default Color Scheme -admin.options.system.admin-panel.default-color-scheme.dark: Dark -admin.options.system.admin-panel.default-color-scheme.light: Light -admin.options.system.admin-panel.default-language: Default Language -admin.options.system.admin-panel.logout-redirects-to: Logout Redirects to -admin.options.system.admin-panel.logout-redirects-to.home: Home -admin.options.system.admin-panel.logout-redirects-to.login: Login -admin.options.system.admin-panel.session-timeout: Session Timeout (min) -admin.options.system.backup: Backup -admin.options.system.backup.backup-files-to-keep: Backups to keep on the server -admin.options.system.cache: Cache -admin.options.system.cache.disabled: Disabled -admin.options.system.cache.enabled: Enabled -admin.options.system.cache.time: Cache Time (sec) -admin.options.system.date-and-time: Date and Time -admin.options.system.date-and-time.date-format: Date Format -admin.options.system.date-and-time.first-weekday: First Weekday -admin.options.system.date-and-time.first-weekday.monday: Monday -admin.options.system.date-and-time.first-weekday.sunday: Sunday -admin.options.system.date-and-time.hour-format: Hour Format -admin.options.system.date-and-time.timezone: Timezone -admin.options.system.files: Files -admin.options.system.files.allowed-extensions: Allowed Extensions -admin.options.system.images: Images -admin.options.system.images.jpeg-quality: JPEG Quality -admin.options.system.images.jpeg-save-progressive: Save JPEG images as progressive -admin.options.system.images.jpeg-save-progressive.disabled: Disabled -admin.options.system.images.jpeg-save-progressive.enabled: Enabled -admin.options.system.images.png-compression-level: PNG Compression Level -admin.options.system.images.process-uploads: Process (optimize) uploaded images -admin.options.system.images.process-uploads.disabled: Disabled -admin.options.system.images.process-uploads.enabled: Enabled -admin.options.system.images.webp-quality: WebP Quality -admin.options.system.languages: Languages -admin.options.system.languages.available-languages: Available Languages -admin.options.system.languages.available-languages.no-languages: No Languages -admin.options.system.languages.preferred-language: Use Browser Prefered Language -admin.options.system.languages.preferred-language.disabled: Disabled -admin.options.system.languages.preferred-language.enabled: Enabled -admin.options.updated: Options updated -admin.options.updates: Updates -admin.pages.attributes: Attributes -admin.pages.change-slug: Edit Slug -admin.pages.change-slug.generate: Generate From Title -admin.pages.changes.continue: Continue without Saving -admin.pages.changes.detected: Changes Detected -admin.pages.changes.detected.prompt: You have some changes that have not been saved. Are you sure you want to leave this page? -admin.pages.content: Content -admin.pages.delete-file: Delete File -admin.pages.delete-file.prompt: Are you sure you want to delete this file? This action can’t be undone. -admin.pages.delete-page: Delete Page -admin.pages.delete-page.prompt: Are you sure you want to delete this page? This action can’t be undone. -admin.pages.edit-page: Edit Page %s -admin.pages.editor.bold: Bold -admin.pages.editor.bullet-list: Bullet list -admin.pages.editor.image: Image -admin.pages.editor.italic: Italic -admin.pages.editor.link: Link -admin.pages.editor.numbered-list: Ordered list -admin.pages.editor.quote: Quote -admin.pages.editor.redo: Redo -admin.pages.editor.summary: Summary -admin.pages.editor.undo: Undo -admin.pages.files: Files -admin.pages.files.upload-label: Click to choose a file to upload or drag it here -admin.pages.languages: Languages -admin.pages.languages.add-language: Add %s -admin.pages.languages.edit-language: Edit %s -admin.pages.new-page: New Page -admin.pages.new-page.parent: Parent Page -admin.pages.new-page.site: Site -admin.pages.new-page.slug-suggestion: letters, numbers and dashes only -admin.pages.new-page.slug: Page Slug -admin.pages.new-page.template: Template -admin.pages.new-page.title: Title -admin.pages.options: Options -admin.pages.page: Page -admin.pages.page.actions: Actions -admin.pages.page.cacheable: Cacheable -admin.pages.page.cannot-change-num: Cannot change page number -admin.pages.page.cannot-create: Cannot create page -admin.pages.page.cannot-create.already-exists: Cannot create page, a page with the same uri already exists -admin.pages.page.cannot-create.invalid-parent: Cannot create page, invalid parent page -admin.pages.page.cannot-create.invalid-slug: Cannot create page, page slug must contain only letters and numbers separated by dashes -admin.pages.page.cannot-create.invalid-template: Cannot create page, invalid template -admin.pages.page.cannot-create.var-missing: Cannot create page, missing a variable -admin.pages.page.cannot-delete-file.file-not-found: Cannot delete file, file not found -admin.pages.page.cannot-delete-file.page-not-found: Cannot delete file, file not found -admin.pages.page.cannot-delete.invalid-language: 'Cannot delete page, invalid language: %s' -admin.pages.page.cannot-delete.not-deletable: Cannot delete page, the page is not deletable -admin.pages.page.cannot-delete.page-not-found: Cannot delete page, page not found -admin.pages.page.cannot-edit.already-exists: Cannot edit page, a page with the same uri already exists -admin.pages.page.cannot-edit.index-or-error-page-slug: Cannot edit page slug of index and error pages -admin.pages.page.cannot-edit.invalid-language: 'Cannot edit page, invalid language: %s' -admin.pages.page.cannot-edit.invalid-parent: Cannot edit page, invalid parent page -admin.pages.page.cannot-edit.invalid-slug: Cannot edit page slug, it must contain only letters and numbers separated by dashes -admin.pages.page.cannot-edit.invalid-template: Cannot edit page, invalid template -admin.pages.page.cannot-edit.page-not-found: Cannot edit page, page not found -admin.pages.page.cannot-edit.var-missing: Cannot edit page, missing a variable -admin.pages.page.cannot-move: Cannot move page -admin.pages.page.cannot-upload-file.page-not-found: Cannot upload file, page not found -admin.pages.page.created: Page created! -admin.pages.page.deleted: Page deleted -admin.pages.page.edited: Page edited -admin.pages.page.file-deleted: File deleted -admin.pages.page.image: Image -admin.pages.page.last-modified: Last Modified -admin.pages.page.moved: Page moved! -admin.pages.page.no-date: No Date -admin.pages.page.no-image: No Image -admin.pages.page.no-tags: No Tags -admin.pages.page.not-found: Page not found -admin.pages.page.posts-per-page: Posts per page -admin.pages.page.publish-date: Publish Date -admin.pages.page.status: Status -admin.pages.page.tags: Tags -admin.pages.page.title: Title -admin.pages.page.unpublish-date: Unpublish Date -admin.pages.page.listed: Visible in the menu -admin.pages.pages: Pages -admin.pages.pages.collapse-all: Collapse All -admin.pages.pages.expand-all: Expand All -admin.pages.pages.reorder: Reorder -admin.pages.pages.search: Search Pages... -admin.pages.parent: Parent Page -admin.pages.preview-file: Preview -admin.pages.preview: Preview -admin.pages.save: Save -admin.pages.status.not-published: Not Published -admin.pages.status.not-routable: Not Routable -admin.pages.status.published: Published -admin.pages.status.routable: Routable -admin.pages.summary: Summary -admin.pages.template: Template -admin.pages.text: Text -admin.pages.toggle-children: Toggle Children Pages -admin.panel: Administration Panel -admin.register.create-user: Formwork Admin is installed but no users were found. Please register a user now. -admin.register.register: Register New User -admin.request.error.post-max-size: The HTTP POST request exceeds the maximum allowed size -admin.updates.available-for-install: is available for install -admin.updates.check: Check Updates -admin.updates.install-prompt: Would you like to install the update? -admin.updates.install: Install -admin.updates.installed: Update installed! -admin.updates.latest-version-available: is the latest version available -admin.updates.status.cannot-check: Cannot check for updates. Try again later. -admin.updates.status.cannot-install: Cannot install update -admin.updates.status.cannot-make-backup: Cannot make backup before updating -admin.updates.status.checking: Checking for updates... -admin.updates.status.found: Updates found -admin.updates.status.installing: Installing updates... -admin.updates.status.up-to-date: Up-to-date! -admin.uploader.error: Cannot upload file. %s. -admin.uploader.error.already-exists: A file with the same name already exists -admin.uploader.error.cannot-move-to-destination: Failed to move uploaded file to destination -admin.uploader.error.cannot-write: Failed to write file to disk -admin.uploader.error.destination-too-long: Destination path too long -admin.uploader.error.file-name-too-long: File name too long -admin.uploader.error.file-name: Invalid file name -admin.uploader.error.hidden-files: Cannot upload hidden files beginning with a dot -admin.uploader.error.mime-type: File type not allowed -admin.uploader.error.no-file: No file was uploaded -admin.uploader.error.no-temp: Missing a temporary folder -admin.uploader.error.partial: The uploaded file was only partially uploaded -admin.uploader.error.php-extension: File upload stopped by extension -admin.uploader.error.size: The uploaded file exceeds the maximum file size -admin.uploader.uploaded: File uploaded -admin.user.actions: Actions -admin.user.avatar: Avatar -admin.user.avatar.uploaded: Avatar uploaded -admin.user.color-scheme: Color Scheme -admin.user.color-scheme.auto: Auto -admin.user.color-scheme.dark: Dark -admin.user.color-scheme.light: Light -admin.user.email: Email -admin.user.fullname: Full Name -admin.user.language: Language -admin.user.last-access: Last access -admin.user.password: Password -admin.user.password.type-new-password: Type a new password to change... -admin.user.role: Role -admin.user.role.admin: Administrator -admin.user.role.user: User -admin.user.username: Username -admin.users.delete-user: Delete User -admin.users.delete-user.prompt: Are you sure you want to delete this user? This action can’t be undone. -admin.users.new-user: New User -admin.users.new-user.password-suggestion: at least 8 characters -admin.users.new-user.username-suggestion: between 3-20 letters, digits and dashes -admin.users.options: Options -admin.users.user-profile: '%s User Profile' -admin.users.user: User -admin.users.user.cannot-change-password: Cannot change the password of another user. The action is not allowed. -admin.users.user.cannot-change-role: Cannot change the role of %s. The action is not allowed. -admin.users.user.cannot-create.already-exists: Cannot create user, a user with the same name already exists -admin.users.user.cannot-create.var-missing: Cannot create user, missing a variable -admin.users.user.cannot-delete: Cannot delete user. You must be an administrator and the user must not be logged in. -admin.users.user.cannot-edit: Cannot edit user %s. The action is not allowed. -admin.users.user.created: User created -admin.users.user.deleted: User deleted -admin.users.user.edited: User data updated -admin.users.user.not-found: User not found -admin.users.users: Users -admin.view-site: View Site diff --git a/admin/translations/fr.yml b/admin/translations/fr.yml deleted file mode 100644 index 2e87790c..00000000 --- a/admin/translations/fr.yml +++ /dev/null @@ -1,248 +0,0 @@ -admin.backup.backup: Sauvegarde -admin.backup.error.cannot-download: Impossible de télécharger la sauvegarde. %s. -admin.backup.error.cannot-download.invalid-filename: Fichier de sauvegarde invalide -admin.backup.error.cannot-make: Impossible de faire une sauvegarde. %s. -admin.backup.ready: Sauvegarde prête. Démarrage du téléchargement… -admin.cache.clear: Vider le cache -admin.cache.cleared: Cache effacé -admin.dashboard.dashboard: Tableau de bord -admin.dashboard.last-modified-pages: Dernières pages éditées -admin.dashboard.quick-actions: Actions rapides -admin.dashboard.statistics: Statistiques -admin.dashboard.statistics.unique-visitors: Visiteurs uniques -admin.dashboard.statistics.visits: Visites -admin.dashboard.welcome: Bienvenue -admin.errors.action.report-to-github: Signaler le problème sur GitHub -admin.errors.action.return-to-dashboard: Retour au tableau de bord -admin.errors.error.forbidden.description: Vous n’êtes pas autorisé à accéder à cette page. -admin.errors.error.forbidden.heading: Oups, permission requise! -admin.errors.error.forbidden.status: Interdit -admin.errors.error.internal-server-error.description: Une erreur s’est produite lors du traitement de votre demande. Veuillez vérifier la configuration du CMS ou le journal du serveur pour rechercher des erreurs. -admin.errors.error.internal-server-error.heading: Oups, quelque chose s’est mal passé! -admin.errors.error.internal-server-error.status: Erreur Interne du Serveur -admin.errors.error.not-found.description: La page n’existe pas ou la demande n’est pas valide. -admin.errors.error.not-found.heading: Oups, page non trouvée! -admin.errors.error.not-found.status: Pas trouvé -admin.login.attempt.failed: La tentative de connexion a échoué! Réessayer. -admin.login.attempt.too-many: Trop de tentatives de connexion. Veuillez réessayer dans %d minutes. -admin.login.logged-out: Vous avez été déconnecté -admin.login.login: S’identifier -admin.login.logout: Déconnexion -admin.login.password: Mot de passe -admin.login.suspicious-request-detected: Une demande suspecte a été détectée et pour des raisons de sécurité, vous avez été déconnecté. Veuillez vous reconnecter. -admin.login.username: Nom d’utilisateur -admin.manage: Gérer -admin.modal.action.cancel: Annuler -admin.modal.action.continue: Continuer -admin.modal.action.delete: Supprimer -admin.modal.action.save: Enregistrer -admin.modal.action.upload-file: Parcourir… -admin.modal.images.no-images: Aucun fichier média n’a été trouvé. -admin.modal.images.no-images.upload: Sélectionnez vos fichiers à téléverser. -admin.modal.images.title: Bibliothèque de médias -admin.options.info: Information -admin.options.options: Paramètres -admin.options.site: Site -admin.options.site.advanced: Options avancées -admin.options.site.advanced.aliases: Alias -admin.options.site.advanced.aliases.alias: Alias -admin.options.site.advanced.aliases.route: Route -admin.options.site.advanced.metadata: Métadonnées HTML -admin.options.site.advanced.metadata.content: Contenu -admin.options.site.advanced.metadata.name: Nom -admin.options.site.info: Info -admin.options.site.info.author: Auteur -admin.options.site.info.description: Description -admin.options.site.info.language: Langue -admin.options.site.info.title: Titre -admin.options.system: Système -admin.options.system.admin-panel: Panneau d’administration -admin.options.system.admin-panel.default-language: Langue par défaut -admin.options.system.admin-panel.logout-redirects-to: Après déconnexion, redirection vers -admin.options.system.admin-panel.logout-redirects-to.home: Page d’accueil -admin.options.system.admin-panel.logout-redirects-to.login: Page d’identification -admin.options.system.admin-panel.session-timeout: Expiration de la session (min) -admin.options.system.backup: Sauvegarde -admin.options.system.backup.backup-files-to-keep: Sauvegardes à conserver sur le serveur -admin.options.system.cache: Cache -admin.options.system.cache.disabled: Désactivé -admin.options.system.cache.enabled: Activé -admin.options.system.cache.time: Temps de mise cache (sec) -admin.options.system.date-and-time: Date et heure -admin.options.system.date-and-time.date-format: Format de date -admin.options.system.date-and-time.first-weekday: La semaine débute le -admin.options.system.date-and-time.first-weekday.monday: Lundi -admin.options.system.date-and-time.first-weekday.sunday: Dimanche -admin.options.system.date-and-time.hour-format: Format d’heure -admin.options.system.date-and-time.timezone: Fuseau horaire -admin.options.system.files: Fichiers -admin.options.system.files.allowed-extensions: Extensions autorisées -admin.options.system.images: Images -admin.options.system.images.jpeg-quality: Qualité JPEG -admin.options.system.images.jpeg-save-progressive: Enregistrer les images JPEG en progressif -admin.options.system.images.jpeg-save-progressive.disabled: Désactivé -admin.options.system.images.jpeg-save-progressive.enabled: Activé -admin.options.system.images.png-compression-level: Niveau de compression PNG -admin.options.system.images.process-uploads: Traitement (optimisé) des images envoyées -admin.options.system.images.process-uploads.disabled: Désactivé -admin.options.system.images.process-uploads.enabled: Activé -admin.options.system.images.webp-quality: Qualité WebP -admin.options.system.languages: Langues -admin.options.system.languages.available-languages: Langues disponibles -admin.options.system.languages.available-languages.no-languages: Aucune langue -admin.options.system.languages.preferred-language: Utiliser la langue préférée du navigateur -admin.options.system.languages.preferred-language.disabled: Désactivé -admin.options.system.languages.preferred-language.enabled: Activé -admin.options.updated: Options mises à jour -admin.options.updates: Mises à jour -admin.pages.attributes: Attributs -admin.pages.change-slug: Modifier le permalien -admin.pages.change-slug.generate: Générer automatiquement à partir du titre -admin.pages.changes.continue: Continuer sans sauvegarder -admin.pages.changes.detected: Changements détectés -admin.pages.changes.detected.prompt: Vous avez des modifications qui n’ont pas été enregistrées. Êtes-vous sûr de vouloir quitter cette page ? -admin.pages.content: Contenu -admin.pages.delete-file: Supprimer le fichier -admin.pages.delete-file.prompt: Êtes-vous sûr de vouloir supprimer ce fichier ? Cette action est irréversible. -admin.pages.delete-page: Supprimer la page -admin.pages.delete-page.prompt: Êtes-vous sûr de vouloir supprimer cette page ? Cette action est irréversible. -admin.pages.edit-page: Modifier la page %s -admin.pages.editor.bold: Gras -admin.pages.editor.bullet-list: Liste à puce -admin.pages.editor.image: Image -admin.pages.editor.italic: Italique -admin.pages.editor.link: Lien -admin.pages.editor.numbered-list: Liste ordonnée -admin.pages.editor.quote: Citer -admin.pages.editor.redo: Refaire -admin.pages.editor.summary: Résumé -admin.pages.editor.undo: Annuler -admin.pages.files: Fichiers -admin.pages.languages: Langues -admin.pages.languages.add-language: Ajouter %s -admin.pages.languages.edit-language: Éditer %s -admin.pages.new-page: Nouvelle page -admin.pages.new-page.parent: Parent -admin.pages.new-page.site: Site -admin.pages.new-page.slug-suggestion: lettres, chiffres et tirets seulement -admin.pages.new-page.slug: Permalien -admin.pages.new-page.template: Modèle (Template) -admin.pages.new-page.title: Titre -admin.pages.options: Options -admin.pages.page.actions: Actions -admin.pages.page.cacheable: Activer le cache -admin.pages.page.cannot-change-num: Impossible de changer le numéro de page -admin.pages.page.cannot-create: Impossible de créer une page -admin.pages.page.cannot-create.already-exists: Impossible de créer une page, une page avec le même uri existe déjà -admin.pages.page.cannot-create.invalid-parent: Impossible de créer une page, page parente non valide -admin.pages.page.cannot-create.invalid-slug: Impossible de créer une page, l’identifiant de la page ne doit contenir que des lettres et des chiffres séparés par des tirets -admin.pages.page.cannot-create.invalid-template: Impossible de créer une page, modèle non valide -admin.pages.page.cannot-create.var-missing: Impossible de créer une page, il manque une variable -admin.pages.page.cannot-delete-file.file-not-found: Impossible de supprimer le fichier, fichier introuvable -admin.pages.page.cannot-delete-file.page-not-found: Impossible de supprimer le fichier, page non trouvée -admin.pages.page.cannot-delete.invalid-language: 'Impossible de supprimer la page, terme non défini : %s' -admin.pages.page.cannot-delete.not-deletable: Impossible de supprimer la page, la page ne peut être supprimée -admin.pages.page.cannot-delete.page-not-found: Impossible de supprimer la page, page introuvable -admin.pages.page.cannot-edit.already-exists: Impossible de modifier la page, une page avec la même URL existe déjà -admin.pages.page.cannot-edit.index-or-error-page-slug: Impossible de modifier l’identifiant de la page d’acceuil et celle de la page d’erreur -admin.pages.page.cannot-edit.invalid-language: 'Impossible de modifier la page, terme non défini : %s' -admin.pages.page.cannot-edit.invalid-parent: Impossible de modifier la page, page parente non valide -admin.pages.page.cannot-edit.invalid-slug: Impossible de modifier l’identifiant de la page, il doit contenir que des lettres et des chiffres séparés par des tirets -admin.pages.page.cannot-edit.invalid-template: Impossible de modifier la page, modèle non valide -admin.pages.page.cannot-edit.page-not-found: Impossible de modifier la page, page non trouvée -admin.pages.page.cannot-edit.var-missing: Impossible de modifier la page, il manque une variable -admin.pages.page.cannot-move: Impossible de déplacer la page -admin.pages.page.cannot-upload-file.page-not-found: Impossible de téléverser le fichier, page introuvable -admin.pages.page.created: Page créée ! -admin.pages.page.deleted: Page supprimée -admin.pages.page.edited: Page éditée -admin.pages.page.file-deleted: Fichier supprimé -admin.pages.page.image: Image d’accroche -admin.pages.page.last-modified: Dernière modification -admin.pages.page.moved: Page déplacée ! -admin.pages.page.no-date: Aucune date -admin.pages.page.no-image: Aucune image -admin.pages.page.no-tags: Aucun tag -admin.pages.page.not-found: Page non trouvée -admin.pages.page.posts-per-page: Articles par page -admin.pages.page.publish-date: Date de publication -admin.pages.page.status: Statut -admin.pages.page.tags: Tags -admin.pages.page.title: Titre -admin.pages.page.unpublish-date: Date de péremption -admin.pages.page.visible: Visible dans le menu -admin.pages.pages: Pages -admin.pages.pages.collapse-all: Tout réduire -admin.pages.pages.expand-all: Tout développer -admin.pages.pages.reorder: Réorganiser -admin.pages.pages.search: Rechercher dans les Pages… -admin.pages.parent: Parent -admin.pages.preview-file: Aperçu -admin.pages.preview: Aperçu -admin.pages.save: Enregistrer -admin.pages.status.not-published: Brouillon -admin.pages.status.not-routable: Inaccessible -admin.pages.status.published: Publié -admin.pages.status.routable: Accessible -admin.pages.template: Modèle -admin.panel: Panneau d’administration -admin.register.create-user: Le compte admin est installé mais aucun utilisateur n’a été trouvé. Veuillez enregistrer un utilisateur maintenant. -admin.register.register: Enregistrer un nouvel utilisateur -admin.request.error.post-max-size: La demande HTTP POST dépasse la taille maximale autorisée -admin.updates.available-for-install: est disponible pour l’installation -admin.updates.check: Vérifier les mises à jour -admin.updates.install-prompt: Voulez-vous installer la mise à jour ? -admin.updates.install: Installer -admin.updates.installed: Mise à jour installée ! -admin.updates.latest-version-available: est la dernière version disponible -admin.updates.status.cannot-install: Impossible d’installer la mise à jour -admin.updates.status.cannot-make-backup: Impossible de faire une sauvegarde avant la mise à jour -admin.updates.status.checking: Vérification des mises à jour… -admin.updates.status.found: Mises à jour trouvées -admin.updates.status.installing: Installation de mises à jour… -admin.updates.status.up-to-date: À jour ! -admin.uploader.error: Impossible de télécharger le fichier. %s. -admin.uploader.error.already-exists: Un fichier du même nom existe déjà -admin.uploader.error.cannot-write: Échec de l’écriture du fichier sur le disque -admin.uploader.error.file-name: Nom de fichier non valide -admin.uploader.error.hidden-files: Impossible de téléverser des fichiers cachés commençant par un point -admin.uploader.error.mime-type: Type de fichier non autorisé -admin.uploader.error.no-file: Aucun fichier n’a été téléchargé -admin.uploader.error.no-temp: Absence du dossier temporaire -admin.uploader.error.partial: Le fichier envoyé n’a été que partiellement téléversé -admin.uploader.error.php-extension: Téléversement du fichier arrêté par extension -admin.uploader.error.size: Le fichier téléversé dépasse la taille de fichier maximale -admin.uploader.uploaded: Fichier envoyé ! -admin.user.actions: Actions -admin.user.avatar: Photo de profil -admin.user.avatar.uploaded: Photo de profil téléversée avec succès. -admin.user.email: Adresse de messagerie -admin.user.fullname: Nom complet -admin.user.language: Langue -admin.user.last-access: Dernier accès -admin.user.password: Mot de passe -admin.user.password.type-new-password: Tapez un nouveau mot de passe pour le modifier... -admin.user.role: Rôle -admin.user.role.admin: Administrateur -admin.user.role.user: Éditeur -admin.user.username: Nom d’utilisateur -admin.users.delete-user: Supprimer l’utilisateur -admin.users.delete-user.prompt: Êtes-vous sûr de vouloir supprimer cet utilisateur? Cette action est irréversible. -admin.users.new-user: Nouvel utilisateur -admin.users.new-user.password-suggestion: au moins 8 caractères -admin.users.new-user.username-suggestion: entre 3-20 lettres, chiffres et tirets -admin.users.options: Options -admin.users.user-profile: 'Profil utilisateur de %s' -admin.users.user: Utilisateur -admin.users.user.cannot-change-password: Impossible de changer le mot de passe d’un autre utilisateur. L’action n’est pas autorisée. -admin.users.user.cannot-change-role: Impossible de changer le rôle de %s. L’action n’est pas autorisée. -admin.users.user.cannot-create.already-exists: Impossible de créer l’utilisateur, un utilisateur portant le même nom existe déjà -admin.users.user.cannot-create.var-missing: Impossible de créer l’utilisateur, il manque une variable -admin.users.user.cannot-delete: Impossible de supprimer l’utilisateur. Vous devez être un administrateur et l’utilisateur ne doit pas être connecté. -admin.users.user.cannot-edit: Impossible de modifier l’utilisateur %s. L’action n’est pas autorisée. -admin.users.user.created: Compte utilisateur créé -admin.users.user.deleted: Utilisateur supprimé -admin.users.user.edited: Profil utilisateur mises à jour -admin.users.user.not-found: Utilisateur non trouvé -admin.users.users: Utilisateurs -admin.view-site: Voir le site diff --git a/admin/translations/it.yml b/admin/translations/it.yml deleted file mode 100644 index 083c6f07..00000000 --- a/admin/translations/it.yml +++ /dev/null @@ -1,262 +0,0 @@ -admin.backup.backup: Esegui backup -admin.backup.error.cannot-download: Impossibile scaricare il backup. %s. -admin.backup.error.cannot-download.invalid-filename: File di backup non valido. -admin.backup.error.cannot-make: Impossibile eseguire il backup. %s. -admin.backup.ready: Backup pronto. Inizio a scaricare... -admin.cache.clear: Svuota cache -admin.cache.cleared: Cache svuotata -admin.dashboard.dashboard: Riepilogo -admin.dashboard.last-modified-pages: Ultime pagine modificate -admin.dashboard.quick-actions: Azioni rapide -admin.dashboard.statistics: Statistiche -admin.dashboard.statistics.unique-visitors: Visitatori unici -admin.dashboard.statistics.visits: Visite -admin.dashboard.welcome: Benvenuto/a -admin.drag-to-reorder: Trascina per riordinare -admin.errors.action.report-to-github: Segnala un problema su GitHub -admin.errors.action.return-to-dashboard: Torna al Riepilogo -admin.errors.error.forbidden.description: Non si hanno i permessi per accedere a questa pagina. -admin.errors.error.forbidden.heading: Oops, permessi mancanti! -admin.errors.error.forbidden.status: Accesso negato -admin.errors.error.internal-server-error.description: Formwork Admin ha riscontrato un errore nell’elaborare la richiesta. Controlla la configurazione di Formwork o il registro degli errori. -admin.errors.error.internal-server-error.heading: Oops, qualcosa è andato storto! -admin.errors.error.internal-server-error.status: Errore interno del server -admin.errors.error.not-found.description: La pagina non esiste o la richiesta non è valida. -admin.errors.error.not-found.heading: Oops, pagina non trovata! -admin.errors.error.not-found.status: Non trovato -admin.login.attempt.failed: Tentativo di accesso fallito! Riprova. -admin.login.attempt.too-many: Sono stati sbagliati troppi tentativi di accesso. Riprova tra %d minuti. -admin.login.logged-out: Sei stato disconnesso -admin.login.login: Accedi -admin.login.logout: Esci -admin.login.password: Password -admin.login.suspicious-request-detected: È stata rilevata una richiesta sospetta e per ragioni di sicurezza si è usciti dalla sessione. Effettua nuovamente l’accesso. -admin.login.username: Nome utente -admin.manage: Gestione -admin.modal.action.cancel: Annulla -admin.modal.action.continue: Continua -admin.modal.action.delete: Elimina -admin.modal.action.save: Salva -admin.modal.action.upload-file: Carica file -admin.modal.images.no-images: Qui non ci sono immagini -admin.modal.images.no-images.upload: Carica qualche immagine -admin.modal.images.title: Seleziona immagine -admin.options.info: Informazioni -admin.options.options: Impostazioni -admin.options.site: Sito -admin.options.site.advanced: Impostazioni avanzate -admin.options.site.advanced.aliases: Alias -admin.options.site.advanced.aliases.alias: Alias -admin.options.site.advanced.aliases.route: Indirizzo -admin.options.site.advanced.metadata: Metadati HTML -admin.options.site.advanced.metadata.content: Contenuto -admin.options.site.advanced.metadata.name: Nome -admin.options.site.info: Informazioni -admin.options.site.info.author: Autore -admin.options.site.info.description: Descrizione -admin.options.site.info.language: Lingua -admin.options.site.info.title: Titolo -admin.options.system: Sistema -admin.options.system.admin-panel: Pannello di amministrazione -admin.options.system.admin-panel.default-color-scheme: Combinazione di colori predefinita -admin.options.system.admin-panel.default-color-scheme.dark: Scura -admin.options.system.admin-panel.default-color-scheme.light: Chiara -admin.options.system.admin-panel.default-language: Lingua predefinita -admin.options.system.admin-panel.logout-redirects-to: Reindirizza dopo la disconnessione -admin.options.system.admin-panel.logout-redirects-to.home: Pagina iniziale -admin.options.system.admin-panel.logout-redirects-to.login: Accedi -admin.options.system.admin-panel.session-timeout: Durata sessione (min) -admin.options.system.backup: Backup -admin.options.system.backup.backup-files-to-keep: Backup da tenere sul server -admin.options.system.cache: Cache -admin.options.system.cache.disabled: Disabilitata -admin.options.system.cache.enabled: Abilitata -admin.options.system.cache.time: Tempo cache (sec) -admin.options.system.date-and-time: Data e ora -admin.options.system.date-and-time.date-format: Formato data -admin.options.system.date-and-time.first-weekday: Primo giorno della settimana -admin.options.system.date-and-time.first-weekday.monday: Lunedì -admin.options.system.date-and-time.first-weekday.sunday: Domenica -admin.options.system.date-and-time.hour-format: Formato ora -admin.options.system.date-and-time.timezone: Fuso orario -admin.options.system.files: File -admin.options.system.files.allowed-extensions: Estensioni consentite -admin.options.system.images: Immagini -admin.options.system.images.jpeg-quality: Qualità JPEG -admin.options.system.images.jpeg-save-progressive: Salva le immagini JPEG come progressive -admin.options.system.images.jpeg-save-progressive.disabled: Disabilitato -admin.options.system.images.jpeg-save-progressive.enabled: Abilitato -admin.options.system.images.png-compression-level: Livello di compressione PNG -admin.options.system.images.process-uploads: Elabora (ottimizza) le immagini caricate -admin.options.system.images.process-uploads.disabled: Disabilitato -admin.options.system.images.process-uploads.enabled: Abilitato -admin.options.system.images.webp-quality: Qualità WebP -admin.options.system.languages: Lingue -admin.options.system.languages.available-languages: Lingue disponibili -admin.options.system.languages.available-languages.no-languages: Nessuna lingua -admin.options.system.languages.preferred-language: Usa lingua preferita dal browser -admin.options.system.languages.preferred-language.disabled: Disabilitato -admin.options.system.languages.preferred-language.enabled: Abilitato -admin.options.updated: Opzioni aggiornate -admin.options.updates: Aggiornamenti -admin.pages.attributes: Attributi -admin.pages.change-slug: Modifica indirizzo -admin.pages.change-slug.generate: Genera dal titolo -admin.pages.changes.continue: Continua senza salvare -admin.pages.changes.detected: Modifiche rilevate -admin.pages.changes.detected.prompt: Alcune modifiche non sono state salvate. Si è sicuri di voler lasciare la pagina? -admin.pages.content: Contenuto -admin.pages.delete-file: Elimina file -admin.pages.delete-file.prompt: Si è sicuri di eliminare il file? Questa azione non può essere annullata. -admin.pages.delete-page: Elimina pagina -admin.pages.delete-page.prompt: Si è sicuri di eliminare la pagina? Questa azione non può essere annullata. -admin.pages.edit-page: Modifica pagina %s -admin.pages.editor.bold: Grassetto -admin.pages.editor.bullet-list: Elenco puntato -admin.pages.editor.image: Immagine -admin.pages.editor.italic: Corsivo -admin.pages.editor.link: Collegamento -admin.pages.editor.numbered-list: Elenco numerato -admin.pages.editor.quote: Citazione -admin.pages.editor.redo: Ripeti -admin.pages.editor.summary: Sommario -admin.pages.editor.undo: Annulla -admin.pages.files: File -admin.pages.languages: Lingue -admin.pages.languages.add-language: Aggiungi %s -admin.pages.languages.edit-language: Modifica %s -admin.pages.new-page: Nuova pagina -admin.pages.new-page.parent: Pagina superiore -admin.pages.new-page.site: Sito -admin.pages.new-page.slug-suggestion: solo lettere, numeri e trattini -admin.pages.new-page.slug: Indirizzo pagina -admin.pages.new-page.template: Template -admin.pages.new-page.title: Titolo -admin.pages.options: Opzioni -admin.pages.page: Pagina -admin.pages.page.actions: Azioni -admin.pages.page.cacheable: Abilita cache -admin.pages.page.cannot-change-num: Impossibile cambiare il numero della pagina -admin.pages.page.cannot-create: Impossibile creare la pagina -admin.pages.page.cannot-create.already-exists: Impossibile creare la pagina, una pagina con lo stesso indirizzo esiste già -admin.pages.page.cannot-create.invalid-parent: Impossibile creare la pagina, la pagina superiore specificata non è valida -admin.pages.page.cannot-create.invalid-slug: Impossibile creare la pagina, l'indirizzo deve contenere solo lettere e numeri separati da trattini -admin.pages.page.cannot-create.invalid-template: Impossibile creare la pagina, il template specificato non è valido -admin.pages.page.cannot-create.var-missing: Impossibile creare la pagina, manca una variabile -admin.pages.page.cannot-delete-file.file-not-found: Impossibile eliminare il file, file non trovato -admin.pages.page.cannot-delete-file.page-not-found: Impossibile eliminare il file, pagina non trovata -admin.pages.page.cannot-delete.invalid-language: Impossibile eliminare la pagina, lingua %s non valida -admin.pages.page.cannot-delete.not-deletable: Impossibile eliminare la pagina, la pagina non è eliminabile -admin.pages.page.cannot-delete.page-not-found: Impossibile eliminare la pagina, pagina non trovata -admin.pages.page.cannot-edit.already-exists: Impossibile modificare la pagina, una pagina con lo stesso indirizzo esiste già -admin.pages.page.cannot-edit.index-or-error-page-slug: Impossibile cambiare l'indirizzo della pagina iniziale o di errore -admin.pages.page.cannot-edit.invalid-language: Impossibile modificare la pagina, lingua %s non valida -admin.pages.page.cannot-edit.invalid-parent: Impossibile modificare la pagina, pagina superiore non valida -admin.pages.page.cannot-edit.invalid-slug: Impossibile cambiare l'indirizzo, l'indirizzo deve contenere solo lettere e numeri separati da trattini -admin.pages.page.cannot-edit.invalid-template: Impossibile modificare la pagina, template non valido -admin.pages.page.cannot-edit.page-not-found: Impossibile modificare la pagina, pagina non trovata -admin.pages.page.cannot-edit.var-missing: Impossibile modificare la pagina, manca una variabile -admin.pages.page.cannot-move: Impossibile spostare la pagina -admin.pages.page.cannot-upload-file.page-not-found: Impossibile caricare il file, pagina non trovata -admin.pages.page.created: Pagina creata! -admin.pages.page.deleted: Pagina eliminata -admin.pages.page.edited: Pagina modificata! -admin.pages.page.file-deleted: File eliminato -admin.pages.page.image: Immagine -admin.pages.page.last-modified: Ultime modifiche -admin.pages.page.moved: Pagina spostata! -admin.pages.page.no-date: Nessuna data -admin.pages.page.no-image: Nessuna immagine -admin.pages.page.no-tags: Nessun tag -admin.pages.page.not-found: Pagina non trovata -admin.pages.page.posts-per-page: Post per pagina -admin.pages.page.publish-date: Data di pubblicazione -admin.pages.page.status: Stato -admin.pages.page.tags: Tag -admin.pages.page.title: Titolo -admin.pages.page.unpublish-date: Data di rimozione -admin.pages.page.visible: Visibile nel menu -admin.pages.pages: Pagine -admin.pages.pages.collapse-all: Riduci tutte -admin.pages.pages.expand-all: Espandi tutte -admin.pages.pages.reorder: Riordina -admin.pages.pages.search: Cerca pagine... -admin.pages.parent: Pagina superiore -admin.pages.preview-file: Anteprima -admin.pages.preview: Anteprima -admin.pages.save: Salva -admin.pages.status.not-published: Non pubblicato -admin.pages.status.not-routable: Non raggiungibile -admin.pages.status.published: Pubblicato -admin.pages.status.routable: Raggiungibile -admin.pages.template: Template -admin.pages.toggle-children: Mostra/nascondi sottopagine -admin.panel: Pannello di Amministrazione -admin.register.create-user: Formwork Admin è installato ma non è stato trovato alcun utente. Registrane uno ora. -admin.register.register: Registra nuovo utente -admin.request.error.post-max-size: La richiesta HTTP con metodo POST supera la dimensione massima consentita -admin.updates.available-for-install: è disponibile per l'installazione -admin.updates.check: Cerca aggiornamenti -admin.updates.install-prompt: Installare l'aggiornamento? -admin.updates.install: Installa -admin.updates.installed: Aggiornamento installato! -admin.updates.latest-version-available: è l'ultima versione disponibile -admin.updates.status.cannot-check: Impossibile cercare aggiornamenti. Riprova più tardi. -admin.updates.status.cannot-install: Impossibile installare l'aggiornamento -admin.updates.status.cannot-make-backup: Impossibile eseguire il backup prima di aggiornare -admin.updates.status.checking: Cerco aggiornamenti... -admin.updates.status.found: Aggiornamento disponibile -admin.updates.status.installing: Installo aggiornamento... -admin.updates.status.up-to-date: Aggiornato! -admin.uploader.error: Impossibile caricare il file. %s. -admin.uploader.error.already-exists: Un file con lo stesso nome esiste già -admin.uploader.error.cannot-move-to-destination: Impossibile spostare il file caricato alla destinazione -admin.uploader.error.cannot-write: Impossibile salvare il file sul disco -admin.uploader.error.destination-too-long: Il percorso di destinazione è troppo lungo -admin.uploader.error.file-name-too-long: Il nome del file è troppo lungo -admin.uploader.error.file-name: Nome del file non valido -admin.uploader.error.hidden-files: Impossibile caricare i file che iniziano con '.' -admin.uploader.error.mime-type: Il tipo di file non è consentito -admin.uploader.error.no-file: Nessun file caricato -admin.uploader.error.no-temp: Cartella temporanea mancante -admin.uploader.error.partial: Il file è stato caricato solo parzialmente -admin.uploader.error.php-extension: Il caricamento è stato interrotto da un’estensione -admin.uploader.error.size: Il file caricato supera la dimensione massima consentita -admin.uploader.uploaded: File caricato -admin.user.actions: Azioni -admin.user.avatar: Immagine -admin.user.avatar.uploaded: Immagine caricata -admin.user.color-scheme: Combinazione di colori -admin.user.color-scheme.auto: Automatica -admin.user.color-scheme.dark: Scura -admin.user.color-scheme.light: Chiara -admin.user.email: E-mail -admin.user.fullname: Nome completo -admin.user.language: Lingua -admin.user.last-access: Ultimo accesso -admin.user.password: Password -admin.user.password.type-new-password: Inserisci una nuova password per cambiarla... -admin.user.role: Ruolo -admin.user.role.admin: Amministratore -admin.user.role.user: Utente -admin.user.username: Nome utente -admin.users.delete-user: Elimina utente -admin.users.delete-user.prompt: Si è sicuri di eliminare l’utente? Questa azione non può essere annullata. -admin.users.new-user: Nuovo utente -admin.users.new-user.password-suggestion: almeno 8 caratteri -admin.users.new-user.username-suggestion: da 3 a 20 lettere, numeri, - e _ -admin.users.options: Opzioni -admin.users.user-profile: Profilo utente %s -admin.users.user: Utente -admin.users.user.cannot-change-password: Impossibile cambiare la password di un altro utente. L’azione non è consentita. -admin.users.user.cannot-change-role: Impossible cambare il ruolo di %s. L’azione non è consentita. -admin.users.user.cannot-create.already-exists: Impossibile creare l’utente, un utente con lo stesso nome esiste già -admin.users.user.cannot-create.var-missing: Impossibile creare l’utente, manca una variabile -admin.users.user.cannot-delete: Impossibile eliminare l’utente. Devi essere un amministratore e l’utente non deve essere connesso. -admin.users.user.cannot-edit: Impossibile modificare l’utente %s. L’azione non è consentita. -admin.users.user.created: Utente creato -admin.users.user.deleted: Utente eliminato -admin.users.user.edited: Dati utente aggiornati -admin.users.user.not-found: Utente non trovato -admin.users.users: Utenti -admin.view-site: Visualizza sito diff --git a/admin/translations/pt.yml b/admin/translations/pt.yml deleted file mode 100644 index 9044c36c..00000000 --- a/admin/translations/pt.yml +++ /dev/null @@ -1,261 +0,0 @@ -admin.backup.backup: Cópia de Segurança -admin.backup.error.cannot-download: Não é possível efectuar download da cópia de segurança. %s. -admin.backup.error.cannot-download.invalid-filename: Ficheiro de backup inválido -admin.backup.error.cannot-make: Não é possível fazer cópia de segurança. %s. -admin.backup.ready: Cópia de segurança pronta. A iniciar o download... -admin.cache.clear: Limpar cache -admin.cache.cleared: Cache limpa -admin.dashboard.dashboard: Painel -admin.dashboard.last-modified-pages: Últimas páginas editadas -admin.dashboard.quick-actions: Acções Rápidas -admin.dashboard.statistics: Estatisticas -admin.dashboard.statistics.unique-visitors: Visitantes Únicos -admin.dashboard.statistics.visits: Visitas -admin.dashboard.welcome: Bem-Vindo -admin.errors.action.report-to-github: Denúncie um problema no GitHub -admin.errors.action.return-to-dashboard: Voltar ao Painel -admin.errors.error.forbidden.description: Não tem permissões para aceder a esta página. -admin.errors.error.forbidden.heading: Oops, permissão necessária! -admin.errors.error.forbidden.status: Proibido -admin.errors.error.internal-server-error.description: Formwork Admin encontrou um erro ao atender sua solicitação. Verifique a configuração do Formwork ou o log do servidor para erros. -admin.errors.error.internal-server-error.heading: Ops, algo errado aconteceu! -admin.errors.error.internal-server-error.status: Erro Interno do Servidor -admin.errors.error.not-found.description: A página não existe ou a solicitação não é válida. -admin.errors.error.not-found.heading: Ops, página não encontrada! -admin.errors.error.not-found.status: Não Encontrado -admin.login.attempt.failed: Falha ao tentar efetuar login! Tente novamente. -admin.login.attempt.too-many: Demasiadas tentativas de login. Tente novamente em %d minutos. -admin.login.logged-out: Você foi desconectado -admin.login.login: Login -admin.login.logout: Logout -admin.login.password: Password -admin.login.suspicious-request-detected: Uma solicitação suspeita foi detectada e, por motivos de segurança, você foi desconectado. Por favor faça login novamente. -admin.login.username: Nome do Utilizador -admin.manage: Administrar -admin.modal.action.cancel: Cancelar -admin.modal.action.continue: Continuar -admin.modal.action.delete: Remover -admin.modal.action.save: Guardar -admin.modal.action.upload-file: Enviar um ficheiro -admin.modal.images.no-images: Não há imagens aqui -admin.modal.images.no-images.upload: Por favor carregue algumas imagens -admin.modal.images.title: Escolha uma Imagem -admin.options.info: Informações -admin.options.options: Opções -admin.options.site: Site -admin.options.site.advanced: Opções Avançadas -admin.options.site.advanced.aliases: Aliases -admin.options.site.advanced.aliases.alias: Alias -admin.options.site.advanced.aliases.route: Rota -admin.options.site.advanced.metadata: Metadados HTML -admin.options.site.advanced.metadata.content: Conteúdo -admin.options.site.advanced.metadata.name: Nome -admin.options.site.info: Informações -admin.options.site.info.author: Autor -admin.options.site.info.description: Descrição -admin.options.site.info.language: Idiomas -admin.options.site.info.title: Título -admin.options.system: Sistema -admin.options.system.admin-panel: Painel de Administração -admin.options.system.admin-panel.default-color-scheme: Esquema de cores padrão -admin.options.system.admin-panel.default-color-scheme.dark: Escuro -admin.options.system.admin-panel.default-color-scheme.light: Claro -admin.options.system.admin-panel.default-language: Idioma Padrão -admin.options.system.admin-panel.logout-redirects-to: Logout redireciona para -admin.options.system.admin-panel.logout-redirects-to.home: Principal -admin.options.system.admin-panel.logout-redirects-to.login: Login -admin.options.system.admin-panel.session-timeout: Tempo limite da sessão (min) -admin.options.system.backup: Cópia de Segurança -admin.options.system.backup.backup-files-to-keep: Backups para manter no servidor -admin.options.system.cache: Cache -admin.options.system.cache.disabled: Desactivado -admin.options.system.cache.enabled: Activado -admin.options.system.cache.time: Tempo de Cache (s) -admin.options.system.date-and-time: Data e Hora -admin.options.system.date-and-time.date-format: Formato de Data -admin.options.system.date-and-time.first-weekday: Primeiro Dia da Semana -admin.options.system.date-and-time.first-weekday.monday: Segunda -admin.options.system.date-and-time.first-weekday.sunday: Domingo -admin.options.system.date-and-time.hour-format: Formato de Hora -admin.options.system.date-and-time.timezone: Fuso Horário -admin.options.system.files: Ficheiros -admin.options.system.files.allowed-extensions: Extensões Permitidas -admin.options.system.images: Imagens -admin.options.system.images.jpeg-quality: Qualidade JPEG -admin.options.system.images.jpeg-save-progressive: Guardar imagens JPEG como progressivas -admin.options.system.images.jpeg-save-progressive.disabled: Desactivado -admin.options.system.images.jpeg-save-progressive.enabled: Activado -admin.options.system.images.png-compression-level: Nível de compressão PNG -admin.options.system.images.process-uploads: Processar (optimizar) imagens enviadas -admin.options.system.images.process-uploads.disabled: Desactivado -admin.options.system.images.process-uploads.enabled: Activado -admin.options.system.images.webp-quality: Qualidade WebP -admin.options.system.languages: Idiomas -admin.options.system.languages.available-languages: Idiomas Disponiveis -admin.options.system.languages.available-languages.no-languages: Sem Idiomas -admin.options.system.languages.preferred-language: Use o idioma preferido do browser -admin.options.system.languages.preferred-language.disabled: Desactivado -admin.options.system.languages.preferred-language.enabled: Activado -admin.options.updated: Opções Actualizadas -admin.options.updates: Actualizações -admin.pages.attributes: Atributos -admin.pages.change-slug: Editar Slug -admin.pages.change-slug.generate: Criar a partir do Título -admin.pages.changes.continue: Continuar sem Guardar -admin.pages.changes.detected: Alterações Encontradas -admin.pages.changes.detected.prompt: Tem algumas alterações que não foram guardadas. Tem a certeza que deseja sair desta página? -admin.pages.content: Conteúdo -admin.pages.delete-file: Remover Ficheiro -admin.pages.delete-file.prompt: Tem certeza de que deseja remover este ficheiro? Esta acção não pode ser desfeita. -admin.pages.delete-page: Remover Página -admin.pages.delete-page.prompt: Tem certeza que deseja remover esta página? Esta ação não pode ser desfeita. -admin.pages.edit-page: Editar Página %s -admin.pages.editor.bold: Negrito -admin.pages.editor.bullet-list: Lista de marcadores -admin.pages.editor.image: Imagem -admin.pages.editor.italic: Itálico -admin.pages.editor.link: Ligação -admin.pages.editor.numbered-list: Lista ordenada -admin.pages.editor.quote: Citar -admin.pages.editor.redo: Refazer -admin.pages.editor.summary: Sumário -admin.pages.editor.undo: Desfazer -admin.pages.files: Ficheiros -admin.pages.files.upload-label: Clique aqui para escolher um ficheiro para enviar ou arrastar para aqui. -admin.pages.languages: Idiomas -admin.pages.languages.add-language: Criar %s -admin.pages.languages.edit-language: Editar %s -admin.pages.new-page: Criar Página -admin.pages.new-page.parent: Página Parente -admin.pages.new-page.site: Site -admin.pages.new-page.slug-suggestion: letras, números e hifens apenas -admin.pages.new-page.slug: Slug da Página -admin.pages.new-page.template: Template -admin.pages.new-page.title: Título -admin.pages.options: Opções -admin.pages.page.actions: Acções -admin.pages.page.cacheable: Cache -admin.pages.page.cannot-change-num: Não é possível alterar o número da página -admin.pages.page.cannot-create: Não é possível criar página -admin.pages.page.cannot-create.already-exists: Não é possível criar a página, já existe uma página com o mesmo uri -admin.pages.page.cannot-create.invalid-parent: Não é possível criar página, página parente inválida -admin.pages.page.cannot-create.invalid-slug: Não é possível criar a página, o slug da página deve conter apenas letras e números separados por hifens -admin.pages.page.cannot-create.invalid-template: Não é possível criar página, template inválido -admin.pages.page.cannot-create.var-missing: Não é possível criar página, falta uma variável -admin.pages.page.cannot-delete-file.file-not-found: Não é possível excluir o ficheiro, ficheiro não encontrado -admin.pages.page.cannot-delete-file.page-not-found: Não é possível excluir a página, página não encontrado -admin.pages.page.cannot-delete.invalid-language: 'Não é possível excluir página, idioma inválido: %s' -admin.pages.page.cannot-delete.not-deletable: Não é possível excluir a página, a página não pode ser excluída -admin.pages.page.cannot-delete.page-not-found: Não é possível excluir página, página não encontrada -admin.pages.page.cannot-edit.already-exists: Não é possível editar a página, já existe uma página com o mesmo uri -admin.pages.page.cannot-edit.index-or-error-page-slug: Não é possível editar slug de página de índice e páginas de erro -admin.pages.page.cannot-edit.invalid-language: 'Não é possível editar a página, idioma inválido: %s' -admin.pages.page.cannot-edit.invalid-parent: Não é possível editar a página, página parente inválida -admin.pages.page.cannot-edit.invalid-slug: Não é possível editar o slug da página, deve conter apenas letras e números separados por hifens. -admin.pages.page.cannot-edit.invalid-template: Não é possível editar a página, template inválido -admin.pages.page.cannot-edit.page-not-found: Não é possível editar a página, página não encontrada -admin.pages.page.cannot-edit.var-missing: Não é possível editar a página, falta uma variável -admin.pages.page.cannot-move: Não é possível mover a página -admin.pages.page.cannot-upload-file.page-not-found: Não é possível efectuar envio do ficheiro, página não encontrada -admin.pages.page.created: Página criada! -admin.pages.page.deleted: Página removida -admin.pages.page.edited: Página editada -admin.pages.page.file-deleted: Ficheiro removido -admin.pages.page.image: Imagem -admin.pages.page.last-modified: Última Modificação -admin.pages.page.moved: Página Movida! -admin.pages.page.no-date: Sem Data -admin.pages.page.no-image: Sem Imagem -admin.pages.page.no-tags: Sem Tags -admin.pages.page.not-found: Página não encontrada -admin.pages.page.posts-per-page: Items por página -admin.pages.page.publish-date: Data de Publicação -admin.pages.page.status: Estado -admin.pages.page.tags: Tags -admin.pages.page.title: Titulo -admin.pages.page.unpublish-date: Data de Cancelamento da Publicação -admin.pages.page.visible: Visivel no menu -admin.pages.pages: Páginas -admin.pages.pages.collapse-all: Recolher Todas -admin.pages.pages.expand-all: Expandir Todas -admin.pages.pages.reorder: Reordenar -admin.pages.pages.search: Procurar Páginas... -admin.pages.parent: Página Parente -admin.pages.preview-file: Preview -admin.pages.preview: Preview -admin.pages.save: Guardar -admin.pages.status.not-published: Não Publicado -admin.pages.status.not-routable: Não Roteável -admin.pages.status.published: Publicado -admin.pages.status.routable: Roteável -admin.pages.template: Template -admin.pages.toggle-children: Expandir Páginas -admin.panel: Painel de Administração -admin.register.create-user: O Formwork Admin está instalado, mas nenhum utilizador foi encontrado. Por favor, registre um agora. -admin.register.register: Registrar Novo Utilizador -admin.request.error.post-max-size: O pedido HTTP POST excede o tamanho máximo permitido -admin.updates.available-for-install: está disponível para instalação -admin.updates.check: Verificar actualizações -admin.updates.install-prompt: Gostaria instalar a actualização? -admin.updates.install: Instalar -admin.updates.installed: Actualização instalada! -admin.updates.latest-version-available: é a última versão disponível -admin.updates.status.cannot-check: Não é possível verificar se há actualizações. Tente mais tarde. -admin.updates.status.cannot-install: Não é possível instalar actualização -admin.updates.status.cannot-make-backup: Não é possível efectuar cópia de segurança antes de actualizar -admin.updates.status.checking: Verificando actualizações... -admin.updates.status.found: Actualizações encontradas -admin.updates.status.installing: Instalando actualizações... -admin.updates.status.up-to-date: Actualizado! -admin.uploader.error: Não é possível fazer upload do ficheiro. %s. -admin.uploader.error.already-exists: Já existe um ficheiro com o mesmo nome -admin.uploader.error.cannot-move-to-destination: Falha ao mover o ficheiro enviado para o destino -admin.uploader.error.cannot-write: Falha ao gravar ficheiro no disco -admin.uploader.error.destination-too-long: Caminho de destino demasiado longo -admin.uploader.error.file-name-too-long: Nome do ficheiro demasiado longo -admin.uploader.error.file-name: Nome do ficheiro inválido -admin.uploader.error.hidden-files: Não é possível efectuar envio de ficheros ocultos que começam com um ponto -admin.uploader.error.mime-type: Tipo de ficheiro inválido -admin.uploader.error.no-file: Nenhum ficheiro foi enviado -admin.uploader.error.no-temp: Pasta temporária inexistente -admin.uploader.error.partial: O ficheiro foi enviado apenas parcialmente -admin.uploader.error.php-extension: Envio de ficheiro interrompido por extensão -admin.uploader.error.size: O ficheiro enviado excede o tamanho máximo permitido. -admin.uploader.uploaded: Ficheiro enviado -admin.user.actions: Acções -admin.user.avatar: Avatar -admin.user.avatar.uploaded: Avatar enviado -admin.user.color-scheme: Esquema de cores -admin.user.color-scheme.auto: Auto -admin.user.color-scheme.dark: Escuro -admin.user.color-scheme.light: Claro -admin.user.email: E'mail -admin.user.fullname: Nome Completo -admin.user.language: Idioma -admin.user.last-access: Último acesso -admin.user.password: Password -admin.user.password.type-new-password: Insira nova password para alterar... -admin.user.role: Cargo -admin.user.role.admin: Administrador -admin.user.role.user: Utilizador -admin.user.username: Nome do utilizador -admin.users.delete-user: Apagar Utilizador -admin.users.delete-user.prompt: Tem a certeza de que deseja excluir este utilizador? Esta acção não pode ser revertida. -admin.users.new-user: Novo Utilizador -admin.users.new-user.password-suggestion: pelo menos 8 caracteres -admin.users.new-user.username-suggestion: entre 3 a 20 letras, números e hifens. -admin.users.options: Opções -admin.users.user-profile: 'Perfil de Utilizador %s' -admin.users.user: Utilizador -admin.users.user.cannot-change-password: Não é possível alterar a senha de outro utilizador. A acção não é permitida. -admin.users.user.cannot-change-role: Não é possível alterar o cargo de %s. A acção não é permitida. -admin.users.user.cannot-create.already-exists: Não é possível criar utilizador, já existe um utilizador com o mesmo nome -admin.users.user.cannot-create.var-missing: Não é possível criar o utilizador, falta uma variável -admin.users.user.cannot-delete: Não é possível remover o utilizador. Você deve ser um administrador e o utilizador não deve estar logado. -admin.users.user.cannot-edit: Não é possível editar o utilizador %s. A acção não é permitida. -admin.users.user.created: Utilizador criado. -admin.users.user.deleted: Utilizador removido. -admin.users.user.edited: Informação do utilizador actualizada -admin.users.user.not-found: Utilizador não encontrado -admin.users.users: Utilizadores -admin.view-site: Ver Site diff --git a/admin/translations/ru.yml b/admin/translations/ru.yml deleted file mode 100644 index ebde94d5..00000000 --- a/admin/translations/ru.yml +++ /dev/null @@ -1,240 +0,0 @@ -admin.backup.backup: Резерв -admin.backup.error.cannot-download: Невозможно загрузить резервную копию. %s. -admin.backup.error.cannot-download.invalid-filename: Недопустимый файл резервной копии -admin.backup.error.cannot-make: Невозможно сделать резервную копию. %s. -admin.backup.ready: Резервное копирование готовы. Начинается загрузка ... -admin.cache.clear: Очистить кэш -admin.cache.cleared: Кэш очищается -admin.dashboard.dashboard: Приборная панель -admin.dashboard.last-modified-pages: В последний раз редактировали Страницы -admin.dashboard.quick-actions: Быстрые действия -admin.dashboard.statistics: Статистика -admin.dashboard.statistics.unique-visitors: Уникальные посетители -admin.dashboard.statistics.visits: Просмотров -admin.dashboard.welcome: Добро пожаловать -admin.errors.action.report-to-github: Сообщить о проблеме на GitHub -admin.errors.action.return-to-dashboard: Вернуться к панели управления -admin.errors.error.forbidden.description: У вас нет разрешения на доступ к этой странице. -admin.errors.error.forbidden.heading: К сожалению, разрешение не требуется! -admin.errors.error.forbidden.status: Запрещено -admin.errors.error.internal-server-error.description: Formwork Администратор обнаружил ошибку при обслуживании вашего запроса. Пожалуйста, проверьте конфигурацию опалубки или журнал сервера на наличие ошибок. -admin.errors.error.internal-server-error.heading: Упс! Что-то пошло не так! -admin.errors.error.internal-server-error.status: Внутренняя Ошибка Сервера -admin.errors.error.not-found.description: Страница не существует или запрос не является действительным. -admin.errors.error.not-found.heading: К сожалению, страница не найдена! -admin.errors.error.not-found.status: Не обнаружена -admin.login.attempt.failed: Войти попытка не удалась! Попробуйте еще раз. -admin.login.attempt.too-many: Слишком много попыток входа в систему. Пожалуйста, попробуйте еще раз% D минут. -admin.login.logged-out: Вы вышли из системы -admin.login.login: Авторизация -admin.login.logout: Выйти -admin.login.password: Пароль -admin.login.suspicious-request-detected: Подозрительный запрос был обнаружен, и по соображениям безопасности вы вышли из системы. Пожалуйста, войдите снова. -admin.login.username: Имя пользователя -admin.manage: Меню -admin.modal.action.cancel: Отмена -admin.modal.action.continue: Продолжить -admin.modal.action.delete: Удалить -admin.modal.action.save: Сохранить -admin.modal.action.upload-file: Загрузить файл -admin.modal.images.no-images: Там нет изображений здесь -admin.modal.images.no-images.upload: Пожалуйста, загрузите некоторые изображения -admin.modal.images.title: Выберите изображение -admin.options.info: Информация -admin.options.options: Параметры -admin.options.site: Сайт -admin.options.site.advanced: Расширенные настройки -admin.options.site.advanced.aliases: Псевдонимы -admin.options.site.advanced.aliases.alias: Псевдоним -admin.options.site.advanced.aliases.route: Маршрут -admin.options.site.advanced.metadata: Метаданные HTML -admin.options.site.advanced.metadata.content: Содержание -admin.options.site.advanced.metadata.name: Имя -admin.options.site.info: Информация -admin.options.site.info.author: Автор -admin.options.site.info.description: Описание -admin.options.site.info.language: Язык -admin.options.site.info.title: Заглавие -admin.options.system: Система -admin.options.system.admin-panel: Панель администратора -admin.options.system.admin-panel.default-language: Язык по умолчанию -admin.options.system.admin-panel.logout-redirects-to: Выход Перенаправление -admin.options.system.admin-panel.logout-redirects-to.home: Главная -admin.options.system.admin-panel.logout-redirects-to.login: Логин -admin.options.system.admin-panel.session-timeout: Тайм-аут сеанса (мин) -admin.options.system.backup: Резервный -admin.options.system.backup.backup-files-to-keep: Резервные копии, чтобы сохранить на сервере -admin.options.system.cache: Кэш -admin.options.system.cache.disabled: Выключить -admin.options.system.cache.enabled: Включить -admin.options.system.cache.time: Кэш Время (сек) -admin.options.system.date-and-time: Дата и время -admin.options.system.date-and-time.date-format: Формат даты -admin.options.system.date-and-time.first-weekday: Первый день недели -admin.options.system.date-and-time.first-weekday.monday: Понедельник -admin.options.system.date-and-time.first-weekday.sunday: Воскресенье -admin.options.system.date-and-time.hour-format: Часовой формат -admin.options.system.date-and-time.timezone: Часовой пояс -admin.options.system.files: Файлы -admin.options.system.files.allowed-extensions: Допустимые расширения -admin.options.system.images: Картинки -admin.options.system.images.jpeg-quality: JPEG Качество -admin.options.system.images.png-compression-level: PNG Уровень сжатия -admin.options.system.languages: Языки -admin.options.system.languages.available-languages: Доступные Языки -admin.options.system.languages.available-languages.no-languages: Нет Языков -admin.options.system.languages.preferred-language: Использовать предпочитаемый язык браузера -admin.options.system.languages.preferred-language.disabled: Выключить -admin.options.system.languages.preferred-language.enabled: Включить -admin.options.updated: Опции обновляются -admin.options.updates: Обновления -admin.pages.attributes: Атрибуты -admin.pages.change-slug: Редактировать Slug -admin.pages.change-slug.generate: Сформировать из названия -admin.pages.changes.continue: Продолжить без сохранения -admin.pages.changes.detected: Изменения Обнаружены -admin.pages.changes.detected.prompt: У вас есть какие-то изменения, которые не были сохранены. Вы уверены, что хотите покинуть эту страницу? -admin.pages.content: Содержание -admin.pages.delete-file: Удалить файл -admin.pages.delete-file.prompt: Вы уверены, что хотите удалить этот файл? Это действие не может быть отменено. -admin.pages.delete-page: Удалить страницу -admin.pages.delete-page.prompt: Вы уверены, что хотите удалить эту страницу? Это действие не может быть отменено. -admin.pages.edit-page: Отредактировать страницу %s -admin.pages.editor.bold: Жирный -admin.pages.editor.bullet-list: Маркированный список -admin.pages.editor.image: Изображение -admin.pages.editor.italic: Курсивный -admin.pages.editor.link: Ссылка -admin.pages.editor.numbered-list: Нумерованный список -admin.pages.editor.quote: Кавычки -admin.pages.editor.redo: Выбор -admin.pages.editor.summary: Краткий -admin.pages.editor.undo: Открыть -admin.pages.files: Файлы -admin.pages.languages: Языки -admin.pages.languages.add-language: Добавлять %s -admin.pages.languages.edit-language: Редактировать %s -admin.pages.new-page: Новая страница -admin.pages.new-page.parent: Родитель страницы -admin.pages.new-page.site: Сайт -admin.pages.new-page.slug-suggestion: буквы, цифры и дефис только -admin.pages.new-page.slug: Страница Slug -admin.pages.new-page.template: Шаблон -admin.pages.new-page.title: Заглавие -admin.pages.options: Параметры -admin.pages.page.actions: Действия -admin.pages.page.cacheable: Кешируемый -admin.pages.page.cannot-change-num: Невозможно изменить номер страницы -admin.pages.page.cannot-create: Не удается создать страницу -admin.pages.page.cannot-create.already-exists: Невозможно создать страницу, страницу с тем же URI уже существует -admin.pages.page.cannot-create.invalid-parent: Не удается создать страницу, недействительны родительской страницы -admin.pages.page.cannot-create.invalid-slug: Невозможно создать страницу, страницу пробкового должны содержать только буквы и цифры, разделенные тире -admin.pages.page.cannot-create.invalid-template: Не удается создать страницу, недопустимый шаблон -admin.pages.page.cannot-create.var-missing: Не удается создать страницу, отсутствует переменная -admin.pages.page.cannot-delete-file.file-not-found: Не удается удалить файл, файл не найден -admin.pages.page.cannot-delete-file.page-not-found: Не удается удалить файл, файл не найден -admin.pages.page.cannot-delete.invalid-language: 'Невозможно удалить страницу, недопустимый язык: %s' -admin.pages.page.cannot-delete.not-deletable: Невозможно удалить страницу, страница не файл удаляемая -admin.pages.page.cannot-delete.page-not-found: Невозможно удалить страницу, страница не найдена -admin.pages.page.cannot-edit.already-exists: Не могу редактировать страницу, страница с той же URI уже существует -admin.pages.page.cannot-edit.index-or-error-page-slug: Не могу редактировать страницу слизняка индекса и ошибок страниц -admin.pages.page.cannot-edit.invalid-language: 'Не могу редактировать страницы, недопустимый язык: %s' -admin.pages.page.cannot-edit.invalid-parent: Не могу редактировать страницы, недопустимую родительскую страницу -admin.pages.page.cannot-edit.invalid-slug: Не можете редактировать страницу слизняка, он должен содержать только буквы и цифры, разделенные тире -admin.pages.page.cannot-edit.invalid-template: Не могу редактировать страницы, неверный шаблон -admin.pages.page.cannot-edit.page-not-found: Не могу редактировать страницу, страница не найдена -admin.pages.page.cannot-edit.var-missing: Не могу редактировать страницу, отсутствует переменный -admin.pages.page.cannot-move: Невозможно переместить страницу -admin.pages.page.cannot-upload-file.page-not-found: Невозможно загрузить файл, страница не найдена -admin.pages.page.created: Страница сгенерирована! -admin.pages.page.deleted: Страница удалена -admin.pages.page.edited: Страница отредактирован -admin.pages.page.file-deleted: Файл удален -admin.pages.page.image: Изображение -admin.pages.page.last-modified: Последнее изменение -admin.pages.page.moved: Страница переехала! -admin.pages.page.no-date: Без даты -admin.pages.page.no-image: Нет изображения -admin.pages.page.no-tags: Нет тегов -admin.pages.page.not-found: Страница не найдена -admin.pages.page.posts-per-page: Сообщения на странице -admin.pages.page.publish-date: Дата публикации -admin.pages.page.status: Статус -admin.pages.page.tags: Теги -admin.pages.page.title: Заглавие -admin.pages.page.unpublish-date: Дата Отменить публикацию -admin.pages.page.visible: Видимые в меню -admin.pages.pages: Страницы -admin.pages.pages.collapse-all: Свернуть все -admin.pages.pages.expand-all: Расширить все -admin.pages.pages.reorder: Изменение порядка -admin.pages.pages.search: Поиск Страницы ... -admin.pages.parent: Родитель страницы -admin.pages.preview-file: Предварительный просмотр -admin.pages.preview: Предварительный просмотр -admin.pages.save: Сохранить -admin.pages.status.not-published: Не Опубликовано -admin.pages.status.not-routable: Не маршрутизируемый -admin.pages.status.published: Опубликованный -admin.pages.status.routable: Маршрутизируемый -admin.pages.template: Шаблон -admin.panel: Панель администрирования -admin.register.create-user: Formwork Администратор установлен, но не было найдено ни одного пользователя. Пожалуйста зарегистрировать пользователя в настоящее время. -admin.register.register: Регистрация нового пользователя -admin.request.error.post-max-size: Запрос HTTP POST превышает максимально допустимый размер -admin.updates.available-for-install: доступен для установки -admin.updates.check: Проверка обновлений -admin.updates.install-prompt: Вы хотите установить обновление? -admin.updates.install: Устанавливать -admin.updates.installed: Обновление установлено! -admin.updates.latest-version-available: это последняя версия доступна -admin.updates.status.cannot-install: Не удается установить обновление -admin.updates.status.cannot-make-backup: Невозможно сделать резервную копию перед обновлением -admin.updates.status.checking: Проверка обновлений... -admin.updates.status.found: Обновления найдены -admin.updates.status.installing: Установка обновлений ... -admin.updates.status.up-to-date: До настоящего времени! -admin.uploader.error: Невозможно загрузить файл. %s. -admin.uploader.error.cannot-write: Не удалось записать файл на диск -admin.uploader.error.file-name: Неверное имя файла -admin.uploader.error.hidden-files: Невозможно загрузить скрытые файлы, начинающиеся с точки -admin.uploader.error.mime-type: Тип файла не допускается -admin.uploader.error.no-file: Файл не был загружен -admin.uploader.error.no-temp: Отсутствующие временную папку -admin.uploader.error.partial: Загруженный файл был загружен только частично -admin.uploader.error.php-extension: Загрузка файла останавливали расширения -admin.uploader.error.size: Загруженный файл превышает максимальный размер файла -admin.uploader.uploaded: Файл загружен -admin.user.actions: Действия -admin.user.avatar: Аватар -admin.user.avatar.uploaded: Аватар закачанный -admin.user.email: Email -admin.user.fullname: Полное имя -admin.user.language: Язык -admin.user.last-access: Последний доступ -admin.user.password: Пароль -admin.user.password.type-new-password: Введите новый пароль для изменения ... -admin.user.role: Роль -admin.user.role.admin: Администратор -admin.user.role.user: Пользователь -admin.user.username: Имя пользователя -admin.users.delete-user: Удалить пользователя -admin.users.delete-user.prompt: Вы уверены, что хотите удалить этого пользователя? Это действие не может быть отменено. -admin.users.new-user: Новый пользователь -admin.users.new-user.password-suggestion: не менее 8 символов -admin.users.new-user.username-suggestion: между 3-20 букв, цифр и тире -admin.users.options: Параметры -admin.users.user-profile: '%s Профиль пользователя' -admin.users.user: Пользователь -admin.users.user.cannot-change-password: Невозможно изменить пароль другого пользователя. Действие не допускается. -admin.users.user.cannot-change-role: Невозможно изменить роль %s. Действие не допускается. -admin.users.user.cannot-create.already-exists: Невозможно создать пользователь, пользователь с таким именем уже существует -admin.users.user.cannot-create.var-missing: Невозможно создать пользователя, пропуская переменную -admin.users.user.cannot-delete: Невозможно удалить пользователь. Вы должны быть администратором, и пользователь не должен быть авторизован. -admin.users.user.cannot-edit: Невозможно изменить пользователя %s. Действие не допускается. -admin.users.user.created: Пользователь создан -admin.users.user.deleted: Пользователь удален -admin.users.user.edited: Пользовательские данные обновляются -admin.users.user.not-found: Пользователь не найден -admin.users.users: Пользователей -admin.view-site: Просмотр сайта diff --git a/admin/views/partials/sidebar.php b/admin/views/partials/sidebar.php deleted file mode 100644 index 8611af45..00000000 --- a/admin/views/partials/sidebar.php +++ /dev/null @@ -1,56 +0,0 @@ - -
diff --git a/assets/images/admin.png b/assets/images/panel.png similarity index 100% rename from assets/images/admin.png rename to assets/images/panel.png diff --git a/formwork/bootstrap.php b/formwork/bootstrap.php index 917a482f..b72d0af6 100644 --- a/formwork/bootstrap.php +++ b/formwork/bootstrap.php @@ -4,7 +4,7 @@ const FORMWORK_PATH = ROOT_PATH . 'formwork' . DS; const SITE_PATH = ROOT_PATH . 'site' . DS; const CONFIG_PATH = SITE_PATH . 'config' . DS; -const ADMIN_PATH = ROOT_PATH . 'admin' . DS; +const PANEL_PATH = ROOT_PATH . 'panel' . DS; // Check PHP version requirements if (!version_compare(PHP_VERSION, '8.0.2', '>=')) { diff --git a/formwork/defaults.php b/formwork/defaults.php index 5ff2b29c..31c103a8 100644 --- a/formwork/defaults.php +++ b/formwork/defaults.php @@ -1,9 +1,9 @@ [ + 'panel' => [ 'enabled' => true, - 'root' => 'admin', + 'root' => 'panel', 'lang' => 'en', 'login_attempts' => 10, 'login_reset_time' => 300, @@ -12,8 +12,8 @@ return [ 'avatar_size' => 512, 'color_scheme' => 'light', 'paths' => [ - 'accounts' => ADMIN_PATH . 'accounts' . DS, - 'logs' => ADMIN_PATH . 'logs' . DS + 'accounts' => PANEL_PATH . 'accounts' . DS, + 'logs' => PANEL_PATH . 'logs' . DS ] ], 'backup' => [ @@ -76,13 +76,13 @@ return [ ], 'routes' => [ 'files' => [ - 'admin' => ADMIN_PATH . 'routes.php', + 'panel' => PANEL_PATH . 'routes.php', 'system' => FORMWORK_PATH . 'routes.php' ] ], 'schemes' => [ 'paths' => [ - 'admin' => ADMIN_PATH . 'schemes' . DS, + 'panel' => PANEL_PATH . 'schemes' . DS, 'config' => CONFIG_PATH . 'schemes' . DS, 'pages' => SITE_PATH . 'schemes' . DS ] @@ -97,7 +97,7 @@ return [ 'translations' => [ 'fallback' => 'en', 'paths' => [ - 'admin' => ADMIN_PATH . 'translations' . DS, + 'panel' => PANEL_PATH . 'translations' . DS, 'system' => FORMWORK_PATH . 'translations' . DS ] ], @@ -106,7 +106,7 @@ return [ ], 'views' => [ 'paths' => [ - 'admin' => ADMIN_PATH . 'views' . DS, + 'panel' => PANEL_PATH . 'views' . DS, 'system' => FORMWORK_PATH . 'views' . DS ] ] diff --git a/formwork/src/Formwork.php b/formwork/src/Formwork.php index fe31aa78..62b5342b 100644 --- a/formwork/src/Formwork.php +++ b/formwork/src/Formwork.php @@ -2,8 +2,8 @@ namespace Formwork; -use Formwork\Admin\Admin; -use Formwork\Admin\Statistics; +use Formwork\Panel\Panel; +use Formwork\Panel\Statistics; use Formwork\Cache\FilesCache; use Formwork\Languages\Languages; use Formwork\Pages\Site; @@ -62,9 +62,9 @@ final class Formwork protected FilesCache $cache; /** - * Admin instance + * Panel instance */ - protected ?Admin $admin; + protected ?Panel $panel; /** * Create a new Formwork instance @@ -151,15 +151,15 @@ final class Formwork } /** - * Return admin instance + * Return panel instance */ - public function admin(): ?Admin + public function panel(): ?Panel { - if (isset($this->admin)) { - return $this->admin; + if (isset($this->panel)) { + return $this->panel; } - return $this->admin = $this->config->get('admin.enabled') - ? new Admin() + return $this->panel = $this->config->get('panel.enabled') + ? new Panel() : null; } @@ -197,9 +197,9 @@ final class Formwork $data = YAML::parseFile(CONFIG_PATH . 'system.yml'); if ($data !== []) { - if (isset($data['admin.root'])) { - // Trim slashes from admin.root - $data['admin.root'] = trim($data['admin.root'], '/'); + if (isset($data['panel.root'])) { + // Trim slashes from panel.root + $data['panel.root'] = trim($data['panel.root'], '/'); } $this->config = new Config(array_replace_recursive($this->defaults(), $data)); } @@ -227,8 +227,8 @@ final class Formwork if ($this->languages->requested() !== null) { $this->request = Str::removeStart($this->request, '/' . $this->languages->current()); } elseif ($this->languages->preferred() !== null) { - // Don't redirect if we are in Admin - if (!Str::startsWith($this->request, '/' . $this->config()->get('admin.root'))) { + // Don't redirect if we are in Panel + if (!Str::startsWith($this->request, '/' . $this->config()->get('panel.root'))) { Header::redirect(HTTPRequest::root() . $this->languages->preferred() . $this->request); } } @@ -277,10 +277,10 @@ final class Formwork */ protected function loadRoutes(): void { - if ($this->config->get('admin.enabled')) { + if ($this->config->get('panel.enabled')) { $this->router->loadFromFile( - $this->config()->get('routes.files.admin'), - Str::wrap($this->config()->get('admin.root'), '/') + $this->config()->get('routes.files.panel'), + Str::wrap($this->config()->get('panel.root'), '/') ); } diff --git a/formwork/src/Admin/Backupper.php b/formwork/src/Panel/Backupper.php similarity index 98% rename from formwork/src/Admin/Backupper.php rename to formwork/src/Panel/Backupper.php index 1d3d8835..1cf09887 100644 --- a/formwork/src/Admin/Backupper.php +++ b/formwork/src/Panel/Backupper.php @@ -1,6 +1,6 @@ admin(); + return Formwork::instance()->panel(); } /** @@ -45,31 +45,31 @@ abstract class AbstractController extends BaseAbstractController { return [ 'location' => $this->name, - 'admin' => $this->admin(), + 'panel' => $this->panel(), 'csrfToken' => CSRFToken::get(), 'modals' => implode('', $this->modals), 'colorScheme' => $this->getColorScheme(), 'appConfig' => JSON::encode([ - 'baseUri' => $this->admin()->panelUri(), + 'baseUri' => $this->panel()->panelUri(), 'DateInput' => [ 'weekStarts' => Formwork::instance()->config()->get('date.week_starts'), 'format' => Date::formatToPattern(Formwork::instance()->config()->get('date.format') . ' ' . Formwork::instance()->config()->get('date.time_format')), 'time' => true, 'labels' => [ - 'today' => $this->admin()->translate('date.today'), - 'weekdays' => ['long' => $this->admin()->translate('date.weekdays.long'), 'short' => $this->admin()->translate('date.weekdays.short')], - 'months' => ['long' => $this->admin()->translate('date.months.long'), 'short' => $this->admin()->translate('date.months.short')] + 'today' => $this->panel()->translate('date.today'), + 'weekdays' => ['long' => $this->panel()->translate('date.weekdays.long'), 'short' => $this->panel()->translate('date.weekdays.short')], + 'months' => ['long' => $this->panel()->translate('date.months.long'), 'short' => $this->panel()->translate('date.months.short')] ] ], 'DurationInput' => [ 'labels' => [ - 'years' => $this->admin()->translate('date.duration.years'), - 'months' => $this->admin()->translate('date.duration.months'), - 'weeks' => $this->admin()->translate('date.duration.weeks'), - 'days' => $this->admin()->translate('date.duration.days'), - 'hours' => $this->admin()->translate('date.duration.hours'), - 'minutes' => $this->admin()->translate('date.duration.minutes'), - 'seconds' => $this->admin()->translate('date.duration.seconds') + 'years' => $this->panel()->translate('date.duration.years'), + 'months' => $this->panel()->translate('date.duration.months'), + 'weeks' => $this->panel()->translate('date.duration.weeks'), + 'days' => $this->panel()->translate('date.duration.days'), + 'hours' => $this->panel()->translate('date.duration.hours'), + 'minutes' => $this->panel()->translate('date.duration.minutes'), + 'seconds' => $this->panel()->translate('date.duration.seconds') ] ] ]) @@ -81,7 +81,7 @@ abstract class AbstractController extends BaseAbstractController */ protected function user(): User { - return $this->admin()->user(); + return $this->panel()->user(); } /** @@ -121,8 +121,8 @@ abstract class AbstractController extends BaseAbstractController $view = new View( $name, array_merge($this->defaults(), $data), - Formwork::instance()->config()->get('views.paths.admin'), - PHP::parseFile(ADMIN_PATH . 'helpers.php') + Formwork::instance()->config()->get('views.paths.panel'), + PHP::parseFile(PANEL_PATH . 'helpers.php') ); return $view->render($return); } @@ -132,8 +132,8 @@ abstract class AbstractController extends BaseAbstractController */ private function getColorScheme(): string { - $default = Formwork::instance()->config()->get('admin.color_scheme'); - if ($this->admin()->isLoggedIn()) { + $default = Formwork::instance()->config()->get('panel.color_scheme'); + if ($this->panel()->isLoggedIn()) { if ($this->user()->colorScheme() === 'auto') { return HTTPRequest::cookies()->get('formwork_preferred_color_scheme', $default); } diff --git a/formwork/src/Admin/Controllers/AuthenticationController.php b/formwork/src/Panel/Controllers/AuthenticationController.php similarity index 70% rename from formwork/src/Admin/Controllers/AuthenticationController.php rename to formwork/src/Panel/Controllers/AuthenticationController.php index 24b919aa..6fc1da03 100644 --- a/formwork/src/Admin/Controllers/AuthenticationController.php +++ b/formwork/src/Panel/Controllers/AuthenticationController.php @@ -1,9 +1,9 @@ config()->get('admin.paths.logs') . 'accessAttempts.json'); + $attemptsRegistry = new Registry(Formwork::instance()->config()->get('panel.paths.logs') . 'accessAttempts.json'); $limiter = new AccessLimiter( $attemptsRegistry, - Formwork::instance()->config()->get('admin.login_attempts'), - Formwork::instance()->config()->get('admin.login_reset_time') + Formwork::instance()->config()->get('panel.login_attempts'), + Formwork::instance()->config()->get('panel.login_reset_time') ); if ($limiter->hasReachedLimit()) { - $minutes = round(Formwork::instance()->config()->get('admin.login_reset_time') / 60); - return $this->error($this->admin()->translate('admin.login.attempt.too-many', $minutes)); + $minutes = round(Formwork::instance()->config()->get('panel.login_reset_time') / 60); + return $this->error($this->panel()->translate('panel.login.attempt.too-many', $minutes)); } switch (HTTPRequest::method()) { case 'GET': if (Session::has('FORMWORK_USERNAME')) { - return $this->admin()->redirectToPanel(); + return $this->panel()->redirectToPanel(); } // Always generate a new CSRF token CSRFToken::generate(); return new Response($this->view('authentication.login', [ - 'title' => $this->admin()->translate('admin.login.login') + 'title' => $this->panel()->translate('panel.login.login') ], true)); break; @@ -55,12 +55,12 @@ class AuthenticationController extends AbstractController // Ensure no required data is missing if (!$data->hasMultiple(['username', 'password'])) { - $this->error($this->admin()->translate('admin.login.attempt.failed')); + $this->error($this->panel()->translate('panel.login.attempt.failed')); } $limiter->registerAttempt(); - $user = $this->admin()->users()->get($data->get('username')); + $user = $this->panel()->users()->get($data->get('username')); // Authenticate user if ($user !== null && $user->authenticate($data->get('password'))) { @@ -72,8 +72,8 @@ class AuthenticationController extends AbstractController // Regenerate CSRF token CSRFToken::generate(); - $accessLog = new Log(Formwork::instance()->config()->get('admin.paths.logs') . 'access.json'); - $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('admin.paths.logs') . 'lastAccess.json'); + $accessLog = new Log(Formwork::instance()->config()->get('panel.paths.logs') . 'access.json'); + $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('panel.paths.logs') . 'lastAccess.json'); $time = $accessLog->log($data->get('username')); $lastAccessRegistry->set($data->get('username'), $time); @@ -82,13 +82,13 @@ class AuthenticationController extends AbstractController if (($destination = Session::get('FORMWORK_REDIRECT_TO')) !== null) { Session::remove('FORMWORK_REDIRECT_TO'); - return $this->admin()->redirect($destination); + return $this->panel()->redirect($destination); } - return $this->admin()->redirectToPanel(); + return $this->panel()->redirectToPanel(); } - return $this->error($this->admin()->translate('admin.login.attempt.failed'), [ + return $this->error($this->panel()->translate('panel.login.attempt.failed'), [ 'username' => $data->get('username'), 'error' => true ]); @@ -106,11 +106,11 @@ class AuthenticationController extends AbstractController Session::remove('FORMWORK_USERNAME'); Session::destroy(); - if (Formwork::instance()->config()->get('admin.logout_redirect') === 'home') { - return $this->admin()->redirectToSite(); + if (Formwork::instance()->config()->get('panel.logout_redirect') === 'home') { + return $this->panel()->redirectToSite(); } - $this->admin()->notify($this->admin()->translate('admin.login.logged-out'), 'info'); - return $this->admin()->redirectToPanel(); + $this->panel()->notify($this->panel()->translate('panel.login.logged-out'), 'info'); + return $this->panel()->redirectToPanel(); } /** @@ -124,8 +124,8 @@ class AuthenticationController extends AbstractController // Ensure CSRF token is re-generated CSRFToken::generate(); - $defaults = ['title' => $this->admin()->translate('admin.login.login')]; - $this->admin()->notify($message, 'error'); + $defaults = ['title' => $this->panel()->translate('panel.login.login')]; + $this->panel()->notify($message, 'error'); return new Response($this->view('authentication.login', array_merge($defaults, $data), true)); } } diff --git a/formwork/src/Admin/Controllers/BackupController.php b/formwork/src/Panel/Controllers/BackupController.php similarity index 65% rename from formwork/src/Admin/Controllers/BackupController.php rename to formwork/src/Panel/Controllers/BackupController.php index d8e991ae..b30b24f8 100644 --- a/formwork/src/Admin/Controllers/BackupController.php +++ b/formwork/src/Panel/Controllers/BackupController.php @@ -1,8 +1,8 @@ backup(); } catch (TranslatedException $e) { - return JSONResponse::error($this->admin()->translate('admin.backup.error.cannot-make', $e->getTranslatedMessage()), 500); + return JSONResponse::error($this->panel()->translate('panel.backup.error.cannot-make', $e->getTranslatedMessage()), 500); } $filename = basename($file); - return JSONResponse::success($this->admin()->translate('admin.backup.ready'), 200, [ + return JSONResponse::success($this->panel()->translate('panel.backup.ready'), 200, [ 'filename' => $filename, - 'uri' => $this->admin()->uri('/backup/download/' . urlencode(base64_encode($filename)) . '/') + 'uri' => $this->panel()->uri('/backup/download/' . urlencode(base64_encode($filename)) . '/') ]); } @@ -44,10 +44,10 @@ class BackupController extends AbstractController if (FileSystem::isFile($file, false)) { return new FileResponse($file, true); } - throw new RuntimeException($this->admin()->translate('admin.backup.error.cannot-download.invalid-filename')); + throw new RuntimeException($this->panel()->translate('panel.backup.error.cannot-download.invalid-filename')); } catch (TranslatedException $e) { - $this->admin()->notify($this->admin()->translate('admin.backup.error.cannot-download', $e->getTranslatedMessage()), 'error'); - return $this->admin()->redirectToReferer(302, '/dashboard/'); + $this->panel()->notify($this->panel()->translate('panel.backup.error.cannot-download', $e->getTranslatedMessage()), 'error'); + return $this->panel()->redirectToReferer(302, '/dashboard/'); } } } diff --git a/formwork/src/Admin/Controllers/CacheController.php b/formwork/src/Panel/Controllers/CacheController.php similarity index 75% rename from formwork/src/Admin/Controllers/CacheController.php rename to formwork/src/Panel/Controllers/CacheController.php index af9577a3..ac6d44fa 100644 --- a/formwork/src/Admin/Controllers/CacheController.php +++ b/formwork/src/Panel/Controllers/CacheController.php @@ -1,6 +1,6 @@ config()->get('cache.enabled')) { Formwork::instance()->cache()->clear(); } - return JSONResponse::success($this->admin()->translate('admin.cache.cleared')); + return JSONResponse::success($this->panel()->translate('panel.cache.cleared')); } } diff --git a/formwork/src/Admin/Controllers/DashboardController.php b/formwork/src/Panel/Controllers/DashboardController.php similarity index 87% rename from formwork/src/Admin/Controllers/DashboardController.php rename to formwork/src/Panel/Controllers/DashboardController.php index 981b1b33..9db3a3fc 100644 --- a/formwork/src/Admin/Controllers/DashboardController.php +++ b/formwork/src/Panel/Controllers/DashboardController.php @@ -1,8 +1,8 @@ modal('deletePage'); return new Response($this->view('dashboard.index', [ - 'title' => $this->admin()->translate('admin.dashboard.dashboard'), + 'title' => $this->panel()->translate('panel.dashboard.dashboard'), 'lastModifiedPages' => $this->view('pages.list', [ 'pages' => $this->site()->descendants()->sortBy('lastModifiedTime', direction: SORT_DESC)->slice(0, 5), 'subpages' => false, diff --git a/formwork/src/Admin/Controllers/ErrorsController.php b/formwork/src/Panel/Controllers/ErrorsController.php similarity index 81% rename from formwork/src/Admin/Controllers/ErrorsController.php rename to formwork/src/Panel/Controllers/ErrorsController.php index e1dc9943..f949296b 100644 --- a/formwork/src/Admin/Controllers/ErrorsController.php +++ b/formwork/src/Panel/Controllers/ErrorsController.php @@ -1,6 +1,6 @@ makeErrorResponse(404, 'not-found', [ - 'href' => $this->admin()->uri('/dashboard/'), - 'label' => $this->admin()->translate('admin.errors.action.return-to-dashboard') + 'href' => $this->panel()->uri('/dashboard/'), + 'label' => $this->panel()->translate('panel.errors.action.return-to-dashboard') ]); } @@ -27,7 +27,7 @@ class ErrorsController extends AbstractController { return $this->makeErrorResponse(500, 'internal-server-error', [ 'href' => $this->makeGitHubIssueUri($exception), - 'label' => $this->admin()->translate('admin.errors.action.report-to-github') + 'label' => $this->panel()->translate('panel.errors.action.report-to-github') ]); } @@ -37,8 +37,8 @@ class ErrorsController extends AbstractController public function forbidden(): Response { return $this->makeErrorResponse(403, 'forbidden', [ - 'href' => $this->admin()->uri('/dashboard/'), - 'label' => $this->admin()->translate('admin.errors.action.return-to-dashboard') + 'href' => $this->panel()->uri('/dashboard/'), + 'label' => $this->panel()->translate('panel.errors.action.return-to-dashboard') ]); } @@ -53,11 +53,11 @@ class ErrorsController extends AbstractController { HTTPResponse::cleanOutputBuffers(); return new Response($this->view('errors.error', [ - 'title' => $this->admin()->translate('admin.errors.error.' . $name . '.status'), + 'title' => $this->panel()->translate('panel.errors.error.' . $name . '.status'), 'code' => $status, - 'status' => $this->admin()->translate('admin.errors.error.' . $name . '.status'), - 'heading' => $this->admin()->translate('admin.errors.error.' . $name . '.heading'), - 'description' => $this->admin()->translate('admin.errors.error.' . $name . '.description'), + 'status' => $this->panel()->translate('panel.errors.error.' . $name . '.status'), + 'heading' => $this->panel()->translate('panel.errors.error.' . $name . '.heading'), + 'description' => $this->panel()->translate('panel.errors.error.' . $name . '.description'), 'action' => $action ], true), $status); } diff --git a/formwork/src/Admin/Controllers/OptionsController.php b/formwork/src/Panel/Controllers/OptionsController.php similarity index 94% rename from formwork/src/Admin/Controllers/OptionsController.php rename to formwork/src/Panel/Controllers/OptionsController.php index 84778b5e..1e9b1c49 100644 --- a/formwork/src/Admin/Controllers/OptionsController.php +++ b/formwork/src/Panel/Controllers/OptionsController.php @@ -1,6 +1,6 @@ ensurePermission('options.system'); - return $this->admin()->redirect('/options/system/'); + return $this->panel()->redirect('/options/system/'); } /** @@ -52,8 +52,8 @@ class OptionsController extends AbstractController FileSystem::touch(Formwork::instance()->config()->get('content.path')); } - $this->admin()->notify($this->admin()->translate('admin.options.updated'), 'success'); - return $this->admin()->redirect('/options/system/'); + $this->panel()->notify($this->panel()->translate('panel.options.updated'), 'success'); + return $this->panel()->redirect('/options/system/'); } $fields->validate(Formwork::instance()->config()); @@ -61,7 +61,7 @@ class OptionsController extends AbstractController $this->modal('changes'); return new Response($this->view('options.system', [ - 'title' => $this->admin()->translate('admin.options.options'), + 'title' => $this->panel()->translate('panel.options.options'), 'tabs' => $this->view('options.tabs', [ 'tabs' => $this->tabs, 'current' => 'system' @@ -92,8 +92,8 @@ class OptionsController extends AbstractController FileSystem::touch(Formwork::instance()->config()->get('content.path')); } - $this->admin()->notify($this->admin()->translate('admin.options.updated'), 'success'); - return $this->admin()->redirect('/options/site/'); + $this->panel()->notify($this->panel()->translate('panel.options.updated'), 'success'); + return $this->panel()->redirect('/options/site/'); } $fields->validate($this->site()->data()); @@ -101,7 +101,7 @@ class OptionsController extends AbstractController $this->modal('changes'); return new Response($this->view('options.site', [ - 'title' => $this->admin()->translate('admin.options.options'), + 'title' => $this->panel()->translate('panel.options.options'), 'tabs' => $this->view('options.tabs', [ 'tabs' => $this->tabs, 'current' => 'site' @@ -118,7 +118,7 @@ class OptionsController extends AbstractController $this->ensurePermission('options.updates'); return new Response($this->view('options.updates', [ - 'title' => $this->admin()->translate('admin.options.updates'), + 'title' => $this->panel()->translate('panel.options.updates'), 'tabs' => $this->view('options.tabs', [ 'tabs' => $this->tabs, 'current' => 'updates' @@ -228,7 +228,7 @@ class OptionsController extends AbstractController ksort($data['HTTP Response Headers']); return new Response($this->view('options.info', [ - 'title' => $this->admin()->translate('admin.options.options'), + 'title' => $this->panel()->translate('panel.options.options'), 'tabs' => $this->view('options.tabs', [ 'tabs' => $this->tabs, 'current' => 'info' diff --git a/formwork/src/Admin/Controllers/PagesController.php b/formwork/src/Panel/Controllers/PagesController.php similarity index 80% rename from formwork/src/Admin/Controllers/PagesController.php rename to formwork/src/Panel/Controllers/PagesController.php index 3862cc1d..9ebe6b8a 100644 --- a/formwork/src/Admin/Controllers/PagesController.php +++ b/formwork/src/Panel/Controllers/PagesController.php @@ -1,8 +1,8 @@ modal('deletePage'); return new Response($this->view('pages.index', [ - 'title' => $this->admin()->translate('admin.pages.pages'), + 'title' => $this->panel()->translate('panel.pages.pages'), 'pagesList' => $this->view('pages.list', [ 'pages' => $this->site()->pages(), 'subpages' => true, @@ -76,13 +76,13 @@ class PagesController extends AbstractController // Let's create the page try { $page = $this->createPage($data); - $this->admin()->notify($this->admin()->translate('admin.pages.page.created'), 'success'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.created'), 'success'); } catch (TranslatedException $e) { - $this->admin()->notify($e->getTranslatedMessage(), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($e->getTranslatedMessage(), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } - return $this->admin()->redirect('/pages/' . trim($page->route(), '/') . '/edit/'); + return $this->panel()->redirect('/pages/' . trim($page->route(), '/') . '/edit/'); } /** @@ -95,20 +95,20 @@ class PagesController extends AbstractController $page = $this->site()->findPage($params->get('page')); if ($page === null) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-edit.page-not-found'), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-edit.page-not-found'), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } if ($params->has('language')) { if (empty(Formwork::instance()->config()->get('languages.available'))) { - return $this->admin()->redirect('/pages/' . trim($page->route(), '/') . '/edit/'); + return $this->panel()->redirect('/pages/' . trim($page->route(), '/') . '/edit/'); } $language = $params->get('language'); if (!in_array($language, Formwork::instance()->config()->get('languages.available'), true)) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-edit.invalid-language', $language), 'error'); - return $this->admin()->redirect('/pages/' . trim($page->route(), '/') . '/edit/language/' . $this->site()->languages()->default() . '/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-edit.invalid-language', $language), 'error'); + return $this->panel()->redirect('/pages/' . trim($page->route(), '/') . '/edit/language/' . $this->site()->languages()->default() . '/'); } if ($page->hasLanguage($language)) { @@ -116,7 +116,7 @@ class PagesController extends AbstractController } } elseif ($page->language() !== null) { // Redirect to proper language - return $this->admin()->redirect('/pages/' . trim($page->route(), '/') . '/edit/language/' . $page->language() . '/'); + return $this->panel()->redirect('/pages/' . trim($page->route(), '/') . '/edit/language/' . $page->language() . '/'); } // Load page fields @@ -142,22 +142,22 @@ class PagesController extends AbstractController // Update the page try { $page = $this->updatePage($page, $data, $fields); - $this->admin()->notify($this->admin()->translate('admin.pages.page.edited'), 'success'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.edited'), 'success'); } catch (TranslatedException $e) { - $this->admin()->notify($e->getTranslatedMessage(), 'error'); + $this->panel()->notify($e->getTranslatedMessage(), 'error'); } if (HTTPRequest::hasFiles()) { try { $this->processPageUploads($page); } catch (TranslatedException $e) { - $this->admin()->notify($this->admin()->translate('admin.uploader.error', $e->getTranslatedMessage()), 'error'); + $this->panel()->notify($this->panel()->translate('panel.uploader.error', $e->getTranslatedMessage()), 'error'); } } // Redirect if page route has changed if ($params->get('page') !== ($route = trim($page->route(), '/'))) { - return $this->admin()->redirect('/pages/' . $route . '/edit/'); + return $this->panel()->redirect('/pages/' . $route . '/edit/'); } break; @@ -176,7 +176,7 @@ class PagesController extends AbstractController $this->modal('deleteFile'); return new Response($this->view('pages.editor', [ - 'title' => $this->admin()->translate('admin.pages.edit-page', $page->title()), + 'title' => $this->panel()->translate('panel.pages.edit-page', $page->title()), 'page' => $page, 'fields' => $fields, 'templates' => $this->site()->templates()->keys(), @@ -196,16 +196,16 @@ class PagesController extends AbstractController $data = HTTPRequest::postData(); if (!$data->hasMultiple(['parent', 'from', 'to'])) { - return JSONResponse::error($this->admin()->translate('admin.pages.page.cannot-move')); + return JSONResponse::error($this->panel()->translate('panel.pages.page.cannot-move')); } if (!is_numeric($data->get('from')) || !is_numeric($data->get('to'))) { - return JSONResponse::error($this->admin()->translate('admin.pages.page.cannot-move')); + return JSONResponse::error($this->panel()->translate('panel.pages.page.cannot-move')); } $parent = $this->resolveParent($data->get('parent')); if ($parent === null || !$parent->hasChildren()) { - return JSONResponse::error($this->admin()->translate('admin.pages.page.cannot-move')); + return JSONResponse::error($this->panel()->translate('panel.pages.page.cannot-move')); } $pages = $parent->children()->toArray(); @@ -229,7 +229,7 @@ class PagesController extends AbstractController } } - return JSONResponse::success($this->admin()->translate('admin.pages.page.moved')); + return JSONResponse::success($this->panel()->translate('panel.pages.page.moved')); } /** @@ -242,8 +242,8 @@ class PagesController extends AbstractController $page = $this->site()->findPage($params->get('page')); if ($page === null) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-delete.page-not-found'), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-delete.page-not-found'), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } if ($params->has('language')) { @@ -251,14 +251,14 @@ class PagesController extends AbstractController if ($page->hasLanguage($language)) { $page->setLanguage($language); } else { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-delete.invalid-language', $language), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-delete.invalid-language', $language), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } } if (!$page->isDeletable()) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-delete.not-deletable'), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-delete.not-deletable'), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } // Delete just the content file only if there are more than one language @@ -268,13 +268,13 @@ class PagesController extends AbstractController FileSystem::delete($page->path(), true); } - $this->admin()->notify($this->admin()->translate('admin.pages.page.deleted'), 'success'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.deleted'), 'success'); // Don't redirect to referer if it's to Pages@edit - if (!Str::startsWith(Uri::normalize(HTTPRequest::referer()), Uri::make(['path' => $this->admin()->uri('/pages/' . $params->get('page') . '/edit/')]))) { - return $this->admin()->redirectToReferer(302, '/pages/'); + if (!Str::startsWith(Uri::normalize(HTTPRequest::referer()), Uri::make(['path' => $this->panel()->uri('/pages/' . $params->get('page') . '/edit/')]))) { + return $this->panel()->redirectToReferer(302, '/pages/'); } - return $this->admin()->redirect('/pages/'); + return $this->panel()->redirect('/pages/'); } /** @@ -287,21 +287,21 @@ class PagesController extends AbstractController $page = $this->site()->findPage($params->get('page')); if ($page === null) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-upload-file.page-not-found'), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-upload-file.page-not-found'), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } if (HTTPRequest::hasFiles()) { try { $this->processPageUploads($page); } catch (TranslatedException $e) { - $this->admin()->notify($this->admin()->translate('admin.uploader.error', $e->getTranslatedMessage()), 'error'); - return $this->admin()->redirect('/pages/' . $params->get('page') . '/edit/'); + $this->panel()->notify($this->panel()->translate('panel.uploader.error', $e->getTranslatedMessage()), 'error'); + return $this->panel()->redirect('/pages/' . $params->get('page') . '/edit/'); } } - $this->admin()->notify($this->admin()->translate('admin.uploader.uploaded'), 'success'); - return $this->admin()->redirect('/pages/' . $params->get('page') . '/edit/'); + $this->panel()->notify($this->panel()->translate('panel.uploader.uploaded'), 'success'); + return $this->panel()->redirect('/pages/' . $params->get('page') . '/edit/'); } /** @@ -314,19 +314,19 @@ class PagesController extends AbstractController $page = $this->site()->findPage($params->get('page')); if ($page === null) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-delete-file.page-not-found'), 'error'); - return $this->admin()->redirectToReferer(302, '/pages/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-delete-file.page-not-found'), 'error'); + return $this->panel()->redirectToReferer(302, '/pages/'); } if (!$page->files()->has($params->get('filename'))) { - $this->admin()->notify($this->admin()->translate('admin.pages.page.cannot-delete-file.file-not-found'), 'error'); - return $this->admin()->redirect('/pages/' . $params->get('page') . '/edit/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.cannot-delete-file.file-not-found'), 'error'); + return $this->panel()->redirect('/pages/' . $params->get('page') . '/edit/'); } FileSystem::delete($page->path() . $params->get('filename')); - $this->admin()->notify($this->admin()->translate('admin.pages.page.file-deleted'), 'success'); - return $this->admin()->redirect('/pages/' . $params->get('page') . '/edit/'); + $this->panel()->notify($this->panel()->translate('panel.pages.page.file-deleted'), 'success'); + return $this->panel()->redirect('/pages/' . $params->get('page') . '/edit/'); } /** @@ -336,30 +336,30 @@ class PagesController extends AbstractController { // Ensure no required data is missing if (!$data->hasMultiple(['title', 'slug', 'template', 'parent'])) { - throw new TranslatedException('Missing required POST data', 'admin.pages.page.cannot-create.var-missing'); + throw new TranslatedException('Missing required POST data', 'panel.pages.page.cannot-create.var-missing'); } $parent = $this->resolveParent($data->get('parent')); if ($parent === null) { - throw new TranslatedException('Parent page not found', 'admin.pages.page.cannot-create.invalid-parent'); + throw new TranslatedException('Parent page not found', 'panel.pages.page.cannot-create.invalid-parent'); } // Validate page slug if (!$this->validateSlug($data->get('slug'))) { - throw new TranslatedException('Invalid page slug', 'admin.pages.page.cannot-create.invalid-slug'); + throw new TranslatedException('Invalid page slug', 'panel.pages.page.cannot-create.invalid-slug'); } $route = $parent->route() . $data->get('slug') . '/'; // Ensure there isn't a page with the same route if ($this->site()->findPage($route)) { - throw new TranslatedException('A page with the same route already exists', 'admin.pages.page.cannot-create.already-exists'); + throw new TranslatedException('A page with the same route already exists', 'panel.pages.page.cannot-create.already-exists'); } // Validate page template if (!$this->site()->templates()->has($data->get('template'))) { - throw new TranslatedException('Invalid page template', 'admin.pages.page.cannot-create.invalid-template'); + throw new TranslatedException('Invalid page template', 'panel.pages.page.cannot-create.invalid-template'); } $scheme = Formwork::instance()->schemes()->get('pages', $data->get('template')); @@ -395,7 +395,7 @@ class PagesController extends AbstractController { // Ensure no required data is missing if (!$data->hasMultiple(['title', 'content'])) { - throw new TranslatedException('Missing required POST data', 'admin.pages.page.cannot-edit.var-missing'); + throw new TranslatedException('Missing required POST data', 'panel.pages.page.cannot-edit.var-missing'); } // Load current page frontmatter @@ -429,7 +429,7 @@ class PagesController extends AbstractController // Validate language if (!empty($language) && !in_array($language, Formwork::instance()->config()->get('languages.available'), true)) { - throw new TranslatedException('Invalid page language', 'admin.pages.page.cannot-edit.invalid-language'); + throw new TranslatedException('Invalid page language', 'panel.pages.page.cannot-edit.invalid-language'); } $differ = $frontmatter !== $page->frontmatter() || $content !== $page->data()['content'] || $language !== $page->language(); @@ -458,7 +458,7 @@ class PagesController extends AbstractController try { $page = $this->changePageName($page, $name); } catch (RuntimeException $e) { - throw new TranslatedException('Cannot change page num', 'admin.pages.page.cannot-change-num'); + throw new TranslatedException('Cannot change page num', 'panel.pages.page.cannot-change-num'); } } } @@ -466,7 +466,7 @@ class PagesController extends AbstractController // Check if parent page has to change if ($page->parent() !== ($parent = $this->resolveParent($data->get('parent')))) { if ($parent === null) { - throw new TranslatedException('Invalid parent page', 'admin.pages.page.cannot-edit.invalid-parent'); + throw new TranslatedException('Invalid parent page', 'panel.pages.page.cannot-edit.invalid-parent'); } $page = $this->changePageParent($page, $parent); } @@ -474,7 +474,7 @@ class PagesController extends AbstractController // Check if page template has to change if ($page->template()->name() !== ($template = $data->get('template'))) { if (!$this->site()->templates()->has($template)) { - throw new TranslatedException('Invalid page template', 'admin.pages.page.cannot-edit.invalid-template'); + throw new TranslatedException('Invalid page template', 'panel.pages.page.cannot-edit.invalid-template'); } $page = $this->changePageTemplate($page, $template); } @@ -482,14 +482,14 @@ class PagesController extends AbstractController // Check if page slug has to change if ($page->slug() !== ($slug = $data->get('slug'))) { if (!$this->validateSlug($slug)) { - throw new TranslatedException('Invalid page slug', 'admin.pages.page.cannot-edit.invalid-slug'); + throw new TranslatedException('Invalid page slug', 'panel.pages.page.cannot-edit.invalid-slug'); } // Don't change index and error pages slug if ($page->isIndexPage() || $page->isErrorPage()) { - throw new TranslatedException('Cannot change slug of index or error pages', 'admin.pages.page.cannot-edit.index-or-error-page-slug'); + throw new TranslatedException('Cannot change slug of index or error pages', 'panel.pages.page.cannot-edit.index-or-error-page-slug'); } if ($this->site()->findPage($page->parent()->route() . $slug . '/')) { - throw new TranslatedException('A page with the same route already exists', 'admin.pages.page.cannot-edit.already-exists'); + throw new TranslatedException('A page with the same route already exists', 'panel.pages.page.cannot-edit.already-exists'); } $page = $this->changePageName($page, ltrim($page->num() . '-', '-') . $slug); } diff --git a/formwork/src/Admin/Controllers/RegisterController.php b/formwork/src/Panel/Controllers/RegisterController.php similarity index 71% rename from formwork/src/Admin/Controllers/RegisterController.php rename to formwork/src/Panel/Controllers/RegisterController.php index 944f4cff..64137633 100644 --- a/formwork/src/Admin/Controllers/RegisterController.php +++ b/formwork/src/Panel/Controllers/RegisterController.php @@ -1,9 +1,9 @@ view('register.register', [ - 'title' => $this->admin()->translate('admin.register.register') + 'title' => $this->panel()->translate('panel.register.register') ], true)); break; @@ -34,8 +34,8 @@ class RegisterController extends AbstractController $data = HTTPRequest::postData(); if (!$data->hasMultiple(['username', 'fullname', 'password', 'language', 'email'])) { - $this->admin()->notify($this->admin()->translate('admin.users.user.cannot-create.var-missing'), 'error'); - return $this->admin()->redirectToPanel(); + $this->panel()->notify($this->panel()->translate('panel.users.user.cannot-create.var-missing'), 'error'); + return $this->panel()->redirectToPanel(); } $userData = [ @@ -44,20 +44,20 @@ class RegisterController extends AbstractController 'hash' => Password::hash($data->get('password')), 'email' => $data->get('email'), 'language' => $data->get('language'), - 'role' => 'admin' + 'role' => 'panel' ]; - YAML::encodeToFile($userData, Formwork::instance()->config()->get('admin.paths.accounts') . $data->get('username') . '.yml'); + YAML::encodeToFile($userData, Formwork::instance()->config()->get('panel.paths.accounts') . $data->get('username') . '.yml'); Session::set('FORMWORK_USERNAME', $data->get('username')); - $accessLog = new Log(Formwork::instance()->config()->get('admin.paths.logs') . 'access.json'); - $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('admin.paths.logs') . 'lastAccess.json'); + $accessLog = new Log(Formwork::instance()->config()->get('panel.paths.logs') . 'access.json'); + $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('panel.paths.logs') . 'lastAccess.json'); $time = $accessLog->log($data->get('username')); $lastAccessRegistry->set($data->get('username'), $time); - return $this->admin()->redirectToPanel(); + return $this->panel()->redirectToPanel(); break; } diff --git a/formwork/src/Admin/Controllers/UpdatesController.php b/formwork/src/Panel/Controllers/UpdatesController.php similarity index 61% rename from formwork/src/Admin/Controllers/UpdatesController.php rename to formwork/src/Panel/Controllers/UpdatesController.php index 78cee6f3..82216610 100644 --- a/formwork/src/Admin/Controllers/UpdatesController.php +++ b/formwork/src/Panel/Controllers/UpdatesController.php @@ -1,9 +1,9 @@ checkUpdates(); } catch (RuntimeException $e) { - return JSONResponse::error($this->admin()->translate('admin.updates.status.cannot-check'), 500, [ - 'status' => $this->admin()->translate('admin.updates.status.cannot-check') + return JSONResponse::error($this->panel()->translate('panel.updates.status.cannot-check'), 500, [ + 'status' => $this->panel()->translate('panel.updates.status.cannot-check') ]); } if ($upToDate) { - return JSONResponse::success($this->admin()->translate('admin.updates.status.up-to-date'), 200, [ + return JSONResponse::success($this->panel()->translate('panel.updates.status.up-to-date'), 200, [ 'uptodate' => true ]); } - return JSONResponse::success($this->admin()->translate('admin.updates.status.found'), 200, [ + return JSONResponse::success($this->panel()->translate('panel.updates.status.found'), 200, [ 'uptodate' => false, 'release' => $updater->latestRelease() ]); @@ -48,23 +48,23 @@ class UpdatesController extends AbstractController try { $backupper->backup(); } catch (TranslatedException $e) { - return JSONResponse::error($this->admin()->translate('admin.updates.status.cannot-make-backup'), 500, [ - 'status' => $this->admin()->translate('admin.updates.status.cannot-make-backup') + return JSONResponse::error($this->panel()->translate('panel.updates.status.cannot-make-backup'), 500, [ + 'status' => $this->panel()->translate('panel.updates.status.cannot-make-backup') ]); } } try { $updater->update(); } catch (RuntimeException $e) { - return JSONResponse::error($this->admin()->translate('admin.updates.status.cannot-install'), 500, [ - 'status' => $this->admin()->translate('admin.updates.status.cannot-install') + return JSONResponse::error($this->panel()->translate('panel.updates.status.cannot-install'), 500, [ + 'status' => $this->panel()->translate('panel.updates.status.cannot-install') ]); } if (Formwork::instance()->config()->get('cache.enabled')) { Formwork::instance()->cache()->clear(); } - return JSONResponse::success($this->admin()->translate('admin.updates.installed'), 200, [ - 'status' => $this->admin()->translate('admin.updates.status.up-to-date') + return JSONResponse::success($this->panel()->translate('panel.updates.installed'), 200, [ + 'status' => $this->panel()->translate('panel.updates.status.up-to-date') ]); } } diff --git a/formwork/src/Admin/Controllers/UsersController.php b/formwork/src/Panel/Controllers/UsersController.php similarity index 71% rename from formwork/src/Admin/Controllers/UsersController.php rename to formwork/src/Panel/Controllers/UsersController.php index 29289403..51b6c831 100644 --- a/formwork/src/Admin/Controllers/UsersController.php +++ b/formwork/src/Panel/Controllers/UsersController.php @@ -1,10 +1,10 @@ modal('deleteUser'); return new Response($this->view('users.index', [ - 'title' => $this->admin()->translate('admin.users.users'), - 'users' => $this->admin()->users() + 'title' => $this->panel()->translate('panel.users.users'), + 'users' => $this->panel()->users() ], true)); } @@ -46,14 +46,14 @@ class UsersController extends AbstractController // Ensure no required data is missing if (!$data->hasMultiple(['username', 'fullname', 'password', 'email', 'language'])) { - $this->admin()->notify($this->admin()->translate('admin.users.user.cannot-create.var-missing'), 'error'); - return $this->admin()->redirect('/users/'); + $this->panel()->notify($this->panel()->translate('panel.users.user.cannot-create.var-missing'), 'error'); + return $this->panel()->redirect('/users/'); } // Ensure there isn't a user with the same username - if ($this->admin()->users()->has($data->get('username'))) { - $this->admin()->notify($this->admin()->translate('admin.users.user.cannot-create.already-exists'), 'error'); - return $this->admin()->redirect('/users/'); + if ($this->panel()->users()->has($data->get('username'))) { + $this->panel()->notify($this->panel()->translate('panel.users.user.cannot-create.already-exists'), 'error'); + return $this->panel()->redirect('/users/'); } $userData = [ @@ -64,10 +64,10 @@ class UsersController extends AbstractController 'language' => $data->get('language') ]; - YAML::encodeToFile($userData, Formwork::instance()->config()->get('admin.paths.accounts') . $data->get('username') . '.yml'); + YAML::encodeToFile($userData, Formwork::instance()->config()->get('panel.paths.accounts') . $data->get('username') . '.yml'); - $this->admin()->notify($this->admin()->translate('admin.users.user.created'), 'success'); - return $this->admin()->redirect('/users/'); + $this->panel()->notify($this->panel()->translate('panel.users.user.created'), 'success'); + return $this->panel()->redirect('/users/'); } /** @@ -77,11 +77,11 @@ class UsersController extends AbstractController { $this->ensurePermission('users.delete'); - $user = $this->admin()->users()->get($params->get('user')); + $user = $this->panel()->users()->get($params->get('user')); try { if (!$user) { - throw new TranslatedException(sprintf('User "%s" not found', $params->get('user')), 'admin.users.user.not-found'); + throw new TranslatedException(sprintf('User "%s" not found', $params->get('user')), 'panel.users.user.not-found'); } if (!$this->user()->canDeleteUser($user)) { throw new TranslatedException( @@ -89,20 +89,20 @@ class UsersController extends AbstractController 'users.user.cannot-delete' ); } - FileSystem::delete(Formwork::instance()->config()->get('admin.paths.accounts') . $user->username() . '.yml'); + FileSystem::delete(Formwork::instance()->config()->get('panel.paths.accounts') . $user->username() . '.yml'); $this->deleteAvatar($user); } catch (TranslatedException $e) { - $this->admin()->notify($e->getTranslatedMessage(), 'error'); - return $this->admin()->redirectToReferer(302, '/users/'); + $this->panel()->notify($e->getTranslatedMessage(), 'error'); + return $this->panel()->redirectToReferer(302, '/users/'); } - $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('admin.paths.logs') . 'lastAccess.json'); + $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('panel.paths.logs') . 'lastAccess.json'); // Remove user last access from registry $lastAccessRegistry->remove($user->username()); - $this->admin()->notify($this->admin()->translate('admin.users.user.deleted'), 'success'); - return $this->admin()->redirect('/users/'); + $this->panel()->notify($this->panel()->translate('panel.users.user.deleted'), 'success'); + return $this->panel()->redirect('/users/'); } /** @@ -110,15 +110,15 @@ class UsersController extends AbstractController */ public function profile(RouteParams $params): Response { - $scheme = Formwork::instance()->schemes()->get('admin', 'user'); + $scheme = Formwork::instance()->schemes()->get('panel', 'user'); $fields = $scheme->fields(); - $user = $this->admin()->users()->get($params->get('user')); + $user = $this->panel()->users()->get($params->get('user')); if ($user === null) { - $this->admin()->notify($this->admin()->translate('admin.users.user.not-found'), 'error'); - return $this->admin()->redirect('/users/'); + $this->panel()->notify($this->panel()->translate('panel.users.user.not-found'), 'error'); + return $this->panel()->redirect('/users/'); } // Disable password and/or role fields if they cannot be changed @@ -132,15 +132,15 @@ class UsersController extends AbstractController $fields->validate($data); try { $this->updateUser($user, $data); - $this->admin()->notify($this->admin()->translate('admin.users.user.edited'), 'success'); + $this->panel()->notify($this->panel()->translate('panel.users.user.edited'), 'success'); } catch (TranslatedException $e) { - $this->admin()->notify($this->admin()->translate($e->getLanguageString(), $user->username()), 'error'); + $this->panel()->notify($this->panel()->translate($e->getLanguageString(), $user->username()), 'error'); } } else { - $this->admin()->notify($this->admin()->translate('admin.users.user.cannot-edit', $user->username()), 'error'); + $this->panel()->notify($this->panel()->translate('panel.users.user.cannot-edit', $user->username()), 'error'); } - return $this->admin()->redirect('/users/' . $user->username() . '/profile/'); + return $this->panel()->redirect('/users/' . $user->username() . '/profile/'); } $fields = $fields->validate($user); @@ -150,7 +150,7 @@ class UsersController extends AbstractController $this->modal('deleteUser'); return new Response($this->view('users.profile', [ - 'title' => $this->admin()->translate('admin.users.user-profile', $user->username()), + 'title' => $this->panel()->translate('panel.users.user-profile', $user->username()), 'user' => $user, 'fields' => $fields ], true)); @@ -167,7 +167,7 @@ class UsersController extends AbstractController if (!empty($data['password'])) { // Ensure that password can be changed if (!$this->user()->canChangePasswordOf($user)) { - throw new TranslatedException(sprintf('Cannot change the password of %s', $user->username()), 'admin.users.user.cannot-change-password'); + throw new TranslatedException(sprintf('Cannot change the password of %s', $user->username()), 'panel.users.user.cannot-change-password'); } // Hash the new password @@ -179,7 +179,7 @@ class UsersController extends AbstractController // Ensure that user role can be changed if (($data['role'] ?? $user->role()) !== $user->role() && !$this->user()->canChangeRoleOf($user)) { - throw new TranslatedException(sprintf('Cannot change the role of %s', $user->username()), 'admin.users.user.cannot-change-role'); + throw new TranslatedException(sprintf('Cannot change the role of %s', $user->username()), 'panel.users.user.cannot-change-role'); } // Handle incoming files @@ -190,7 +190,7 @@ class UsersController extends AbstractController // Filter empty elements from $data and merge them with $user ones $userData = array_merge($user->toArray(), $data); - YAML::encodeToFile($userData, Formwork::instance()->config()->get('admin.paths.accounts') . $user->username() . '.yml'); + YAML::encodeToFile($userData, Formwork::instance()->config()->get('panel.paths.accounts') . $user->username() . '.yml'); } /** @@ -198,7 +198,7 @@ class UsersController extends AbstractController */ protected function uploadAvatar(User $user): ?string { - $avatarsPath = ADMIN_PATH . 'avatars' . DS; + $avatarsPath = PANEL_PATH . 'avatars' . DS; $uploader = new Uploader( $avatarsPath, @@ -210,7 +210,7 @@ class UsersController extends AbstractController $hasUploaded = $uploader->upload(FileSystem::randomName()); if ($hasUploaded) { - $avatarSize = Formwork::instance()->config()->get('admin.avatar_size'); + $avatarSize = Formwork::instance()->config()->get('panel.avatar_size'); // Square off uploaded avatar $image = new Image($avatarsPath . $uploader->uploadedFiles()[0]); @@ -219,7 +219,7 @@ class UsersController extends AbstractController // Delete old avatar $this->deleteAvatar($user); - $this->admin()->notify($this->admin()->translate('admin.user.avatar.uploaded'), 'success'); + $this->panel()->notify($this->panel()->translate('panel.user.avatar.uploaded'), 'success'); return $uploader->uploadedFiles()[0]; } } diff --git a/formwork/src/Admin/Admin.php b/formwork/src/Panel/Panel.php similarity index 92% rename from formwork/src/Admin/Admin.php rename to formwork/src/Panel/Panel.php index f5f3cd40..f000b7a8 100644 --- a/formwork/src/Admin/Admin.php +++ b/formwork/src/Panel/Panel.php @@ -1,10 +1,10 @@ config()->get('admin.root')); + return Uri::normalize(Formwork::instance()->config()->get('panel.root')); } /** @@ -218,7 +218,7 @@ final class Admin if (isset($this->assets)) { return $this->assets; } - return $this->assets = new Assets(ADMIN_PATH . 'assets' . DS, Formwork::instance()->admin()->realUri('/assets/')); + return $this->assets = new Assets(PANEL_PATH . 'assets' . DS, Formwork::instance()->panel()->realUri('/assets/')); } /** @@ -232,7 +232,7 @@ final class Admin return $translations; } - $path = Formwork::instance()->config()->get('translations.paths.admin'); + $path = Formwork::instance()->config()->get('translations.paths.panel'); foreach (FileSystem::listFiles($path) as $file) { if (FileSystem::extension($file) === 'yml') { @@ -251,7 +251,7 @@ final class Admin */ protected function loadTranslations(): void { - $path = Formwork::instance()->config()->get('translations.paths.admin'); + $path = Formwork::instance()->config()->get('translations.paths.panel'); Formwork::instance()->translations()->loadFromPath($path); if ($this->isLoggedIn()) { @@ -261,8 +261,8 @@ final class Admin protected function loadSchemes(): void { - $path = Formwork::instance()->config()->get('schemes.paths.admin'); - Formwork::instance()->schemes()->loadFromPath('admin', $path); + $path = Formwork::instance()->config()->get('schemes.paths.panel'); + Formwork::instance()->schemes()->loadFromPath('panel', $path); } /** diff --git a/formwork/src/Admin/Security/AccessLimiter.php b/formwork/src/Panel/Security/AccessLimiter.php similarity index 98% rename from formwork/src/Admin/Security/AccessLimiter.php rename to formwork/src/Panel/Security/AccessLimiter.php index 02332f00..f82f6fc6 100644 --- a/formwork/src/Admin/Security/AccessLimiter.php +++ b/formwork/src/Panel/Security/AccessLimiter.php @@ -1,6 +1,6 @@ config()->get('admin.paths.logs') . 'statistics' . DS; + $base = Formwork::instance()->config()->get('panel.paths.logs') . 'statistics' . DS; if (!FileSystem::exists($base)) { FileSystem::createDirectory($base); diff --git a/formwork/src/Admin/Updater.php b/formwork/src/Panel/Updater.php similarity index 98% rename from formwork/src/Admin/Updater.php rename to formwork/src/Panel/Updater.php index bc0d6b84..70327b22 100644 --- a/formwork/src/Admin/Updater.php +++ b/formwork/src/Panel/Updater.php @@ -1,6 +1,6 @@ 900, 'force' => false, - 'registryFile' => Formwork::instance()->config()->get('admin.paths.logs') . 'updates.json', + 'registryFile' => Formwork::instance()->config()->get('panel.paths.logs') . 'updates.json', 'tempFile' => ROOT_PATH . '.formwork-update.zip', 'preferDistAssets' => false, 'cleanupAfterInstall' => false, 'ignore' => [ - 'admin/accounts/*', - 'admin/avatars/*', - 'admin/logs/*', + 'panel/accounts/*', + 'panel/avatars/*', + 'panel/logs/*', 'assets/*', 'backup/*', 'cache/*', diff --git a/formwork/src/Admin/Uploader.php b/formwork/src/Panel/Uploader.php similarity index 84% rename from formwork/src/Admin/Uploader.php rename to formwork/src/Panel/Uploader.php index c8d202d1..cfe7d4da 100644 --- a/formwork/src/Admin/Uploader.php +++ b/formwork/src/Panel/Uploader.php @@ -1,6 +1,6 @@ 'admin.uploader.error.size', - UPLOAD_ERR_FORM_SIZE => 'admin.uploader.error.size', - UPLOAD_ERR_PARTIAL => 'admin.uploader.error.partial', - UPLOAD_ERR_NO_FILE => 'admin.uploader.error.no-file', - UPLOAD_ERR_NO_TMP_DIR => 'admin.uploader.error.no-temp', - UPLOAD_ERR_CANT_WRITE => 'admin.uploader.error.cannot-write', - UPLOAD_ERR_EXTENSION => 'admin.uploader.error.php-extension' + UPLOAD_ERR_INI_SIZE => 'panel.uploader.error.size', + UPLOAD_ERR_FORM_SIZE => 'panel.uploader.error.size', + UPLOAD_ERR_PARTIAL => 'panel.uploader.error.partial', + UPLOAD_ERR_NO_FILE => 'panel.uploader.error.no-file', + UPLOAD_ERR_NO_TMP_DIR => 'panel.uploader.error.no-temp', + UPLOAD_ERR_CANT_WRITE => 'panel.uploader.error.cannot-write', + UPLOAD_ERR_EXTENSION => 'panel.uploader.error.php-extension' ]; /** @@ -130,11 +130,11 @@ class Uploader $mimeType = FileSystem::mimeType($source); if (!$this->isAllowedMimeType($mimeType)) { - throw new TranslatedException(sprintf('MIME type %s is not allowed', $mimeType), 'admin.uploader.error.mime-type'); + throw new TranslatedException(sprintf('MIME type %s is not allowed', $mimeType), 'panel.uploader.error.mime-type'); } if (basename($filename)[0] === '.') { - throw new TranslatedException(sprintf('Hidden file "%s" not allowed', $filename), 'admin.uploader.error.hidden-files'); + throw new TranslatedException(sprintf('Hidden file "%s" not allowed', $filename), 'panel.uploader.error.hidden-files'); } $name = str_replace([' ', '.'], '-', FileSystem::name($filename)); @@ -147,21 +147,21 @@ class Uploader $filename = $name . '.' . $extension; if (strlen($filename) > FileSystem::MAX_NAME_LENGTH) { - throw new TranslatedException('File name too long', 'admin.uploader.error.file-name-too-long'); + throw new TranslatedException('File name too long', 'panel.uploader.error.file-name-too-long'); } if (!(bool) preg_match('/^[a-z0-9_-]+(?:\.[a-z0-9]+)?$/i', $filename)) { - throw new TranslatedException(sprintf('Invalid file name "%s"', $filename), 'admin.uploader.error.file-name'); + throw new TranslatedException(sprintf('Invalid file name "%s"', $filename), 'panel.uploader.error.file-name'); } $destinationPath = FileSystem::joinPaths($destination, $filename); if (strlen($destinationPath) > FileSystem::MAX_PATH_LENGTH) { - throw new TranslatedException('Destination path too long', 'admin.uploader.error.destination-too-long'); + throw new TranslatedException('Destination path too long', 'panel.uploader.error.destination-too-long'); } if (!$this->options['overwrite'] && FileSystem::exists($destinationPath)) { - throw new TranslatedException(sprintf('File "%s" already exists', $filename), 'admin.uploader.error.already-exists'); + throw new TranslatedException(sprintf('File "%s" already exists', $filename), 'panel.uploader.error.already-exists'); } if (@move_uploaded_file($source, $destinationPath)) { @@ -169,7 +169,7 @@ class Uploader return true; } - throw new TranslatedException('Cannot move uploaded file to destination', 'admin.uploader.error.cannot-move-to-destination'); + throw new TranslatedException('Cannot move uploaded file to destination', 'panel.uploader.error.cannot-move-to-destination'); return false; } diff --git a/formwork/src/Admin/Users/Avatar.php b/formwork/src/Panel/Users/Avatar.php similarity index 80% rename from formwork/src/Admin/Users/Avatar.php rename to formwork/src/Panel/Users/Avatar.php index a341bce8..bf8015dd 100644 --- a/formwork/src/Admin/Users/Avatar.php +++ b/formwork/src/Panel/Users/Avatar.php @@ -1,6 +1,6 @@ uri = Formwork::instance()->admin()->realUri('/avatars/' . basename($path)); + $this->uri = Formwork::instance()->panel()->realUri('/avatars/' . basename($path)); $this->path = $path; } else { - $this->uri = Formwork::instance()->admin()->realUri(self::DEFAULT_AVATAR_URI); + $this->uri = Formwork::instance()->panel()->realUri(self::DEFAULT_AVATAR_URI); } } diff --git a/formwork/src/Admin/Users/Permissions.php b/formwork/src/Panel/Users/Permissions.php similarity index 97% rename from formwork/src/Admin/Users/Permissions.php rename to formwork/src/Panel/Users/Permissions.php index 7f5ba99e..05b80bc9 100644 --- a/formwork/src/Admin/Users/Permissions.php +++ b/formwork/src/Panel/Users/Permissions.php @@ -1,6 +1,6 @@ role === 'admin'; + return $this->role === 'panel'; } /** @@ -176,7 +176,7 @@ class User implements Arrayable */ public function canDeleteUser(User $user): bool { - return $this->isAdmin() && !$user->isLogged(); + return $this->isPanel() && !$user->isLogged(); } /** @@ -184,7 +184,7 @@ class User implements Arrayable */ public function canChangeOptionsOf(User $user): bool { - return $this->isAdmin() || $user->isLogged(); + return $this->isPanel() || $user->isLogged(); } /** @@ -192,7 +192,7 @@ class User implements Arrayable */ public function canChangePasswordOf(User $user): bool { - return $this->isAdmin() || $user->isLogged(); + return $this->isPanel() || $user->isLogged(); } /** @@ -200,7 +200,7 @@ class User implements Arrayable */ public function canChangeRoleOf(User $user): bool { - return $this->isAdmin() && !$user->isLogged(); + return $this->isPanel() && !$user->isLogged(); } /** @@ -211,7 +211,7 @@ class User implements Arrayable if (isset($this->lastAccess)) { return $this->lastAccess; } - $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('admin.paths.logs') . 'lastAccess.json'); + $lastAccessRegistry = new Registry(Formwork::instance()->config()->get('panel.paths.logs') . 'lastAccess.json'); $lastAccess = (int) $lastAccessRegistry->get($this->username); return $this->lastAccess = $lastAccess ?: null; } diff --git a/formwork/src/Admin/Users/Users.php b/formwork/src/Panel/Users/Users.php similarity index 84% rename from formwork/src/Admin/Users/Users.php rename to formwork/src/Panel/Users/Users.php index 62761726..cfbe0b09 100644 --- a/formwork/src/Admin/Users/Users.php +++ b/formwork/src/Panel/Users/Users.php @@ -1,6 +1,6 @@ schemes()->get('admin', 'roles')->get('data'); + static::$roles = Formwork::instance()->schemes()->get('panel', 'roles')->get('data'); $users = []; - foreach (FileSystem::listFiles(Formwork::instance()->config()->get('admin.paths.accounts')) as $file) { - $parsedData = YAML::parseFile(Formwork::instance()->config()->get('admin.paths.accounts') . $file); + foreach (FileSystem::listFiles(Formwork::instance()->config()->get('panel.paths.accounts')) as $file) { + $parsedData = YAML::parseFile(Formwork::instance()->config()->get('panel.paths.accounts') . $file); $users[$parsedData['username']] = new User($parsedData); } return new static($users); diff --git a/formwork/src/Admin/Utils/DateFormats.php b/formwork/src/Panel/Utils/DateFormats.php similarity index 96% rename from formwork/src/Admin/Utils/DateFormats.php rename to formwork/src/Panel/Utils/DateFormats.php index 3605fca3..964bc87f 100644 --- a/formwork/src/Admin/Utils/DateFormats.php +++ b/formwork/src/Panel/Utils/DateFormats.php @@ -1,6 +1,6 @@ true, 'samesite' => Cookie::SAMESITE_STRICT ]; - if (($timeout = Formwork::instance()->config()->get('admin.session_timeout')) > 0) { + if (($timeout = Formwork::instance()->config()->get('panel.session_timeout')) > 0) { $options['expires'] = time() + $timeout * 60; } return $options; diff --git a/admin/.eslintrc.json b/panel/.eslintrc.json similarity index 100% rename from admin/.eslintrc.json rename to panel/.eslintrc.json diff --git a/admin/.gitignore b/panel/.gitignore similarity index 100% rename from admin/.gitignore rename to panel/.gitignore diff --git a/admin/.stylelintrc.json b/panel/.stylelintrc.json similarity index 100% rename from admin/.stylelintrc.json rename to panel/.stylelintrc.json diff --git a/admin/accounts/.gitkeep b/panel/accounts/.gitkeep similarity index 100% rename from admin/accounts/.gitkeep rename to panel/accounts/.gitkeep diff --git a/admin/assets/css/admin-dark.min.css b/panel/assets/css/panel-dark.min.css similarity index 99% rename from admin/assets/css/admin-dark.min.css rename to panel/assets/css/panel-dark.min.css index e294c42e..0270274b 100644 --- a/admin/assets/css/admin-dark.min.css +++ b/panel/assets/css/panel-dark.min.css @@ -1 +1 @@ -html{font-size:100%;-webkit-text-size-adjust:100%}body{margin:0;background-color:#1f2123;color:#f2f2f3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;line-height:1.5;-webkit-tap-highlight-color:rgba(242,242,243,0)}*{box-sizing:border-box}main{display:block}a{background-color:rgba(0,0,0,0);color:#1e88e5;outline-color:rgba(4,138,255,.375);text-decoration:none;transition:color 150ms}a:hover{color:#186db7}a:not([href]){cursor:default}img{max-width:100%;border-style:none}mark{background-color:gold}[hidden]{display:none}.focused{box-shadow:0 0 0 2px rgba(4,138,255,.375)}::selection{background-color:rgba(30,136,229,.25)}::placeholder{color:#979ca1}@media(min-width: 600px){.hide-from-xs{display:none}}@media(max-width: 599px){.show-from-xs{display:none}}@media(min-width: 768px){.hide-from-s{display:none}}@media(max-width: 767px){.show-from-s{display:none}}@media(min-width: 1024px){.hide-from-m{display:none}}@media(max-width: 1023px){.show-from-m{display:none}}@media(min-width: 1280px){.hide-from-l{display:none}}@media(max-width: 1279px){.show-from-l{display:none}}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1,h2,.h2,h3,.h3{letter-spacing:-0.027rem}h1,.h1{font-size:2.369rem}h2,.h2{font-size:2.104rem}h3,.h3{font-size:1.777rem}h4,.h4{font-size:1.579rem}h5,.h5{font-size:1.184rem}h6,.h6{font-size:1rem}strong{font-weight:600}p{margin-top:0;margin-bottom:.5rem;line-height:1.5}ul{padding:0;margin-top:0;margin-bottom:.5rem;margin-left:1.25rem;list-style-position:outside}.container,.container-full,.container-no-margin{padding:0 15px;margin:0 auto}.container{max-width:1280px}.container-no-margin{padding-right:0;padding-left:0}.row{display:flex;flex-wrap:wrap;margin:0 -15px}@media(max-width: 768px){.container-no-margin .row{margin:0}.container-no-margin div[class^=col-]{padding:0}}.col-xs,.col-xs-1-12,.col-xs-2-12,.col-xs-1-6,.col-xs-3-12,.col-xs-1-4,.col-xs-4-12,.col-xs-1-3,.col-xs-5-12,.col-xs-6-12,.col-xs-1-2,.col-xs-7-12,.col-xs-8-12,.col-xs-2-3,.col-xs-9-12,.col-xs-3-4,.col-xs-10-12,.col-xs-5-6,.col-xs-11-12,.col-xs-12-12,.col-xs-1-1,.col-s,.col-s-1-12,.col-s-2-12,.col-s-1-6,.col-s-3-12,.col-s-1-4,.col-s-4-12,.col-s-1-3,.col-s-5-12,.col-s-6-12,.col-s-1-2,.col-s-7-12,.col-s-8-12,.col-s-2-3,.col-s-9-12,.col-s-3-4,.col-s-10-12,.col-s-5-6,.col-s-11-12,.col-s-12-12,.col-s-1-1,.col-m,.col-m-1-12,.col-m-2-12,.col-m-1-6,.col-m-3-12,.col-m-1-4,.col-m-4-12,.col-m-1-3,.col-m-5-12,.col-m-6-12,.col-m-1-2,.col-m-7-12,.col-m-8-12,.col-m-2-3,.col-m-9-12,.col-m-3-4,.col-m-10-12,.col-m-5-6,.col-m-11-12,.col-m-12-12,.col-m-1-1,.col-l,.col-l-1-12,.col-l-2-12,.col-l-1-6,.col-l-3-12,.col-l-1-4,.col-l-4-12,.col-l-1-3,.col-l-5-12,.col-l-6-12,.col-l-1-2,.col-l-7-12,.col-l-8-12,.col-l-2-3,.col-l-9-12,.col-l-3-4,.col-l-10-12,.col-l-5-6,.col-l-11-12,.col-l-12-12,.col-l-1-1{width:100%;padding:0 15px}.col-xs{width:auto;max-width:100%;flex:1 0 auto}.col-xs-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-xs-2-12,.col-xs-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-xs-3-12,.col-xs-1-4{max-width:25%;flex:0 0 25%}.col-xs-4-12,.col-xs-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-xs-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-xs-6-12,.col-xs-1-2{max-width:50%;flex:0 0 50%}.col-xs-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-xs-8-12,.col-xs-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-xs-9-12,.col-xs-3-4{max-width:75%;flex:0 0 75%}.col-xs-10-12,.col-xs-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-xs-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-xs-12-12,.col-xs-1-1{max-width:100%;flex:0 0 100%}@media(min-width: 768px){.col-s{width:auto;max-width:100%;flex:1 0 auto}.col-s-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-s-2-12,.col-s-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-s-3-12,.col-s-1-4{max-width:25%;flex:0 0 25%}.col-s-4-12,.col-s-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-s-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-s-6-12,.col-s-1-2{max-width:50%;flex:0 0 50%}.col-s-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-s-8-12,.col-s-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-s-9-12,.col-s-3-4{max-width:75%;flex:0 0 75%}.col-s-10-12,.col-s-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-s-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-s-12-12,.col-s-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1024px){.col-m{width:auto;max-width:100%;flex:1 0 auto}.col-m-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-m-2-12,.col-m-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-m-3-12,.col-m-1-4{max-width:25%;flex:0 0 25%}.col-m-4-12,.col-m-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-m-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-m-6-12,.col-m-1-2{max-width:50%;flex:0 0 50%}.col-m-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-m-8-12,.col-m-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-m-9-12,.col-m-3-4{max-width:75%;flex:0 0 75%}.col-m-10-12,.col-m-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-m-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-m-12-12,.col-m-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1280px){.col-l{width:auto;max-width:100%;flex:1 0 auto}.col-l-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-l-2-12,.col-l-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-l-3-12,.col-l-1-4{max-width:25%;flex:0 0 25%}.col-l-4-12,.col-l-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-l-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-l-6-12,.col-l-1-2{max-width:50%;flex:0 0 50%}.col-l-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-l-8-12,.col-l-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-l-9-12,.col-l-3-4{max-width:75%;flex:0 0 75%}.col-l-10-12,.col-l-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-l-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-l-12-12,.col-l-1-1{max-width:100%;flex:0 0 100%}}button,.button{display:inline-block;overflow:visible;min-width:2rem;padding:.375rem .5rem;border:1px solid #333638;border-radius:4px;margin-right:.25rem;margin-bottom:.5rem;background-color:#333638;box-shadow:0 1px 0 rgba(242,242,243,.25);color:#f2f2f3;cursor:default;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;line-height:1.15;outline:none;transition:border-color 150ms,background-color 150ms,color 150ms;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button:hover,button:focus,.button:hover,.button:focus{border-color:#4b4f53;background-color:#4b4f53;color:#f2f2f3}button:focus,.button:focus{box-shadow:0 0 0 2px rgba(242,242,243,.375)}button[disabled],button[disabled]:hover,button.disabled,button.disabled:hover,.button[disabled],.button[disabled]:hover,.button.disabled,.button.disabled:hover{border-color:#1f2123;background-color:#1f2123;box-shadow:none;color:#4b4f53;pointer-events:none}button.active,.button.active{border-color:#4b4f53;background-color:#4b4f53}button .icon,.button .icon{display:inline-block;margin-right:.25rem}a.button{text-align:center}.button-right{margin-right:0;margin-left:.25rem;float:right}.button-accent{border:1px solid #1e88e5;background-color:#1e88e5;color:#fff}.button-accent:hover,.button-accent:focus{border-color:#186db7;background-color:#186db7;color:#fff}.button-accent:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-success{border:1px solid #2ecc70;background-color:#2ecc70;color:#fff}.button-success:hover,.button-success:focus{border-color:#25a35a;background-color:#25a35a;color:#fff}.button-success:focus{box-shadow:0 0 0 2px rgba(46,204,112,.375)}.button-warning{border:1px solid #f39c11;background-color:#f39c11;color:#fff}.button-warning:hover,.button-warning:focus{border-color:#c27d0e;background-color:#c27d0e;color:#fff}.button-warning:focus{box-shadow:0 0 0 2px rgba(243,156,17,.375)}.button-error{border:1px solid #e74c3b;background-color:#e74c3b;color:#fff}.button-error:hover,.button-error:focus{border-color:#b93d2f;background-color:#b93d2f;color:#fff}.button-error:focus{box-shadow:0 0 0 2px rgba(231,76,59,.375)}.button-link{border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:inherit}.button-link:hover,.button-link:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.button-link:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-link[disabled],.button-link[disabled]:hover,.button-link.disabled,.button-link.disabled:hover{background-color:rgba(0,0,0,0);cursor:default}.button-link .icon{margin-right:0}input,textarea,select{display:inline-block;width:100%;padding:.25rem .5rem;border:1px solid #4b4f53;border-radius:4px;margin:0;margin-bottom:.5rem;background-color:#181a1b;color:#f2f2f3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;line-height:1.5;-webkit-appearance:none;-moz-appearance:none}input:focus,textarea:focus,select:focus{border-color:#1e88e5;outline:none;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[disabled],textarea[disabled],select[disabled]{background-color:#292b2e;color:#979ca1}input[readonly],textarea[readonly],select[readonly]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}input[type=checkbox],textarea[type=checkbox],select[type=checkbox],input[type=radio],textarea[type=radio],select[type=radio]{width:auto;height:inherit;padding:0;margin-bottom:0;vertical-align:text-top}input[type=checkbox]:focus,textarea[type=checkbox]:focus,select[type=checkbox]:focus,input[type=radio]:focus,textarea[type=radio]:focus,select[type=radio]:focus{box-shadow:none}input[type=file],textarea[type=file],select[type=file]{padding:0;border:none;border-radius:0}input[type=file]::-webkit-file-upload-button,textarea[type=file]::-webkit-file-upload-button,select[type=file]::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}input[type=number]::-webkit-inner-spin-button,textarea[type=number]::-webkit-inner-spin-button,select[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button,textarea[type=number]::-webkit-outer-spin-button,select[type=number]::-webkit-outer-spin-button{height:auto}input[type=search],textarea[type=search],select[type=search]{max-width:28rem;padding-left:2rem;background:#181a1b url('data:image/svg+xml;utf8,') no-repeat left .5rem top .375rem;background-size:1rem 1rem}input[type=search]::-webkit-search-cancel-button,textarea[type=search]::-webkit-search-cancel-button,select[type=search]::-webkit-search-cancel-button{display:none}select{padding:.25rem 1.5rem .25rem .5rem;background:#181a1b url("data:image/svg+xml;utf8,") no-repeat right .75rem center;background-color:#181a1b;background-size:8px 6px}select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #f2f2f3}textarea{overflow:auto;height:5.75rem;min-height:3.125rem;max-height:16.25rem;resize:vertical}.input-large{font-size:1.125rem}.input-accent{border-color:#1e88e5}.input-success{border-color:#2ecc70}.input-warning{border-color:#f39c11}.input-error{border-color:#e74c3b}.input-invalid{animation:shake 500ms;animation-fill-mode:both}.input-wrap{position:relative;margin-bottom:.5rem}.input-wrap input,.input-wrap select,.input-wrap textarea{padding-right:1.625rem;margin-bottom:0}.input-reset{position:absolute;top:50%;right:.5rem;color:#f2f2f3;transform:translateY(-50%);transition:color 150ms}.input-reset:hover{color:#1e88e5}label{display:inline-block;margin-bottom:.25rem;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none}.label-suggestion{color:#979ca1;font-size:.75rem;line-height:1}.label-required::after{display:inline-block;margin-left:.125rem;color:#e74c3b;content:"*"}.input-array{margin-bottom:.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-array .sort-handle .icon{vertical-align:middle}.input-array-row{display:flex;padding:.25rem .5rem;margin:0 -0.5rem;white-space:nowrap}.input-array-key,.input-array-value{display:inline-block;margin-bottom:0}.input-array-key{width:30%;margin-right:.25rem}.input-array-value{margin-right:.25rem}.input-array-add,.input-array-remove{min-width:1rem;padding:0;margin-right:.25rem}.input-checkbox{position:absolute;opacity:0}.input-checkbox+.input-checkbox-text::before{position:relative;top:.125rem;display:inline-block;width:1rem;height:1rem;box-sizing:border-box;border:1px solid #4b4f53;border-radius:4px;margin-right:.5rem;content:" ";transition:border-color 150ms,background-color 150ms}.input-checkbox+.input-checkbox-text:hover::before,.input-checkbox[disabled]+.input-checkbox-text::before{background-color:#1f2123}.input-checkbox:checked+.input-checkbox-text::before{border-color:#1e88e5;background-color:#1e88e5}.input-checkbox:focus+.input-checkbox-text::before{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-checkbox:checked+.input-checkbox-text:hover::before{border-color:#186db7;background-color:#186db7}.input-checkbox:checked+.input-checkbox-text::after{position:absolute;top:.125rem;left:0;display:block;width:1rem;height:1rem;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 11'%3E%3Cpath fill='%23fff' d='M4.727 7.036L8.263 3.5l.707.707L4.727 8.45 2 5.722l.707-.707z'/%3E%3C/svg%3E");content:" "}.input-checkbox:checked[disabled]+.input-checkbox-text::before{border-color:#4b4f53;background-color:#4b4f53}.input-checkbox-label{position:relative;line-height:1.5}.input-date{cursor:default}.calendar{position:absolute;z-index:8;top:100%;display:none;width:18rem;padding:.5rem;border:1px solid #4b4f53;border-radius:4px;margin:3px 1rem 1rem;background-color:#181a1b;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);color:#f2f2f3}.calendar-header{margin-bottom:.5rem}.calendar-buttons{margin:0 -0.5rem;font-size:0}.calendar button{width:33.3%;padding:0 .5rem;border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#f2f2f3;cursor:pointer;font-size:.875rem;outline:none}.calendar button:hover{color:#1e88e5}.calendar button:focus{box-shadow:none}.calendar-buttons .currentMonth{font-weight:600}.calendar-table{width:100%}.calendar-table td{width:14%;cursor:default;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.calendar-time{width:50%;margin:0 auto;text-align:center}.calendar-header-day{font-size:.875rem}.calendar-day{border-radius:4px;transition:background-color 150ms,color 150ms}.calendar-day:hover{background-color:#186db7;color:#fff}.calendar-day.selected{background-color:#1e88e5;color:#fff}.calendar-prev-month-day,.calendar-next-month-day{color:#4b4f53}.calendar-separator{height:0;border-top:1px solid #4b4f53;margin:.5rem -0.5rem}.input-duration{box-sizing:border-box;padding:.25rem .25rem;border:1px solid #4b4f53;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-duration.focused{border-color:#1e88e5}.input-duration>span{text-align:center}.input-duration input,.input-duration select,.input-duration textarea{width:2rem;padding:0;border:0;margin:0;-moz-appearance:textfield;background-color:#292b2e;text-align:center;vertical-align:baseline}.input-duration input::-webkit-inner-spin-button,.input-duration select::-webkit-inner-spin-button,.input-duration textarea::-webkit-inner-spin-button,.input-duration input::-webkit-outer-spin-button,.input-duration select::-webkit-outer-spin-button,.input-duration textarea::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none}.input-duration input:focus,.input-duration select:focus,.input-duration textarea:focus{box-shadow:none}.input-duration label{padding:0 .5rem;margin:0}.input-duration-hidden{display:none}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20, 255, 20, 0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:blue}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255, 150, 0, 0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255, 255, 0, 0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.editor-toolbar{padding:.125rem .25rem;border:1px solid #4b4f53;background-color:#1f2123;border-top-left-radius:4px;border-top-right-radius:4px;font-size:0}.toolbar-button{padding:.5rem;border:0;margin-bottom:0;background-color:#1f2123;box-shadow:none}.toolbar-button:hover,.toolbar-button:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.toolbar-button:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.toolbar-button .icon{margin-right:0}.editor-textarea{min-height:24rem;padding:.75rem 1rem;border:1px solid #4b4f53;border-radius:4px;margin-bottom:.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.editor-textarea:focus{box-shadow:none}.CodeMirror{min-height:24rem;padding:0 1rem;border:1px solid #4b4f53;border-radius:4px;margin-bottom:.5rem;background:#181a1b;color:#f2f2f3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.CodeMirror-lines{padding:.75rem 0}.CodeMirror-lines pre{padding:0 !important}.editor-toolbar+.editor-textarea,.editor-textarea+.CodeMirror{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.editor-wrap{border-radius:4px}.editor-wrap.focused .editor-toolbar,.editor-wrap.focused .CodeMirror{border-color:#1e88e5}.CodeMirror-cursor{border-left-color:#f2f2f3}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler{background-color:inherit}.CodeMirror-selected{background:rgba(0,0,0,0)}.CodeMirror-focused .CodeMirror-selected{background:rgba(30,136,229,.25)}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(30,136,229,.25)}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(30,136,229,.25)}.cm-formatting-code-block,.cm-formatting-list{display:inline !important}.cm-formatting,.cm-image-alt-text,.cm-url{display:none}.CodeMirror-activeline .cm-formatting,.CodeMirror-activeline .cm-image-alt-text,.CodeMirror-activeline .cm-url{display:inline}.cm-s-formwork .cm-formatting{color:#979ca1}.cm-s-formwork .cm-header-1{font-size:1.75rem}.cm-s-formwork .cm-header-2{font-size:1.5rem}.cm-s-formwork .cm-header-3{font-size:1.25rem}.cm-s-formwork .cm-comment{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.cm-s-formwork .cm-comment.cm-header-1{font-size:1.53125rem}.cm-s-formwork .cm-comment.cm-header-2{font-size:1.3125rem}.cm-s-formwork .cm-comment.cm-header-3{font-size:1.09375rem}.cm-s-formwork .cm-quote{color:#979ca1}.cm-s-formwork .cm-formatting-quote+.cm-quote{padding-left:1.25rem;background:#181a1b url('data:image/svg+xml;utf8,') no-repeat left center;background-size:1rem 1rem}.cm-s-formwork .CodeMirror-activeline .cm-formatting-quote+.cm-quote{padding-left:0;background:rgba(0,0,0,0)}.cm-s-formwork .cm-link{color:#1e88e5;text-decoration:underline}.cm-s-formwork .cm-url.cm-formatting,.cm-s-formwork .cm-image-alt-text.cm-formatting,.cm-s-formwork .cm-image-marker{color:#1e88e5}.cm-s-formwork .cm-url,.cm-s-formwork .cm-image-alt-text{color:#979ca1;text-decoration:none}.cm-s-formwork .cm-image~.cm-url:not(.cm-formatting){display:inline;padding:0 .25rem 0 1.5rem;border-radius:4px;background:#181a1b url('data:image/svg+xml;utf8,') no-repeat left .25rem center;background-color:#292b2e;background-size:1rem 1rem;color:#f2f2f3}.cm-s-formwork .CodeMirror-activeline .cm-image~.cm-url:not(.cm-formatting){padding:0;background:rgba(0,0,0,0);color:#979ca1}.cm-s-formwork .cm-hr{color:#979ca1}.cm-s-formwork .cm-tag{color:#25a35a}.cm-s-formwork .cm-bracket{color:#f2f2f3}.cm-s-formwork .cm-attribute{color:#8c68cd}.cm-s-formwork .cm-bracket,.cm-s-formwork .cm-m-xml{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.input-file{display:none}.input-file-label{display:block;padding:.5rem;margin-bottom:1rem;background-color:#1f2123;clear:both}.input-file-label>span{display:block;padding:1.5rem 1rem;border:2px dashed #4b4f53;color:#f2f2f3;text-align:center;transition:background-color 300ms}.input-file-label.drag>span{background-color:#181a1b}.input-image{cursor:default}.image-picker-thumbnails{overflow:auto;height:15rem;padding:.5rem;margin-bottom:1rem}.image-picker-thumbnail{position:relative;display:inline-block;width:8rem;height:8rem;box-sizing:border-box;padding:.5rem;border:1px solid #4b4f53;margin:.25rem;background-origin:content-box;background-position:center;background-repeat:no-repeat;background-size:contain}.image-picker-thumbnail::after{position:absolute;right:.75rem;bottom:.5rem;left:.75rem;display:block;padding:0 .375rem;border-radius:4px;background-color:rgba(51,54,56,.9);content:attr(data-filename);font-size:.75rem;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-picker-thumbnail.selected{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.image-picker-empty-state{margin:3rem auto 4rem;text-align:center}.image-picker-empty-state-icon{color:#7c8288;font-size:2rem}input[type=range],select[type=range],textarea[type=range]{width:15rem;padding:.875rem 0;border:0;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-webkit-slider-runnable-track,select[type=range]::-webkit-slider-runnable-track,textarea[type=range]::-webkit-slider-runnable-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#333638;cursor:default}input[type=range]::-webkit-slider-thumb,select[type=range]::-webkit-slider-thumb,textarea[type=range]::-webkit-slider-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:-0.375rem;background-color:#1e88e5;transition:background-color 150ms;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-moz-range-track,select[type=range]::-moz-range-track,textarea[type=range]::-moz-range-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#333638}input[type=range]::-moz-range-thumb,select[type=range]::-moz-range-thumb,textarea[type=range]::-moz-range-thumb{width:1rem;height:1rem;border:0;border-radius:50%;background-color:#1e88e5;cursor:default}input[type=range]::-ms-track,select[type=range]::-ms-track,textarea[type=range]::-ms-track{width:100%;height:.25rem;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:rgba(0,0,0,0);cursor:default}input[type=range]::-ms-fill-lower,select[type=range]::-ms-fill-lower,textarea[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper,select[type=range]::-ms-fill-upper,textarea[type=range]::-ms-fill-upper{border:0;border-radius:.125rem;background:#333638;box-shadow:none}input[type=range]::-ms-thumb,select[type=range]::-ms-thumb,textarea[type=range]::-ms-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:0;background-color:#1e88e5;cursor:default}input[type=range]:focus,select[type=range]:focus,textarea[type=range]:focus{box-shadow:none}input[type=range]:hover::-webkit-slider-thumb,select[type=range]:hover::-webkit-slider-thumb,textarea[type=range]:hover::-webkit-slider-thumb{background-color:#186db7}input[type=range][disabled],select[type=range][disabled],textarea[type=range][disabled]{background-color:rgba(0,0,0,0)}input[type=range][disabled]::-webkit-slider-thumb,select[type=range][disabled]::-webkit-slider-thumb,textarea[type=range][disabled]::-webkit-slider-thumb,input[type=range][disabled]::-moz-range-thumb,select[type=range][disabled]::-moz-range-thumb,textarea[type=range][disabled]::-moz-range-thumb,input[type=range][disabled]::-ms-thumb,select[type=range][disabled]::-ms-thumb,textarea[type=range][disabled]::-ms-thumb{background-color:#979ca1}input[type=range]:focus::-webkit-slider-thumb,select[type=range]:focus::-webkit-slider-thumb,textarea[type=range]:focus::-webkit-slider-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-moz-range-thumb,select[type=range]:focus::-moz-range-thumb,textarea[type=range]:focus::-moz-range-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-ms-thumb,select[type=range]:focus::-ms-thumb,textarea[type=range]:focus::-ms-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-range-value{padding:0 .5rem;font-size:.875rem;vertical-align:.1875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag{position:relative;display:block;box-sizing:border-box;padding:.25rem .25rem;padding-bottom:0;border:1px solid #4b4f53;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.focused{border-color:#1e88e5}.tag-inner-input{display:inline-block;width:auto;max-width:100%;box-sizing:border-box;padding:0 .25rem;border:0;border-radius:0;margin-bottom:.25rem;font-family:inherit;font-size:.875rem;line-height:inherit;outline:none}.tag-inner-input:focus{box-shadow:none}.input-tag-hidden{display:none}.input-tag .tag{display:inline-block;box-sizing:border-box;padding:0 .375rem;border-radius:4px;margin-bottom:.25rem;background-color:#292b2e;cursor:default;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.disabled,.input-tag.disabled .tag-inner-input{background-color:#1f2123}.input-tag.disabled .tag{background-color:#333638}.tag-remove{display:inline-block;padding:0 .125rem;margin-left:.25rem;color:#f2f2f3;font-style:normal;transition:color 150ms}.tag-remove:hover{color:#1e88e5}.tag-remove::after{content:"×";font-weight:600}.input-togglegroup{display:inline-block;border:1px solid #4b4f53;border-radius:4px;margin:0;margin-bottom:.5rem;font-size:0}.input-togglegroup:focus-within{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-togglegroup label{margin:0}.input-togglegroup input[type=radio],.input-togglegroup select[type=radio],.input-togglegroup textarea[type=radio]{position:absolute;opacity:0}.input-togglegroup input[type=radio]+span,.input-togglegroup select[type=radio]+span,.input-togglegroup textarea[type=radio]+span{display:inline-block;padding:.25rem .75rem;border-radius:3px;font-size:.875rem;transition:background-color 150ms,color 150ms}.input-togglegroup input[type=radio]:hover+span,.input-togglegroup select[type=radio]:hover+span,.input-togglegroup textarea[type=radio]:hover+span{background-color:#1f2123}.input-togglegroup input[type=radio]:checked+span,.input-togglegroup select[type=radio]:checked+span,.input-togglegroup textarea[type=radio]:checked+span{background-color:#1e88e5;color:#fff}.input-togglegroup input[type=radio]:focus+span,.input-togglegroup select[type=radio]:focus+span,.input-togglegroup textarea[type=radio]:focus+span{background-color:#186db7}.input-togglegroup[disabled] input[type=radio]+span,.input-togglegroup[disabled] select[type=radio]+span,.input-togglegroup[disabled] textarea[type=radio]+span{background-color:rgba(0,0,0,0);color:#f2f2f3}.input-togglegroup[disabled] input[type=radio]:checked+span,.input-togglegroup[disabled] select[type=radio]:checked+span,.input-togglegroup[disabled] textarea[type=radio]:checked+span{background-color:#333638}.input-togglegroup input[type=radio]:checked:hover+span,.input-togglegroup select[type=radio]:checked:hover+span,.input-togglegroup textarea[type=radio]:checked:hover+span{background-color:#186db7}.dropdown{position:relative;display:inline-block;margin-bottom:.5rem}.dropdown-button{margin-bottom:0}.dropdown-button::after{display:inline-block;height:0;margin-left:.25rem;content:" ";vertical-align:.125rem;border-top:.25rem solid;border-right:.25rem solid rgba(0,0,0,0);border-left:.25rem solid rgba(0,0,0,0)}.dropdown-menu,.dropdown-list{position:absolute;z-index:8;top:100%;left:0;display:none;min-width:8rem;padding:.25rem 0;border:1px solid #4b4f53;border-radius:4px;margin-top:3px;background-color:#181a1b;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);float:left}.dropdown-list{width:100%;max-height:10.15625rem;overflow-y:scroll}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;color:#f2f2f3;font-size:.875rem;white-space:nowrap}.dropdown-item:hover{background-color:#292b2e;color:#f2f2f3}.dropdown-item.selected{background-color:#1e88e5;color:#fff}.dropdown-separator{height:0;border-top:1px solid #4b4f53;margin:.25rem 0}.files-list{padding:0;margin:0;margin-bottom:1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.files-item{display:flex;align-items:center}.files-item-cell{overflow:hidden;padding:.25rem;font-size:.875rem;white-space:nowrap}.file-name{max-width:80%;flex:0 0 80%;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-name .icon{margin-right:.5rem;color:#f2f2f3}.file-size{color:#979ca1}.file-actions{max-width:20%;flex:0 0 20%;font-size:1rem;text-align:right}.tabs{padding:2px 2px 0;border-bottom:1px solid #333638;margin-bottom:1rem;overflow-x:auto;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabs-tab{display:inline-block;padding:.5rem 1.25rem;color:#f2f2f3;cursor:pointer}.tabs-tab:hover{color:#f2f2f3}.tabs-tab.active{border-bottom:3px solid #1e88e5;font-weight:600}.caption+.tabs{margin-top:-0.5rem}.modal-backdrop{position:fixed;z-index:16;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.75)}.modal{position:fixed;z-index:20;top:0;right:0;bottom:0;left:0;display:none;align-items:center;outline:0}.modal.show{display:flex}.modal-content{max-width:26rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#181a1b}@media(min-width: 26rem){.modal-content{margin:3rem auto}}.modal-size-large{width:40rem;max-width:40rem}@media(max-width: 40rem){.modal-size-large{margin:3rem .5rem}}.modal-error{padding:1rem;margin:-2rem -2rem 1rem -2rem;background-color:#e74c3b;color:#181a1b}.modal-text{margin-bottom:2.5rem}.notification-container{position:fixed;z-index:12;top:20px;right:20px}.notification{position:relative;overflow:hidden;width:350px;padding:1.5rem 2.5rem;border-radius:4px;margin-bottom:.5rem;animation:fadeInRight 300ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#292b2e;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);cursor:default;text-overflow:ellipsis;transition:top 300ms ease-in,opacity 150ms}.notification:hover{opacity:.95}.notification.fadeout{animation:fadeOutRight 300ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.notification .icon{position:absolute;top:50%;left:1rem;display:block;width:16px;height:16px;color:#fff;transform:translate(0, -50%)}.notification-info,.notification-success,.notification-warning,.notification-error{padding-left:3.25rem}.notification-info{background-color:#1e88e5;color:#fff}.notification-success{background-color:#25a35a;color:#fff}.notification-warning{background-color:#c27d0e;color:#fff}.notification-error{background-color:#b93d2f;color:#fff}.tooltip{position:absolute;z-index:20;display:none;min-width:2rem;padding:.25rem .5rem;border-radius:4px;background-color:rgba(242,242,243,.8);color:#181a1b;font-size:.75rem;pointer-events:none;text-align:center}.spinner{position:relative;display:inline-block;width:1.5rem;height:1.5rem;border-width:.2rem;border-style:solid;border-color:#1e88e5;border-radius:50%;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);margin-right:.75rem;animation:750ms spin infinite linear;text-align:center;transition:border 500ms;transition-timing-function:ease-out;vertical-align:-0.375rem}.spinner .icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.spinner-info{border-color:#1e88e5;animation:none;color:#1e88e5}.spinner-success{border-color:#2ecc70;animation:none;color:#2ecc70}.spinner-error{border-color:#e74c3b;animation:none;color:#e74c3b}.ct-label{color:rgba(0, 0, 0, 40%);fill:rgba(0, 0, 0, 40%);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left}.ct-grid{stroke:rgba(0, 0, 0, 20%);stroke-dasharray:2px;stroke-width:1px}.ct-grid-background{fill:none}.ct-point{stroke-linecap:round;stroke-width:10px}.ct-line{fill:none;stroke-width:4px}.ct-area{fill-opacity:.1;stroke:none}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#e6805e}.ct-series-i .ct-area,.ct-series-i .ct-slice-pie{fill:#e6805e}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-chart{position:relative;display:block;width:100%;height:14rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-label{color:rgba(242,242,243,.4);fill:rgba(242,242,243,.4);white-space:pre-wrap}.ct-grid{stroke:rgba(242,242,243,.2)}.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#1e88e5}.ct-series-a .ct-area{fill:#1e88e5}.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#f39c11}.ct-series-b .ct-area{fill:#f39c11}.ct-label.ct-horizontal,.ct-label.ct-horizontal.ct-end{display:inline-block;width:auto !important;min-width:3rem;color:#f2f2f3;text-align:center;transform:translateX(-50%)}.ct-legend{font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-legend-right{text-align:right}.ct-legend-label{white-space:nowrap}.ct-legend-label .icon{display:inline-block;margin:0 .25rem}.ct-legend-label.ct-series-a .icon{color:#1e88e5}.ct-legend-label.ct-series-b .icon{color:#f39c11}@keyframes fadeInRight{from{opacity:0;transform:translate3d(150%, 0, 0)}to{opacity:1;transform:none}}@keyframes fadeOutRight{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(150%, 0, 0)}}@keyframes shake{from,to{transform:translate3d(0, 0, 0)}10%,50%,90%{transform:translate3d(-10px, 0, 0)}30%,70%{transform:translate3d(10px, 0, 0)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.login-modal-container{max-width:24rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#181a1b;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}@media(min-width: 24rem){.login-modal-container{margin:3rem auto}}.login-modal-info,.login-modal-success,.login-modal-warning,.login-modal-error{position:relative;padding:1rem 2rem 1rem 3.5rem;margin:-2rem -2rem 1rem -2rem;border-top-left-radius:4px;border-top-right-radius:4px}.login-modal-info a,.login-modal-success a,.login-modal-warning a,.login-modal-error a{display:block;color:#fff;text-decoration:underline;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-modal-info .icon,.login-modal-success .icon,.login-modal-warning .icon,.login-modal-error .icon{position:absolute;top:50%;left:1rem;display:block;transform:translate(0, -50%)}.login-modal-info{background-color:#1e88e5;color:#fff}.login-modal-success{background-color:#25a35a;color:#fff}.login-modal-warning{background-color:#f39c11;color:#fff}.login-modal-error{background-color:#e74c3b;color:#fff}.title-bar{position:fixed;z-index:8;top:0;right:0;left:0;padding:1rem;padding-left:4rem;background-color:#292b2e;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);color:#f2f2f3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(min-width: 768px){.title-bar{left:16rem;padding-left:1.5rem}}.panel-title{float:left}.view-site{color:#f2f2f3;float:right}.view-site:hover{color:#1e88e5}.view-site i{margin-left:.5rem}.sidebar{position:fixed;z-index:10;top:0;bottom:0;left:0;width:16rem;padding:1rem 1.5rem;background:linear-gradient(to bottom, hsl(208deg, 5%, 10%) 0%, hsl(208deg, 5%, 13%) 100%);background-color:#181a1b;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar.show{display:block}.sidebar-wrapper{height:calc(100% - 9rem);overflow-y:auto}.toggle-navigation{position:fixed;z-index:12;top:.75rem;left:.75rem;border:none;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:1rem}.toggle-navigation:hover{background-color:rgba(0,0,0,0);box-shadow:none;color:#1e88e5}.toggle-navigation:focus{background-color:rgba(0,0,0,0);box-shadow:none}.logo{margin-bottom:2rem;color:#f2f2f3;font-size:1.184rem;font-weight:600;line-height:1.5rem;text-align:center}@media(min-width: 768px){.logo{text-align:left}}.logo img{height:1.5rem;margin-right:.25rem;vertical-align:-0.25rem}.logo a{padding-top:2px;color:#f2f2f3}.sidebar-navigation{padding:0;margin:0;margin-bottom:1rem;list-style-type:none}.sidebar-navigation:last-child{margin-bottom:0}.sidebar-navigation>li{position:relative;padding:.25rem 0;padding-left:1rem;margin:0;margin-bottom:.5rem}.sidebar-navigation>li a{color:#f2f2f3}.sidebar-navigation>li.active{font-weight:600}.sidebar-navigation>li.active::before{position:absolute;top:0;bottom:0;left:0;width:3px;background-color:#1e88e5;content:" "}.admin-user-card{display:flex;align-items:center;margin-bottom:2rem;cursor:pointer}.admin-user-avatar{width:48px}.admin-user-avatar img{width:48px;border-radius:50%;transition:box-shadow 300ms ease-out}.admin-user-card:hover .admin-user-avatar img{box-shadow:0 0 0 .5rem #333638}.admin-user-details{padding:0 .75rem}.admin-user-fullname{color:#f2f2f3}.admin-user-username{color:#979ca1;font-size:.875rem}.main{margin-top:4.5rem}@media(min-width: 768px){.main{margin:1.875rem;margin-top:4.5rem;margin-left:17.875rem}}.component{padding:1.5rem;border-radius:4px;margin-bottom:1rem;background-color:#181a1b;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}.component::before,.component::after{display:table;content:""}.component::after{clear:both}.caption{margin-bottom:1rem;font-size:.9375rem;font-weight:500;letter-spacing:1px;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.separator{height:.5rem}.separator-l{height:1rem}.section{margin-bottom:1rem}.section-header{padding:.25rem .5rem;border-bottom:1px solid #333638;margin-bottom:.5rem;font-size:1rem;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.icon{display:inline-block;width:1em;min-width:16px;height:1em;min-height:16px;vertical-align:-0.125rem}.section-toggle .icon{transition:transform 150ms}.section.collapsed .section-toggle .icon{transform:rotate(180deg)}.section.collapsed .section-content{display:none}.sort-handle{display:inline-block;margin-bottom:0;color:#979ca1;cursor:grab}.sortable-chosen,.sortable-ghost{background-color:#181a1b;cursor:grabbing}.sortable-chosen *{cursor:grabbing}.sortable-fallback{box-shadow:0 0 .75rem .25rem rgba(0,0,0,.15)}.pages-list{padding:0;margin:0;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pages-list .pages-list{display:none}.pages-list-headers{display:none;padding:.25rem 0;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.page-children-toggle{display:inline-block;min-width:auto;padding:0;border-color:rgba(0,0,0,0);margin:0 .25rem .125rem 0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer}.page-children-toggle:hover,.page-children-toggle:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}.page-children-toggle:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-children-toggle .icon{margin-right:0;transition:transform 150ms}.toggle-expanded .icon{transform:rotate(-180deg)}.pages-item{padding:.5rem 0;border-bottom:1px solid #333638}.pages-item:hover{background-color:#1f2123}.pages-item .sort-handle{display:none}.pages-list-top{border-top:1px solid #333638}.pages-item-cell,.pages-headers-cell{padding:.25rem .5rem;font-size:.875rem}.pages-item-cell div,.pages-headers-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-title{padding:2px;margin:-2px;font-size:1rem}.page-language{display:inline-block;min-width:1.125rem;padding:.125rem .25rem;border-radius:4px;background-color:#d2e7fa;color:#1e88e5;font-size:.875rem;font-weight:600;line-height:1;text-align:center}button .page-language,.button .page-language{font-size:.75rem}.page-route{color:#979ca1;font-size:.875rem}.page-route-changeable{padding:2px;margin:-2px}.page-status .icon{display:inline-block;margin-right:.375rem}.page-status-published .icon{color:#2ecc70}.page-status-not-published .icon{color:#e74c3b}.page-status-not-routable .icon{color:#f39c11}.page-date,.page-status,.page-actions{display:none}.page-actions .button-link{font-size:1rem}@media(min-width: 600px){.pages-item,.pages-list-headers{display:flex;align-items:center}.pages-item-cell,.pages-headers-cell{display:block}.page-details{max-width:55%;flex:0 0 55%}.page-date,.page-status,.page-actions{max-width:15%;flex:0 0 15%;text-align:center}}.pages-level-2 .page-details{padding-left:1.5rem}.pages-level-3 .page-details{padding-left:3rem}.pages-level-4 .page-details{padding-left:4.5rem}.pages-level-5 .page-details{padding-left:6rem}.page-info{padding:0 .25rem;margin-bottom:.75rem}.page-info>div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-slug-change{padding:0;border-color:rgba(0,0,0,0);margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#979ca1;cursor:pointer}.page-slug-change:hover,.page-slug-change:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:#979ca1}.page-slug-change:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-slug-change .icon{display:inline-block;margin-right:0;color:#f2f2f3;opacity:0;transition:opacity 150ms}.page-slug-change:hover .icon,.page-slug-change:focus .icon{opacity:1}.dragging [data-sortable=false] .pages-item:hover{background-color:#fce8e5;cursor:no-drop}.options-form .input-checkbox-label{margin-bottom:.5rem;font-size:1rem}.info-data{width:100%;margin-bottom:1rem;table-layout:fixed}.info-data td{overflow:hidden;padding:.5rem;vertical-align:top}.info-data-key{width:25%}.info-data-value{width:75%;font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem;word-break:break-word}.user-summary{display:flex;align-items:center}.user-summary-avatar{max-width:33.33333%;flex:0 0 33.33333%;padding:.75rem;text-align:center}.user-summary-avatar img{width:180px;border-radius:50%}.user-summary-data{padding:.75rem}.users-list{border-top:1px solid #333638;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-list-headers{display:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-item{padding:.5rem 0;border-bottom:1px solid #333638}.users-item:hover{background-color:#1f2123}.users-item-cell,.users-headers-cell{padding:.125rem .25rem;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-username,.user-fullname{display:inline-block}.users-item .user-username{font-size:1rem}.user-last-access,.user-actions{display:none}.user-actions .button-link{font-size:1rem}@media(min-width: 600px){.users-item,.users-list-headers{display:flex;align-items:center}.users-list-headers{padding:.25rem 0;font-weight:600}.users-item-cell,.users-headers-cell{display:block;padding:.25rem .5rem}.user-username,.user-last-access{max-width:20%;flex:0 0 20%}.user-fullname,.user-email{max-width:25%;flex:0 0 25%}.user-last-access,.user-actions{text-align:center}.user-actions{max-width:10%;flex:0 0 10%}}.error-container{max-width:32rem;padding:1rem;margin:4rem auto;text-align:center}.error-container h1{color:#7c8288;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.error-container h2{margin-bottom:1rem;font-size:2rem}.error-code{display:block;font-size:8rem;font-weight:400}.error-status{display:block;font-size:1.75rem}.error-container .action{font-size:1.125rem}.error-container .logo{width:3.5rem;height:3.5rem;margin:2rem auto;background-position:center;background-repeat:no-repeat;background-size:cover} +html{font-size:100%;-webkit-text-size-adjust:100%}body{margin:0;background-color:#1f2123;color:#f2f2f3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;line-height:1.5;-webkit-tap-highlight-color:rgba(242,242,243,0)}*{box-sizing:border-box}main{display:block}a{background-color:rgba(0,0,0,0);color:#1e88e5;outline-color:rgba(4,138,255,.375);text-decoration:none;transition:color 150ms}a:hover{color:#186db7}a:not([href]){cursor:default}img{max-width:100%;border-style:none}mark{background-color:gold}[hidden]{display:none}.focused{box-shadow:0 0 0 2px rgba(4,138,255,.375)}::selection{background-color:rgba(30,136,229,.25)}::placeholder{color:#979ca1}@media(min-width: 600px){.hide-from-xs{display:none}}@media(max-width: 599px){.show-from-xs{display:none}}@media(min-width: 768px){.hide-from-s{display:none}}@media(max-width: 767px){.show-from-s{display:none}}@media(min-width: 1024px){.hide-from-m{display:none}}@media(max-width: 1023px){.show-from-m{display:none}}@media(min-width: 1280px){.hide-from-l{display:none}}@media(max-width: 1279px){.show-from-l{display:none}}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1,h2,.h2,h3,.h3{letter-spacing:-0.027rem}h1,.h1{font-size:2.369rem}h2,.h2{font-size:2.104rem}h3,.h3{font-size:1.777rem}h4,.h4{font-size:1.579rem}h5,.h5{font-size:1.184rem}h6,.h6{font-size:1rem}strong{font-weight:600}p{margin-top:0;margin-bottom:.5rem;line-height:1.5}ul{padding:0;margin-top:0;margin-bottom:.5rem;margin-left:1.25rem;list-style-position:outside}.container,.container-full,.container-no-margin{padding:0 15px;margin:0 auto}.container{max-width:1280px}.container-no-margin{padding-right:0;padding-left:0}.row{display:flex;flex-wrap:wrap;margin:0 -15px}@media(max-width: 768px){.container-no-margin .row{margin:0}.container-no-margin div[class^=col-]{padding:0}}.col-xs,.col-xs-1-12,.col-xs-2-12,.col-xs-1-6,.col-xs-3-12,.col-xs-1-4,.col-xs-4-12,.col-xs-1-3,.col-xs-5-12,.col-xs-6-12,.col-xs-1-2,.col-xs-7-12,.col-xs-8-12,.col-xs-2-3,.col-xs-9-12,.col-xs-3-4,.col-xs-10-12,.col-xs-5-6,.col-xs-11-12,.col-xs-12-12,.col-xs-1-1,.col-s,.col-s-1-12,.col-s-2-12,.col-s-1-6,.col-s-3-12,.col-s-1-4,.col-s-4-12,.col-s-1-3,.col-s-5-12,.col-s-6-12,.col-s-1-2,.col-s-7-12,.col-s-8-12,.col-s-2-3,.col-s-9-12,.col-s-3-4,.col-s-10-12,.col-s-5-6,.col-s-11-12,.col-s-12-12,.col-s-1-1,.col-m,.col-m-1-12,.col-m-2-12,.col-m-1-6,.col-m-3-12,.col-m-1-4,.col-m-4-12,.col-m-1-3,.col-m-5-12,.col-m-6-12,.col-m-1-2,.col-m-7-12,.col-m-8-12,.col-m-2-3,.col-m-9-12,.col-m-3-4,.col-m-10-12,.col-m-5-6,.col-m-11-12,.col-m-12-12,.col-m-1-1,.col-l,.col-l-1-12,.col-l-2-12,.col-l-1-6,.col-l-3-12,.col-l-1-4,.col-l-4-12,.col-l-1-3,.col-l-5-12,.col-l-6-12,.col-l-1-2,.col-l-7-12,.col-l-8-12,.col-l-2-3,.col-l-9-12,.col-l-3-4,.col-l-10-12,.col-l-5-6,.col-l-11-12,.col-l-12-12,.col-l-1-1{width:100%;padding:0 15px}.col-xs{width:auto;max-width:100%;flex:1 0 auto}.col-xs-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-xs-2-12,.col-xs-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-xs-3-12,.col-xs-1-4{max-width:25%;flex:0 0 25%}.col-xs-4-12,.col-xs-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-xs-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-xs-6-12,.col-xs-1-2{max-width:50%;flex:0 0 50%}.col-xs-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-xs-8-12,.col-xs-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-xs-9-12,.col-xs-3-4{max-width:75%;flex:0 0 75%}.col-xs-10-12,.col-xs-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-xs-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-xs-12-12,.col-xs-1-1{max-width:100%;flex:0 0 100%}@media(min-width: 768px){.col-s{width:auto;max-width:100%;flex:1 0 auto}.col-s-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-s-2-12,.col-s-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-s-3-12,.col-s-1-4{max-width:25%;flex:0 0 25%}.col-s-4-12,.col-s-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-s-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-s-6-12,.col-s-1-2{max-width:50%;flex:0 0 50%}.col-s-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-s-8-12,.col-s-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-s-9-12,.col-s-3-4{max-width:75%;flex:0 0 75%}.col-s-10-12,.col-s-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-s-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-s-12-12,.col-s-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1024px){.col-m{width:auto;max-width:100%;flex:1 0 auto}.col-m-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-m-2-12,.col-m-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-m-3-12,.col-m-1-4{max-width:25%;flex:0 0 25%}.col-m-4-12,.col-m-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-m-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-m-6-12,.col-m-1-2{max-width:50%;flex:0 0 50%}.col-m-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-m-8-12,.col-m-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-m-9-12,.col-m-3-4{max-width:75%;flex:0 0 75%}.col-m-10-12,.col-m-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-m-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-m-12-12,.col-m-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1280px){.col-l{width:auto;max-width:100%;flex:1 0 auto}.col-l-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-l-2-12,.col-l-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-l-3-12,.col-l-1-4{max-width:25%;flex:0 0 25%}.col-l-4-12,.col-l-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-l-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-l-6-12,.col-l-1-2{max-width:50%;flex:0 0 50%}.col-l-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-l-8-12,.col-l-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-l-9-12,.col-l-3-4{max-width:75%;flex:0 0 75%}.col-l-10-12,.col-l-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-l-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-l-12-12,.col-l-1-1{max-width:100%;flex:0 0 100%}}button,.button{display:inline-block;overflow:visible;min-width:2rem;padding:.375rem .5rem;border:1px solid #333638;border-radius:4px;margin-right:.25rem;margin-bottom:.5rem;background-color:#333638;box-shadow:0 1px 0 rgba(242,242,243,.25);color:#f2f2f3;cursor:default;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;line-height:1.15;outline:none;transition:border-color 150ms,background-color 150ms,color 150ms;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button:hover,button:focus,.button:hover,.button:focus{border-color:#4b4f53;background-color:#4b4f53;color:#f2f2f3}button:focus,.button:focus{box-shadow:0 0 0 2px rgba(242,242,243,.375)}button[disabled],button[disabled]:hover,button.disabled,button.disabled:hover,.button[disabled],.button[disabled]:hover,.button.disabled,.button.disabled:hover{border-color:#1f2123;background-color:#1f2123;box-shadow:none;color:#4b4f53;pointer-events:none}button.active,.button.active{border-color:#4b4f53;background-color:#4b4f53}button .icon,.button .icon{display:inline-block;margin-right:.25rem}a.button{text-align:center}.button-right{margin-right:0;margin-left:.25rem;float:right}.button-accent{border:1px solid #1e88e5;background-color:#1e88e5;color:#fff}.button-accent:hover,.button-accent:focus{border-color:#186db7;background-color:#186db7;color:#fff}.button-accent:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-success{border:1px solid #2ecc70;background-color:#2ecc70;color:#fff}.button-success:hover,.button-success:focus{border-color:#25a35a;background-color:#25a35a;color:#fff}.button-success:focus{box-shadow:0 0 0 2px rgba(46,204,112,.375)}.button-warning{border:1px solid #f39c11;background-color:#f39c11;color:#fff}.button-warning:hover,.button-warning:focus{border-color:#c27d0e;background-color:#c27d0e;color:#fff}.button-warning:focus{box-shadow:0 0 0 2px rgba(243,156,17,.375)}.button-error{border:1px solid #e74c3b;background-color:#e74c3b;color:#fff}.button-error:hover,.button-error:focus{border-color:#b93d2f;background-color:#b93d2f;color:#fff}.button-error:focus{box-shadow:0 0 0 2px rgba(231,76,59,.375)}.button-link{border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:inherit}.button-link:hover,.button-link:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.button-link:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-link[disabled],.button-link[disabled]:hover,.button-link.disabled,.button-link.disabled:hover{background-color:rgba(0,0,0,0);cursor:default}.button-link .icon{margin-right:0}input,textarea,select{display:inline-block;width:100%;padding:.25rem .5rem;border:1px solid #4b4f53;border-radius:4px;margin:0;margin-bottom:.5rem;background-color:#181a1b;color:#f2f2f3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;line-height:1.5;-webkit-appearance:none;-moz-appearance:none}input:focus,textarea:focus,select:focus{border-color:#1e88e5;outline:none;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[disabled],textarea[disabled],select[disabled]{background-color:#292b2e;color:#979ca1}input[readonly],textarea[readonly],select[readonly]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}input[type=checkbox],textarea[type=checkbox],select[type=checkbox],input[type=radio],textarea[type=radio],select[type=radio]{width:auto;height:inherit;padding:0;margin-bottom:0;vertical-align:text-top}input[type=checkbox]:focus,textarea[type=checkbox]:focus,select[type=checkbox]:focus,input[type=radio]:focus,textarea[type=radio]:focus,select[type=radio]:focus{box-shadow:none}input[type=file],textarea[type=file],select[type=file]{padding:0;border:none;border-radius:0}input[type=file]::-webkit-file-upload-button,textarea[type=file]::-webkit-file-upload-button,select[type=file]::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}input[type=number]::-webkit-inner-spin-button,textarea[type=number]::-webkit-inner-spin-button,select[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button,textarea[type=number]::-webkit-outer-spin-button,select[type=number]::-webkit-outer-spin-button{height:auto}input[type=search],textarea[type=search],select[type=search]{max-width:28rem;padding-left:2rem;background:#181a1b url('data:image/svg+xml;utf8,') no-repeat left .5rem top .375rem;background-size:1rem 1rem}input[type=search]::-webkit-search-cancel-button,textarea[type=search]::-webkit-search-cancel-button,select[type=search]::-webkit-search-cancel-button{display:none}select{padding:.25rem 1.5rem .25rem .5rem;background:#181a1b url("data:image/svg+xml;utf8,") no-repeat right .75rem center;background-color:#181a1b;background-size:8px 6px}select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #f2f2f3}textarea{overflow:auto;height:5.75rem;min-height:3.125rem;max-height:16.25rem;resize:vertical}.input-large{font-size:1.125rem}.input-accent{border-color:#1e88e5}.input-success{border-color:#2ecc70}.input-warning{border-color:#f39c11}.input-error{border-color:#e74c3b}.input-invalid{animation:shake 500ms;animation-fill-mode:both}.input-wrap{position:relative;margin-bottom:.5rem}.input-wrap input,.input-wrap select,.input-wrap textarea{padding-right:1.625rem;margin-bottom:0}.input-reset{position:absolute;top:50%;right:.5rem;color:#f2f2f3;transform:translateY(-50%);transition:color 150ms}.input-reset:hover{color:#1e88e5}label{display:inline-block;margin-bottom:.25rem;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none}.label-suggestion{color:#979ca1;font-size:.75rem;line-height:1}.label-required::after{display:inline-block;margin-left:.125rem;color:#e74c3b;content:"*"}.input-array{margin-bottom:.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-array .sort-handle .icon{vertical-align:middle}.input-array-row{display:flex;padding:.25rem .5rem;margin:0 -0.5rem;white-space:nowrap}.input-array-key,.input-array-value{display:inline-block;margin-bottom:0}.input-array-key{width:30%;margin-right:.25rem}.input-array-value{margin-right:.25rem}.input-array-add,.input-array-remove{min-width:1rem;padding:0;margin-right:.25rem}.input-checkbox{position:absolute;opacity:0}.input-checkbox+.input-checkbox-text::before{position:relative;top:.125rem;display:inline-block;width:1rem;height:1rem;box-sizing:border-box;border:1px solid #4b4f53;border-radius:4px;margin-right:.5rem;content:" ";transition:border-color 150ms,background-color 150ms}.input-checkbox+.input-checkbox-text:hover::before,.input-checkbox[disabled]+.input-checkbox-text::before{background-color:#1f2123}.input-checkbox:checked+.input-checkbox-text::before{border-color:#1e88e5;background-color:#1e88e5}.input-checkbox:focus+.input-checkbox-text::before{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-checkbox:checked+.input-checkbox-text:hover::before{border-color:#186db7;background-color:#186db7}.input-checkbox:checked+.input-checkbox-text::after{position:absolute;top:.125rem;left:0;display:block;width:1rem;height:1rem;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 11'%3E%3Cpath fill='%23fff' d='M4.727 7.036L8.263 3.5l.707.707L4.727 8.45 2 5.722l.707-.707z'/%3E%3C/svg%3E");content:" "}.input-checkbox:checked[disabled]+.input-checkbox-text::before{border-color:#4b4f53;background-color:#4b4f53}.input-checkbox-label{position:relative;line-height:1.5}.input-date{cursor:default}.calendar{position:absolute;z-index:8;top:100%;display:none;width:18rem;padding:.5rem;border:1px solid #4b4f53;border-radius:4px;margin:3px 1rem 1rem;background-color:#181a1b;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);color:#f2f2f3}.calendar-header{margin-bottom:.5rem}.calendar-buttons{margin:0 -0.5rem;font-size:0}.calendar button{width:33.3%;padding:0 .5rem;border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#f2f2f3;cursor:pointer;font-size:.875rem;outline:none}.calendar button:hover{color:#1e88e5}.calendar button:focus{box-shadow:none}.calendar-buttons .currentMonth{font-weight:600}.calendar-table{width:100%}.calendar-table td{width:14%;cursor:default;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.calendar-time{width:50%;margin:0 auto;text-align:center}.calendar-header-day{font-size:.875rem}.calendar-day{border-radius:4px;transition:background-color 150ms,color 150ms}.calendar-day:hover{background-color:#186db7;color:#fff}.calendar-day.selected{background-color:#1e88e5;color:#fff}.calendar-prev-month-day,.calendar-next-month-day{color:#4b4f53}.calendar-separator{height:0;border-top:1px solid #4b4f53;margin:.5rem -0.5rem}.input-duration{box-sizing:border-box;padding:.25rem .25rem;border:1px solid #4b4f53;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-duration.focused{border-color:#1e88e5}.input-duration>span{text-align:center}.input-duration input,.input-duration select,.input-duration textarea{width:2rem;padding:0;border:0;margin:0;-moz-appearance:textfield;background-color:#292b2e;text-align:center;vertical-align:baseline}.input-duration input::-webkit-inner-spin-button,.input-duration select::-webkit-inner-spin-button,.input-duration textarea::-webkit-inner-spin-button,.input-duration input::-webkit-outer-spin-button,.input-duration select::-webkit-outer-spin-button,.input-duration textarea::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none}.input-duration input:focus,.input-duration select:focus,.input-duration textarea:focus{box-shadow:none}.input-duration label{padding:0 .5rem;margin:0}.input-duration-hidden{display:none}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20, 255, 20, 0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:blue}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255, 150, 0, 0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255, 255, 0, 0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.editor-toolbar{padding:.125rem .25rem;border:1px solid #4b4f53;background-color:#1f2123;border-top-left-radius:4px;border-top-right-radius:4px;font-size:0}.toolbar-button{padding:.5rem;border:0;margin-bottom:0;background-color:#1f2123;box-shadow:none}.toolbar-button:hover,.toolbar-button:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.toolbar-button:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.toolbar-button .icon{margin-right:0}.editor-textarea{min-height:24rem;padding:.75rem 1rem;border:1px solid #4b4f53;border-radius:4px;margin-bottom:.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.editor-textarea:focus{box-shadow:none}.CodeMirror{min-height:24rem;padding:0 1rem;border:1px solid #4b4f53;border-radius:4px;margin-bottom:.5rem;background:#181a1b;color:#f2f2f3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.CodeMirror-lines{padding:.75rem 0}.CodeMirror-lines pre{padding:0 !important}.editor-toolbar+.editor-textarea,.editor-textarea+.CodeMirror{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.editor-wrap{border-radius:4px}.editor-wrap.focused .editor-toolbar,.editor-wrap.focused .CodeMirror{border-color:#1e88e5}.CodeMirror-cursor{border-left-color:#f2f2f3}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler{background-color:inherit}.CodeMirror-selected{background:rgba(0,0,0,0)}.CodeMirror-focused .CodeMirror-selected{background:rgba(30,136,229,.25)}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(30,136,229,.25)}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(30,136,229,.25)}.cm-formatting-code-block,.cm-formatting-list{display:inline !important}.cm-formatting,.cm-image-alt-text,.cm-url{display:none}.CodeMirror-activeline .cm-formatting,.CodeMirror-activeline .cm-image-alt-text,.CodeMirror-activeline .cm-url{display:inline}.cm-s-formwork .cm-formatting{color:#979ca1}.cm-s-formwork .cm-header-1{font-size:1.75rem}.cm-s-formwork .cm-header-2{font-size:1.5rem}.cm-s-formwork .cm-header-3{font-size:1.25rem}.cm-s-formwork .cm-comment{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.cm-s-formwork .cm-comment.cm-header-1{font-size:1.53125rem}.cm-s-formwork .cm-comment.cm-header-2{font-size:1.3125rem}.cm-s-formwork .cm-comment.cm-header-3{font-size:1.09375rem}.cm-s-formwork .cm-quote{color:#979ca1}.cm-s-formwork .cm-formatting-quote+.cm-quote{padding-left:1.25rem;background:#181a1b url('data:image/svg+xml;utf8,') no-repeat left center;background-size:1rem 1rem}.cm-s-formwork .CodeMirror-activeline .cm-formatting-quote+.cm-quote{padding-left:0;background:rgba(0,0,0,0)}.cm-s-formwork .cm-link{color:#1e88e5;text-decoration:underline}.cm-s-formwork .cm-url.cm-formatting,.cm-s-formwork .cm-image-alt-text.cm-formatting,.cm-s-formwork .cm-image-marker{color:#1e88e5}.cm-s-formwork .cm-url,.cm-s-formwork .cm-image-alt-text{color:#979ca1;text-decoration:none}.cm-s-formwork .cm-image~.cm-url:not(.cm-formatting){display:inline;padding:0 .25rem 0 1.5rem;border-radius:4px;background:#181a1b url('data:image/svg+xml;utf8,') no-repeat left .25rem center;background-color:#292b2e;background-size:1rem 1rem;color:#f2f2f3}.cm-s-formwork .CodeMirror-activeline .cm-image~.cm-url:not(.cm-formatting){padding:0;background:rgba(0,0,0,0);color:#979ca1}.cm-s-formwork .cm-hr{color:#979ca1}.cm-s-formwork .cm-tag{color:#25a35a}.cm-s-formwork .cm-bracket{color:#f2f2f3}.cm-s-formwork .cm-attribute{color:#8c68cd}.cm-s-formwork .cm-bracket,.cm-s-formwork .cm-m-xml{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.input-file{display:none}.input-file-label{display:block;padding:.5rem;margin-bottom:1rem;background-color:#1f2123;clear:both}.input-file-label>span{display:block;padding:1.5rem 1rem;border:2px dashed #4b4f53;color:#f2f2f3;text-align:center;transition:background-color 300ms}.input-file-label.drag>span{background-color:#181a1b}.input-image{cursor:default}.image-picker-thumbnails{overflow:auto;height:15rem;padding:.5rem;margin-bottom:1rem}.image-picker-thumbnail{position:relative;display:inline-block;width:8rem;height:8rem;box-sizing:border-box;padding:.5rem;border:1px solid #4b4f53;margin:.25rem;background-origin:content-box;background-position:center;background-repeat:no-repeat;background-size:contain}.image-picker-thumbnail::after{position:absolute;right:.75rem;bottom:.5rem;left:.75rem;display:block;padding:0 .375rem;border-radius:4px;background-color:rgba(51,54,56,.9);content:attr(data-filename);font-size:.75rem;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-picker-thumbnail.selected{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.image-picker-empty-state{margin:3rem auto 4rem;text-align:center}.image-picker-empty-state-icon{color:#7c8288;font-size:2rem}input[type=range],select[type=range],textarea[type=range]{width:15rem;padding:.875rem 0;border:0;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-webkit-slider-runnable-track,select[type=range]::-webkit-slider-runnable-track,textarea[type=range]::-webkit-slider-runnable-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#333638;cursor:default}input[type=range]::-webkit-slider-thumb,select[type=range]::-webkit-slider-thumb,textarea[type=range]::-webkit-slider-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:-0.375rem;background-color:#1e88e5;transition:background-color 150ms;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-moz-range-track,select[type=range]::-moz-range-track,textarea[type=range]::-moz-range-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#333638}input[type=range]::-moz-range-thumb,select[type=range]::-moz-range-thumb,textarea[type=range]::-moz-range-thumb{width:1rem;height:1rem;border:0;border-radius:50%;background-color:#1e88e5;cursor:default}input[type=range]::-ms-track,select[type=range]::-ms-track,textarea[type=range]::-ms-track{width:100%;height:.25rem;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:rgba(0,0,0,0);cursor:default}input[type=range]::-ms-fill-lower,select[type=range]::-ms-fill-lower,textarea[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper,select[type=range]::-ms-fill-upper,textarea[type=range]::-ms-fill-upper{border:0;border-radius:.125rem;background:#333638;box-shadow:none}input[type=range]::-ms-thumb,select[type=range]::-ms-thumb,textarea[type=range]::-ms-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:0;background-color:#1e88e5;cursor:default}input[type=range]:focus,select[type=range]:focus,textarea[type=range]:focus{box-shadow:none}input[type=range]:hover::-webkit-slider-thumb,select[type=range]:hover::-webkit-slider-thumb,textarea[type=range]:hover::-webkit-slider-thumb{background-color:#186db7}input[type=range][disabled],select[type=range][disabled],textarea[type=range][disabled]{background-color:rgba(0,0,0,0)}input[type=range][disabled]::-webkit-slider-thumb,select[type=range][disabled]::-webkit-slider-thumb,textarea[type=range][disabled]::-webkit-slider-thumb,input[type=range][disabled]::-moz-range-thumb,select[type=range][disabled]::-moz-range-thumb,textarea[type=range][disabled]::-moz-range-thumb,input[type=range][disabled]::-ms-thumb,select[type=range][disabled]::-ms-thumb,textarea[type=range][disabled]::-ms-thumb{background-color:#979ca1}input[type=range]:focus::-webkit-slider-thumb,select[type=range]:focus::-webkit-slider-thumb,textarea[type=range]:focus::-webkit-slider-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-moz-range-thumb,select[type=range]:focus::-moz-range-thumb,textarea[type=range]:focus::-moz-range-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-ms-thumb,select[type=range]:focus::-ms-thumb,textarea[type=range]:focus::-ms-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-range-value{padding:0 .5rem;font-size:.875rem;vertical-align:.1875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag{position:relative;display:block;box-sizing:border-box;padding:.25rem .25rem;padding-bottom:0;border:1px solid #4b4f53;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.focused{border-color:#1e88e5}.tag-inner-input{display:inline-block;width:auto;max-width:100%;box-sizing:border-box;padding:0 .25rem;border:0;border-radius:0;margin-bottom:.25rem;font-family:inherit;font-size:.875rem;line-height:inherit;outline:none}.tag-inner-input:focus{box-shadow:none}.input-tag-hidden{display:none}.input-tag .tag{display:inline-block;box-sizing:border-box;padding:0 .375rem;border-radius:4px;margin-bottom:.25rem;background-color:#292b2e;cursor:default;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.disabled,.input-tag.disabled .tag-inner-input{background-color:#1f2123}.input-tag.disabled .tag{background-color:#333638}.tag-remove{display:inline-block;padding:0 .125rem;margin-left:.25rem;color:#f2f2f3;font-style:normal;transition:color 150ms}.tag-remove:hover{color:#1e88e5}.tag-remove::after{content:"×";font-weight:600}.input-togglegroup{display:inline-block;border:1px solid #4b4f53;border-radius:4px;margin:0;margin-bottom:.5rem;font-size:0}.input-togglegroup:focus-within{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-togglegroup label{margin:0}.input-togglegroup input[type=radio],.input-togglegroup select[type=radio],.input-togglegroup textarea[type=radio]{position:absolute;opacity:0}.input-togglegroup input[type=radio]+span,.input-togglegroup select[type=radio]+span,.input-togglegroup textarea[type=radio]+span{display:inline-block;padding:.25rem .75rem;border-radius:3px;font-size:.875rem;transition:background-color 150ms,color 150ms}.input-togglegroup input[type=radio]:hover+span,.input-togglegroup select[type=radio]:hover+span,.input-togglegroup textarea[type=radio]:hover+span{background-color:#1f2123}.input-togglegroup input[type=radio]:checked+span,.input-togglegroup select[type=radio]:checked+span,.input-togglegroup textarea[type=radio]:checked+span{background-color:#1e88e5;color:#fff}.input-togglegroup input[type=radio]:focus+span,.input-togglegroup select[type=radio]:focus+span,.input-togglegroup textarea[type=radio]:focus+span{background-color:#186db7}.input-togglegroup[disabled] input[type=radio]+span,.input-togglegroup[disabled] select[type=radio]+span,.input-togglegroup[disabled] textarea[type=radio]+span{background-color:rgba(0,0,0,0);color:#f2f2f3}.input-togglegroup[disabled] input[type=radio]:checked+span,.input-togglegroup[disabled] select[type=radio]:checked+span,.input-togglegroup[disabled] textarea[type=radio]:checked+span{background-color:#333638}.input-togglegroup input[type=radio]:checked:hover+span,.input-togglegroup select[type=radio]:checked:hover+span,.input-togglegroup textarea[type=radio]:checked:hover+span{background-color:#186db7}.dropdown{position:relative;display:inline-block;margin-bottom:.5rem}.dropdown-button{margin-bottom:0}.dropdown-button::after{display:inline-block;height:0;margin-left:.25rem;content:" ";vertical-align:.125rem;border-top:.25rem solid;border-right:.25rem solid rgba(0,0,0,0);border-left:.25rem solid rgba(0,0,0,0)}.dropdown-menu,.dropdown-list{position:absolute;z-index:8;top:100%;left:0;display:none;min-width:8rem;padding:.25rem 0;border:1px solid #4b4f53;border-radius:4px;margin-top:3px;background-color:#181a1b;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);float:left}.dropdown-list{width:100%;max-height:10.15625rem;overflow-y:scroll}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;color:#f2f2f3;font-size:.875rem;white-space:nowrap}.dropdown-item:hover{background-color:#292b2e;color:#f2f2f3}.dropdown-item.selected{background-color:#1e88e5;color:#fff}.dropdown-separator{height:0;border-top:1px solid #4b4f53;margin:.25rem 0}.files-list{padding:0;margin:0;margin-bottom:1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.files-item{display:flex;align-items:center}.files-item-cell{overflow:hidden;padding:.25rem;font-size:.875rem;white-space:nowrap}.file-name{max-width:80%;flex:0 0 80%;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-name .icon{margin-right:.5rem;color:#f2f2f3}.file-size{color:#979ca1}.file-actions{max-width:20%;flex:0 0 20%;font-size:1rem;text-align:right}.tabs{padding:2px 2px 0;border-bottom:1px solid #333638;margin-bottom:1rem;overflow-x:auto;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabs-tab{display:inline-block;padding:.5rem 1.25rem;color:#f2f2f3;cursor:pointer}.tabs-tab:hover{color:#f2f2f3}.tabs-tab.active{border-bottom:3px solid #1e88e5;font-weight:600}.caption+.tabs{margin-top:-0.5rem}.modal-backdrop{position:fixed;z-index:16;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.75)}.modal{position:fixed;z-index:20;top:0;right:0;bottom:0;left:0;display:none;align-items:center;outline:0}.modal.show{display:flex}.modal-content{max-width:26rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#181a1b}@media(min-width: 26rem){.modal-content{margin:3rem auto}}.modal-size-large{width:40rem;max-width:40rem}@media(max-width: 40rem){.modal-size-large{margin:3rem .5rem}}.modal-error{padding:1rem;margin:-2rem -2rem 1rem -2rem;background-color:#e74c3b;color:#181a1b}.modal-text{margin-bottom:2.5rem}.notification-container{position:fixed;z-index:12;top:20px;right:20px}.notification{position:relative;overflow:hidden;width:350px;padding:1.5rem 2.5rem;border-radius:4px;margin-bottom:.5rem;animation:fadeInRight 300ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#292b2e;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);cursor:default;text-overflow:ellipsis;transition:top 300ms ease-in,opacity 150ms}.notification:hover{opacity:.95}.notification.fadeout{animation:fadeOutRight 300ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.notification .icon{position:absolute;top:50%;left:1rem;display:block;width:16px;height:16px;color:#fff;transform:translate(0, -50%)}.notification-info,.notification-success,.notification-warning,.notification-error{padding-left:3.25rem}.notification-info{background-color:#1e88e5;color:#fff}.notification-success{background-color:#25a35a;color:#fff}.notification-warning{background-color:#c27d0e;color:#fff}.notification-error{background-color:#b93d2f;color:#fff}.tooltip{position:absolute;z-index:20;display:none;min-width:2rem;padding:.25rem .5rem;border-radius:4px;background-color:rgba(242,242,243,.8);color:#181a1b;font-size:.75rem;pointer-events:none;text-align:center}.spinner{position:relative;display:inline-block;width:1.5rem;height:1.5rem;border-width:.2rem;border-style:solid;border-color:#1e88e5;border-radius:50%;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);margin-right:.75rem;animation:750ms spin infinite linear;text-align:center;transition:border 500ms;transition-timing-function:ease-out;vertical-align:-0.375rem}.spinner .icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.spinner-info{border-color:#1e88e5;animation:none;color:#1e88e5}.spinner-success{border-color:#2ecc70;animation:none;color:#2ecc70}.spinner-error{border-color:#e74c3b;animation:none;color:#e74c3b}.ct-label{color:rgba(0, 0, 0, 40%);fill:rgba(0, 0, 0, 40%);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left}.ct-grid{stroke:rgba(0, 0, 0, 20%);stroke-dasharray:2px;stroke-width:1px}.ct-grid-background{fill:none}.ct-point{stroke-linecap:round;stroke-width:10px}.ct-line{fill:none;stroke-width:4px}.ct-area{fill-opacity:.1;stroke:none}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#e6805e}.ct-series-i .ct-area,.ct-series-i .ct-slice-pie{fill:#e6805e}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-chart{position:relative;display:block;width:100%;height:14rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-label{color:rgba(242,242,243,.4);fill:rgba(242,242,243,.4);white-space:pre-wrap}.ct-grid{stroke:rgba(242,242,243,.2)}.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#1e88e5}.ct-series-a .ct-area{fill:#1e88e5}.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#f39c11}.ct-series-b .ct-area{fill:#f39c11}.ct-label.ct-horizontal,.ct-label.ct-horizontal.ct-end{display:inline-block;width:auto !important;min-width:3rem;color:#f2f2f3;text-align:center;transform:translateX(-50%)}.ct-legend{font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-legend-right{text-align:right}.ct-legend-label{white-space:nowrap}.ct-legend-label .icon{display:inline-block;margin:0 .25rem}.ct-legend-label.ct-series-a .icon{color:#1e88e5}.ct-legend-label.ct-series-b .icon{color:#f39c11}@keyframes fadeInRight{from{opacity:0;transform:translate3d(150%, 0, 0)}to{opacity:1;transform:none}}@keyframes fadeOutRight{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(150%, 0, 0)}}@keyframes shake{from,to{transform:translate3d(0, 0, 0)}10%,50%,90%{transform:translate3d(-10px, 0, 0)}30%,70%{transform:translate3d(10px, 0, 0)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.login-modal-container{max-width:24rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#181a1b;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}@media(min-width: 24rem){.login-modal-container{margin:3rem auto}}.login-modal-info,.login-modal-success,.login-modal-warning,.login-modal-error{position:relative;padding:1rem 2rem 1rem 3.5rem;margin:-2rem -2rem 1rem -2rem;border-top-left-radius:4px;border-top-right-radius:4px}.login-modal-info a,.login-modal-success a,.login-modal-warning a,.login-modal-error a{display:block;color:#fff;text-decoration:underline;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-modal-info .icon,.login-modal-success .icon,.login-modal-warning .icon,.login-modal-error .icon{position:absolute;top:50%;left:1rem;display:block;transform:translate(0, -50%)}.login-modal-info{background-color:#1e88e5;color:#fff}.login-modal-success{background-color:#25a35a;color:#fff}.login-modal-warning{background-color:#f39c11;color:#fff}.login-modal-error{background-color:#e74c3b;color:#fff}.title-bar{position:fixed;z-index:8;top:0;right:0;left:0;padding:1rem;padding-left:4rem;background-color:#292b2e;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);color:#f2f2f3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(min-width: 768px){.title-bar{left:16rem;padding-left:1.5rem}}.panel-title{float:left}.view-site{color:#f2f2f3;float:right}.view-site:hover{color:#1e88e5}.view-site i{margin-left:.5rem}.sidebar{position:fixed;z-index:10;top:0;bottom:0;left:0;width:16rem;padding:1rem 1.5rem;background:linear-gradient(to bottom, hsl(208deg, 5%, 10%) 0%, hsl(208deg, 5%, 13%) 100%);background-color:#181a1b;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar.show{display:block}.sidebar-wrapper{height:calc(100% - 9rem);overflow-y:auto}.toggle-navigation{position:fixed;z-index:12;top:.75rem;left:.75rem;border:none;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:1rem}.toggle-navigation:hover{background-color:rgba(0,0,0,0);box-shadow:none;color:#1e88e5}.toggle-navigation:focus{background-color:rgba(0,0,0,0);box-shadow:none}.logo{margin-bottom:2rem;color:#f2f2f3;font-size:1.184rem;font-weight:600;line-height:1.5rem;text-align:center}@media(min-width: 768px){.logo{text-align:left}}.logo img{height:1.5rem;margin-right:.25rem;vertical-align:-0.25rem}.logo a{padding-top:2px;color:#f2f2f3}.sidebar-navigation{padding:0;margin:0;margin-bottom:1rem;list-style-type:none}.sidebar-navigation:last-child{margin-bottom:0}.sidebar-navigation>li{position:relative;padding:.25rem 0;padding-left:1rem;margin:0;margin-bottom:.5rem}.sidebar-navigation>li a{color:#f2f2f3}.sidebar-navigation>li.active{font-weight:600}.sidebar-navigation>li.active::before{position:absolute;top:0;bottom:0;left:0;width:3px;background-color:#1e88e5;content:" "}.panel-user-card{display:flex;align-items:center;margin-bottom:2rem;cursor:pointer}.panel-user-avatar{width:48px}.panel-user-avatar img{width:48px;border-radius:50%;transition:box-shadow 300ms ease-out}.panel-user-card:hover .panel-user-avatar img{box-shadow:0 0 0 .5rem #333638}.panel-user-details{padding:0 .75rem}.panel-user-fullname{color:#f2f2f3}.panel-user-username{color:#979ca1;font-size:.875rem}.main{margin-top:4.5rem}@media(min-width: 768px){.main{margin:1.875rem;margin-top:4.5rem;margin-left:17.875rem}}.component{padding:1.5rem;border-radius:4px;margin-bottom:1rem;background-color:#181a1b;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}.component::before,.component::after{display:table;content:""}.component::after{clear:both}.caption{margin-bottom:1rem;font-size:.9375rem;font-weight:500;letter-spacing:1px;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.separator{height:.5rem}.separator-l{height:1rem}.section{margin-bottom:1rem}.section-header{padding:.25rem .5rem;border-bottom:1px solid #333638;margin-bottom:.5rem;font-size:1rem;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.icon{display:inline-block;width:1em;min-width:16px;height:1em;min-height:16px;vertical-align:-0.125rem}.section-toggle .icon{transition:transform 150ms}.section.collapsed .section-toggle .icon{transform:rotate(180deg)}.section.collapsed .section-content{display:none}.sort-handle{display:inline-block;margin-bottom:0;color:#979ca1;cursor:grab}.sortable-chosen,.sortable-ghost{background-color:#181a1b;cursor:grabbing}.sortable-chosen *{cursor:grabbing}.sortable-fallback{box-shadow:0 0 .75rem .25rem rgba(0,0,0,.15)}.pages-list{padding:0;margin:0;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pages-list .pages-list{display:none}.pages-list-headers{display:none;padding:.25rem 0;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.page-children-toggle{display:inline-block;min-width:auto;padding:0;border-color:rgba(0,0,0,0);margin:0 .25rem .125rem 0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer}.page-children-toggle:hover,.page-children-toggle:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}.page-children-toggle:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-children-toggle .icon{margin-right:0;transition:transform 150ms}.toggle-expanded .icon{transform:rotate(-180deg)}.pages-item{padding:.5rem 0;border-bottom:1px solid #333638}.pages-item:hover{background-color:#1f2123}.pages-item .sort-handle{display:none}.pages-list-top{border-top:1px solid #333638}.pages-item-cell,.pages-headers-cell{padding:.25rem .5rem;font-size:.875rem}.pages-item-cell div,.pages-headers-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-title{padding:2px;margin:-2px;font-size:1rem}.page-language{display:inline-block;min-width:1.125rem;padding:.125rem .25rem;border-radius:4px;background-color:#d2e7fa;color:#1e88e5;font-size:.875rem;font-weight:600;line-height:1;text-align:center}button .page-language,.button .page-language{font-size:.75rem}.page-route{color:#979ca1;font-size:.875rem}.page-route-changeable{padding:2px;margin:-2px}.page-status .icon{display:inline-block;margin-right:.375rem}.page-status-published .icon{color:#2ecc70}.page-status-not-published .icon{color:#e74c3b}.page-status-not-routable .icon{color:#f39c11}.page-date,.page-status,.page-actions{display:none}.page-actions .button-link{font-size:1rem}@media(min-width: 600px){.pages-item,.pages-list-headers{display:flex;align-items:center}.pages-item-cell,.pages-headers-cell{display:block}.page-details{max-width:55%;flex:0 0 55%}.page-date,.page-status,.page-actions{max-width:15%;flex:0 0 15%;text-align:center}}.pages-level-2 .page-details{padding-left:1.5rem}.pages-level-3 .page-details{padding-left:3rem}.pages-level-4 .page-details{padding-left:4.5rem}.pages-level-5 .page-details{padding-left:6rem}.page-info{padding:0 .25rem;margin-bottom:.75rem}.page-info>div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-slug-change{padding:0;border-color:rgba(0,0,0,0);margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#979ca1;cursor:pointer}.page-slug-change:hover,.page-slug-change:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:#979ca1}.page-slug-change:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-slug-change .icon{display:inline-block;margin-right:0;color:#f2f2f3;opacity:0;transition:opacity 150ms}.page-slug-change:hover .icon,.page-slug-change:focus .icon{opacity:1}.dragging [data-sortable=false] .pages-item:hover{background-color:#fce8e5;cursor:no-drop}.options-form .input-checkbox-label{margin-bottom:.5rem;font-size:1rem}.info-data{width:100%;margin-bottom:1rem;table-layout:fixed}.info-data td{overflow:hidden;padding:.5rem;vertical-align:top}.info-data-key{width:25%}.info-data-value{width:75%;font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem;word-break:break-word}.user-summary{display:flex;align-items:center}.user-summary-avatar{max-width:33.33333%;flex:0 0 33.33333%;padding:.75rem;text-align:center}.user-summary-avatar img{width:180px;border-radius:50%}.user-summary-data{padding:.75rem}.users-list{border-top:1px solid #333638;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-list-headers{display:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-item{padding:.5rem 0;border-bottom:1px solid #333638}.users-item:hover{background-color:#1f2123}.users-item-cell,.users-headers-cell{padding:.125rem .25rem;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-username,.user-fullname{display:inline-block}.users-item .user-username{font-size:1rem}.user-last-access,.user-actions{display:none}.user-actions .button-link{font-size:1rem}@media(min-width: 600px){.users-item,.users-list-headers{display:flex;align-items:center}.users-list-headers{padding:.25rem 0;font-weight:600}.users-item-cell,.users-headers-cell{display:block;padding:.25rem .5rem}.user-username,.user-last-access{max-width:20%;flex:0 0 20%}.user-fullname,.user-email{max-width:25%;flex:0 0 25%}.user-last-access,.user-actions{text-align:center}.user-actions{max-width:10%;flex:0 0 10%}}.error-container{max-width:32rem;padding:1rem;margin:4rem auto;text-align:center}.error-container h1{color:#7c8288;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.error-container h2{margin-bottom:1rem;font-size:2rem}.error-code{display:block;font-size:8rem;font-weight:400}.error-status{display:block;font-size:1.75rem}.error-container .action{font-size:1.125rem}.error-container .logo{width:3.5rem;height:3.5rem;margin:2rem auto;background-position:center;background-repeat:no-repeat;background-size:cover} diff --git a/admin/assets/css/admin.min.css b/panel/assets/css/panel.min.css similarity index 99% rename from admin/assets/css/admin.min.css rename to panel/assets/css/panel.min.css index 1fc2927e..af86a918 100644 --- a/admin/assets/css/admin.min.css +++ b/panel/assets/css/panel.min.css @@ -1 +1 @@ -html{font-size:100%;-webkit-text-size-adjust:100%}body{margin:0;background-color:#f7f7f7;color:#262626;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;line-height:1.5;-webkit-tap-highlight-color:rgba(38,38,38,0)}*{box-sizing:border-box}main{display:block}a{background-color:rgba(0,0,0,0);color:#1e88e5;outline-color:rgba(4,138,255,.375);text-decoration:none;transition:color 150ms}a:hover{color:#186db7}a:not([href]){cursor:default}img{max-width:100%;border-style:none}mark{background-color:gold}[hidden]{display:none}.focused{box-shadow:0 0 0 2px rgba(4,138,255,.375)}::selection{background-color:rgba(30,136,229,.25)}::placeholder{color:#7d7d7d}@media(min-width: 600px){.hide-from-xs{display:none}}@media(max-width: 599px){.show-from-xs{display:none}}@media(min-width: 768px){.hide-from-s{display:none}}@media(max-width: 767px){.show-from-s{display:none}}@media(min-width: 1024px){.hide-from-m{display:none}}@media(max-width: 1023px){.show-from-m{display:none}}@media(min-width: 1280px){.hide-from-l{display:none}}@media(max-width: 1279px){.show-from-l{display:none}}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1,h2,.h2,h3,.h3{letter-spacing:-0.027rem}h1,.h1{font-size:2.369rem}h2,.h2{font-size:2.104rem}h3,.h3{font-size:1.777rem}h4,.h4{font-size:1.579rem}h5,.h5{font-size:1.184rem}h6,.h6{font-size:1rem}strong{font-weight:600}p{margin-top:0;margin-bottom:.5rem;line-height:1.5}ul{padding:0;margin-top:0;margin-bottom:.5rem;margin-left:1.25rem;list-style-position:outside}.container,.container-full,.container-no-margin{padding:0 15px;margin:0 auto}.container{max-width:1280px}.container-no-margin{padding-right:0;padding-left:0}.row{display:flex;flex-wrap:wrap;margin:0 -15px}@media(max-width: 768px){.container-no-margin .row{margin:0}.container-no-margin div[class^=col-]{padding:0}}.col-xs,.col-xs-1-12,.col-xs-2-12,.col-xs-1-6,.col-xs-3-12,.col-xs-1-4,.col-xs-4-12,.col-xs-1-3,.col-xs-5-12,.col-xs-6-12,.col-xs-1-2,.col-xs-7-12,.col-xs-8-12,.col-xs-2-3,.col-xs-9-12,.col-xs-3-4,.col-xs-10-12,.col-xs-5-6,.col-xs-11-12,.col-xs-12-12,.col-xs-1-1,.col-s,.col-s-1-12,.col-s-2-12,.col-s-1-6,.col-s-3-12,.col-s-1-4,.col-s-4-12,.col-s-1-3,.col-s-5-12,.col-s-6-12,.col-s-1-2,.col-s-7-12,.col-s-8-12,.col-s-2-3,.col-s-9-12,.col-s-3-4,.col-s-10-12,.col-s-5-6,.col-s-11-12,.col-s-12-12,.col-s-1-1,.col-m,.col-m-1-12,.col-m-2-12,.col-m-1-6,.col-m-3-12,.col-m-1-4,.col-m-4-12,.col-m-1-3,.col-m-5-12,.col-m-6-12,.col-m-1-2,.col-m-7-12,.col-m-8-12,.col-m-2-3,.col-m-9-12,.col-m-3-4,.col-m-10-12,.col-m-5-6,.col-m-11-12,.col-m-12-12,.col-m-1-1,.col-l,.col-l-1-12,.col-l-2-12,.col-l-1-6,.col-l-3-12,.col-l-1-4,.col-l-4-12,.col-l-1-3,.col-l-5-12,.col-l-6-12,.col-l-1-2,.col-l-7-12,.col-l-8-12,.col-l-2-3,.col-l-9-12,.col-l-3-4,.col-l-10-12,.col-l-5-6,.col-l-11-12,.col-l-12-12,.col-l-1-1{width:100%;padding:0 15px}.col-xs{width:auto;max-width:100%;flex:1 0 auto}.col-xs-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-xs-2-12,.col-xs-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-xs-3-12,.col-xs-1-4{max-width:25%;flex:0 0 25%}.col-xs-4-12,.col-xs-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-xs-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-xs-6-12,.col-xs-1-2{max-width:50%;flex:0 0 50%}.col-xs-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-xs-8-12,.col-xs-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-xs-9-12,.col-xs-3-4{max-width:75%;flex:0 0 75%}.col-xs-10-12,.col-xs-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-xs-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-xs-12-12,.col-xs-1-1{max-width:100%;flex:0 0 100%}@media(min-width: 768px){.col-s{width:auto;max-width:100%;flex:1 0 auto}.col-s-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-s-2-12,.col-s-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-s-3-12,.col-s-1-4{max-width:25%;flex:0 0 25%}.col-s-4-12,.col-s-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-s-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-s-6-12,.col-s-1-2{max-width:50%;flex:0 0 50%}.col-s-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-s-8-12,.col-s-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-s-9-12,.col-s-3-4{max-width:75%;flex:0 0 75%}.col-s-10-12,.col-s-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-s-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-s-12-12,.col-s-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1024px){.col-m{width:auto;max-width:100%;flex:1 0 auto}.col-m-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-m-2-12,.col-m-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-m-3-12,.col-m-1-4{max-width:25%;flex:0 0 25%}.col-m-4-12,.col-m-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-m-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-m-6-12,.col-m-1-2{max-width:50%;flex:0 0 50%}.col-m-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-m-8-12,.col-m-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-m-9-12,.col-m-3-4{max-width:75%;flex:0 0 75%}.col-m-10-12,.col-m-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-m-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-m-12-12,.col-m-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1280px){.col-l{width:auto;max-width:100%;flex:1 0 auto}.col-l-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-l-2-12,.col-l-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-l-3-12,.col-l-1-4{max-width:25%;flex:0 0 25%}.col-l-4-12,.col-l-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-l-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-l-6-12,.col-l-1-2{max-width:50%;flex:0 0 50%}.col-l-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-l-8-12,.col-l-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-l-9-12,.col-l-3-4{max-width:75%;flex:0 0 75%}.col-l-10-12,.col-l-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-l-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-l-12-12,.col-l-1-1{max-width:100%;flex:0 0 100%}}button,.button{display:inline-block;overflow:visible;min-width:2rem;padding:.375rem .5rem;border:1px solid #e3e3e3;border-radius:4px;margin-right:.25rem;margin-bottom:.5rem;background-color:#e3e3e3;box-shadow:0 1px 0 rgba(38,38,38,.25);color:#262626;cursor:default;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;line-height:1.15;outline:none;transition:border-color 150ms,background-color 150ms,color 150ms;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button:hover,button:focus,.button:hover,.button:focus{border-color:#c9c9c9;background-color:#c9c9c9;color:#262626}button:focus,.button:focus{box-shadow:0 0 0 2px rgba(38,38,38,.375)}button[disabled],button[disabled]:hover,button.disabled,button.disabled:hover,.button[disabled],.button[disabled]:hover,.button.disabled,.button.disabled:hover{border-color:#f7f7f7;background-color:#f7f7f7;box-shadow:none;color:#c9c9c9;pointer-events:none}button.active,.button.active{border-color:#c9c9c9;background-color:#c9c9c9}button .icon,.button .icon{display:inline-block;margin-right:.25rem}a.button{text-align:center}.button-right{margin-right:0;margin-left:.25rem;float:right}.button-accent{border:1px solid #1e88e5;background-color:#1e88e5;color:#fff}.button-accent:hover,.button-accent:focus{border-color:#186db7;background-color:#186db7;color:#fff}.button-accent:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-success{border:1px solid #2ecc70;background-color:#2ecc70;color:#fff}.button-success:hover,.button-success:focus{border-color:#25a35a;background-color:#25a35a;color:#fff}.button-success:focus{box-shadow:0 0 0 2px rgba(46,204,112,.375)}.button-warning{border:1px solid #f39c11;background-color:#f39c11;color:#fff}.button-warning:hover,.button-warning:focus{border-color:#c27d0e;background-color:#c27d0e;color:#fff}.button-warning:focus{box-shadow:0 0 0 2px rgba(243,156,17,.375)}.button-error{border:1px solid #e74c3b;background-color:#e74c3b;color:#fff}.button-error:hover,.button-error:focus{border-color:#b93d2f;background-color:#b93d2f;color:#fff}.button-error:focus{box-shadow:0 0 0 2px rgba(231,76,59,.375)}.button-link{border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:inherit}.button-link:hover,.button-link:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.button-link:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-link[disabled],.button-link[disabled]:hover,.button-link.disabled,.button-link.disabled:hover{background-color:rgba(0,0,0,0);cursor:default}.button-link .icon{margin-right:0}input,textarea,select{display:inline-block;width:100%;padding:.25rem .5rem;border:1px solid #c9c9c9;border-radius:4px;margin:0;margin-bottom:.5rem;background-color:#fcfcfc;color:#262626;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;line-height:1.5;-webkit-appearance:none;-moz-appearance:none}input:focus,textarea:focus,select:focus{border-color:#1e88e5;outline:none;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[disabled],textarea[disabled],select[disabled]{background-color:#ededed;color:#7d7d7d}input[readonly],textarea[readonly],select[readonly]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}input[type=checkbox],textarea[type=checkbox],select[type=checkbox],input[type=radio],textarea[type=radio],select[type=radio]{width:auto;height:inherit;padding:0;margin-bottom:0;vertical-align:text-top}input[type=checkbox]:focus,textarea[type=checkbox]:focus,select[type=checkbox]:focus,input[type=radio]:focus,textarea[type=radio]:focus,select[type=radio]:focus{box-shadow:none}input[type=file],textarea[type=file],select[type=file]{padding:0;border:none;border-radius:0}input[type=file]::-webkit-file-upload-button,textarea[type=file]::-webkit-file-upload-button,select[type=file]::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}input[type=number]::-webkit-inner-spin-button,textarea[type=number]::-webkit-inner-spin-button,select[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button,textarea[type=number]::-webkit-outer-spin-button,select[type=number]::-webkit-outer-spin-button{height:auto}input[type=search],textarea[type=search],select[type=search]{max-width:28rem;padding-left:2rem;background:#fcfcfc url('data:image/svg+xml;utf8,') no-repeat left .5rem top .375rem;background-size:1rem 1rem}input[type=search]::-webkit-search-cancel-button,textarea[type=search]::-webkit-search-cancel-button,select[type=search]::-webkit-search-cancel-button{display:none}select{padding:.25rem 1.5rem .25rem .5rem;background:#fcfcfc url("data:image/svg+xml;utf8,") no-repeat right .75rem center;background-color:#fcfcfc;background-size:8px 6px}select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #262626}textarea{overflow:auto;height:5.75rem;min-height:3.125rem;max-height:16.25rem;resize:vertical}.input-large{font-size:1.125rem}.input-accent{border-color:#1e88e5}.input-success{border-color:#2ecc70}.input-warning{border-color:#f39c11}.input-error{border-color:#e74c3b}.input-invalid{animation:shake 500ms;animation-fill-mode:both}.input-wrap{position:relative;margin-bottom:.5rem}.input-wrap input,.input-wrap select,.input-wrap textarea{padding-right:1.625rem;margin-bottom:0}.input-reset{position:absolute;top:50%;right:.5rem;color:#262626;transform:translateY(-50%);transition:color 150ms}.input-reset:hover{color:#1e88e5}label{display:inline-block;margin-bottom:.25rem;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none}.label-suggestion{color:#7d7d7d;font-size:.75rem;line-height:1}.label-required::after{display:inline-block;margin-left:.125rem;color:#e74c3b;content:"*"}.input-array{margin-bottom:.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-array .sort-handle .icon{vertical-align:middle}.input-array-row{display:flex;padding:.25rem .5rem;margin:0 -0.5rem;white-space:nowrap}.input-array-key,.input-array-value{display:inline-block;margin-bottom:0}.input-array-key{width:30%;margin-right:.25rem}.input-array-value{margin-right:.25rem}.input-array-add,.input-array-remove{min-width:1rem;padding:0;margin-right:.25rem}.input-checkbox{position:absolute;opacity:0}.input-checkbox+.input-checkbox-text::before{position:relative;top:.125rem;display:inline-block;width:1rem;height:1rem;box-sizing:border-box;border:1px solid #c9c9c9;border-radius:4px;margin-right:.5rem;content:" ";transition:border-color 150ms,background-color 150ms}.input-checkbox+.input-checkbox-text:hover::before,.input-checkbox[disabled]+.input-checkbox-text::before{background-color:#f7f7f7}.input-checkbox:checked+.input-checkbox-text::before{border-color:#1e88e5;background-color:#1e88e5}.input-checkbox:focus+.input-checkbox-text::before{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-checkbox:checked+.input-checkbox-text:hover::before{border-color:#186db7;background-color:#186db7}.input-checkbox:checked+.input-checkbox-text::after{position:absolute;top:.125rem;left:0;display:block;width:1rem;height:1rem;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 11'%3E%3Cpath fill='%23fff' d='M4.727 7.036L8.263 3.5l.707.707L4.727 8.45 2 5.722l.707-.707z'/%3E%3C/svg%3E");content:" "}.input-checkbox:checked[disabled]+.input-checkbox-text::before{border-color:#c9c9c9;background-color:#c9c9c9}.input-checkbox-label{position:relative;line-height:1.5}.input-date{cursor:default}.calendar{position:absolute;z-index:8;top:100%;display:none;width:18rem;padding:.5rem;border:1px solid #c9c9c9;border-radius:4px;margin:3px 1rem 1rem;background-color:#fcfcfc;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);color:#262626}.calendar-header{margin-bottom:.5rem}.calendar-buttons{margin:0 -0.5rem;font-size:0}.calendar button{width:33.3%;padding:0 .5rem;border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#262626;cursor:pointer;font-size:.875rem;outline:none}.calendar button:hover{color:#1e88e5}.calendar button:focus{box-shadow:none}.calendar-buttons .currentMonth{font-weight:600}.calendar-table{width:100%}.calendar-table td{width:14%;cursor:default;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.calendar-time{width:50%;margin:0 auto;text-align:center}.calendar-header-day{font-size:.875rem}.calendar-day{border-radius:4px;transition:background-color 150ms,color 150ms}.calendar-day:hover{background-color:#186db7;color:#fff}.calendar-day.selected{background-color:#1e88e5;color:#fff}.calendar-prev-month-day,.calendar-next-month-day{color:#c9c9c9}.calendar-separator{height:0;border-top:1px solid #c9c9c9;margin:.5rem -0.5rem}.input-duration{box-sizing:border-box;padding:.25rem .25rem;border:1px solid #c9c9c9;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-duration.focused{border-color:#1e88e5}.input-duration>span{text-align:center}.input-duration input,.input-duration select,.input-duration textarea{width:2rem;padding:0;border:0;margin:0;-moz-appearance:textfield;background-color:#ededed;text-align:center;vertical-align:baseline}.input-duration input::-webkit-inner-spin-button,.input-duration select::-webkit-inner-spin-button,.input-duration textarea::-webkit-inner-spin-button,.input-duration input::-webkit-outer-spin-button,.input-duration select::-webkit-outer-spin-button,.input-duration textarea::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none}.input-duration input:focus,.input-duration select:focus,.input-duration textarea:focus{box-shadow:none}.input-duration label{padding:0 .5rem;margin:0}.input-duration-hidden{display:none}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20, 255, 20, 0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:blue}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255, 150, 0, 0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255, 255, 0, 0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.editor-toolbar{padding:.125rem .25rem;border:1px solid #c9c9c9;background-color:#f7f7f7;border-top-left-radius:4px;border-top-right-radius:4px;font-size:0}.toolbar-button{padding:.5rem;border:0;margin-bottom:0;background-color:#f7f7f7;box-shadow:none}.toolbar-button:hover,.toolbar-button:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.toolbar-button:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.toolbar-button .icon{margin-right:0}.editor-textarea{min-height:24rem;padding:.75rem 1rem;border:1px solid #c9c9c9;border-radius:4px;margin-bottom:.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.editor-textarea:focus{box-shadow:none}.CodeMirror{min-height:24rem;padding:0 1rem;border:1px solid #c9c9c9;border-radius:4px;margin-bottom:.5rem;background:#fcfcfc;color:#262626;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.CodeMirror-lines{padding:.75rem 0}.CodeMirror-lines pre{padding:0 !important}.editor-toolbar+.editor-textarea,.editor-textarea+.CodeMirror{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.editor-wrap{border-radius:4px}.editor-wrap.focused .editor-toolbar,.editor-wrap.focused .CodeMirror{border-color:#1e88e5}.CodeMirror-cursor{border-left-color:#262626}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler{background-color:inherit}.CodeMirror-selected{background:rgba(0,0,0,0)}.CodeMirror-focused .CodeMirror-selected{background:rgba(30,136,229,.25)}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(30,136,229,.25)}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(30,136,229,.25)}.cm-formatting-code-block,.cm-formatting-list{display:inline !important}.cm-formatting,.cm-image-alt-text,.cm-url{display:none}.CodeMirror-activeline .cm-formatting,.CodeMirror-activeline .cm-image-alt-text,.CodeMirror-activeline .cm-url{display:inline}.cm-s-formwork .cm-formatting{color:#7d7d7d}.cm-s-formwork .cm-header-1{font-size:1.75rem}.cm-s-formwork .cm-header-2{font-size:1.5rem}.cm-s-formwork .cm-header-3{font-size:1.25rem}.cm-s-formwork .cm-comment{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.cm-s-formwork .cm-comment.cm-header-1{font-size:1.53125rem}.cm-s-formwork .cm-comment.cm-header-2{font-size:1.3125rem}.cm-s-formwork .cm-comment.cm-header-3{font-size:1.09375rem}.cm-s-formwork .cm-quote{color:#7d7d7d}.cm-s-formwork .cm-formatting-quote+.cm-quote{padding-left:1.25rem;background:#fcfcfc url('data:image/svg+xml;utf8,') no-repeat left center;background-size:1rem 1rem}.cm-s-formwork .CodeMirror-activeline .cm-formatting-quote+.cm-quote{padding-left:0;background:rgba(0,0,0,0)}.cm-s-formwork .cm-link{color:#1e88e5;text-decoration:underline}.cm-s-formwork .cm-url.cm-formatting,.cm-s-formwork .cm-image-alt-text.cm-formatting,.cm-s-formwork .cm-image-marker{color:#1e88e5}.cm-s-formwork .cm-url,.cm-s-formwork .cm-image-alt-text{color:#7d7d7d;text-decoration:none}.cm-s-formwork .cm-image~.cm-url:not(.cm-formatting){display:inline;padding:0 .25rem 0 1.5rem;border-radius:4px;background:#fcfcfc url('data:image/svg+xml;utf8,') no-repeat left .25rem center;background-color:#ededed;background-size:1rem 1rem;color:#262626}.cm-s-formwork .CodeMirror-activeline .cm-image~.cm-url:not(.cm-formatting){padding:0;background:rgba(0,0,0,0);color:#7d7d7d}.cm-s-formwork .cm-hr{color:#7d7d7d}.cm-s-formwork .cm-tag{color:#25a35a}.cm-s-formwork .cm-bracket{color:#262626}.cm-s-formwork .cm-attribute{color:#8c68cd}.cm-s-formwork .cm-bracket,.cm-s-formwork .cm-m-xml{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.input-file{display:none}.input-file-label{display:block;padding:.5rem;margin-bottom:1rem;background-color:#f7f7f7;clear:both}.input-file-label>span{display:block;padding:1.5rem 1rem;border:2px dashed #c9c9c9;color:#262626;text-align:center;transition:background-color 300ms}.input-file-label.drag>span{background-color:#fcfcfc}.input-image{cursor:default}.image-picker-thumbnails{overflow:auto;height:15rem;padding:.5rem;margin-bottom:1rem}.image-picker-thumbnail{position:relative;display:inline-block;width:8rem;height:8rem;box-sizing:border-box;padding:.5rem;border:1px solid #c9c9c9;margin:.25rem;background-origin:content-box;background-position:center;background-repeat:no-repeat;background-size:contain}.image-picker-thumbnail::after{position:absolute;right:.75rem;bottom:.5rem;left:.75rem;display:block;padding:0 .375rem;border-radius:4px;background-color:rgba(227,227,227,.9);content:attr(data-filename);font-size:.75rem;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-picker-thumbnail.selected{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.image-picker-empty-state{margin:3rem auto 4rem;text-align:center}.image-picker-empty-state-icon{color:#969696;font-size:2rem}input[type=range],select[type=range],textarea[type=range]{width:15rem;padding:.875rem 0;border:0;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-webkit-slider-runnable-track,select[type=range]::-webkit-slider-runnable-track,textarea[type=range]::-webkit-slider-runnable-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#e3e3e3;cursor:default}input[type=range]::-webkit-slider-thumb,select[type=range]::-webkit-slider-thumb,textarea[type=range]::-webkit-slider-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:-0.375rem;background-color:#1e88e5;transition:background-color 150ms;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-moz-range-track,select[type=range]::-moz-range-track,textarea[type=range]::-moz-range-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#e3e3e3}input[type=range]::-moz-range-thumb,select[type=range]::-moz-range-thumb,textarea[type=range]::-moz-range-thumb{width:1rem;height:1rem;border:0;border-radius:50%;background-color:#1e88e5;cursor:default}input[type=range]::-ms-track,select[type=range]::-ms-track,textarea[type=range]::-ms-track{width:100%;height:.25rem;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:rgba(0,0,0,0);cursor:default}input[type=range]::-ms-fill-lower,select[type=range]::-ms-fill-lower,textarea[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper,select[type=range]::-ms-fill-upper,textarea[type=range]::-ms-fill-upper{border:0;border-radius:.125rem;background:#e3e3e3;box-shadow:none}input[type=range]::-ms-thumb,select[type=range]::-ms-thumb,textarea[type=range]::-ms-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:0;background-color:#1e88e5;cursor:default}input[type=range]:focus,select[type=range]:focus,textarea[type=range]:focus{box-shadow:none}input[type=range]:hover::-webkit-slider-thumb,select[type=range]:hover::-webkit-slider-thumb,textarea[type=range]:hover::-webkit-slider-thumb{background-color:#186db7}input[type=range][disabled],select[type=range][disabled],textarea[type=range][disabled]{background-color:rgba(0,0,0,0)}input[type=range][disabled]::-webkit-slider-thumb,select[type=range][disabled]::-webkit-slider-thumb,textarea[type=range][disabled]::-webkit-slider-thumb,input[type=range][disabled]::-moz-range-thumb,select[type=range][disabled]::-moz-range-thumb,textarea[type=range][disabled]::-moz-range-thumb,input[type=range][disabled]::-ms-thumb,select[type=range][disabled]::-ms-thumb,textarea[type=range][disabled]::-ms-thumb{background-color:#7d7d7d}input[type=range]:focus::-webkit-slider-thumb,select[type=range]:focus::-webkit-slider-thumb,textarea[type=range]:focus::-webkit-slider-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-moz-range-thumb,select[type=range]:focus::-moz-range-thumb,textarea[type=range]:focus::-moz-range-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-ms-thumb,select[type=range]:focus::-ms-thumb,textarea[type=range]:focus::-ms-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-range-value{padding:0 .5rem;font-size:.875rem;vertical-align:.1875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag{position:relative;display:block;box-sizing:border-box;padding:.25rem .25rem;padding-bottom:0;border:1px solid #c9c9c9;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.focused{border-color:#1e88e5}.tag-inner-input{display:inline-block;width:auto;max-width:100%;box-sizing:border-box;padding:0 .25rem;border:0;border-radius:0;margin-bottom:.25rem;font-family:inherit;font-size:.875rem;line-height:inherit;outline:none}.tag-inner-input:focus{box-shadow:none}.input-tag-hidden{display:none}.input-tag .tag{display:inline-block;box-sizing:border-box;padding:0 .375rem;border-radius:4px;margin-bottom:.25rem;background-color:#ededed;cursor:default;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.disabled,.input-tag.disabled .tag-inner-input{background-color:#f7f7f7}.input-tag.disabled .tag{background-color:#e3e3e3}.tag-remove{display:inline-block;padding:0 .125rem;margin-left:.25rem;color:#262626;font-style:normal;transition:color 150ms}.tag-remove:hover{color:#1e88e5}.tag-remove::after{content:"×";font-weight:600}.input-togglegroup{display:inline-block;border:1px solid #c9c9c9;border-radius:4px;margin:0;margin-bottom:.5rem;font-size:0}.input-togglegroup:focus-within{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-togglegroup label{margin:0}.input-togglegroup input[type=radio],.input-togglegroup select[type=radio],.input-togglegroup textarea[type=radio]{position:absolute;opacity:0}.input-togglegroup input[type=radio]+span,.input-togglegroup select[type=radio]+span,.input-togglegroup textarea[type=radio]+span{display:inline-block;padding:.25rem .75rem;border-radius:3px;font-size:.875rem;transition:background-color 150ms,color 150ms}.input-togglegroup input[type=radio]:hover+span,.input-togglegroup select[type=radio]:hover+span,.input-togglegroup textarea[type=radio]:hover+span{background-color:#f7f7f7}.input-togglegroup input[type=radio]:checked+span,.input-togglegroup select[type=radio]:checked+span,.input-togglegroup textarea[type=radio]:checked+span{background-color:#1e88e5;color:#fff}.input-togglegroup input[type=radio]:focus+span,.input-togglegroup select[type=radio]:focus+span,.input-togglegroup textarea[type=radio]:focus+span{background-color:#186db7}.input-togglegroup[disabled] input[type=radio]+span,.input-togglegroup[disabled] select[type=radio]+span,.input-togglegroup[disabled] textarea[type=radio]+span{background-color:rgba(0,0,0,0);color:#262626}.input-togglegroup[disabled] input[type=radio]:checked+span,.input-togglegroup[disabled] select[type=radio]:checked+span,.input-togglegroup[disabled] textarea[type=radio]:checked+span{background-color:#e3e3e3}.input-togglegroup input[type=radio]:checked:hover+span,.input-togglegroup select[type=radio]:checked:hover+span,.input-togglegroup textarea[type=radio]:checked:hover+span{background-color:#186db7}.dropdown{position:relative;display:inline-block;margin-bottom:.5rem}.dropdown-button{margin-bottom:0}.dropdown-button::after{display:inline-block;height:0;margin-left:.25rem;content:" ";vertical-align:.125rem;border-top:.25rem solid;border-right:.25rem solid rgba(0,0,0,0);border-left:.25rem solid rgba(0,0,0,0)}.dropdown-menu,.dropdown-list{position:absolute;z-index:8;top:100%;left:0;display:none;min-width:8rem;padding:.25rem 0;border:1px solid #c9c9c9;border-radius:4px;margin-top:3px;background-color:#fcfcfc;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);float:left}.dropdown-list{width:100%;max-height:10.15625rem;overflow-y:scroll}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;color:#262626;font-size:.875rem;white-space:nowrap}.dropdown-item:hover{background-color:#ededed;color:#262626}.dropdown-item.selected{background-color:#1e88e5;color:#fff}.dropdown-separator{height:0;border-top:1px solid #c9c9c9;margin:.25rem 0}.files-list{padding:0;margin:0;margin-bottom:1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.files-item{display:flex;align-items:center}.files-item-cell{overflow:hidden;padding:.25rem;font-size:.875rem;white-space:nowrap}.file-name{max-width:80%;flex:0 0 80%;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-name .icon{margin-right:.5rem;color:#262626}.file-size{color:#7d7d7d}.file-actions{max-width:20%;flex:0 0 20%;font-size:1rem;text-align:right}.tabs{padding:2px 2px 0;border-bottom:1px solid #e3e3e3;margin-bottom:1rem;overflow-x:auto;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabs-tab{display:inline-block;padding:.5rem 1.25rem;color:#262626;cursor:pointer}.tabs-tab:hover{color:#262626}.tabs-tab.active{border-bottom:3px solid #1e88e5;font-weight:600}.caption+.tabs{margin-top:-0.5rem}.modal-backdrop{position:fixed;z-index:16;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.75)}.modal{position:fixed;z-index:20;top:0;right:0;bottom:0;left:0;display:none;align-items:center;outline:0}.modal.show{display:flex}.modal-content{max-width:26rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#fcfcfc}@media(min-width: 26rem){.modal-content{margin:3rem auto}}.modal-size-large{width:40rem;max-width:40rem}@media(max-width: 40rem){.modal-size-large{margin:3rem .5rem}}.modal-error{padding:1rem;margin:-2rem -2rem 1rem -2rem;background-color:#e74c3b;color:#fcfcfc}.modal-text{margin-bottom:2.5rem}.notification-container{position:fixed;z-index:12;top:20px;right:20px}.notification{position:relative;overflow:hidden;width:350px;padding:1.5rem 2.5rem;border-radius:4px;margin-bottom:.5rem;animation:fadeInRight 300ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#ededed;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);cursor:default;text-overflow:ellipsis;transition:top 300ms ease-in,opacity 150ms}.notification:hover{opacity:.95}.notification.fadeout{animation:fadeOutRight 300ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.notification .icon{position:absolute;top:50%;left:1rem;display:block;width:16px;height:16px;color:#fff;transform:translate(0, -50%)}.notification-info,.notification-success,.notification-warning,.notification-error{padding-left:3.25rem}.notification-info{background-color:#1e88e5;color:#fff}.notification-success{background-color:#25a35a;color:#fff}.notification-warning{background-color:#c27d0e;color:#fff}.notification-error{background-color:#b93d2f;color:#fff}.tooltip{position:absolute;z-index:20;display:none;min-width:2rem;padding:.25rem .5rem;border-radius:4px;background-color:rgba(38,38,38,.8);color:#fcfcfc;font-size:.75rem;pointer-events:none;text-align:center}.spinner{position:relative;display:inline-block;width:1.5rem;height:1.5rem;border-width:.2rem;border-style:solid;border-color:#1e88e5;border-radius:50%;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);margin-right:.75rem;animation:750ms spin infinite linear;text-align:center;transition:border 500ms;transition-timing-function:ease-out;vertical-align:-0.375rem}.spinner .icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.spinner-info{border-color:#1e88e5;animation:none;color:#1e88e5}.spinner-success{border-color:#2ecc70;animation:none;color:#2ecc70}.spinner-error{border-color:#e74c3b;animation:none;color:#e74c3b}.ct-label{color:rgba(0, 0, 0, 40%);fill:rgba(0, 0, 0, 40%);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left}.ct-grid{stroke:rgba(0, 0, 0, 20%);stroke-dasharray:2px;stroke-width:1px}.ct-grid-background{fill:none}.ct-point{stroke-linecap:round;stroke-width:10px}.ct-line{fill:none;stroke-width:4px}.ct-area{fill-opacity:.1;stroke:none}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#e6805e}.ct-series-i .ct-area,.ct-series-i .ct-slice-pie{fill:#e6805e}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-chart{position:relative;display:block;width:100%;height:14rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-label{color:rgba(38,38,38,.4);fill:rgba(38,38,38,.4);white-space:pre-wrap}.ct-grid{stroke:rgba(38,38,38,.2)}.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#1e88e5}.ct-series-a .ct-area{fill:#1e88e5}.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#f39c11}.ct-series-b .ct-area{fill:#f39c11}.ct-label.ct-horizontal,.ct-label.ct-horizontal.ct-end{display:inline-block;width:auto !important;min-width:3rem;color:#262626;text-align:center;transform:translateX(-50%)}.ct-legend{font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-legend-right{text-align:right}.ct-legend-label{white-space:nowrap}.ct-legend-label .icon{display:inline-block;margin:0 .25rem}.ct-legend-label.ct-series-a .icon{color:#1e88e5}.ct-legend-label.ct-series-b .icon{color:#f39c11}@keyframes fadeInRight{from{opacity:0;transform:translate3d(150%, 0, 0)}to{opacity:1;transform:none}}@keyframes fadeOutRight{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(150%, 0, 0)}}@keyframes shake{from,to{transform:translate3d(0, 0, 0)}10%,50%,90%{transform:translate3d(-10px, 0, 0)}30%,70%{transform:translate3d(10px, 0, 0)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.login-modal-container{max-width:24rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#fcfcfc;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}@media(min-width: 24rem){.login-modal-container{margin:3rem auto}}.login-modal-info,.login-modal-success,.login-modal-warning,.login-modal-error{position:relative;padding:1rem 2rem 1rem 3.5rem;margin:-2rem -2rem 1rem -2rem;border-top-left-radius:4px;border-top-right-radius:4px}.login-modal-info a,.login-modal-success a,.login-modal-warning a,.login-modal-error a{display:block;color:#fff;text-decoration:underline;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-modal-info .icon,.login-modal-success .icon,.login-modal-warning .icon,.login-modal-error .icon{position:absolute;top:50%;left:1rem;display:block;transform:translate(0, -50%)}.login-modal-info{background-color:#1e88e5;color:#fff}.login-modal-success{background-color:#25a35a;color:#fff}.login-modal-warning{background-color:#f39c11;color:#fff}.login-modal-error{background-color:#e74c3b;color:#fff}.title-bar{position:fixed;z-index:8;top:0;right:0;left:0;padding:1rem;padding-left:4rem;background-color:#ededed;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);color:#262626;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(min-width: 768px){.title-bar{left:16rem;padding-left:1.5rem}}.panel-title{float:left}.view-site{color:#262626;float:right}.view-site:hover{color:#1e88e5}.view-site i{margin-left:.5rem}.sidebar{position:fixed;z-index:10;top:0;bottom:0;left:0;width:16rem;padding:1rem 1.5rem;background:linear-gradient(to bottom, hsl(0deg, 0%, 99%) 0%, hsl(0deg, 0%, 97%) 100%);background-color:#fcfcfc;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar.show{display:block}.sidebar-wrapper{height:calc(100% - 9rem);overflow-y:auto}.toggle-navigation{position:fixed;z-index:12;top:.75rem;left:.75rem;border:none;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:1rem}.toggle-navigation:hover{background-color:rgba(0,0,0,0);box-shadow:none;color:#1e88e5}.toggle-navigation:focus{background-color:rgba(0,0,0,0);box-shadow:none}.logo{margin-bottom:2rem;color:#262626;font-size:1.184rem;font-weight:600;line-height:1.5rem;text-align:center}@media(min-width: 768px){.logo{text-align:left}}.logo img{height:1.5rem;margin-right:.25rem;vertical-align:-0.25rem}.logo a{padding-top:2px;color:#262626}.sidebar-navigation{padding:0;margin:0;margin-bottom:1rem;list-style-type:none}.sidebar-navigation:last-child{margin-bottom:0}.sidebar-navigation>li{position:relative;padding:.25rem 0;padding-left:1rem;margin:0;margin-bottom:.5rem}.sidebar-navigation>li a{color:#262626}.sidebar-navigation>li.active{font-weight:600}.sidebar-navigation>li.active::before{position:absolute;top:0;bottom:0;left:0;width:3px;background-color:#1e88e5;content:" "}.admin-user-card{display:flex;align-items:center;margin-bottom:2rem;cursor:pointer}.admin-user-avatar{width:48px}.admin-user-avatar img{width:48px;border-radius:50%;transition:box-shadow 300ms ease-out}.admin-user-card:hover .admin-user-avatar img{box-shadow:0 0 0 .5rem #e3e3e3}.admin-user-details{padding:0 .75rem}.admin-user-fullname{color:#262626}.admin-user-username{color:#7d7d7d;font-size:.875rem}.main{margin-top:4.5rem}@media(min-width: 768px){.main{margin:1.875rem;margin-top:4.5rem;margin-left:17.875rem}}.component{padding:1.5rem;border-radius:4px;margin-bottom:1rem;background-color:#fcfcfc;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}.component::before,.component::after{display:table;content:""}.component::after{clear:both}.caption{margin-bottom:1rem;font-size:.9375rem;font-weight:500;letter-spacing:1px;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.separator{height:.5rem}.separator-l{height:1rem}.section{margin-bottom:1rem}.section-header{padding:.25rem .5rem;border-bottom:1px solid #e3e3e3;margin-bottom:.5rem;font-size:1rem;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.icon{display:inline-block;width:1em;min-width:16px;height:1em;min-height:16px;vertical-align:-0.125rem}.section-toggle .icon{transition:transform 150ms}.section.collapsed .section-toggle .icon{transform:rotate(180deg)}.section.collapsed .section-content{display:none}.sort-handle{display:inline-block;margin-bottom:0;color:#7d7d7d;cursor:grab}.sortable-chosen,.sortable-ghost{background-color:#fcfcfc;cursor:grabbing}.sortable-chosen *{cursor:grabbing}.sortable-fallback{box-shadow:0 0 .75rem .25rem rgba(0,0,0,.15)}.pages-list{padding:0;margin:0;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pages-list .pages-list{display:none}.pages-list-headers{display:none;padding:.25rem 0;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.page-children-toggle{display:inline-block;min-width:auto;padding:0;border-color:rgba(0,0,0,0);margin:0 .25rem .125rem 0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer}.page-children-toggle:hover,.page-children-toggle:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}.page-children-toggle:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-children-toggle .icon{margin-right:0;transition:transform 150ms}.toggle-expanded .icon{transform:rotate(-180deg)}.pages-item{padding:.5rem 0;border-bottom:1px solid #e3e3e3}.pages-item:hover{background-color:#f7f7f7}.pages-item .sort-handle{display:none}.pages-list-top{border-top:1px solid #e3e3e3}.pages-item-cell,.pages-headers-cell{padding:.25rem .5rem;font-size:.875rem}.pages-item-cell div,.pages-headers-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-title{padding:2px;margin:-2px;font-size:1rem}.page-language{display:inline-block;min-width:1.125rem;padding:.125rem .25rem;border-radius:4px;background-color:#d2e7fa;color:#1e88e5;font-size:.875rem;font-weight:600;line-height:1;text-align:center}button .page-language,.button .page-language{font-size:.75rem}.page-route{color:#7d7d7d;font-size:.875rem}.page-route-changeable{padding:2px;margin:-2px}.page-status .icon{display:inline-block;margin-right:.375rem}.page-status-published .icon{color:#2ecc70}.page-status-not-published .icon{color:#e74c3b}.page-status-not-routable .icon{color:#f39c11}.page-date,.page-status,.page-actions{display:none}.page-actions .button-link{font-size:1rem}@media(min-width: 600px){.pages-item,.pages-list-headers{display:flex;align-items:center}.pages-item-cell,.pages-headers-cell{display:block}.page-details{max-width:55%;flex:0 0 55%}.page-date,.page-status,.page-actions{max-width:15%;flex:0 0 15%;text-align:center}}.pages-level-2 .page-details{padding-left:1.5rem}.pages-level-3 .page-details{padding-left:3rem}.pages-level-4 .page-details{padding-left:4.5rem}.pages-level-5 .page-details{padding-left:6rem}.page-info{padding:0 .25rem;margin-bottom:.75rem}.page-info>div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-slug-change{padding:0;border-color:rgba(0,0,0,0);margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#7d7d7d;cursor:pointer}.page-slug-change:hover,.page-slug-change:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:#7d7d7d}.page-slug-change:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-slug-change .icon{display:inline-block;margin-right:0;color:#262626;opacity:0;transition:opacity 150ms}.page-slug-change:hover .icon,.page-slug-change:focus .icon{opacity:1}.dragging [data-sortable=false] .pages-item:hover{background-color:#fce8e5;cursor:no-drop}.options-form .input-checkbox-label{margin-bottom:.5rem;font-size:1rem}.info-data{width:100%;margin-bottom:1rem;table-layout:fixed}.info-data td{overflow:hidden;padding:.5rem;vertical-align:top}.info-data-key{width:25%}.info-data-value{width:75%;font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem;word-break:break-word}.user-summary{display:flex;align-items:center}.user-summary-avatar{max-width:33.33333%;flex:0 0 33.33333%;padding:.75rem;text-align:center}.user-summary-avatar img{width:180px;border-radius:50%}.user-summary-data{padding:.75rem}.users-list{border-top:1px solid #e3e3e3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-list-headers{display:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-item{padding:.5rem 0;border-bottom:1px solid #e3e3e3}.users-item:hover{background-color:#f7f7f7}.users-item-cell,.users-headers-cell{padding:.125rem .25rem;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-username,.user-fullname{display:inline-block}.users-item .user-username{font-size:1rem}.user-last-access,.user-actions{display:none}.user-actions .button-link{font-size:1rem}@media(min-width: 600px){.users-item,.users-list-headers{display:flex;align-items:center}.users-list-headers{padding:.25rem 0;font-weight:600}.users-item-cell,.users-headers-cell{display:block;padding:.25rem .5rem}.user-username,.user-last-access{max-width:20%;flex:0 0 20%}.user-fullname,.user-email{max-width:25%;flex:0 0 25%}.user-last-access,.user-actions{text-align:center}.user-actions{max-width:10%;flex:0 0 10%}}.error-container{max-width:32rem;padding:1rem;margin:4rem auto;text-align:center}.error-container h1{color:#969696;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.error-container h2{margin-bottom:1rem;font-size:2rem}.error-code{display:block;font-size:8rem;font-weight:400}.error-status{display:block;font-size:1.75rem}.error-container .action{font-size:1.125rem}.error-container .logo{width:3.5rem;height:3.5rem;margin:2rem auto;background-position:center;background-repeat:no-repeat;background-size:cover} +html{font-size:100%;-webkit-text-size-adjust:100%}body{margin:0;background-color:#f7f7f7;color:#262626;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;line-height:1.5;-webkit-tap-highlight-color:rgba(38,38,38,0)}*{box-sizing:border-box}main{display:block}a{background-color:rgba(0,0,0,0);color:#1e88e5;outline-color:rgba(4,138,255,.375);text-decoration:none;transition:color 150ms}a:hover{color:#186db7}a:not([href]){cursor:default}img{max-width:100%;border-style:none}mark{background-color:gold}[hidden]{display:none}.focused{box-shadow:0 0 0 2px rgba(4,138,255,.375)}::selection{background-color:rgba(30,136,229,.25)}::placeholder{color:#7d7d7d}@media(min-width: 600px){.hide-from-xs{display:none}}@media(max-width: 599px){.show-from-xs{display:none}}@media(min-width: 768px){.hide-from-s{display:none}}@media(max-width: 767px){.show-from-s{display:none}}@media(min-width: 1024px){.hide-from-m{display:none}}@media(max-width: 1023px){.show-from-m{display:none}}@media(min-width: 1280px){.hide-from-l{display:none}}@media(max-width: 1279px){.show-from-l{display:none}}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1,h2,.h2,h3,.h3{letter-spacing:-0.027rem}h1,.h1{font-size:2.369rem}h2,.h2{font-size:2.104rem}h3,.h3{font-size:1.777rem}h4,.h4{font-size:1.579rem}h5,.h5{font-size:1.184rem}h6,.h6{font-size:1rem}strong{font-weight:600}p{margin-top:0;margin-bottom:.5rem;line-height:1.5}ul{padding:0;margin-top:0;margin-bottom:.5rem;margin-left:1.25rem;list-style-position:outside}.container,.container-full,.container-no-margin{padding:0 15px;margin:0 auto}.container{max-width:1280px}.container-no-margin{padding-right:0;padding-left:0}.row{display:flex;flex-wrap:wrap;margin:0 -15px}@media(max-width: 768px){.container-no-margin .row{margin:0}.container-no-margin div[class^=col-]{padding:0}}.col-xs,.col-xs-1-12,.col-xs-2-12,.col-xs-1-6,.col-xs-3-12,.col-xs-1-4,.col-xs-4-12,.col-xs-1-3,.col-xs-5-12,.col-xs-6-12,.col-xs-1-2,.col-xs-7-12,.col-xs-8-12,.col-xs-2-3,.col-xs-9-12,.col-xs-3-4,.col-xs-10-12,.col-xs-5-6,.col-xs-11-12,.col-xs-12-12,.col-xs-1-1,.col-s,.col-s-1-12,.col-s-2-12,.col-s-1-6,.col-s-3-12,.col-s-1-4,.col-s-4-12,.col-s-1-3,.col-s-5-12,.col-s-6-12,.col-s-1-2,.col-s-7-12,.col-s-8-12,.col-s-2-3,.col-s-9-12,.col-s-3-4,.col-s-10-12,.col-s-5-6,.col-s-11-12,.col-s-12-12,.col-s-1-1,.col-m,.col-m-1-12,.col-m-2-12,.col-m-1-6,.col-m-3-12,.col-m-1-4,.col-m-4-12,.col-m-1-3,.col-m-5-12,.col-m-6-12,.col-m-1-2,.col-m-7-12,.col-m-8-12,.col-m-2-3,.col-m-9-12,.col-m-3-4,.col-m-10-12,.col-m-5-6,.col-m-11-12,.col-m-12-12,.col-m-1-1,.col-l,.col-l-1-12,.col-l-2-12,.col-l-1-6,.col-l-3-12,.col-l-1-4,.col-l-4-12,.col-l-1-3,.col-l-5-12,.col-l-6-12,.col-l-1-2,.col-l-7-12,.col-l-8-12,.col-l-2-3,.col-l-9-12,.col-l-3-4,.col-l-10-12,.col-l-5-6,.col-l-11-12,.col-l-12-12,.col-l-1-1{width:100%;padding:0 15px}.col-xs{width:auto;max-width:100%;flex:1 0 auto}.col-xs-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-xs-2-12,.col-xs-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-xs-3-12,.col-xs-1-4{max-width:25%;flex:0 0 25%}.col-xs-4-12,.col-xs-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-xs-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-xs-6-12,.col-xs-1-2{max-width:50%;flex:0 0 50%}.col-xs-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-xs-8-12,.col-xs-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-xs-9-12,.col-xs-3-4{max-width:75%;flex:0 0 75%}.col-xs-10-12,.col-xs-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-xs-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-xs-12-12,.col-xs-1-1{max-width:100%;flex:0 0 100%}@media(min-width: 768px){.col-s{width:auto;max-width:100%;flex:1 0 auto}.col-s-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-s-2-12,.col-s-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-s-3-12,.col-s-1-4{max-width:25%;flex:0 0 25%}.col-s-4-12,.col-s-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-s-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-s-6-12,.col-s-1-2{max-width:50%;flex:0 0 50%}.col-s-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-s-8-12,.col-s-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-s-9-12,.col-s-3-4{max-width:75%;flex:0 0 75%}.col-s-10-12,.col-s-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-s-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-s-12-12,.col-s-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1024px){.col-m{width:auto;max-width:100%;flex:1 0 auto}.col-m-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-m-2-12,.col-m-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-m-3-12,.col-m-1-4{max-width:25%;flex:0 0 25%}.col-m-4-12,.col-m-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-m-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-m-6-12,.col-m-1-2{max-width:50%;flex:0 0 50%}.col-m-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-m-8-12,.col-m-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-m-9-12,.col-m-3-4{max-width:75%;flex:0 0 75%}.col-m-10-12,.col-m-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-m-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-m-12-12,.col-m-1-1{max-width:100%;flex:0 0 100%}}@media(min-width: 1280px){.col-l{width:auto;max-width:100%;flex:1 0 auto}.col-l-1-12{max-width:8.3333333333%;flex:0 0 8.3333333333%}.col-l-2-12,.col-l-1-6{max-width:16.6666666667%;flex:0 0 16.6666666667%}.col-l-3-12,.col-l-1-4{max-width:25%;flex:0 0 25%}.col-l-4-12,.col-l-1-3{max-width:33.3333333333%;flex:0 0 33.3333333333%}.col-l-5-12{max-width:41.6666666667%;flex:0 0 41.6666666667%}.col-l-6-12,.col-l-1-2{max-width:50%;flex:0 0 50%}.col-l-7-12{max-width:58.3333333333%;flex:0 0 58.3333333333%}.col-l-8-12,.col-l-2-3{max-width:66.6666666667%;flex:0 0 66.6666666667%}.col-l-9-12,.col-l-3-4{max-width:75%;flex:0 0 75%}.col-l-10-12,.col-l-5-6{max-width:83.3333333333%;flex:0 0 83.3333333333%}.col-l-11-12{max-width:91.6666666667%;flex:0 0 91.6666666667%}.col-l-12-12,.col-l-1-1{max-width:100%;flex:0 0 100%}}button,.button{display:inline-block;overflow:visible;min-width:2rem;padding:.375rem .5rem;border:1px solid #e3e3e3;border-radius:4px;margin-right:.25rem;margin-bottom:.5rem;background-color:#e3e3e3;box-shadow:0 1px 0 rgba(38,38,38,.25);color:#262626;cursor:default;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;font-weight:500;line-height:1.15;outline:none;transition:border-color 150ms,background-color 150ms,color 150ms;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}button:hover,button:focus,.button:hover,.button:focus{border-color:#c9c9c9;background-color:#c9c9c9;color:#262626}button:focus,.button:focus{box-shadow:0 0 0 2px rgba(38,38,38,.375)}button[disabled],button[disabled]:hover,button.disabled,button.disabled:hover,.button[disabled],.button[disabled]:hover,.button.disabled,.button.disabled:hover{border-color:#f7f7f7;background-color:#f7f7f7;box-shadow:none;color:#c9c9c9;pointer-events:none}button.active,.button.active{border-color:#c9c9c9;background-color:#c9c9c9}button .icon,.button .icon{display:inline-block;margin-right:.25rem}a.button{text-align:center}.button-right{margin-right:0;margin-left:.25rem;float:right}.button-accent{border:1px solid #1e88e5;background-color:#1e88e5;color:#fff}.button-accent:hover,.button-accent:focus{border-color:#186db7;background-color:#186db7;color:#fff}.button-accent:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-success{border:1px solid #2ecc70;background-color:#2ecc70;color:#fff}.button-success:hover,.button-success:focus{border-color:#25a35a;background-color:#25a35a;color:#fff}.button-success:focus{box-shadow:0 0 0 2px rgba(46,204,112,.375)}.button-warning{border:1px solid #f39c11;background-color:#f39c11;color:#fff}.button-warning:hover,.button-warning:focus{border-color:#c27d0e;background-color:#c27d0e;color:#fff}.button-warning:focus{box-shadow:0 0 0 2px rgba(243,156,17,.375)}.button-error{border:1px solid #e74c3b;background-color:#e74c3b;color:#fff}.button-error:hover,.button-error:focus{border-color:#b93d2f;background-color:#b93d2f;color:#fff}.button-error:focus{box-shadow:0 0 0 2px rgba(231,76,59,.375)}.button-link{border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:inherit}.button-link:hover,.button-link:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.button-link:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.button-link[disabled],.button-link[disabled]:hover,.button-link.disabled,.button-link.disabled:hover{background-color:rgba(0,0,0,0);cursor:default}.button-link .icon{margin-right:0}input,textarea,select{display:inline-block;width:100%;padding:.25rem .5rem;border:1px solid #c9c9c9;border-radius:4px;margin:0;margin-bottom:.5rem;background-color:#fcfcfc;color:#262626;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:.875rem;line-height:1.5;-webkit-appearance:none;-moz-appearance:none}input:focus,textarea:focus,select:focus{border-color:#1e88e5;outline:none;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[disabled],textarea[disabled],select[disabled]{background-color:#ededed;color:#7d7d7d}input[readonly],textarea[readonly],select[readonly]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}input[type=checkbox],textarea[type=checkbox],select[type=checkbox],input[type=radio],textarea[type=radio],select[type=radio]{width:auto;height:inherit;padding:0;margin-bottom:0;vertical-align:text-top}input[type=checkbox]:focus,textarea[type=checkbox]:focus,select[type=checkbox]:focus,input[type=radio]:focus,textarea[type=radio]:focus,select[type=radio]:focus{box-shadow:none}input[type=file],textarea[type=file],select[type=file]{padding:0;border:none;border-radius:0}input[type=file]::-webkit-file-upload-button,textarea[type=file]::-webkit-file-upload-button,select[type=file]::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}input[type=number]::-webkit-inner-spin-button,textarea[type=number]::-webkit-inner-spin-button,select[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button,textarea[type=number]::-webkit-outer-spin-button,select[type=number]::-webkit-outer-spin-button{height:auto}input[type=search],textarea[type=search],select[type=search]{max-width:28rem;padding-left:2rem;background:#fcfcfc url('data:image/svg+xml;utf8,') no-repeat left .5rem top .375rem;background-size:1rem 1rem}input[type=search]::-webkit-search-cancel-button,textarea[type=search]::-webkit-search-cancel-button,select[type=search]::-webkit-search-cancel-button{display:none}select{padding:.25rem 1.5rem .25rem .5rem;background:#fcfcfc url("data:image/svg+xml;utf8,") no-repeat right .75rem center;background-color:#fcfcfc;background-size:8px 6px}select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #262626}textarea{overflow:auto;height:5.75rem;min-height:3.125rem;max-height:16.25rem;resize:vertical}.input-large{font-size:1.125rem}.input-accent{border-color:#1e88e5}.input-success{border-color:#2ecc70}.input-warning{border-color:#f39c11}.input-error{border-color:#e74c3b}.input-invalid{animation:shake 500ms;animation-fill-mode:both}.input-wrap{position:relative;margin-bottom:.5rem}.input-wrap input,.input-wrap select,.input-wrap textarea{padding-right:1.625rem;margin-bottom:0}.input-reset{position:absolute;top:50%;right:.5rem;color:#262626;transform:translateY(-50%);transition:color 150ms}.input-reset:hover{color:#1e88e5}label{display:inline-block;margin-bottom:.25rem;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none}.label-suggestion{color:#7d7d7d;font-size:.75rem;line-height:1}.label-required::after{display:inline-block;margin-left:.125rem;color:#e74c3b;content:"*"}.input-array{margin-bottom:.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-array .sort-handle .icon{vertical-align:middle}.input-array-row{display:flex;padding:.25rem .5rem;margin:0 -0.5rem;white-space:nowrap}.input-array-key,.input-array-value{display:inline-block;margin-bottom:0}.input-array-key{width:30%;margin-right:.25rem}.input-array-value{margin-right:.25rem}.input-array-add,.input-array-remove{min-width:1rem;padding:0;margin-right:.25rem}.input-checkbox{position:absolute;opacity:0}.input-checkbox+.input-checkbox-text::before{position:relative;top:.125rem;display:inline-block;width:1rem;height:1rem;box-sizing:border-box;border:1px solid #c9c9c9;border-radius:4px;margin-right:.5rem;content:" ";transition:border-color 150ms,background-color 150ms}.input-checkbox+.input-checkbox-text:hover::before,.input-checkbox[disabled]+.input-checkbox-text::before{background-color:#f7f7f7}.input-checkbox:checked+.input-checkbox-text::before{border-color:#1e88e5;background-color:#1e88e5}.input-checkbox:focus+.input-checkbox-text::before{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-checkbox:checked+.input-checkbox-text:hover::before{border-color:#186db7;background-color:#186db7}.input-checkbox:checked+.input-checkbox-text::after{position:absolute;top:.125rem;left:0;display:block;width:1rem;height:1rem;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 11'%3E%3Cpath fill='%23fff' d='M4.727 7.036L8.263 3.5l.707.707L4.727 8.45 2 5.722l.707-.707z'/%3E%3C/svg%3E");content:" "}.input-checkbox:checked[disabled]+.input-checkbox-text::before{border-color:#c9c9c9;background-color:#c9c9c9}.input-checkbox-label{position:relative;line-height:1.5}.input-date{cursor:default}.calendar{position:absolute;z-index:8;top:100%;display:none;width:18rem;padding:.5rem;border:1px solid #c9c9c9;border-radius:4px;margin:3px 1rem 1rem;background-color:#fcfcfc;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);color:#262626}.calendar-header{margin-bottom:.5rem}.calendar-buttons{margin:0 -0.5rem;font-size:0}.calendar button{width:33.3%;padding:0 .5rem;border:0;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#262626;cursor:pointer;font-size:.875rem;outline:none}.calendar button:hover{color:#1e88e5}.calendar button:focus{box-shadow:none}.calendar-buttons .currentMonth{font-weight:600}.calendar-table{width:100%}.calendar-table td{width:14%;cursor:default;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.calendar-time{width:50%;margin:0 auto;text-align:center}.calendar-header-day{font-size:.875rem}.calendar-day{border-radius:4px;transition:background-color 150ms,color 150ms}.calendar-day:hover{background-color:#186db7;color:#fff}.calendar-day.selected{background-color:#1e88e5;color:#fff}.calendar-prev-month-day,.calendar-next-month-day{color:#c9c9c9}.calendar-separator{height:0;border-top:1px solid #c9c9c9;margin:.5rem -0.5rem}.input-duration{box-sizing:border-box;padding:.25rem .25rem;border:1px solid #c9c9c9;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-duration.focused{border-color:#1e88e5}.input-duration>span{text-align:center}.input-duration input,.input-duration select,.input-duration textarea{width:2rem;padding:0;border:0;margin:0;-moz-appearance:textfield;background-color:#ededed;text-align:center;vertical-align:baseline}.input-duration input::-webkit-inner-spin-button,.input-duration select::-webkit-inner-spin-button,.input-duration textarea::-webkit-inner-spin-button,.input-duration input::-webkit-outer-spin-button,.input-duration select::-webkit-outer-spin-button,.input-duration textarea::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none}.input-duration input:focus,.input-duration select:focus,.input-duration textarea:focus{box-shadow:none}.input-duration label{padding:0 .5rem;margin:0}.input-duration-hidden{display:none}.CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0 !important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20, 255, 20, 0.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:blue}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255, 150, 0, 0.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll !important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none !important;border:none !important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255, 255, 0, 0.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.editor-toolbar{padding:.125rem .25rem;border:1px solid #c9c9c9;background-color:#f7f7f7;border-top-left-radius:4px;border-top-right-radius:4px;font-size:0}.toolbar-button{padding:.5rem;border:0;margin-bottom:0;background-color:#f7f7f7;box-shadow:none}.toolbar-button:hover,.toolbar-button:focus{background-color:rgba(0,0,0,0);color:#1e88e5}.toolbar-button:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.toolbar-button .icon{margin-right:0}.editor-textarea{min-height:24rem;padding:.75rem 1rem;border:1px solid #c9c9c9;border-radius:4px;margin-bottom:.5rem;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.editor-textarea:focus{box-shadow:none}.CodeMirror{min-height:24rem;padding:0 1rem;border:1px solid #c9c9c9;border-radius:4px;margin-bottom:.5rem;background:#fcfcfc;color:#262626;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;font-size:1rem}.CodeMirror-lines{padding:.75rem 0}.CodeMirror-lines pre{padding:0 !important}.editor-toolbar+.editor-textarea,.editor-textarea+.CodeMirror{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.editor-wrap{border-radius:4px}.editor-wrap.focused .editor-toolbar,.editor-wrap.focused .CodeMirror{border-color:#1e88e5}.CodeMirror-cursor{border-left-color:#262626}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler{background-color:inherit}.CodeMirror-selected{background:rgba(0,0,0,0)}.CodeMirror-focused .CodeMirror-selected{background:rgba(30,136,229,.25)}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(30,136,229,.25)}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(30,136,229,.25)}.cm-formatting-code-block,.cm-formatting-list{display:inline !important}.cm-formatting,.cm-image-alt-text,.cm-url{display:none}.CodeMirror-activeline .cm-formatting,.CodeMirror-activeline .cm-image-alt-text,.CodeMirror-activeline .cm-url{display:inline}.cm-s-formwork .cm-formatting{color:#7d7d7d}.cm-s-formwork .cm-header-1{font-size:1.75rem}.cm-s-formwork .cm-header-2{font-size:1.5rem}.cm-s-formwork .cm-header-3{font-size:1.25rem}.cm-s-formwork .cm-comment{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.cm-s-formwork .cm-comment.cm-header-1{font-size:1.53125rem}.cm-s-formwork .cm-comment.cm-header-2{font-size:1.3125rem}.cm-s-formwork .cm-comment.cm-header-3{font-size:1.09375rem}.cm-s-formwork .cm-quote{color:#7d7d7d}.cm-s-formwork .cm-formatting-quote+.cm-quote{padding-left:1.25rem;background:#fcfcfc url('data:image/svg+xml;utf8,') no-repeat left center;background-size:1rem 1rem}.cm-s-formwork .CodeMirror-activeline .cm-formatting-quote+.cm-quote{padding-left:0;background:rgba(0,0,0,0)}.cm-s-formwork .cm-link{color:#1e88e5;text-decoration:underline}.cm-s-formwork .cm-url.cm-formatting,.cm-s-formwork .cm-image-alt-text.cm-formatting,.cm-s-formwork .cm-image-marker{color:#1e88e5}.cm-s-formwork .cm-url,.cm-s-formwork .cm-image-alt-text{color:#7d7d7d;text-decoration:none}.cm-s-formwork .cm-image~.cm-url:not(.cm-formatting){display:inline;padding:0 .25rem 0 1.5rem;border-radius:4px;background:#fcfcfc url('data:image/svg+xml;utf8,') no-repeat left .25rem center;background-color:#ededed;background-size:1rem 1rem;color:#262626}.cm-s-formwork .CodeMirror-activeline .cm-image~.cm-url:not(.cm-formatting){padding:0;background:rgba(0,0,0,0);color:#7d7d7d}.cm-s-formwork .cm-hr{color:#7d7d7d}.cm-s-formwork .cm-tag{color:#25a35a}.cm-s-formwork .cm-bracket{color:#262626}.cm-s-formwork .cm-attribute{color:#8c68cd}.cm-s-formwork .cm-bracket,.cm-s-formwork .cm-m-xml{font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem}.input-file{display:none}.input-file-label{display:block;padding:.5rem;margin-bottom:1rem;background-color:#f7f7f7;clear:both}.input-file-label>span{display:block;padding:1.5rem 1rem;border:2px dashed #c9c9c9;color:#262626;text-align:center;transition:background-color 300ms}.input-file-label.drag>span{background-color:#fcfcfc}.input-image{cursor:default}.image-picker-thumbnails{overflow:auto;height:15rem;padding:.5rem;margin-bottom:1rem}.image-picker-thumbnail{position:relative;display:inline-block;width:8rem;height:8rem;box-sizing:border-box;padding:.5rem;border:1px solid #c9c9c9;margin:.25rem;background-origin:content-box;background-position:center;background-repeat:no-repeat;background-size:contain}.image-picker-thumbnail::after{position:absolute;right:.75rem;bottom:.5rem;left:.75rem;display:block;padding:0 .375rem;border-radius:4px;background-color:rgba(227,227,227,.9);content:attr(data-filename);font-size:.75rem;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-picker-thumbnail.selected{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.image-picker-empty-state{margin:3rem auto 4rem;text-align:center}.image-picker-empty-state-icon{color:#969696;font-size:2rem}input[type=range],select[type=range],textarea[type=range]{width:15rem;padding:.875rem 0;border:0;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-webkit-slider-runnable-track,select[type=range]::-webkit-slider-runnable-track,textarea[type=range]::-webkit-slider-runnable-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#e3e3e3;cursor:default}input[type=range]::-webkit-slider-thumb,select[type=range]::-webkit-slider-thumb,textarea[type=range]::-webkit-slider-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:-0.375rem;background-color:#1e88e5;transition:background-color 150ms;-webkit-appearance:none;-moz-appearance:none}input[type=range]::-moz-range-track,select[type=range]::-moz-range-track,textarea[type=range]::-moz-range-track{width:100%;height:.25rem;border:0;border-radius:.125rem;background-color:#e3e3e3}input[type=range]::-moz-range-thumb,select[type=range]::-moz-range-thumb,textarea[type=range]::-moz-range-thumb{width:1rem;height:1rem;border:0;border-radius:50%;background-color:#1e88e5;cursor:default}input[type=range]::-ms-track,select[type=range]::-ms-track,textarea[type=range]::-ms-track{width:100%;height:.25rem;border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:rgba(0,0,0,0);cursor:default}input[type=range]::-ms-fill-lower,select[type=range]::-ms-fill-lower,textarea[type=range]::-ms-fill-lower,input[type=range]::-ms-fill-upper,select[type=range]::-ms-fill-upper,textarea[type=range]::-ms-fill-upper{border:0;border-radius:.125rem;background:#e3e3e3;box-shadow:none}input[type=range]::-ms-thumb,select[type=range]::-ms-thumb,textarea[type=range]::-ms-thumb{width:1rem;height:1rem;border:0;border-radius:50%;margin-top:0;background-color:#1e88e5;cursor:default}input[type=range]:focus,select[type=range]:focus,textarea[type=range]:focus{box-shadow:none}input[type=range]:hover::-webkit-slider-thumb,select[type=range]:hover::-webkit-slider-thumb,textarea[type=range]:hover::-webkit-slider-thumb{background-color:#186db7}input[type=range][disabled],select[type=range][disabled],textarea[type=range][disabled]{background-color:rgba(0,0,0,0)}input[type=range][disabled]::-webkit-slider-thumb,select[type=range][disabled]::-webkit-slider-thumb,textarea[type=range][disabled]::-webkit-slider-thumb,input[type=range][disabled]::-moz-range-thumb,select[type=range][disabled]::-moz-range-thumb,textarea[type=range][disabled]::-moz-range-thumb,input[type=range][disabled]::-ms-thumb,select[type=range][disabled]::-ms-thumb,textarea[type=range][disabled]::-ms-thumb{background-color:#7d7d7d}input[type=range]:focus::-webkit-slider-thumb,select[type=range]:focus::-webkit-slider-thumb,textarea[type=range]:focus::-webkit-slider-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-moz-range-thumb,select[type=range]:focus::-moz-range-thumb,textarea[type=range]:focus::-moz-range-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}input[type=range]:focus::-ms-thumb,select[type=range]:focus::-ms-thumb,textarea[type=range]:focus::-ms-thumb{background-color:#186db7;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-range-value{padding:0 .5rem;font-size:.875rem;vertical-align:.1875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag{position:relative;display:block;box-sizing:border-box;padding:.25rem .25rem;padding-bottom:0;border:1px solid #c9c9c9;border-radius:4px;margin-top:0;margin-bottom:.5rem;font-size:.875rem;line-height:1.5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.focused{border-color:#1e88e5}.tag-inner-input{display:inline-block;width:auto;max-width:100%;box-sizing:border-box;padding:0 .25rem;border:0;border-radius:0;margin-bottom:.25rem;font-family:inherit;font-size:.875rem;line-height:inherit;outline:none}.tag-inner-input:focus{box-shadow:none}.input-tag-hidden{display:none}.input-tag .tag{display:inline-block;box-sizing:border-box;padding:0 .375rem;border-radius:4px;margin-bottom:.25rem;background-color:#ededed;cursor:default;font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.input-tag.disabled,.input-tag.disabled .tag-inner-input{background-color:#f7f7f7}.input-tag.disabled .tag{background-color:#e3e3e3}.tag-remove{display:inline-block;padding:0 .125rem;margin-left:.25rem;color:#262626;font-style:normal;transition:color 150ms}.tag-remove:hover{color:#1e88e5}.tag-remove::after{content:"×";font-weight:600}.input-togglegroup{display:inline-block;border:1px solid #c9c9c9;border-radius:4px;margin:0;margin-bottom:.5rem;font-size:0}.input-togglegroup:focus-within{border-color:#1e88e5;box-shadow:0 0 0 2px rgba(4,138,255,.375)}.input-togglegroup label{margin:0}.input-togglegroup input[type=radio],.input-togglegroup select[type=radio],.input-togglegroup textarea[type=radio]{position:absolute;opacity:0}.input-togglegroup input[type=radio]+span,.input-togglegroup select[type=radio]+span,.input-togglegroup textarea[type=radio]+span{display:inline-block;padding:.25rem .75rem;border-radius:3px;font-size:.875rem;transition:background-color 150ms,color 150ms}.input-togglegroup input[type=radio]:hover+span,.input-togglegroup select[type=radio]:hover+span,.input-togglegroup textarea[type=radio]:hover+span{background-color:#f7f7f7}.input-togglegroup input[type=radio]:checked+span,.input-togglegroup select[type=radio]:checked+span,.input-togglegroup textarea[type=radio]:checked+span{background-color:#1e88e5;color:#fff}.input-togglegroup input[type=radio]:focus+span,.input-togglegroup select[type=radio]:focus+span,.input-togglegroup textarea[type=radio]:focus+span{background-color:#186db7}.input-togglegroup[disabled] input[type=radio]+span,.input-togglegroup[disabled] select[type=radio]+span,.input-togglegroup[disabled] textarea[type=radio]+span{background-color:rgba(0,0,0,0);color:#262626}.input-togglegroup[disabled] input[type=radio]:checked+span,.input-togglegroup[disabled] select[type=radio]:checked+span,.input-togglegroup[disabled] textarea[type=radio]:checked+span{background-color:#e3e3e3}.input-togglegroup input[type=radio]:checked:hover+span,.input-togglegroup select[type=radio]:checked:hover+span,.input-togglegroup textarea[type=radio]:checked:hover+span{background-color:#186db7}.dropdown{position:relative;display:inline-block;margin-bottom:.5rem}.dropdown-button{margin-bottom:0}.dropdown-button::after{display:inline-block;height:0;margin-left:.25rem;content:" ";vertical-align:.125rem;border-top:.25rem solid;border-right:.25rem solid rgba(0,0,0,0);border-left:.25rem solid rgba(0,0,0,0)}.dropdown-menu,.dropdown-list{position:absolute;z-index:8;top:100%;left:0;display:none;min-width:8rem;padding:.25rem 0;border:1px solid #c9c9c9;border-radius:4px;margin-top:3px;background-color:#fcfcfc;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);float:left}.dropdown-list{width:100%;max-height:10.15625rem;overflow-y:scroll}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;color:#262626;font-size:.875rem;white-space:nowrap}.dropdown-item:hover{background-color:#ededed;color:#262626}.dropdown-item.selected{background-color:#1e88e5;color:#fff}.dropdown-separator{height:0;border-top:1px solid #c9c9c9;margin:.25rem 0}.files-list{padding:0;margin:0;margin-bottom:1rem;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.files-item{display:flex;align-items:center}.files-item-cell{overflow:hidden;padding:.25rem;font-size:.875rem;white-space:nowrap}.file-name{max-width:80%;flex:0 0 80%;font-size:.9375rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-name .icon{margin-right:.5rem;color:#262626}.file-size{color:#7d7d7d}.file-actions{max-width:20%;flex:0 0 20%;font-size:1rem;text-align:right}.tabs{padding:2px 2px 0;border-bottom:1px solid #e3e3e3;margin-bottom:1rem;overflow-x:auto;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabs-tab{display:inline-block;padding:.5rem 1.25rem;color:#262626;cursor:pointer}.tabs-tab:hover{color:#262626}.tabs-tab.active{border-bottom:3px solid #1e88e5;font-weight:600}.caption+.tabs{margin-top:-0.5rem}.modal-backdrop{position:fixed;z-index:16;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.75)}.modal{position:fixed;z-index:20;top:0;right:0;bottom:0;left:0;display:none;align-items:center;outline:0}.modal.show{display:flex}.modal-content{max-width:26rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#fcfcfc}@media(min-width: 26rem){.modal-content{margin:3rem auto}}.modal-size-large{width:40rem;max-width:40rem}@media(max-width: 40rem){.modal-size-large{margin:3rem .5rem}}.modal-error{padding:1rem;margin:-2rem -2rem 1rem -2rem;background-color:#e74c3b;color:#fcfcfc}.modal-text{margin-bottom:2.5rem}.notification-container{position:fixed;z-index:12;top:20px;right:20px}.notification{position:relative;overflow:hidden;width:350px;padding:1.5rem 2.5rem;border-radius:4px;margin-bottom:.5rem;animation:fadeInRight 300ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#ededed;box-shadow:1px 1px .75rem 0 rgba(0,0,0,.25);cursor:default;text-overflow:ellipsis;transition:top 300ms ease-in,opacity 150ms}.notification:hover{opacity:.95}.notification.fadeout{animation:fadeOutRight 300ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}.notification .icon{position:absolute;top:50%;left:1rem;display:block;width:16px;height:16px;color:#fff;transform:translate(0, -50%)}.notification-info,.notification-success,.notification-warning,.notification-error{padding-left:3.25rem}.notification-info{background-color:#1e88e5;color:#fff}.notification-success{background-color:#25a35a;color:#fff}.notification-warning{background-color:#c27d0e;color:#fff}.notification-error{background-color:#b93d2f;color:#fff}.tooltip{position:absolute;z-index:20;display:none;min-width:2rem;padding:.25rem .5rem;border-radius:4px;background-color:rgba(38,38,38,.8);color:#fcfcfc;font-size:.75rem;pointer-events:none;text-align:center}.spinner{position:relative;display:inline-block;width:1.5rem;height:1.5rem;border-width:.2rem;border-style:solid;border-color:#1e88e5;border-radius:50%;border-bottom-color:rgba(0,0,0,0);border-left-color:rgba(0,0,0,0);margin-right:.75rem;animation:750ms spin infinite linear;text-align:center;transition:border 500ms;transition-timing-function:ease-out;vertical-align:-0.375rem}.spinner .icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.spinner-info{border-color:#1e88e5;animation:none;color:#1e88e5}.spinner-success{border-color:#2ecc70;animation:none;color:#2ecc70}.spinner-error{border-color:#e74c3b;animation:none;color:#e74c3b}.ct-label{color:rgba(0, 0, 0, 40%);fill:rgba(0, 0, 0, 40%);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left}.ct-grid{stroke:rgba(0, 0, 0, 20%);stroke-dasharray:2px;stroke-width:1px}.ct-grid-background{fill:none}.ct-point{stroke-linecap:round;stroke-width:10px}.ct-line{fill:none;stroke-width:4px}.ct-area{fill-opacity:.1;stroke:none}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#e6805e}.ct-series-i .ct-area,.ct-series-i .ct-slice-pie{fill:#e6805e}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-chart{position:relative;display:block;width:100%;height:14rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-label{color:rgba(38,38,38,.4);fill:rgba(38,38,38,.4);white-space:pre-wrap}.ct-grid{stroke:rgba(38,38,38,.2)}.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#1e88e5}.ct-series-a .ct-area{fill:#1e88e5}.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#f39c11}.ct-series-b .ct-area{fill:#f39c11}.ct-label.ct-horizontal,.ct-label.ct-horizontal.ct-end{display:inline-block;width:auto !important;min-width:3rem;color:#262626;text-align:center;transform:translateX(-50%)}.ct-legend{font-size:.875rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-legend-right{text-align:right}.ct-legend-label{white-space:nowrap}.ct-legend-label .icon{display:inline-block;margin:0 .25rem}.ct-legend-label.ct-series-a .icon{color:#1e88e5}.ct-legend-label.ct-series-b .icon{color:#f39c11}@keyframes fadeInRight{from{opacity:0;transform:translate3d(150%, 0, 0)}to{opacity:1;transform:none}}@keyframes fadeOutRight{from{opacity:1;transform:none}to{opacity:0;transform:translate3d(150%, 0, 0)}}@keyframes shake{from,to{transform:translate3d(0, 0, 0)}10%,50%,90%{transform:translate3d(-10px, 0, 0)}30%,70%{transform:translate3d(10px, 0, 0)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.login-modal-container{max-width:24rem;padding:2rem;border-radius:4px;margin:3rem .5rem;background-color:#fcfcfc;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}@media(min-width: 24rem){.login-modal-container{margin:3rem auto}}.login-modal-info,.login-modal-success,.login-modal-warning,.login-modal-error{position:relative;padding:1rem 2rem 1rem 3.5rem;margin:-2rem -2rem 1rem -2rem;border-top-left-radius:4px;border-top-right-radius:4px}.login-modal-info a,.login-modal-success a,.login-modal-warning a,.login-modal-error a{display:block;color:#fff;text-decoration:underline;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-modal-info .icon,.login-modal-success .icon,.login-modal-warning .icon,.login-modal-error .icon{position:absolute;top:50%;left:1rem;display:block;transform:translate(0, -50%)}.login-modal-info{background-color:#1e88e5;color:#fff}.login-modal-success{background-color:#25a35a;color:#fff}.login-modal-warning{background-color:#f39c11;color:#fff}.login-modal-error{background-color:#e74c3b;color:#fff}.title-bar{position:fixed;z-index:8;top:0;right:0;left:0;padding:1rem;padding-left:4rem;background-color:#ededed;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);color:#262626;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(min-width: 768px){.title-bar{left:16rem;padding-left:1.5rem}}.panel-title{float:left}.view-site{color:#262626;float:right}.view-site:hover{color:#1e88e5}.view-site i{margin-left:.5rem}.sidebar{position:fixed;z-index:10;top:0;bottom:0;left:0;width:16rem;padding:1rem 1.5rem;background:linear-gradient(to bottom, hsl(0deg, 0%, 99%) 0%, hsl(0deg, 0%, 97%) 100%);background-color:#fcfcfc;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.sidebar.show{display:block}.sidebar-wrapper{height:calc(100% - 9rem);overflow-y:auto}.toggle-navigation{position:fixed;z-index:12;top:.75rem;left:.75rem;border:none;margin:0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer;font-size:1rem}.toggle-navigation:hover{background-color:rgba(0,0,0,0);box-shadow:none;color:#1e88e5}.toggle-navigation:focus{background-color:rgba(0,0,0,0);box-shadow:none}.logo{margin-bottom:2rem;color:#262626;font-size:1.184rem;font-weight:600;line-height:1.5rem;text-align:center}@media(min-width: 768px){.logo{text-align:left}}.logo img{height:1.5rem;margin-right:.25rem;vertical-align:-0.25rem}.logo a{padding-top:2px;color:#262626}.sidebar-navigation{padding:0;margin:0;margin-bottom:1rem;list-style-type:none}.sidebar-navigation:last-child{margin-bottom:0}.sidebar-navigation>li{position:relative;padding:.25rem 0;padding-left:1rem;margin:0;margin-bottom:.5rem}.sidebar-navigation>li a{color:#262626}.sidebar-navigation>li.active{font-weight:600}.sidebar-navigation>li.active::before{position:absolute;top:0;bottom:0;left:0;width:3px;background-color:#1e88e5;content:" "}.panel-user-card{display:flex;align-items:center;margin-bottom:2rem;cursor:pointer}.panel-user-avatar{width:48px}.panel-user-avatar img{width:48px;border-radius:50%;transition:box-shadow 300ms ease-out}.panel-user-card:hover .panel-user-avatar img{box-shadow:0 0 0 .5rem #e3e3e3}.panel-user-details{padding:0 .75rem}.panel-user-fullname{color:#262626}.panel-user-username{color:#7d7d7d;font-size:.875rem}.main{margin-top:4.5rem}@media(min-width: 768px){.main{margin:1.875rem;margin-top:4.5rem;margin-left:17.875rem}}.component{padding:1.5rem;border-radius:4px;margin-bottom:1rem;background-color:#fcfcfc;box-shadow:0 0 .75rem -0.125rem rgba(0,0,0,.05)}.component::before,.component::after{display:table;content:""}.component::after{clear:both}.caption{margin-bottom:1rem;font-size:.9375rem;font-weight:500;letter-spacing:1px;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.separator{height:.5rem}.separator-l{height:1rem}.section{margin-bottom:1rem}.section-header{padding:.25rem .5rem;border-bottom:1px solid #e3e3e3;margin-bottom:.5rem;font-size:1rem;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.icon{display:inline-block;width:1em;min-width:16px;height:1em;min-height:16px;vertical-align:-0.125rem}.section-toggle .icon{transition:transform 150ms}.section.collapsed .section-toggle .icon{transform:rotate(180deg)}.section.collapsed .section-content{display:none}.sort-handle{display:inline-block;margin-bottom:0;color:#7d7d7d;cursor:grab}.sortable-chosen,.sortable-ghost{background-color:#fcfcfc;cursor:grabbing}.sortable-chosen *{cursor:grabbing}.sortable-fallback{box-shadow:0 0 .75rem .25rem rgba(0,0,0,.15)}.pages-list{padding:0;margin:0;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pages-list .pages-list{display:none}.pages-list-headers{display:none;padding:.25rem 0;font-weight:600;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.page-children-toggle{display:inline-block;min-width:auto;padding:0;border-color:rgba(0,0,0,0);margin:0 .25rem .125rem 0;background-color:rgba(0,0,0,0);box-shadow:none;cursor:pointer}.page-children-toggle:hover,.page-children-toggle:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0)}.page-children-toggle:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-children-toggle .icon{margin-right:0;transition:transform 150ms}.toggle-expanded .icon{transform:rotate(-180deg)}.pages-item{padding:.5rem 0;border-bottom:1px solid #e3e3e3}.pages-item:hover{background-color:#f7f7f7}.pages-item .sort-handle{display:none}.pages-list-top{border-top:1px solid #e3e3e3}.pages-item-cell,.pages-headers-cell{padding:.25rem .5rem;font-size:.875rem}.pages-item-cell div,.pages-headers-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-title{padding:2px;margin:-2px;font-size:1rem}.page-language{display:inline-block;min-width:1.125rem;padding:.125rem .25rem;border-radius:4px;background-color:#d2e7fa;color:#1e88e5;font-size:.875rem;font-weight:600;line-height:1;text-align:center}button .page-language,.button .page-language{font-size:.75rem}.page-route{color:#7d7d7d;font-size:.875rem}.page-route-changeable{padding:2px;margin:-2px}.page-status .icon{display:inline-block;margin-right:.375rem}.page-status-published .icon{color:#2ecc70}.page-status-not-published .icon{color:#e74c3b}.page-status-not-routable .icon{color:#f39c11}.page-date,.page-status,.page-actions{display:none}.page-actions .button-link{font-size:1rem}@media(min-width: 600px){.pages-item,.pages-list-headers{display:flex;align-items:center}.pages-item-cell,.pages-headers-cell{display:block}.page-details{max-width:55%;flex:0 0 55%}.page-date,.page-status,.page-actions{max-width:15%;flex:0 0 15%;text-align:center}}.pages-level-2 .page-details{padding-left:1.5rem}.pages-level-3 .page-details{padding-left:3rem}.pages-level-4 .page-details{padding-left:4.5rem}.pages-level-5 .page-details{padding-left:6rem}.page-info{padding:0 .25rem;margin-bottom:.75rem}.page-info>div{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-slug-change{padding:0;border-color:rgba(0,0,0,0);margin:0;background-color:rgba(0,0,0,0);box-shadow:none;color:#7d7d7d;cursor:pointer}.page-slug-change:hover,.page-slug-change:focus{border-color:rgba(0,0,0,0);background-color:rgba(0,0,0,0);color:#7d7d7d}.page-slug-change:focus{box-shadow:0 0 0 2px rgba(4,138,255,.375)}.page-slug-change .icon{display:inline-block;margin-right:0;color:#262626;opacity:0;transition:opacity 150ms}.page-slug-change:hover .icon,.page-slug-change:focus .icon{opacity:1}.dragging [data-sortable=false] .pages-item:hover{background-color:#fce8e5;cursor:no-drop}.options-form .input-checkbox-label{margin-bottom:.5rem;font-size:1rem}.info-data{width:100%;margin-bottom:1rem;table-layout:fixed}.info-data td{overflow:hidden;padding:.5rem;vertical-align:top}.info-data-key{width:25%}.info-data-value{width:75%;font-family:"SFMono-Regular","SF Mono","Cascadia Mono","Liberation Mono",Menlo,Consolas,monospace;font-size:.875rem;word-break:break-word}.user-summary{display:flex;align-items:center}.user-summary-avatar{max-width:33.33333%;flex:0 0 33.33333%;padding:.75rem;text-align:center}.user-summary-avatar img{width:180px;border-radius:50%}.user-summary-data{padding:.75rem}.users-list{border-top:1px solid #e3e3e3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-list-headers{display:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.users-item{padding:.5rem 0;border-bottom:1px solid #e3e3e3}.users-item:hover{background-color:#f7f7f7}.users-item-cell,.users-headers-cell{padding:.125rem .25rem;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-username,.user-fullname{display:inline-block}.users-item .user-username{font-size:1rem}.user-last-access,.user-actions{display:none}.user-actions .button-link{font-size:1rem}@media(min-width: 600px){.users-item,.users-list-headers{display:flex;align-items:center}.users-list-headers{padding:.25rem 0;font-weight:600}.users-item-cell,.users-headers-cell{display:block;padding:.25rem .5rem}.user-username,.user-last-access{max-width:20%;flex:0 0 20%}.user-fullname,.user-email{max-width:25%;flex:0 0 25%}.user-last-access,.user-actions{text-align:center}.user-actions{max-width:10%;flex:0 0 10%}}.error-container{max-width:32rem;padding:1rem;margin:4rem auto;text-align:center}.error-container h1{color:#969696;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.error-container h2{margin-bottom:1rem;font-size:2rem}.error-code{display:block;font-size:8rem;font-weight:400}.error-status{display:block;font-size:1.75rem}.error-container .action{font-size:1.125rem}.error-container .logo{width:3.5rem;height:3.5rem;margin:2rem auto;background-position:center;background-repeat:no-repeat;background-size:cover} diff --git a/admin/assets/icons/svg/arrow-arrow-left-right-up-down.svg b/panel/assets/icons/svg/arrow-arrow-left-right-up-down.svg similarity index 100% rename from admin/assets/icons/svg/arrow-arrow-left-right-up-down.svg rename to panel/assets/icons/svg/arrow-arrow-left-right-up-down.svg diff --git a/admin/assets/icons/svg/arrow-down.svg b/panel/assets/icons/svg/arrow-down.svg similarity index 100% rename from admin/assets/icons/svg/arrow-down.svg rename to panel/assets/icons/svg/arrow-down.svg diff --git a/admin/assets/icons/svg/arrow-left-down-right-up.svg b/panel/assets/icons/svg/arrow-left-down-right-up.svg similarity index 100% rename from admin/assets/icons/svg/arrow-left-down-right-up.svg rename to panel/assets/icons/svg/arrow-left-down-right-up.svg diff --git a/admin/assets/icons/svg/arrow-left-down.svg b/panel/assets/icons/svg/arrow-left-down.svg similarity index 100% rename from admin/assets/icons/svg/arrow-left-down.svg rename to panel/assets/icons/svg/arrow-left-down.svg diff --git a/admin/assets/icons/svg/arrow-left-right.svg b/panel/assets/icons/svg/arrow-left-right.svg similarity index 100% rename from admin/assets/icons/svg/arrow-left-right.svg rename to panel/assets/icons/svg/arrow-left-right.svg diff --git a/admin/assets/icons/svg/arrow-left-up-right-down.svg b/panel/assets/icons/svg/arrow-left-up-right-down.svg similarity index 100% rename from admin/assets/icons/svg/arrow-left-up-right-down.svg rename to panel/assets/icons/svg/arrow-left-up-right-down.svg diff --git a/admin/assets/icons/svg/arrow-left-up.svg b/panel/assets/icons/svg/arrow-left-up.svg similarity index 100% rename from admin/assets/icons/svg/arrow-left-up.svg rename to panel/assets/icons/svg/arrow-left-up.svg diff --git a/admin/assets/icons/svg/arrow-left.svg b/panel/assets/icons/svg/arrow-left.svg similarity index 100% rename from admin/assets/icons/svg/arrow-left.svg rename to panel/assets/icons/svg/arrow-left.svg diff --git a/admin/assets/icons/svg/arrow-right-circle.svg b/panel/assets/icons/svg/arrow-right-circle.svg similarity index 100% rename from admin/assets/icons/svg/arrow-right-circle.svg rename to panel/assets/icons/svg/arrow-right-circle.svg diff --git a/admin/assets/icons/svg/arrow-right-down.svg b/panel/assets/icons/svg/arrow-right-down.svg similarity index 100% rename from admin/assets/icons/svg/arrow-right-down.svg rename to panel/assets/icons/svg/arrow-right-down.svg diff --git a/admin/assets/icons/svg/arrow-right-up-box.svg b/panel/assets/icons/svg/arrow-right-up-box.svg similarity index 100% rename from admin/assets/icons/svg/arrow-right-up-box.svg rename to panel/assets/icons/svg/arrow-right-up-box.svg diff --git a/admin/assets/icons/svg/arrow-right-up.svg b/panel/assets/icons/svg/arrow-right-up.svg similarity index 100% rename from admin/assets/icons/svg/arrow-right-up.svg rename to panel/assets/icons/svg/arrow-right-up.svg diff --git a/admin/assets/icons/svg/arrow-right.svg b/panel/assets/icons/svg/arrow-right.svg similarity index 100% rename from admin/assets/icons/svg/arrow-right.svg rename to panel/assets/icons/svg/arrow-right.svg diff --git a/admin/assets/icons/svg/arrow-up-down-left-right.svg b/panel/assets/icons/svg/arrow-up-down-left-right.svg similarity index 100% rename from admin/assets/icons/svg/arrow-up-down-left-right.svg rename to panel/assets/icons/svg/arrow-up-down-left-right.svg diff --git a/admin/assets/icons/svg/arrow-up-down.svg b/panel/assets/icons/svg/arrow-up-down.svg similarity index 100% rename from admin/assets/icons/svg/arrow-up-down.svg rename to panel/assets/icons/svg/arrow-up-down.svg diff --git a/admin/assets/icons/svg/arrow-up.svg b/panel/assets/icons/svg/arrow-up.svg similarity index 100% rename from admin/assets/icons/svg/arrow-up.svg rename to panel/assets/icons/svg/arrow-up.svg diff --git a/admin/assets/icons/svg/arrows-rotate-clockwise.svg b/panel/assets/icons/svg/arrows-rotate-clockwise.svg similarity index 100% rename from admin/assets/icons/svg/arrows-rotate-clockwise.svg rename to panel/assets/icons/svg/arrows-rotate-clockwise.svg diff --git a/admin/assets/icons/svg/arrows-rotate-counterclockwise.svg b/panel/assets/icons/svg/arrows-rotate-counterclockwise.svg similarity index 100% rename from admin/assets/icons/svg/arrows-rotate-counterclockwise.svg rename to panel/assets/icons/svg/arrows-rotate-counterclockwise.svg diff --git a/admin/assets/icons/svg/blockquote.svg b/panel/assets/icons/svg/blockquote.svg similarity index 100% rename from admin/assets/icons/svg/blockquote.svg rename to panel/assets/icons/svg/blockquote.svg diff --git a/admin/assets/icons/svg/bold.svg b/panel/assets/icons/svg/bold.svg similarity index 100% rename from admin/assets/icons/svg/bold.svg rename to panel/assets/icons/svg/bold.svg diff --git a/admin/assets/icons/svg/bolt.svg b/panel/assets/icons/svg/bolt.svg similarity index 100% rename from admin/assets/icons/svg/bolt.svg rename to panel/assets/icons/svg/bolt.svg diff --git a/admin/assets/icons/svg/cache-clear.svg b/panel/assets/icons/svg/cache-clear.svg similarity index 100% rename from admin/assets/icons/svg/cache-clear.svg rename to panel/assets/icons/svg/cache-clear.svg diff --git a/admin/assets/icons/svg/cache.svg b/panel/assets/icons/svg/cache.svg similarity index 100% rename from admin/assets/icons/svg/cache.svg rename to panel/assets/icons/svg/cache.svg diff --git a/admin/assets/icons/svg/calendar-clock.svg b/panel/assets/icons/svg/calendar-clock.svg similarity index 100% rename from admin/assets/icons/svg/calendar-clock.svg rename to panel/assets/icons/svg/calendar-clock.svg diff --git a/admin/assets/icons/svg/calendar.svg b/panel/assets/icons/svg/calendar.svg similarity index 100% rename from admin/assets/icons/svg/calendar.svg rename to panel/assets/icons/svg/calendar.svg diff --git a/admin/assets/icons/svg/check-circle.svg b/panel/assets/icons/svg/check-circle.svg similarity index 100% rename from admin/assets/icons/svg/check-circle.svg rename to panel/assets/icons/svg/check-circle.svg diff --git a/admin/assets/icons/svg/check-square.svg b/panel/assets/icons/svg/check-square.svg similarity index 100% rename from admin/assets/icons/svg/check-square.svg rename to panel/assets/icons/svg/check-square.svg diff --git a/admin/assets/icons/svg/check.svg b/panel/assets/icons/svg/check.svg similarity index 100% rename from admin/assets/icons/svg/check.svg rename to panel/assets/icons/svg/check.svg diff --git a/admin/assets/icons/svg/chevron-down.svg b/panel/assets/icons/svg/chevron-down.svg similarity index 100% rename from admin/assets/icons/svg/chevron-down.svg rename to panel/assets/icons/svg/chevron-down.svg diff --git a/admin/assets/icons/svg/chevron-left.svg b/panel/assets/icons/svg/chevron-left.svg similarity index 100% rename from admin/assets/icons/svg/chevron-left.svg rename to panel/assets/icons/svg/chevron-left.svg diff --git a/admin/assets/icons/svg/chevron-right.svg b/panel/assets/icons/svg/chevron-right.svg similarity index 100% rename from admin/assets/icons/svg/chevron-right.svg rename to panel/assets/icons/svg/chevron-right.svg diff --git a/admin/assets/icons/svg/chevron-up.svg b/panel/assets/icons/svg/chevron-up.svg similarity index 100% rename from admin/assets/icons/svg/chevron-up.svg rename to panel/assets/icons/svg/chevron-up.svg diff --git a/admin/assets/icons/svg/circle-small-fill.svg b/panel/assets/icons/svg/circle-small-fill.svg similarity index 100% rename from admin/assets/icons/svg/circle-small-fill.svg rename to panel/assets/icons/svg/circle-small-fill.svg diff --git a/admin/assets/icons/svg/circle-small.svg b/panel/assets/icons/svg/circle-small.svg similarity index 100% rename from admin/assets/icons/svg/circle-small.svg rename to panel/assets/icons/svg/circle-small.svg diff --git a/admin/assets/icons/svg/circle.svg b/panel/assets/icons/svg/circle.svg similarity index 100% rename from admin/assets/icons/svg/circle.svg rename to panel/assets/icons/svg/circle.svg diff --git a/admin/assets/icons/svg/clock-rotate-left.svg b/panel/assets/icons/svg/clock-rotate-left.svg similarity index 100% rename from admin/assets/icons/svg/clock-rotate-left.svg rename to panel/assets/icons/svg/clock-rotate-left.svg diff --git a/admin/assets/icons/svg/clock-rotate-right.svg b/panel/assets/icons/svg/clock-rotate-right.svg similarity index 100% rename from admin/assets/icons/svg/clock-rotate-right.svg rename to panel/assets/icons/svg/clock-rotate-right.svg diff --git a/admin/assets/icons/svg/clock.svg b/panel/assets/icons/svg/clock.svg similarity index 100% rename from admin/assets/icons/svg/clock.svg rename to panel/assets/icons/svg/clock.svg diff --git a/admin/assets/icons/svg/cloud-download.svg b/panel/assets/icons/svg/cloud-download.svg similarity index 100% rename from admin/assets/icons/svg/cloud-download.svg rename to panel/assets/icons/svg/cloud-download.svg diff --git a/admin/assets/icons/svg/cloud-upload.svg b/panel/assets/icons/svg/cloud-upload.svg similarity index 100% rename from admin/assets/icons/svg/cloud-upload.svg rename to panel/assets/icons/svg/cloud-upload.svg diff --git a/admin/assets/icons/svg/cloud.svg b/panel/assets/icons/svg/cloud.svg similarity index 100% rename from admin/assets/icons/svg/cloud.svg rename to panel/assets/icons/svg/cloud.svg diff --git a/admin/assets/icons/svg/exclamation-circle.svg b/panel/assets/icons/svg/exclamation-circle.svg similarity index 100% rename from admin/assets/icons/svg/exclamation-circle.svg rename to panel/assets/icons/svg/exclamation-circle.svg diff --git a/admin/assets/icons/svg/exclamation-octagon.svg b/panel/assets/icons/svg/exclamation-octagon.svg similarity index 100% rename from admin/assets/icons/svg/exclamation-octagon.svg rename to panel/assets/icons/svg/exclamation-octagon.svg diff --git a/admin/assets/icons/svg/exclamation-square.svg b/panel/assets/icons/svg/exclamation-square.svg similarity index 100% rename from admin/assets/icons/svg/exclamation-square.svg rename to panel/assets/icons/svg/exclamation-square.svg diff --git a/admin/assets/icons/svg/exclamation-triangle.svg b/panel/assets/icons/svg/exclamation-triangle.svg similarity index 100% rename from admin/assets/icons/svg/exclamation-triangle.svg rename to panel/assets/icons/svg/exclamation-triangle.svg diff --git a/admin/assets/icons/svg/exclamation.svg b/panel/assets/icons/svg/exclamation.svg similarity index 100% rename from admin/assets/icons/svg/exclamation.svg rename to panel/assets/icons/svg/exclamation.svg diff --git a/admin/assets/icons/svg/eye.svg b/panel/assets/icons/svg/eye.svg similarity index 100% rename from admin/assets/icons/svg/eye.svg rename to panel/assets/icons/svg/eye.svg diff --git a/admin/assets/icons/svg/file-archive.svg b/panel/assets/icons/svg/file-archive.svg similarity index 100% rename from admin/assets/icons/svg/file-archive.svg rename to panel/assets/icons/svg/file-archive.svg diff --git a/admin/assets/icons/svg/file-backup.svg b/panel/assets/icons/svg/file-backup.svg similarity index 100% rename from admin/assets/icons/svg/file-backup.svg rename to panel/assets/icons/svg/file-backup.svg diff --git a/admin/assets/icons/svg/file-binary.svg b/panel/assets/icons/svg/file-binary.svg similarity index 100% rename from admin/assets/icons/svg/file-binary.svg rename to panel/assets/icons/svg/file-binary.svg diff --git a/admin/assets/icons/svg/file-document.svg b/panel/assets/icons/svg/file-document.svg similarity index 100% rename from admin/assets/icons/svg/file-document.svg rename to panel/assets/icons/svg/file-document.svg diff --git a/admin/assets/icons/svg/file-exclamation.svg b/panel/assets/icons/svg/file-exclamation.svg similarity index 100% rename from admin/assets/icons/svg/file-exclamation.svg rename to panel/assets/icons/svg/file-exclamation.svg diff --git a/admin/assets/icons/svg/file-image.svg b/panel/assets/icons/svg/file-image.svg similarity index 100% rename from admin/assets/icons/svg/file-image.svg rename to panel/assets/icons/svg/file-image.svg diff --git a/admin/assets/icons/svg/file-page.svg b/panel/assets/icons/svg/file-page.svg similarity index 100% rename from admin/assets/icons/svg/file-page.svg rename to panel/assets/icons/svg/file-page.svg diff --git a/admin/assets/icons/svg/file-pdf.svg b/panel/assets/icons/svg/file-pdf.svg similarity index 100% rename from admin/assets/icons/svg/file-pdf.svg rename to panel/assets/icons/svg/file-pdf.svg diff --git a/admin/assets/icons/svg/file-presentation.svg b/panel/assets/icons/svg/file-presentation.svg similarity index 100% rename from admin/assets/icons/svg/file-presentation.svg rename to panel/assets/icons/svg/file-presentation.svg diff --git a/admin/assets/icons/svg/file-spreadsheet.svg b/panel/assets/icons/svg/file-spreadsheet.svg similarity index 100% rename from admin/assets/icons/svg/file-spreadsheet.svg rename to panel/assets/icons/svg/file-spreadsheet.svg diff --git a/admin/assets/icons/svg/file-text.svg b/panel/assets/icons/svg/file-text.svg similarity index 100% rename from admin/assets/icons/svg/file-text.svg rename to panel/assets/icons/svg/file-text.svg diff --git a/admin/assets/icons/svg/file.svg b/panel/assets/icons/svg/file.svg similarity index 100% rename from admin/assets/icons/svg/file.svg rename to panel/assets/icons/svg/file.svg diff --git a/admin/assets/icons/svg/grabber.svg b/panel/assets/icons/svg/grabber.svg similarity index 100% rename from admin/assets/icons/svg/grabber.svg rename to panel/assets/icons/svg/grabber.svg diff --git a/admin/assets/icons/svg/home.svg b/panel/assets/icons/svg/home.svg similarity index 100% rename from admin/assets/icons/svg/home.svg rename to panel/assets/icons/svg/home.svg diff --git a/admin/assets/icons/svg/image.svg b/panel/assets/icons/svg/image.svg similarity index 100% rename from admin/assets/icons/svg/image.svg rename to panel/assets/icons/svg/image.svg diff --git a/admin/assets/icons/svg/info-circle.svg b/panel/assets/icons/svg/info-circle.svg similarity index 100% rename from admin/assets/icons/svg/info-circle.svg rename to panel/assets/icons/svg/info-circle.svg diff --git a/admin/assets/icons/svg/info-square.svg b/panel/assets/icons/svg/info-square.svg similarity index 100% rename from admin/assets/icons/svg/info-square.svg rename to panel/assets/icons/svg/info-square.svg diff --git a/admin/assets/icons/svg/info.svg b/panel/assets/icons/svg/info.svg similarity index 100% rename from admin/assets/icons/svg/info.svg rename to panel/assets/icons/svg/info.svg diff --git a/admin/assets/icons/svg/italic.svg b/panel/assets/icons/svg/italic.svg similarity index 100% rename from admin/assets/icons/svg/italic.svg rename to panel/assets/icons/svg/italic.svg diff --git a/admin/assets/icons/svg/link.svg b/panel/assets/icons/svg/link.svg similarity index 100% rename from admin/assets/icons/svg/link.svg rename to panel/assets/icons/svg/link.svg diff --git a/admin/assets/icons/svg/list-ordered.svg b/panel/assets/icons/svg/list-ordered.svg similarity index 100% rename from admin/assets/icons/svg/list-ordered.svg rename to panel/assets/icons/svg/list-ordered.svg diff --git a/admin/assets/icons/svg/list-unordered.svg b/panel/assets/icons/svg/list-unordered.svg similarity index 100% rename from admin/assets/icons/svg/list-unordered.svg rename to panel/assets/icons/svg/list-unordered.svg diff --git a/admin/assets/icons/svg/list.svg b/panel/assets/icons/svg/list.svg similarity index 100% rename from admin/assets/icons/svg/list.svg rename to panel/assets/icons/svg/list.svg diff --git a/admin/assets/icons/svg/minus-circle.svg b/panel/assets/icons/svg/minus-circle.svg similarity index 100% rename from admin/assets/icons/svg/minus-circle.svg rename to panel/assets/icons/svg/minus-circle.svg diff --git a/admin/assets/icons/svg/minus-square.svg b/panel/assets/icons/svg/minus-square.svg similarity index 100% rename from admin/assets/icons/svg/minus-square.svg rename to panel/assets/icons/svg/minus-square.svg diff --git a/admin/assets/icons/svg/minus.svg b/panel/assets/icons/svg/minus.svg similarity index 100% rename from admin/assets/icons/svg/minus.svg rename to panel/assets/icons/svg/minus.svg diff --git a/admin/assets/icons/svg/movie.svg b/panel/assets/icons/svg/movie.svg similarity index 100% rename from admin/assets/icons/svg/movie.svg rename to panel/assets/icons/svg/movie.svg diff --git a/admin/assets/icons/svg/octagon.svg b/panel/assets/icons/svg/octagon.svg similarity index 100% rename from admin/assets/icons/svg/octagon.svg rename to panel/assets/icons/svg/octagon.svg diff --git a/admin/assets/icons/svg/page-blank.svg b/panel/assets/icons/svg/page-blank.svg similarity index 100% rename from admin/assets/icons/svg/page-blank.svg rename to panel/assets/icons/svg/page-blank.svg diff --git a/admin/assets/icons/svg/page-error.svg b/panel/assets/icons/svg/page-error.svg similarity index 100% rename from admin/assets/icons/svg/page-error.svg rename to panel/assets/icons/svg/page-error.svg diff --git a/admin/assets/icons/svg/page-home.svg b/panel/assets/icons/svg/page-home.svg similarity index 100% rename from admin/assets/icons/svg/page-home.svg rename to panel/assets/icons/svg/page-home.svg diff --git a/admin/assets/icons/svg/page-listing.svg b/panel/assets/icons/svg/page-listing.svg similarity index 100% rename from admin/assets/icons/svg/page-listing.svg rename to panel/assets/icons/svg/page-listing.svg diff --git a/admin/assets/icons/svg/page.svg b/panel/assets/icons/svg/page.svg similarity index 100% rename from admin/assets/icons/svg/page.svg rename to panel/assets/icons/svg/page.svg diff --git a/admin/assets/icons/svg/pencil.svg b/panel/assets/icons/svg/pencil.svg similarity index 100% rename from admin/assets/icons/svg/pencil.svg rename to panel/assets/icons/svg/pencil.svg diff --git a/admin/assets/icons/svg/plus-circle.svg b/panel/assets/icons/svg/plus-circle.svg similarity index 100% rename from admin/assets/icons/svg/plus-circle.svg rename to panel/assets/icons/svg/plus-circle.svg diff --git a/admin/assets/icons/svg/plus-square.svg b/panel/assets/icons/svg/plus-square.svg similarity index 100% rename from admin/assets/icons/svg/plus-square.svg rename to panel/assets/icons/svg/plus-square.svg diff --git a/admin/assets/icons/svg/plus.svg b/panel/assets/icons/svg/plus.svg similarity index 100% rename from admin/assets/icons/svg/plus.svg rename to panel/assets/icons/svg/plus.svg diff --git a/admin/assets/icons/svg/quotes.svg b/panel/assets/icons/svg/quotes.svg similarity index 100% rename from admin/assets/icons/svg/quotes.svg rename to panel/assets/icons/svg/quotes.svg diff --git a/admin/assets/icons/svg/readmore.svg b/panel/assets/icons/svg/readmore.svg similarity index 100% rename from admin/assets/icons/svg/readmore.svg rename to panel/assets/icons/svg/readmore.svg diff --git a/admin/assets/icons/svg/reorder-v.svg b/panel/assets/icons/svg/reorder-v.svg similarity index 100% rename from admin/assets/icons/svg/reorder-v.svg rename to panel/assets/icons/svg/reorder-v.svg diff --git a/admin/assets/icons/svg/rotate-left.svg b/panel/assets/icons/svg/rotate-left.svg similarity index 100% rename from admin/assets/icons/svg/rotate-left.svg rename to panel/assets/icons/svg/rotate-left.svg diff --git a/admin/assets/icons/svg/rotate-right.svg b/panel/assets/icons/svg/rotate-right.svg similarity index 100% rename from admin/assets/icons/svg/rotate-right.svg rename to panel/assets/icons/svg/rotate-right.svg diff --git a/admin/assets/icons/svg/search.svg b/panel/assets/icons/svg/search.svg similarity index 100% rename from admin/assets/icons/svg/search.svg rename to panel/assets/icons/svg/search.svg diff --git a/admin/assets/icons/svg/square.svg b/panel/assets/icons/svg/square.svg similarity index 100% rename from admin/assets/icons/svg/square.svg rename to panel/assets/icons/svg/square.svg diff --git a/admin/assets/icons/svg/tag.svg b/panel/assets/icons/svg/tag.svg similarity index 100% rename from admin/assets/icons/svg/tag.svg rename to panel/assets/icons/svg/tag.svg diff --git a/admin/assets/icons/svg/times-circle.svg b/panel/assets/icons/svg/times-circle.svg similarity index 100% rename from admin/assets/icons/svg/times-circle.svg rename to panel/assets/icons/svg/times-circle.svg diff --git a/admin/assets/icons/svg/times-octagon.svg b/panel/assets/icons/svg/times-octagon.svg similarity index 100% rename from admin/assets/icons/svg/times-octagon.svg rename to panel/assets/icons/svg/times-octagon.svg diff --git a/admin/assets/icons/svg/times-square.svg b/panel/assets/icons/svg/times-square.svg similarity index 100% rename from admin/assets/icons/svg/times-square.svg rename to panel/assets/icons/svg/times-square.svg diff --git a/admin/assets/icons/svg/times.svg b/panel/assets/icons/svg/times.svg similarity index 100% rename from admin/assets/icons/svg/times.svg rename to panel/assets/icons/svg/times.svg diff --git a/admin/assets/icons/svg/translate.svg b/panel/assets/icons/svg/translate.svg similarity index 100% rename from admin/assets/icons/svg/translate.svg rename to panel/assets/icons/svg/translate.svg diff --git a/admin/assets/icons/svg/trash.svg b/panel/assets/icons/svg/trash.svg similarity index 100% rename from admin/assets/icons/svg/trash.svg rename to panel/assets/icons/svg/trash.svg diff --git a/admin/assets/icons/svg/triangle.svg b/panel/assets/icons/svg/triangle.svg similarity index 100% rename from admin/assets/icons/svg/triangle.svg rename to panel/assets/icons/svg/triangle.svg diff --git a/admin/assets/icons/svg/user.svg b/panel/assets/icons/svg/user.svg similarity index 100% rename from admin/assets/icons/svg/user.svg rename to panel/assets/icons/svg/user.svg diff --git a/admin/assets/images/avatar.svg b/panel/assets/images/avatar.svg similarity index 100% rename from admin/assets/images/avatar.svg rename to panel/assets/images/avatar.svg diff --git a/admin/assets/images/icon.png b/panel/assets/images/icon.png similarity index 100% rename from admin/assets/images/icon.png rename to panel/assets/images/icon.png diff --git a/admin/assets/images/icon.svg b/panel/assets/images/icon.svg similarity index 100% rename from admin/assets/images/icon.svg rename to panel/assets/images/icon.svg diff --git a/admin/assets/js/app.min.js b/panel/assets/js/app.min.js similarity index 100% rename from admin/assets/js/app.min.js rename to panel/assets/js/app.min.js diff --git a/admin/assets/js/src/components/chart.js b/panel/assets/js/src/components/chart.js similarity index 100% rename from admin/assets/js/src/components/chart.js rename to panel/assets/js/src/components/chart.js diff --git a/admin/assets/js/src/components/dashboard.js b/panel/assets/js/src/components/dashboard.js similarity index 100% rename from admin/assets/js/src/components/dashboard.js rename to panel/assets/js/src/components/dashboard.js diff --git a/admin/assets/js/src/components/dropdowns.js b/panel/assets/js/src/components/dropdowns.js similarity index 100% rename from admin/assets/js/src/components/dropdowns.js rename to panel/assets/js/src/components/dropdowns.js diff --git a/admin/assets/js/src/components/form.js b/panel/assets/js/src/components/form.js similarity index 100% rename from admin/assets/js/src/components/form.js rename to panel/assets/js/src/components/form.js diff --git a/admin/assets/js/src/components/forms.js b/panel/assets/js/src/components/forms.js similarity index 100% rename from admin/assets/js/src/components/forms.js rename to panel/assets/js/src/components/forms.js diff --git a/admin/assets/js/src/components/forms/array.js b/panel/assets/js/src/components/forms/array.js similarity index 100% rename from admin/assets/js/src/components/forms/array.js rename to panel/assets/js/src/components/forms/array.js diff --git a/admin/assets/js/src/components/forms/date.js b/panel/assets/js/src/components/forms/date.js similarity index 100% rename from admin/assets/js/src/components/forms/date.js rename to panel/assets/js/src/components/forms/date.js diff --git a/admin/assets/js/src/components/forms/duration.js b/panel/assets/js/src/components/forms/duration.js similarity index 100% rename from admin/assets/js/src/components/forms/duration.js rename to panel/assets/js/src/components/forms/duration.js diff --git a/admin/assets/js/src/components/forms/editor.js b/panel/assets/js/src/components/forms/editor.js similarity index 100% rename from admin/assets/js/src/components/forms/editor.js rename to panel/assets/js/src/components/forms/editor.js diff --git a/admin/assets/js/src/components/forms/file.js b/panel/assets/js/src/components/forms/file.js similarity index 100% rename from admin/assets/js/src/components/forms/file.js rename to panel/assets/js/src/components/forms/file.js diff --git a/admin/assets/js/src/components/forms/image.js b/panel/assets/js/src/components/forms/image.js similarity index 100% rename from admin/assets/js/src/components/forms/image.js rename to panel/assets/js/src/components/forms/image.js diff --git a/admin/assets/js/src/components/forms/range.js b/panel/assets/js/src/components/forms/range.js similarity index 100% rename from admin/assets/js/src/components/forms/range.js rename to panel/assets/js/src/components/forms/range.js diff --git a/admin/assets/js/src/components/forms/tag.js b/panel/assets/js/src/components/forms/tag.js similarity index 100% rename from admin/assets/js/src/components/forms/tag.js rename to panel/assets/js/src/components/forms/tag.js diff --git a/admin/assets/js/src/components/icons.js b/panel/assets/js/src/components/icons.js similarity index 100% rename from admin/assets/js/src/components/icons.js rename to panel/assets/js/src/components/icons.js diff --git a/admin/assets/js/src/components/modals.js b/panel/assets/js/src/components/modals.js similarity index 100% rename from admin/assets/js/src/components/modals.js rename to panel/assets/js/src/components/modals.js diff --git a/admin/assets/js/src/components/notification.js b/panel/assets/js/src/components/notification.js similarity index 100% rename from admin/assets/js/src/components/notification.js rename to panel/assets/js/src/components/notification.js diff --git a/admin/assets/js/src/components/pages.js b/panel/assets/js/src/components/pages.js similarity index 100% rename from admin/assets/js/src/components/pages.js rename to panel/assets/js/src/components/pages.js diff --git a/admin/assets/js/src/components/request.js b/panel/assets/js/src/components/request.js similarity index 100% rename from admin/assets/js/src/components/request.js rename to panel/assets/js/src/components/request.js diff --git a/admin/assets/js/src/components/tooltip.js b/panel/assets/js/src/components/tooltip.js similarity index 100% rename from admin/assets/js/src/components/tooltip.js rename to panel/assets/js/src/components/tooltip.js diff --git a/admin/assets/js/src/components/tooltips.js b/panel/assets/js/src/components/tooltips.js similarity index 100% rename from admin/assets/js/src/components/tooltips.js rename to panel/assets/js/src/components/tooltips.js diff --git a/admin/assets/js/src/components/updates.js b/panel/assets/js/src/components/updates.js similarity index 100% rename from admin/assets/js/src/components/updates.js rename to panel/assets/js/src/components/updates.js diff --git a/admin/assets/js/src/components/utils.js b/panel/assets/js/src/components/utils.js similarity index 100% rename from admin/assets/js/src/components/utils.js rename to panel/assets/js/src/components/utils.js diff --git a/admin/assets/js/src/main.js b/panel/assets/js/src/main.js similarity index 100% rename from admin/assets/js/src/main.js rename to panel/assets/js/src/main.js diff --git a/admin/assets/scss/components/_animations.scss b/panel/assets/scss/components/_animations.scss similarity index 100% rename from admin/assets/scss/components/_animations.scss rename to panel/assets/scss/components/_animations.scss diff --git a/admin/assets/scss/components/_base.scss b/panel/assets/scss/components/_base.scss similarity index 100% rename from admin/assets/scss/components/_base.scss rename to panel/assets/scss/components/_base.scss diff --git a/admin/assets/scss/components/_buttons.scss b/panel/assets/scss/components/_buttons.scss similarity index 100% rename from admin/assets/scss/components/_buttons.scss rename to panel/assets/scss/components/_buttons.scss diff --git a/admin/assets/scss/components/_charts.scss b/panel/assets/scss/components/_charts.scss similarity index 100% rename from admin/assets/scss/components/_charts.scss rename to panel/assets/scss/components/_charts.scss diff --git a/admin/assets/scss/components/_colors.scss b/panel/assets/scss/components/_colors.scss similarity index 100% rename from admin/assets/scss/components/_colors.scss rename to panel/assets/scss/components/_colors.scss diff --git a/admin/assets/scss/components/_columns.scss b/panel/assets/scss/components/_columns.scss similarity index 100% rename from admin/assets/scss/components/_columns.scss rename to panel/assets/scss/components/_columns.scss diff --git a/admin/assets/scss/components/_dark-color-scheme.scss b/panel/assets/scss/components/_dark-color-scheme.scss similarity index 100% rename from admin/assets/scss/components/_dark-color-scheme.scss rename to panel/assets/scss/components/_dark-color-scheme.scss diff --git a/admin/assets/scss/components/_dropdowns.scss b/panel/assets/scss/components/_dropdowns.scss similarity index 100% rename from admin/assets/scss/components/_dropdowns.scss rename to panel/assets/scss/components/_dropdowns.scss diff --git a/admin/assets/scss/components/_errors.scss b/panel/assets/scss/components/_errors.scss similarity index 100% rename from admin/assets/scss/components/_errors.scss rename to panel/assets/scss/components/_errors.scss diff --git a/admin/assets/scss/components/_files-list.scss b/panel/assets/scss/components/_files-list.scss similarity index 100% rename from admin/assets/scss/components/_files-list.scss rename to panel/assets/scss/components/_files-list.scss diff --git a/admin/assets/scss/components/_forms.scss b/panel/assets/scss/components/_forms.scss similarity index 100% rename from admin/assets/scss/components/_forms.scss rename to panel/assets/scss/components/_forms.scss diff --git a/admin/assets/scss/components/_functions.scss b/panel/assets/scss/components/_functions.scss similarity index 100% rename from admin/assets/scss/components/_functions.scss rename to panel/assets/scss/components/_functions.scss diff --git a/admin/assets/scss/components/_login.scss b/panel/assets/scss/components/_login.scss similarity index 100% rename from admin/assets/scss/components/_login.scss rename to panel/assets/scss/components/_login.scss diff --git a/admin/assets/scss/components/_mixins.scss b/panel/assets/scss/components/_mixins.scss similarity index 100% rename from admin/assets/scss/components/_mixins.scss rename to panel/assets/scss/components/_mixins.scss diff --git a/admin/assets/scss/components/_modals.scss b/panel/assets/scss/components/_modals.scss similarity index 100% rename from admin/assets/scss/components/_modals.scss rename to panel/assets/scss/components/_modals.scss diff --git a/admin/assets/scss/components/_notifications.scss b/panel/assets/scss/components/_notifications.scss similarity index 100% rename from admin/assets/scss/components/_notifications.scss rename to panel/assets/scss/components/_notifications.scss diff --git a/admin/assets/scss/components/_options.scss b/panel/assets/scss/components/_options.scss similarity index 100% rename from admin/assets/scss/components/_options.scss rename to panel/assets/scss/components/_options.scss diff --git a/admin/assets/scss/components/_pages.scss b/panel/assets/scss/components/_pages.scss similarity index 100% rename from admin/assets/scss/components/_pages.scss rename to panel/assets/scss/components/_pages.scss diff --git a/admin/assets/scss/components/_admin.scss b/panel/assets/scss/components/_panel.scss similarity index 93% rename from admin/assets/scss/components/_admin.scss rename to panel/assets/scss/components/_panel.scss index d57f1383..0ade6233 100644 --- a/admin/assets/scss/components/_admin.scss +++ b/panel/assets/scss/components/_panel.scss @@ -139,35 +139,35 @@ content: ' '; } -.admin-user-card { +.panel-user-card { display: flex; align-items: center; - margin-bottom: $admin-user-card-margin-bottom; + margin-bottom: $panel-user-card-margin-bottom; cursor: pointer; } -.admin-user-avatar { - width: $admin-user-avatar-width; +.panel-user-avatar { + width: $panel-user-avatar-width; } -.admin-user-avatar img { - width: $admin-user-avatar-width; +.panel-user-avatar img { + width: $panel-user-avatar-width; border-radius: $border-radius-round; transition: box-shadow $transition-time-m ease-out; - .admin-user-card:hover & { + .panel-user-card:hover & { box-shadow: 0 0 0 0.5rem $color-base-600; } } -.admin-user-details { - padding: $admin-user-details-padding-v $admin-user-details-padding-h; +.panel-user-details { + padding: $panel-user-details-padding-v $panel-user-details-padding-h; } -.admin-user-fullname { +.panel-user-fullname { color: $color-base-100; } -.admin-user-username { +.panel-user-username { color: $color-base-300; font-size: $font-size-s; } diff --git a/admin/assets/scss/components/_spinner.scss b/panel/assets/scss/components/_spinner.scss similarity index 100% rename from admin/assets/scss/components/_spinner.scss rename to panel/assets/scss/components/_spinner.scss diff --git a/admin/assets/scss/components/_tabs.scss b/panel/assets/scss/components/_tabs.scss similarity index 100% rename from admin/assets/scss/components/_tabs.scss rename to panel/assets/scss/components/_tabs.scss diff --git a/admin/assets/scss/components/_tooltip.scss b/panel/assets/scss/components/_tooltip.scss similarity index 100% rename from admin/assets/scss/components/_tooltip.scss rename to panel/assets/scss/components/_tooltip.scss diff --git a/admin/assets/scss/components/_typography.scss b/panel/assets/scss/components/_typography.scss similarity index 100% rename from admin/assets/scss/components/_typography.scss rename to panel/assets/scss/components/_typography.scss diff --git a/admin/assets/scss/components/_users.scss b/panel/assets/scss/components/_users.scss similarity index 100% rename from admin/assets/scss/components/_users.scss rename to panel/assets/scss/components/_users.scss diff --git a/admin/assets/scss/components/_variables.scss b/panel/assets/scss/components/_variables.scss similarity index 98% rename from admin/assets/scss/components/_variables.scss rename to panel/assets/scss/components/_variables.scss index 95623dc1..0f4301b3 100644 --- a/admin/assets/scss/components/_variables.scss +++ b/panel/assets/scss/components/_variables.scss @@ -387,7 +387,7 @@ $login-modal-notification-padding-left: 3.5rem; $login-modal-notification-padding-right: 2rem; // === -// Admin +// Panel // === $title-bar-padding: 1rem; @@ -422,12 +422,12 @@ $logo-image-vertical-align: -0.25rem; $sidebar-navigation-margin-bottom: 1rem; -$admin-user-card-margin-bottom: 2rem; +$panel-user-card-margin-bottom: 2rem; -$admin-user-avatar-width: 48px; +$panel-user-avatar-width: 48px; -$admin-user-details-padding-v: 0; -$admin-user-details-padding-h: 0.75rem; +$panel-user-details-padding-v: 0; +$panel-user-details-padding-h: 0.75rem; $main-margin: 1.875rem; $main-margin-top: 4.5rem; diff --git a/admin/assets/scss/components/forms/_forms-array.scss b/panel/assets/scss/components/forms/_forms-array.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-array.scss rename to panel/assets/scss/components/forms/_forms-array.scss diff --git a/admin/assets/scss/components/forms/_forms-base.scss b/panel/assets/scss/components/forms/_forms-base.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-base.scss rename to panel/assets/scss/components/forms/_forms-base.scss diff --git a/admin/assets/scss/components/forms/_forms-checkbox.scss b/panel/assets/scss/components/forms/_forms-checkbox.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-checkbox.scss rename to panel/assets/scss/components/forms/_forms-checkbox.scss diff --git a/admin/assets/scss/components/forms/_forms-date.scss b/panel/assets/scss/components/forms/_forms-date.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-date.scss rename to panel/assets/scss/components/forms/_forms-date.scss diff --git a/admin/assets/scss/components/forms/_forms-duration.scss b/panel/assets/scss/components/forms/_forms-duration.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-duration.scss rename to panel/assets/scss/components/forms/_forms-duration.scss diff --git a/admin/assets/scss/components/forms/_forms-editor.scss b/panel/assets/scss/components/forms/_forms-editor.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-editor.scss rename to panel/assets/scss/components/forms/_forms-editor.scss diff --git a/admin/assets/scss/components/forms/_forms-file.scss b/panel/assets/scss/components/forms/_forms-file.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-file.scss rename to panel/assets/scss/components/forms/_forms-file.scss diff --git a/admin/assets/scss/components/forms/_forms-image.scss b/panel/assets/scss/components/forms/_forms-image.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-image.scss rename to panel/assets/scss/components/forms/_forms-image.scss diff --git a/admin/assets/scss/components/forms/_forms-range.scss b/panel/assets/scss/components/forms/_forms-range.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-range.scss rename to panel/assets/scss/components/forms/_forms-range.scss diff --git a/admin/assets/scss/components/forms/_forms-tag.scss b/panel/assets/scss/components/forms/_forms-tag.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-tag.scss rename to panel/assets/scss/components/forms/_forms-tag.scss diff --git a/admin/assets/scss/components/forms/_forms-togglegroup.scss b/panel/assets/scss/components/forms/_forms-togglegroup.scss similarity index 100% rename from admin/assets/scss/components/forms/_forms-togglegroup.scss rename to panel/assets/scss/components/forms/_forms-togglegroup.scss diff --git a/admin/assets/scss/admin-dark.scss b/panel/assets/scss/panel-dark.scss similarity index 70% rename from admin/assets/scss/admin-dark.scss rename to panel/assets/scss/panel-dark.scss index 93c685ff..83df9cb4 100644 --- a/admin/assets/scss/admin-dark.scss +++ b/panel/assets/scss/panel-dark.scss @@ -1,2 +1,2 @@ @import 'components/dark-color-scheme'; -@import 'admin'; +@import 'panel'; diff --git a/admin/assets/scss/admin.scss b/panel/assets/scss/panel.scss similarity index 96% rename from admin/assets/scss/admin.scss rename to panel/assets/scss/panel.scss index 766a2d3f..edf505c0 100644 --- a/admin/assets/scss/admin.scss +++ b/panel/assets/scss/panel.scss @@ -20,7 +20,7 @@ @import 'components/animations'; @import 'components/login'; -@import 'components/admin'; +@import 'components/panel'; @import 'components/pages'; @import 'components/options'; @import 'components/users'; diff --git a/admin/assets/scss/vendor/chartist.css b/panel/assets/scss/vendor/chartist.css similarity index 100% rename from admin/assets/scss/vendor/chartist.css rename to panel/assets/scss/vendor/chartist.css diff --git a/admin/assets/scss/vendor/codemirror.css b/panel/assets/scss/vendor/codemirror.css similarity index 100% rename from admin/assets/scss/vendor/codemirror.css rename to panel/assets/scss/vendor/codemirror.css diff --git a/admin/avatars/.gitkeep b/panel/avatars/.gitkeep similarity index 100% rename from admin/avatars/.gitkeep rename to panel/avatars/.gitkeep diff --git a/admin/helpers.php b/panel/helpers.php similarity index 51% rename from admin/helpers.php rename to panel/helpers.php index 83e820e2..54d8c66c 100644 --- a/admin/helpers.php +++ b/panel/helpers.php @@ -4,6 +4,6 @@ use Formwork\Formwork; use Formwork\Utils\FileSystem; return [ - 'assets' => fn () => Formwork::instance()->admin()->assets(), - 'icon' => fn (string $icon) => FileSystem::read(ADMIN_PATH . 'assets' . DS . 'icons' . DS . 'svg' . DS . $icon . '.svg') + 'assets' => fn () => Formwork::instance()->panel()->assets(), + 'icon' => fn (string $icon) => FileSystem::read(PANEL_PATH . 'assets' . DS . 'icons' . DS . 'svg' . DS . $icon . '.svg') ]; diff --git a/admin/logs/.gitkeep b/panel/logs/.gitkeep similarity index 100% rename from admin/logs/.gitkeep rename to panel/logs/.gitkeep diff --git a/admin/package.json b/panel/package.json similarity index 89% rename from admin/package.json rename to panel/package.json index 2263644a..39d3d35e 100644 --- a/admin/package.json +++ b/panel/package.json @@ -1,5 +1,5 @@ { - "name": "formwork-admin", + "name": "formwork-panel", "description": "Formwork CMS Administration Panel", "author": "Giuseppe Criscione", "license": "MIT", @@ -12,7 +12,7 @@ }, "scripts": { "build": "yarn build:css && yarn build:js", - "build:css": "sass ./assets/scss/admin.scss:./assets/css/admin.min.css ./assets/scss/admin-dark.scss:./assets/css/admin-dark.min.css --style=compressed --no-source-map", + "build:css": "sass ./assets/scss/panel.scss:./assets/css/panel.min.css ./assets/scss/panel-dark.scss:./assets/css/panel-dark.min.css --style=compressed --no-source-map", "build:js": "rollup -c", "watch:css": "onchange 'assets/scss/**/*.scss' -- yarn build:css", "watch:js": "onchange 'assets/js/src/**/*.js' -- yarn build:js", diff --git a/admin/rollup.config.js b/panel/rollup.config.js similarity index 100% rename from admin/rollup.config.js rename to panel/rollup.config.js diff --git a/admin/routes.php b/panel/routes.php similarity index 55% rename from admin/routes.php rename to panel/routes.php index 78b4af1a..fd560c7b 100644 --- a/admin/routes.php +++ b/panel/routes.php @@ -1,7 +1,7 @@ [ - 'admin.index' => [ + 'panel.index' => [ 'path' => '/', - 'action' => fn () => Formwork::instance()->admin()->redirect('/dashboard/') + 'action' => fn () => Formwork::instance()->panel()->redirect('/dashboard/') ], - 'admin.login' => [ + 'panel.login' => [ 'path' => '/login/', - 'action' => 'Formwork\\Admin\\Controllers\\AuthenticationController@login', + 'action' => 'Formwork\\Panel\\Controllers\\AuthenticationController@login', 'methods' => ['GET', 'POST'] ], - 'admin.logout' => [ + 'panel.logout' => [ 'path' => '/logout/', - 'action' => 'Formwork\\Admin\\Controllers\\AuthenticationController@logout' + 'action' => 'Formwork\\Panel\\Controllers\\AuthenticationController@logout' ], - 'admin.backup.make' => [ + 'panel.backup.make' => [ 'path' => '/backup/make/', - 'action' => 'Formwork\\Admin\\Controllers\\BackupController@make', + 'action' => 'Formwork\\Panel\\Controllers\\BackupController@make', 'methods' => ['POST'], 'types' => ['XHR'] ], - 'admin.backup.download' => [ + 'panel.backup.download' => [ 'path' => '/backup/download/{backup}/', - 'action' => 'Formwork\\Admin\\Controllers\\BackupController@download', + 'action' => 'Formwork\\Panel\\Controllers\\BackupController@download', 'methods' => ['POST'] ], - 'admin.cache.clear' => [ + 'panel.cache.clear' => [ 'path' => '/cache/clear/', - 'action' => 'Formwork\\Admin\\Controllers\\CacheController@clear', + 'action' => 'Formwork\\Panel\\Controllers\\CacheController@clear', 'methods' => ['POST'], 'types' => ['XHR'] ], - 'admin.dashboard' => [ + 'panel.dashboard' => [ 'path' => '/dashboard/', - 'action' => 'Formwork\Admin\Controllers\DashboardController@index' + 'action' => 'Formwork\Panel\Controllers\DashboardController@index' ], - 'admin.options' => [ + 'panel.options' => [ 'path' => '/options/', - 'action' => 'Formwork\Admin\Controllers\OptionsController@index' + 'action' => 'Formwork\Panel\Controllers\OptionsController@index' ], - 'admin.options.system' => [ + 'panel.options.system' => [ 'path' => '/options/system/', - 'action' => 'Formwork\Admin\Controllers\OptionsController@systemOptions', + 'action' => 'Formwork\Panel\Controllers\OptionsController@systemOptions', 'methods' => ['GET', 'POST'] ], - 'admin.options.site' => [ + 'panel.options.site' => [ 'path' => '/options/site/', - 'action' => 'Formwork\Admin\Controllers\OptionsController@siteOptions', + 'action' => 'Formwork\Panel\Controllers\OptionsController@siteOptions', 'methods' => ['GET', 'POST'] ], - 'admin.options.updates' => [ + 'panel.options.updates' => [ 'path' => '/options/updates/', - 'action' => 'Formwork\Admin\Controllers\OptionsController@updates' + 'action' => 'Formwork\Panel\Controllers\OptionsController@updates' ], - 'admin.options.info' => [ + 'panel.options.info' => [ 'path' => '/options/info/', - 'action' => 'Formwork\Admin\Controllers\OptionsController@info' + 'action' => 'Formwork\Panel\Controllers\OptionsController@info' ], - 'admin.pages' => [ + 'panel.pages' => [ 'path' => '/pages/', - 'action' => 'Formwork\Admin\Controllers\PagesController@index' + 'action' => 'Formwork\Panel\Controllers\PagesController@index' ], - 'admin.pages.new' => [ + 'panel.pages.new' => [ 'path' => '/pages/new/', - 'action' => 'Formwork\Admin\Controllers\PagesController@create', + 'action' => 'Formwork\Panel\Controllers\PagesController@create', 'methods' => ['POST'] ], - 'admin.pages.edit' => [ + 'panel.pages.edit' => [ 'path' => '/pages/{page}/edit/', - 'action' => 'Formwork\Admin\Controllers\PagesController@edit', + 'action' => 'Formwork\Panel\Controllers\PagesController@edit', 'methods' => ['GET', 'POST'] ], - 'admin.pages.edit.lang' => [ + 'panel.pages.edit.lang' => [ 'path' => '/pages/{page}/edit/language/{language}/', - 'action' => 'Formwork\Admin\Controllers\PagesController@edit', + 'action' => 'Formwork\Panel\Controllers\PagesController@edit', 'methods' => ['GET', 'POST'] ], - 'admin.pages.reorder' => [ + 'panel.pages.reorder' => [ 'path' => '/pages/reorder/', - 'action' => 'Formwork\Admin\Controllers\PagesController@reorder', + 'action' => 'Formwork\Panel\Controllers\PagesController@reorder', 'methods' => ['POST'], 'types' => ['XHR'] ], - 'admin.pages.uploadfile' => [ + 'panel.pages.uploadfile' => [ 'path' => '/pages/{page}/file/upload/', - 'action' => 'Formwork\Admin\Controllers\PagesController@uploadFile', + 'action' => 'Formwork\Panel\Controllers\PagesController@uploadFile', 'methods' => ['POST'] ], - 'admin.pages.deletefile' => [ + 'panel.pages.deletefile' => [ 'path' => '/pages/{page}/file/{filename}/delete/', - 'action' => 'Formwork\Admin\Controllers\PagesController@deleteFile', + 'action' => 'Formwork\Panel\Controllers\PagesController@deleteFile', 'methods' => ['POST'] ], - 'admin.pages.delete' => [ + 'panel.pages.delete' => [ 'path' => '/pages/{page}/delete/', - 'action' => 'Formwork\Admin\Controllers\PagesController@delete', + 'action' => 'Formwork\Panel\Controllers\PagesController@delete', 'methods' => ['POST'] ], - 'admin.pages.delete.lang' => [ + 'panel.pages.delete.lang' => [ 'path' => '/pages/{page}/delete/language/{language}/', - 'action' => 'Formwork\Admin\Controllers\PagesController@delete', + 'action' => 'Formwork\Panel\Controllers\PagesController@delete', 'methods' => ['POST'] ], - 'admin.updates.check' => [ + 'panel.updates.check' => [ 'path' => '/updates/check/', - 'action' => 'Formwork\Admin\Controllers\UpdatesController@check', + 'action' => 'Formwork\Panel\Controllers\UpdatesController@check', 'methods' => ['POST'], 'types' => ['XHR'] ], - 'admin.updates.update' => [ + 'panel.updates.update' => [ 'path' => '/updates/update/', - 'action' => 'Formwork\Admin\Controllers\UpdatesController@update', + 'action' => 'Formwork\Panel\Controllers\UpdatesController@update', 'methods' => ['POST'], 'types' => ['XHR'] ], - 'admin.users' => [ + 'panel.users' => [ 'path' => '/users/', - 'action' => 'Formwork\Admin\Controllers\UsersController@index' + 'action' => 'Formwork\Panel\Controllers\UsersController@index' ], - 'admin.users.new' => [ + 'panel.users.new' => [ 'path' => '/users/new/', - 'action' => 'Formwork\Admin\Controllers\UsersController@create', + 'action' => 'Formwork\Panel\Controllers\UsersController@create', 'methods' => ['POST'] ], - 'admin.users.delete' => [ + 'panel.users.delete' => [ 'path' => '/users/{user}/delete/', - 'action' => 'Formwork\Admin\Controllers\UsersController@delete', + 'action' => 'Formwork\Panel\Controllers\UsersController@delete', 'methods' => ['POST'] ], - 'admin.users.profile' => [ + 'panel.users.profile' => [ 'path' => '/users/{user}/profile/', - 'action' => 'Formwork\Admin\Controllers\UsersController@profile', + 'action' => 'Formwork\Panel\Controllers\UsersController@profile', 'methods' => ['GET', 'POST'] ], - 'admin.errors.notfound' => [ + 'panel.errors.notfound' => [ 'path' => '/{route}/', - 'action' => 'Formwork\Admin\Controllers\ErrorsController@notFound' + 'action' => 'Formwork\Panel\Controllers\ErrorsController@notFound' ] ], 'filters' => [ @@ -153,9 +153,9 @@ return [ if (\Formwork\Utils\HTTPRequest::contentLength() !== null) { $maxSize = \Formwork\Utils\FileSystem::shorthandToBytes(ini_get('post_max_size')); if (\Formwork\Utils\HTTPRequest::contentLength() > $maxSize && $maxSize > 0) { - $admin = \Formwork\Formwork::instance()->admin(); - $admin->notify($admin->translate('admin.request.error.post-max-size'), 'error'); - return $admin->redirectToReferer(); + $panel = \Formwork\Formwork::instance()->panel(); + $panel->notify($panel->translate('panel.request.error.post-max-size'), 'error'); + return $panel->redirectToReferer(); } } }, @@ -169,27 +169,27 @@ return [ } catch (RuntimeException $e) { CSRFToken::destroy(); Session::remove('FORMWORK_USERNAME'); - $admin = \Formwork\Formwork::instance()->admin(); - $admin->notify($admin->translate('admin.login.suspicious-request-detected'), 'warning'); + $panel = \Formwork\Formwork::instance()->panel(); + $panel->notify($panel->translate('panel.login.suspicious-request-detected'), 'warning'); if (HTTPRequest::isXHR()) { return JSONResponse::error('Bad Request: the CSRF token is not valid', 400); } - return $admin->redirect('/login/'); + return $panel->redirect('/login/'); } }, 'methods' => ['POST'], 'types' => ['HTTP', 'XHR'] ], - 'admin.register' => [ + 'panel.register' => [ 'action' => static function () { - $admin = Formwork::instance()->admin(); - // Register admin if no user exists - if ($admin->users()->isEmpty()) { + $panel = Formwork::instance()->panel(); + // Register panel if no user exists + if ($panel->users()->isEmpty()) { if (!HTTPRequest::isLocalhost()) { - return $admin->redirectToSite(); + return $panel->redirectToSite(); } - if ($admin->route() !== '/') { - return $admin->redirectToPanel(); + if ($panel->route() !== '/') { + return $panel->redirectToPanel(); } $controller = new RegisterController(); return $controller->register(); @@ -197,13 +197,13 @@ return [ }, 'methods' => ['GET', 'POST'] ], - 'admin.redirect-to-login' => [ + 'panel.redirect-to-login' => [ 'action' => static function () { - $admin = Formwork::instance()->admin(); + $panel = Formwork::instance()->panel(); // Redirect to login if no user is logged - if (!$admin->isLoggedIn() && $admin->route() !== '/login/') { - Session::set('FORMWORK_REDIRECT_TO', $admin->route()); - return $admin->redirect('/login/'); + if (!$panel->isLoggedIn() && $panel->route() !== '/login/') { + Session::set('FORMWORK_REDIRECT_TO', $panel->route()); + return $panel->redirect('/login/'); } } ] diff --git a/admin/schemes/roles.yml b/panel/schemes/roles.yml similarity index 78% rename from admin/schemes/roles.yml rename to panel/schemes/roles.yml index 7b72c971..55552ee9 100644 --- a/admin/schemes/roles.yml +++ b/panel/schemes/roles.yml @@ -1,7 +1,7 @@ title: Roles data: admin: - title: '{{admin.user.role.admin}}' + title: '{{panel.user.role.admin}}' permissions: dashboard: true cache: true @@ -12,7 +12,7 @@ data: users: true user: - title: '{{admin.user.role.user}}' + title: '{{panel.user.role.user}}' permissions: dashboard: true pages: true diff --git a/admin/schemes/user.yml b/panel/schemes/user.yml similarity index 51% rename from admin/schemes/user.yml rename to panel/schemes/user.yml index bf2f6709..e7bbd0d9 100644 --- a/admin/schemes/user.yml +++ b/panel/schemes/user.yml @@ -4,54 +4,54 @@ layout: type: sections sections: user: - label: '{{admin.users.user}}' + label: '{{panel.users.user}}' fields: [fullname, email, password, language, role, color-scheme, avatar] fields: fullname: type: text - label: '{{admin.user.fullname}}' + label: '{{panel.user.fullname}}' required: true email: type: email - label: '{{admin.user.email}}' + label: '{{panel.user.email}}' required: true password: type: password - label: '{{admin.user.password}}' - placeholder: '{{admin.user.password.type-new-password}}' + label: '{{panel.user.password}}' + placeholder: '{{panel.user.password.type-new-password}}' disabled: true pattern: '^.{8,}$' autocomplete: new-password language: type: select - label: '{{admin.user.language}}' + label: '{{panel.user.language}}' required: true translate: [label] import: - options: 'Formwork\Admin\Admin::availableTranslations' + options: 'Formwork\Panel\Panel::availableTranslations' role: type: select - label: '{{admin.user.role}}' + label: '{{panel.user.role}}' disabled: true import: - options: 'Formwork\Admin\Users\Users::availableRoles' + options: 'Formwork\Panel\Users\Users::availableRoles' color-scheme: type: togglegroup - label: '{{admin.user.color-scheme}}' + label: '{{panel.user.color-scheme}}' options: - light: '{{admin.user.color-scheme.light}}' - dark: '{{admin.user.color-scheme.dark}}' - auto: '{{admin.user.color-scheme.auto}}' + light: '{{panel.user.color-scheme.light}}' + dark: '{{panel.user.color-scheme.dark}}' + auto: '{{panel.user.color-scheme.auto}}' avatar: type: file - label: '{{admin.user.avatar}}' + label: '{{panel.user.avatar}}' accept: .jpg, .jpeg, .png, .gif diff --git a/panel/translations/en.yml b/panel/translations/en.yml new file mode 100644 index 00000000..5722274e --- /dev/null +++ b/panel/translations/en.yml @@ -0,0 +1,265 @@ +panel.backup.backup: Backup +panel.backup.error.cannot-download: Cannot download backup. %s. +panel.backup.error.cannot-download.invalid-filename: Invalid backup file +panel.backup.error.cannot-make: Cannot make backup. %s. +panel.backup.ready: Backup ready. Starting download... +panel.cache.clear: Clear Cache +panel.cache.cleared: Cache cleared +panel.dashboard.dashboard: Dashboard +panel.dashboard.last-modified-pages: Last Edited Pages +panel.dashboard.quick-actions: Quick Actions +panel.dashboard.statistics: Statistics +panel.dashboard.statistics.unique-visitors: Unique Visitors +panel.dashboard.statistics.visits: Visits +panel.dashboard.welcome: Welcome +panel.drag-to-reorder: Drag to Reorder +panel.errors.action.report-to-github: Report an issue to GitHub +panel.errors.action.return-to-dashboard: Return to Dashboard +panel.errors.error.forbidden.description: You don’t have permission to access this page. +panel.errors.error.forbidden.heading: Oops, permission required! +panel.errors.error.forbidden.status: Forbidden +panel.errors.error.internal-server-error.description: Formwork encountered an error while serving your request. Please check Formwork configuration or the server log for errors. +panel.errors.error.internal-server-error.heading: Oops, something went wrong! +panel.errors.error.internal-server-error.status: Internal Server Error +panel.errors.error.not-found.description: The page does not exist or the request is not valid. +panel.errors.error.not-found.heading: Oops, page not found! +panel.errors.error.not-found.status: Not Found +panel.login.attempt.failed: Login attempt failed! Try again. +panel.login.attempt.too-many: Too many login attempts. Please try again in %d minutes. +panel.login.logged-out: You have been logged out +panel.login.login: Login +panel.login.logout: Logout +panel.login.password: Password +panel.login.suspicious-request-detected: A suspicious request has been detected, and for security reasons you have been logged out. Please log in again. +panel.login.username: Username +panel.manage: Manage +panel.modal.action.cancel: Cancel +panel.modal.action.continue: Continue +panel.modal.action.delete: Delete +panel.modal.action.save: Save +panel.modal.action.upload-file: Upload a File +panel.modal.images.no-images: There are no images here +panel.modal.images.no-images.upload: Please upload some images +panel.modal.images.title: Select an Image +panel.options.info: Info +panel.options.options: Options +panel.options.site: Site +panel.options.site.advanced: Advanced Options +panel.options.site.advanced.aliases: Aliases +panel.options.site.advanced.aliases.alias: Alias +panel.options.site.advanced.aliases.route: Route +panel.options.site.advanced.metadata: HTML Metadata +panel.options.site.advanced.metadata.content: Content +panel.options.site.advanced.metadata.name: Name +panel.options.site.info: Info +panel.options.site.info.author: Author +panel.options.site.info.description: Description +panel.options.site.info.language: Language +panel.options.site.info.title: Title +panel.options.system: System +panel.options.system.admin-panel: Administration Panel +panel.options.system.admin-panel.default-color-scheme: Default Color Scheme +panel.options.system.admin-panel.default-color-scheme.dark: Dark +panel.options.system.admin-panel.default-color-scheme.light: Light +panel.options.system.admin-panel.default-language: Default Language +panel.options.system.admin-panel.logout-redirects-to: Logout Redirects to +panel.options.system.admin-panel.logout-redirects-to.home: Home +panel.options.system.admin-panel.logout-redirects-to.login: Login +panel.options.system.admin-panel.session-timeout: Session Timeout (min) +panel.options.system.backup: Backup +panel.options.system.backup.backup-files-to-keep: Backups to keep on the server +panel.options.system.cache: Cache +panel.options.system.cache.disabled: Disabled +panel.options.system.cache.enabled: Enabled +panel.options.system.cache.time: Cache Time (sec) +panel.options.system.date-and-time: Date and Time +panel.options.system.date-and-time.date-format: Date Format +panel.options.system.date-and-time.first-weekday: First Weekday +panel.options.system.date-and-time.first-weekday.monday: Monday +panel.options.system.date-and-time.first-weekday.sunday: Sunday +panel.options.system.date-and-time.hour-format: Hour Format +panel.options.system.date-and-time.timezone: Timezone +panel.options.system.files: Files +panel.options.system.files.allowed-extensions: Allowed Extensions +panel.options.system.images: Images +panel.options.system.images.jpeg-quality: JPEG Quality +panel.options.system.images.jpeg-save-progressive: Save JPEG images as progressive +panel.options.system.images.jpeg-save-progressive.disabled: Disabled +panel.options.system.images.jpeg-save-progressive.enabled: Enabled +panel.options.system.images.png-compression-level: PNG Compression Level +panel.options.system.images.process-uploads: Process (optimize) uploaded images +panel.options.system.images.process-uploads.disabled: Disabled +panel.options.system.images.process-uploads.enabled: Enabled +panel.options.system.images.webp-quality: WebP Quality +panel.options.system.languages: Languages +panel.options.system.languages.available-languages: Available Languages +panel.options.system.languages.available-languages.no-languages: No Languages +panel.options.system.languages.preferred-language: Use Browser Prefered Language +panel.options.system.languages.preferred-language.disabled: Disabled +panel.options.system.languages.preferred-language.enabled: Enabled +panel.options.updated: Options updated +panel.options.updates: Updates +panel.pages.attributes: Attributes +panel.pages.change-slug: Edit Slug +panel.pages.change-slug.generate: Generate From Title +panel.pages.changes.continue: Continue without Saving +panel.pages.changes.detected: Changes Detected +panel.pages.changes.detected.prompt: You have some changes that have not been saved. Are you sure you want to leave this page? +panel.pages.content: Content +panel.pages.delete-file: Delete File +panel.pages.delete-file.prompt: Are you sure you want to delete this file? This action can’t be undone. +panel.pages.delete-page: Delete Page +panel.pages.delete-page.prompt: Are you sure you want to delete this page? This action can’t be undone. +panel.pages.edit-page: Edit Page %s +panel.pages.editor.bold: Bold +panel.pages.editor.bullet-list: Bullet list +panel.pages.editor.image: Image +panel.pages.editor.italic: Italic +panel.pages.editor.link: Link +panel.pages.editor.numbered-list: Ordered list +panel.pages.editor.quote: Quote +panel.pages.editor.redo: Redo +panel.pages.editor.summary: Summary +panel.pages.editor.undo: Undo +panel.pages.files: Files +panel.pages.files.upload-label: Click to choose a file to upload or drag it here +panel.pages.languages: Languages +panel.pages.languages.add-language: Add %s +panel.pages.languages.edit-language: Edit %s +panel.pages.new-page: New Page +panel.pages.new-page.parent: Parent Page +panel.pages.new-page.site: Site +panel.pages.new-page.slug-suggestion: letters, numbers and dashes only +panel.pages.new-page.slug: Page Slug +panel.pages.new-page.template: Template +panel.pages.new-page.title: Title +panel.pages.options: Options +panel.pages.page: Page +panel.pages.page.actions: Actions +panel.pages.page.cacheable: Cacheable +panel.pages.page.cannot-change-num: Cannot change page number +panel.pages.page.cannot-create: Cannot create page +panel.pages.page.cannot-create.already-exists: Cannot create page, a page with the same uri already exists +panel.pages.page.cannot-create.invalid-parent: Cannot create page, invalid parent page +panel.pages.page.cannot-create.invalid-slug: Cannot create page, page slug must contain only letters and numbers separated by dashes +panel.pages.page.cannot-create.invalid-template: Cannot create page, invalid template +panel.pages.page.cannot-create.var-missing: Cannot create page, missing a variable +panel.pages.page.cannot-delete-file.file-not-found: Cannot delete file, file not found +panel.pages.page.cannot-delete-file.page-not-found: Cannot delete file, file not found +panel.pages.page.cannot-delete.invalid-language: 'Cannot delete page, invalid language: %s' +panel.pages.page.cannot-delete.not-deletable: Cannot delete page, the page is not deletable +panel.pages.page.cannot-delete.page-not-found: Cannot delete page, page not found +panel.pages.page.cannot-edit.already-exists: Cannot edit page, a page with the same uri already exists +panel.pages.page.cannot-edit.index-or-error-page-slug: Cannot edit page slug of index and error pages +panel.pages.page.cannot-edit.invalid-language: 'Cannot edit page, invalid language: %s' +panel.pages.page.cannot-edit.invalid-parent: Cannot edit page, invalid parent page +panel.pages.page.cannot-edit.invalid-slug: Cannot edit page slug, it must contain only letters and numbers separated by dashes +panel.pages.page.cannot-edit.invalid-template: Cannot edit page, invalid template +panel.pages.page.cannot-edit.page-not-found: Cannot edit page, page not found +panel.pages.page.cannot-edit.var-missing: Cannot edit page, missing a variable +panel.pages.page.cannot-move: Cannot move page +panel.pages.page.cannot-upload-file.page-not-found: Cannot upload file, page not found +panel.pages.page.created: Page created! +panel.pages.page.deleted: Page deleted +panel.pages.page.edited: Page edited +panel.pages.page.file-deleted: File deleted +panel.pages.page.image: Image +panel.pages.page.last-modified: Last Modified +panel.pages.page.moved: Page moved! +panel.pages.page.no-date: No Date +panel.pages.page.no-image: No Image +panel.pages.page.no-tags: No Tags +panel.pages.page.not-found: Page not found +panel.pages.page.posts-per-page: Posts per page +panel.pages.page.publish-date: Publish Date +panel.pages.page.status: Status +panel.pages.page.tags: Tags +panel.pages.page.title: Title +panel.pages.page.unpublish-date: Unpublish Date +panel.pages.page.listed: Visible in the menu +panel.pages.pages: Pages +panel.pages.pages.collapse-all: Collapse All +panel.pages.pages.expand-all: Expand All +panel.pages.pages.reorder: Reorder +panel.pages.pages.search: Search Pages... +panel.pages.parent: Parent Page +panel.pages.preview-file: Preview +panel.pages.preview: Preview +panel.pages.save: Save +panel.pages.status.not-published: Not Published +panel.pages.status.not-routable: Not Routable +panel.pages.status.published: Published +panel.pages.status.routable: Routable +panel.pages.summary: Summary +panel.pages.template: Template +panel.pages.text: Text +panel.pages.toggle-children: Toggle Children Pages +panel.panel: Administration Panel +panel.register.create-user: Formwork is installed but no users were found. Please register a user now. +panel.register.register: Register New User +panel.request.error.post-max-size: The HTTP POST request exceeds the maximum allowed size +panel.updates.available-for-install: is available for install +panel.updates.check: Check Updates +panel.updates.install-prompt: Would you like to install the update? +panel.updates.install: Install +panel.updates.installed: Update installed! +panel.updates.latest-version-available: is the latest version available +panel.updates.status.cannot-check: Cannot check for updates. Try again later. +panel.updates.status.cannot-install: Cannot install update +panel.updates.status.cannot-make-backup: Cannot make backup before updating +panel.updates.status.checking: Checking for updates... +panel.updates.status.found: Updates found +panel.updates.status.installing: Installing updates... +panel.updates.status.up-to-date: Up-to-date! +panel.uploader.error: Cannot upload file. %s. +panel.uploader.error.already-exists: A file with the same name already exists +panel.uploader.error.cannot-move-to-destination: Failed to move uploaded file to destination +panel.uploader.error.cannot-write: Failed to write file to disk +panel.uploader.error.destination-too-long: Destination path too long +panel.uploader.error.file-name-too-long: File name too long +panel.uploader.error.file-name: Invalid file name +panel.uploader.error.hidden-files: Cannot upload hidden files beginning with a dot +panel.uploader.error.mime-type: File type not allowed +panel.uploader.error.no-file: No file was uploaded +panel.uploader.error.no-temp: Missing a temporary folder +panel.uploader.error.partial: The uploaded file was only partially uploaded +panel.uploader.error.php-extension: File upload stopped by extension +panel.uploader.error.size: The uploaded file exceeds the maximum file size +panel.uploader.uploaded: File uploaded +panel.user.actions: Actions +panel.user.avatar: Avatar +panel.user.avatar.uploaded: Avatar uploaded +panel.user.color-scheme: Color Scheme +panel.user.color-scheme.auto: Auto +panel.user.color-scheme.dark: Dark +panel.user.color-scheme.light: Light +panel.user.email: Email +panel.user.fullname: Full Name +panel.user.language: Language +panel.user.last-access: Last access +panel.user.password: Password +panel.user.password.type-new-password: Type a new password to change... +panel.user.role: Role +panel.user.role.admin: Administrator +panel.user.role.user: User +panel.user.username: Username +panel.users.delete-user: Delete User +panel.users.delete-user.prompt: Are you sure you want to delete this user? This action can’t be undone. +panel.users.new-user: New User +panel.users.new-user.password-suggestion: at least 8 characters +panel.users.new-user.username-suggestion: between 3-20 letters, digits and dashes +panel.users.options: Options +panel.users.user-profile: '%s User Profile' +panel.users.user: User +panel.users.user.cannot-change-password: Cannot change the password of another user. The action is not allowed. +panel.users.user.cannot-change-role: Cannot change the role of %s. The action is not allowed. +panel.users.user.cannot-create.already-exists: Cannot create user, a user with the same name already exists +panel.users.user.cannot-create.var-missing: Cannot create user, missing a variable +panel.users.user.cannot-delete: Cannot delete user. You must be an administrator and the user must not be logged in. +panel.users.user.cannot-edit: Cannot edit user %s. The action is not allowed. +panel.users.user.created: User created +panel.users.user.deleted: User deleted +panel.users.user.edited: User data updated +panel.users.user.not-found: User not found +panel.users.users: Users +panel.view-site: View Site diff --git a/panel/translations/fr.yml b/panel/translations/fr.yml new file mode 100644 index 00000000..b586a250 --- /dev/null +++ b/panel/translations/fr.yml @@ -0,0 +1,248 @@ +panel.backup.backup: Sauvegarde +panel.backup.error.cannot-download: Impossible de télécharger la sauvegarde. %s. +panel.backup.error.cannot-download.invalid-filename: Fichier de sauvegarde invalide +panel.backup.error.cannot-make: Impossible de faire une sauvegarde. %s. +panel.backup.ready: Sauvegarde prête. Démarrage du téléchargement… +panel.cache.clear: Vider le cache +panel.cache.cleared: Cache effacé +panel.dashboard.dashboard: Tableau de bord +panel.dashboard.last-modified-pages: Dernières pages éditées +panel.dashboard.quick-actions: Actions rapides +panel.dashboard.statistics: Statistiques +panel.dashboard.statistics.unique-visitors: Visiteurs uniques +panel.dashboard.statistics.visits: Visites +panel.dashboard.welcome: Bienvenue +panel.errors.action.report-to-github: Signaler le problème sur GitHub +panel.errors.action.return-to-dashboard: Retour au tableau de bord +panel.errors.error.forbidden.description: Vous n’êtes pas autorisé à accéder à cette page. +panel.errors.error.forbidden.heading: Oups, permission requise! +panel.errors.error.forbidden.status: Interdit +panel.errors.error.internal-server-error.description: Une erreur s’est produite lors du traitement de votre demande. Veuillez vérifier la configuration du CMS ou le journal du serveur pour rechercher des erreurs. +panel.errors.error.internal-server-error.heading: Oups, quelque chose s’est mal passé! +panel.errors.error.internal-server-error.status: Erreur Interne du Serveur +panel.errors.error.not-found.description: La page n’existe pas ou la demande n’est pas valide. +panel.errors.error.not-found.heading: Oups, page non trouvée! +panel.errors.error.not-found.status: Pas trouvé +panel.login.attempt.failed: La tentative de connexion a échoué! Réessayer. +panel.login.attempt.too-many: Trop de tentatives de connexion. Veuillez réessayer dans %d minutes. +panel.login.logged-out: Vous avez été déconnecté +panel.login.login: S’identifier +panel.login.logout: Déconnexion +panel.login.password: Mot de passe +panel.login.suspicious-request-detected: Une demande suspecte a été détectée et pour des raisons de sécurité, vous avez été déconnecté. Veuillez vous reconnecter. +panel.login.username: Nom d’utilisateur +panel.manage: Gérer +panel.modal.action.cancel: Annuler +panel.modal.action.continue: Continuer +panel.modal.action.delete: Supprimer +panel.modal.action.save: Enregistrer +panel.modal.action.upload-file: Parcourir… +panel.modal.images.no-images: Aucun fichier média n’a été trouvé. +panel.modal.images.no-images.upload: Sélectionnez vos fichiers à téléverser. +panel.modal.images.title: Bibliothèque de médias +panel.options.info: Information +panel.options.options: Paramètres +panel.options.site: Site +panel.options.site.advanced: Options avancées +panel.options.site.advanced.aliases: Alias +panel.options.site.advanced.aliases.alias: Alias +panel.options.site.advanced.aliases.route: Route +panel.options.site.advanced.metadata: Métadonnées HTML +panel.options.site.advanced.metadata.content: Contenu +panel.options.site.advanced.metadata.name: Nom +panel.options.site.info: Info +panel.options.site.info.author: Auteur +panel.options.site.info.description: Description +panel.options.site.info.language: Langue +panel.options.site.info.title: Titre +panel.options.system: Système +panel.options.system.admin-panel: Panneau d’administration +panel.options.system.admin-panel.default-language: Langue par défaut +panel.options.system.admin-panel.logout-redirects-to: Après déconnexion, redirection vers +panel.options.system.admin-panel.logout-redirects-to.home: Page d’accueil +panel.options.system.admin-panel.logout-redirects-to.login: Page d’identification +panel.options.system.admin-panel.session-timeout: Expiration de la session (min) +panel.options.system.backup: Sauvegarde +panel.options.system.backup.backup-files-to-keep: Sauvegardes à conserver sur le serveur +panel.options.system.cache: Cache +panel.options.system.cache.disabled: Désactivé +panel.options.system.cache.enabled: Activé +panel.options.system.cache.time: Temps de mise cache (sec) +panel.options.system.date-and-time: Date et heure +panel.options.system.date-and-time.date-format: Format de date +panel.options.system.date-and-time.first-weekday: La semaine débute le +panel.options.system.date-and-time.first-weekday.monday: Lundi +panel.options.system.date-and-time.first-weekday.sunday: Dimanche +panel.options.system.date-and-time.hour-format: Format d’heure +panel.options.system.date-and-time.timezone: Fuseau horaire +panel.options.system.files: Fichiers +panel.options.system.files.allowed-extensions: Extensions autorisées +panel.options.system.images: Images +panel.options.system.images.jpeg-quality: Qualité JPEG +panel.options.system.images.jpeg-save-progressive: Enregistrer les images JPEG en progressif +panel.options.system.images.jpeg-save-progressive.disabled: Désactivé +panel.options.system.images.jpeg-save-progressive.enabled: Activé +panel.options.system.images.png-compression-level: Niveau de compression PNG +panel.options.system.images.process-uploads: Traitement (optimisé) des images envoyées +panel.options.system.images.process-uploads.disabled: Désactivé +panel.options.system.images.process-uploads.enabled: Activé +panel.options.system.images.webp-quality: Qualité WebP +panel.options.system.languages: Langues +panel.options.system.languages.available-languages: Langues disponibles +panel.options.system.languages.available-languages.no-languages: Aucune langue +panel.options.system.languages.preferred-language: Utiliser la langue préférée du navigateur +panel.options.system.languages.preferred-language.disabled: Désactivé +panel.options.system.languages.preferred-language.enabled: Activé +panel.options.updated: Options mises à jour +panel.options.updates: Mises à jour +panel.pages.attributes: Attributs +panel.pages.change-slug: Modifier le permalien +panel.pages.change-slug.generate: Générer automatiquement à partir du titre +panel.pages.changes.continue: Continuer sans sauvegarder +panel.pages.changes.detected: Changements détectés +panel.pages.changes.detected.prompt: Vous avez des modifications qui n’ont pas été enregistrées. Êtes-vous sûr de vouloir quitter cette page ? +panel.pages.content: Contenu +panel.pages.delete-file: Supprimer le fichier +panel.pages.delete-file.prompt: Êtes-vous sûr de vouloir supprimer ce fichier ? Cette action est irréversible. +panel.pages.delete-page: Supprimer la page +panel.pages.delete-page.prompt: Êtes-vous sûr de vouloir supprimer cette page ? Cette action est irréversible. +panel.pages.edit-page: Modifier la page %s +panel.pages.editor.bold: Gras +panel.pages.editor.bullet-list: Liste à puce +panel.pages.editor.image: Image +panel.pages.editor.italic: Italique +panel.pages.editor.link: Lien +panel.pages.editor.numbered-list: Liste ordonnée +panel.pages.editor.quote: Citer +panel.pages.editor.redo: Refaire +panel.pages.editor.summary: Résumé +panel.pages.editor.undo: Annuler +panel.pages.files: Fichiers +panel.pages.languages: Langues +panel.pages.languages.add-language: Ajouter %s +panel.pages.languages.edit-language: Éditer %s +panel.pages.new-page: Nouvelle page +panel.pages.new-page.parent: Parent +panel.pages.new-page.site: Site +panel.pages.new-page.slug-suggestion: lettres, chiffres et tirets seulement +panel.pages.new-page.slug: Permalien +panel.pages.new-page.template: Modèle (Template) +panel.pages.new-page.title: Titre +panel.pages.options: Options +panel.pages.page.actions: Actions +panel.pages.page.cacheable: Activer le cache +panel.pages.page.cannot-change-num: Impossible de changer le numéro de page +panel.pages.page.cannot-create: Impossible de créer une page +panel.pages.page.cannot-create.already-exists: Impossible de créer une page, une page avec le même uri existe déjà +panel.pages.page.cannot-create.invalid-parent: Impossible de créer une page, page parente non valide +panel.pages.page.cannot-create.invalid-slug: Impossible de créer une page, l’identifiant de la page ne doit contenir que des lettres et des chiffres séparés par des tirets +panel.pages.page.cannot-create.invalid-template: Impossible de créer une page, modèle non valide +panel.pages.page.cannot-create.var-missing: Impossible de créer une page, il manque une variable +panel.pages.page.cannot-delete-file.file-not-found: Impossible de supprimer le fichier, fichier introuvable +panel.pages.page.cannot-delete-file.page-not-found: Impossible de supprimer le fichier, page non trouvée +panel.pages.page.cannot-delete.invalid-language: 'Impossible de supprimer la page, terme non défini : %s' +panel.pages.page.cannot-delete.not-deletable: Impossible de supprimer la page, la page ne peut être supprimée +panel.pages.page.cannot-delete.page-not-found: Impossible de supprimer la page, page introuvable +panel.pages.page.cannot-edit.already-exists: Impossible de modifier la page, une page avec la même URL existe déjà +panel.pages.page.cannot-edit.index-or-error-page-slug: Impossible de modifier l’identifiant de la page d’acceuil et celle de la page d’erreur +panel.pages.page.cannot-edit.invalid-language: 'Impossible de modifier la page, terme non défini : %s' +panel.pages.page.cannot-edit.invalid-parent: Impossible de modifier la page, page parente non valide +panel.pages.page.cannot-edit.invalid-slug: Impossible de modifier l’identifiant de la page, il doit contenir que des lettres et des chiffres séparés par des tirets +panel.pages.page.cannot-edit.invalid-template: Impossible de modifier la page, modèle non valide +panel.pages.page.cannot-edit.page-not-found: Impossible de modifier la page, page non trouvée +panel.pages.page.cannot-edit.var-missing: Impossible de modifier la page, il manque une variable +panel.pages.page.cannot-move: Impossible de déplacer la page +panel.pages.page.cannot-upload-file.page-not-found: Impossible de téléverser le fichier, page introuvable +panel.pages.page.created: Page créée ! +panel.pages.page.deleted: Page supprimée +panel.pages.page.edited: Page éditée +panel.pages.page.file-deleted: Fichier supprimé +panel.pages.page.image: Image d’accroche +panel.pages.page.last-modified: Dernière modification +panel.pages.page.moved: Page déplacée ! +panel.pages.page.no-date: Aucune date +panel.pages.page.no-image: Aucune image +panel.pages.page.no-tags: Aucun tag +panel.pages.page.not-found: Page non trouvée +panel.pages.page.posts-per-page: Articles par page +panel.pages.page.publish-date: Date de publication +panel.pages.page.status: Statut +panel.pages.page.tags: Tags +panel.pages.page.title: Titre +panel.pages.page.unpublish-date: Date de péremption +panel.pages.page.visible: Visible dans le menu +panel.pages.pages: Pages +panel.pages.pages.collapse-all: Tout réduire +panel.pages.pages.expand-all: Tout développer +panel.pages.pages.reorder: Réorganiser +panel.pages.pages.search: Rechercher dans les Pages… +panel.pages.parent: Parent +panel.pages.preview-file: Aperçu +panel.pages.preview: Aperçu +panel.pages.save: Enregistrer +panel.pages.status.not-published: Brouillon +panel.pages.status.not-routable: Inaccessible +panel.pages.status.published: Publié +panel.pages.status.routable: Accessible +panel.pages.template: Modèle +panel.panel: Panneau d’administration +panel.register.create-user: Le compte panel est installé mais aucun utilisateur n’a été trouvé. Veuillez enregistrer un utilisateur maintenant. +panel.register.register: Enregistrer un nouvel utilisateur +panel.request.error.post-max-size: La demande HTTP POST dépasse la taille maximale autorisée +panel.updates.available-for-install: est disponible pour l’installation +panel.updates.check: Vérifier les mises à jour +panel.updates.install-prompt: Voulez-vous installer la mise à jour ? +panel.updates.install: Installer +panel.updates.installed: Mise à jour installée ! +panel.updates.latest-version-available: est la dernière version disponible +panel.updates.status.cannot-install: Impossible d’installer la mise à jour +panel.updates.status.cannot-make-backup: Impossible de faire une sauvegarde avant la mise à jour +panel.updates.status.checking: Vérification des mises à jour… +panel.updates.status.found: Mises à jour trouvées +panel.updates.status.installing: Installation de mises à jour… +panel.updates.status.up-to-date: À jour ! +panel.uploader.error: Impossible de télécharger le fichier. %s. +panel.uploader.error.already-exists: Un fichier du même nom existe déjà +panel.uploader.error.cannot-write: Échec de l’écriture du fichier sur le disque +panel.uploader.error.file-name: Nom de fichier non valide +panel.uploader.error.hidden-files: Impossible de téléverser des fichiers cachés commençant par un point +panel.uploader.error.mime-type: Type de fichier non autorisé +panel.uploader.error.no-file: Aucun fichier n’a été téléchargé +panel.uploader.error.no-temp: Absence du dossier temporaire +panel.uploader.error.partial: Le fichier envoyé n’a été que partiellement téléversé +panel.uploader.error.php-extension: Téléversement du fichier arrêté par extension +panel.uploader.error.size: Le fichier téléversé dépasse la taille de fichier maximale +panel.uploader.uploaded: Fichier envoyé ! +panel.user.actions: Actions +panel.user.avatar: Photo de profil +panel.user.avatar.uploaded: Photo de profil téléversée avec succès. +panel.user.email: Adresse de messagerie +panel.user.fullname: Nom complet +panel.user.language: Langue +panel.user.last-access: Dernier accès +panel.user.password: Mot de passe +panel.user.password.type-new-password: Tapez un nouveau mot de passe pour le modifier... +panel.user.role: Rôle +panel.user.role.admin: Administrateur +panel.user.role.user: Éditeur +panel.user.username: Nom d’utilisateur +panel.users.delete-user: Supprimer l’utilisateur +panel.users.delete-user.prompt: Êtes-vous sûr de vouloir supprimer cet utilisateur? Cette action est irréversible. +panel.users.new-user: Nouvel utilisateur +panel.users.new-user.password-suggestion: au moins 8 caractères +panel.users.new-user.username-suggestion: entre 3-20 lettres, chiffres et tirets +panel.users.options: Options +panel.users.user-profile: 'Profil utilisateur de %s' +panel.users.user: Utilisateur +panel.users.user.cannot-change-password: Impossible de changer le mot de passe d’un autre utilisateur. L’action n’est pas autorisée. +panel.users.user.cannot-change-role: Impossible de changer le rôle de %s. L’action n’est pas autorisée. +panel.users.user.cannot-create.already-exists: Impossible de créer l’utilisateur, un utilisateur portant le même nom existe déjà +panel.users.user.cannot-create.var-missing: Impossible de créer l’utilisateur, il manque une variable +panel.users.user.cannot-delete: Impossible de supprimer l’utilisateur. Vous devez être un administrateur et l’utilisateur ne doit pas être connecté. +panel.users.user.cannot-edit: Impossible de modifier l’utilisateur %s. L’action n’est pas autorisée. +panel.users.user.created: Compte utilisateur créé +panel.users.user.deleted: Utilisateur supprimé +panel.users.user.edited: Profil utilisateur mises à jour +panel.users.user.not-found: Utilisateur non trouvé +panel.users.users: Utilisateurs +panel.view-site: Voir le site diff --git a/panel/translations/it.yml b/panel/translations/it.yml new file mode 100644 index 00000000..e6333b6e --- /dev/null +++ b/panel/translations/it.yml @@ -0,0 +1,262 @@ +panel.backup.backup: Esegui backup +panel.backup.error.cannot-download: Impossibile scaricare il backup. %s. +panel.backup.error.cannot-download.invalid-filename: File di backup non valido. +panel.backup.error.cannot-make: Impossibile eseguire il backup. %s. +panel.backup.ready: Backup pronto. Inizio a scaricare... +panel.cache.clear: Svuota cache +panel.cache.cleared: Cache svuotata +panel.dashboard.dashboard: Riepilogo +panel.dashboard.last-modified-pages: Ultime pagine modificate +panel.dashboard.quick-actions: Azioni rapide +panel.dashboard.statistics: Statistiche +panel.dashboard.statistics.unique-visitors: Visitatori unici +panel.dashboard.statistics.visits: Visite +panel.dashboard.welcome: Benvenuto/a +panel.drag-to-reorder: Trascina per riordinare +panel.errors.action.report-to-github: Segnala un problema su GitHub +panel.errors.action.return-to-dashboard: Torna al Riepilogo +panel.errors.error.forbidden.description: Non si hanno i permessi per accedere a questa pagina. +panel.errors.error.forbidden.heading: Oops, permessi mancanti! +panel.errors.error.forbidden.status: Accesso negato +panel.errors.error.internal-server-error.description: Formwork ha riscontrato un errore nell’elaborare la richiesta. Controlla la configurazione di Formwork o il registro degli errori. +panel.errors.error.internal-server-error.heading: Oops, qualcosa è andato storto! +panel.errors.error.internal-server-error.status: Errore interno del server +panel.errors.error.not-found.description: La pagina non esiste o la richiesta non è valida. +panel.errors.error.not-found.heading: Oops, pagina non trovata! +panel.errors.error.not-found.status: Non trovato +panel.login.attempt.failed: Tentativo di accesso fallito! Riprova. +panel.login.attempt.too-many: Sono stati sbagliati troppi tentativi di accesso. Riprova tra %d minuti. +panel.login.logged-out: Sei stato disconnesso +panel.login.login: Accedi +panel.login.logout: Esci +panel.login.password: Password +panel.login.suspicious-request-detected: È stata rilevata una richiesta sospetta e per ragioni di sicurezza si è usciti dalla sessione. Effettua nuovamente l’accesso. +panel.login.username: Nome utente +panel.manage: Gestione +panel.modal.action.cancel: Annulla +panel.modal.action.continue: Continua +panel.modal.action.delete: Elimina +panel.modal.action.save: Salva +panel.modal.action.upload-file: Carica file +panel.modal.images.no-images: Qui non ci sono immagini +panel.modal.images.no-images.upload: Carica qualche immagine +panel.modal.images.title: Seleziona immagine +panel.options.info: Informazioni +panel.options.options: Impostazioni +panel.options.site: Sito +panel.options.site.advanced: Impostazioni avanzate +panel.options.site.advanced.aliases: Alias +panel.options.site.advanced.aliases.alias: Alias +panel.options.site.advanced.aliases.route: Indirizzo +panel.options.site.advanced.metadata: Metadati HTML +panel.options.site.advanced.metadata.content: Contenuto +panel.options.site.advanced.metadata.name: Nome +panel.options.site.info: Informazioni +panel.options.site.info.author: Autore +panel.options.site.info.description: Descrizione +panel.options.site.info.language: Lingua +panel.options.site.info.title: Titolo +panel.options.system: Sistema +panel.options.system.admin-panel: Pannello di amministrazione +panel.options.system.admin-panel.default-color-scheme: Combinazione di colori predefinita +panel.options.system.admin-panel.default-color-scheme.dark: Scura +panel.options.system.admin-panel.default-color-scheme.light: Chiara +panel.options.system.admin-panel.default-language: Lingua predefinita +panel.options.system.admin-panel.logout-redirects-to: Reindirizza dopo la disconnessione +panel.options.system.admin-panel.logout-redirects-to.home: Pagina iniziale +panel.options.system.admin-panel.logout-redirects-to.login: Accedi +panel.options.system.admin-panel.session-timeout: Durata sessione (min) +panel.options.system.backup: Backup +panel.options.system.backup.backup-files-to-keep: Backup da tenere sul server +panel.options.system.cache: Cache +panel.options.system.cache.disabled: Disabilitata +panel.options.system.cache.enabled: Abilitata +panel.options.system.cache.time: Tempo cache (sec) +panel.options.system.date-and-time: Data e ora +panel.options.system.date-and-time.date-format: Formato data +panel.options.system.date-and-time.first-weekday: Primo giorno della settimana +panel.options.system.date-and-time.first-weekday.monday: Lunedì +panel.options.system.date-and-time.first-weekday.sunday: Domenica +panel.options.system.date-and-time.hour-format: Formato ora +panel.options.system.date-and-time.timezone: Fuso orario +panel.options.system.files: File +panel.options.system.files.allowed-extensions: Estensioni consentite +panel.options.system.images: Immagini +panel.options.system.images.jpeg-quality: Qualità JPEG +panel.options.system.images.jpeg-save-progressive: Salva le immagini JPEG come progressive +panel.options.system.images.jpeg-save-progressive.disabled: Disabilitato +panel.options.system.images.jpeg-save-progressive.enabled: Abilitato +panel.options.system.images.png-compression-level: Livello di compressione PNG +panel.options.system.images.process-uploads: Elabora (ottimizza) le immagini caricate +panel.options.system.images.process-uploads.disabled: Disabilitato +panel.options.system.images.process-uploads.enabled: Abilitato +panel.options.system.images.webp-quality: Qualità WebP +panel.options.system.languages: Lingue +panel.options.system.languages.available-languages: Lingue disponibili +panel.options.system.languages.available-languages.no-languages: Nessuna lingua +panel.options.system.languages.preferred-language: Usa lingua preferita dal browser +panel.options.system.languages.preferred-language.disabled: Disabilitato +panel.options.system.languages.preferred-language.enabled: Abilitato +panel.options.updated: Opzioni aggiornate +panel.options.updates: Aggiornamenti +panel.pages.attributes: Attributi +panel.pages.change-slug: Modifica indirizzo +panel.pages.change-slug.generate: Genera dal titolo +panel.pages.changes.continue: Continua senza salvare +panel.pages.changes.detected: Modifiche rilevate +panel.pages.changes.detected.prompt: Alcune modifiche non sono state salvate. Si è sicuri di voler lasciare la pagina? +panel.pages.content: Contenuto +panel.pages.delete-file: Elimina file +panel.pages.delete-file.prompt: Si è sicuri di eliminare il file? Questa azione non può essere annullata. +panel.pages.delete-page: Elimina pagina +panel.pages.delete-page.prompt: Si è sicuri di eliminare la pagina? Questa azione non può essere annullata. +panel.pages.edit-page: Modifica pagina %s +panel.pages.editor.bold: Grassetto +panel.pages.editor.bullet-list: Elenco puntato +panel.pages.editor.image: Immagine +panel.pages.editor.italic: Corsivo +panel.pages.editor.link: Collegamento +panel.pages.editor.numbered-list: Elenco numerato +panel.pages.editor.quote: Citazione +panel.pages.editor.redo: Ripeti +panel.pages.editor.summary: Sommario +panel.pages.editor.undo: Annulla +panel.pages.files: File +panel.pages.languages: Lingue +panel.pages.languages.add-language: Aggiungi %s +panel.pages.languages.edit-language: Modifica %s +panel.pages.new-page: Nuova pagina +panel.pages.new-page.parent: Pagina superiore +panel.pages.new-page.site: Sito +panel.pages.new-page.slug-suggestion: solo lettere, numeri e trattini +panel.pages.new-page.slug: Indirizzo pagina +panel.pages.new-page.template: Template +panel.pages.new-page.title: Titolo +panel.pages.options: Opzioni +panel.pages.page: Pagina +panel.pages.page.actions: Azioni +panel.pages.page.cacheable: Abilita cache +panel.pages.page.cannot-change-num: Impossibile cambiare il numero della pagina +panel.pages.page.cannot-create: Impossibile creare la pagina +panel.pages.page.cannot-create.already-exists: Impossibile creare la pagina, una pagina con lo stesso indirizzo esiste già +panel.pages.page.cannot-create.invalid-parent: Impossibile creare la pagina, la pagina superiore specificata non è valida +panel.pages.page.cannot-create.invalid-slug: Impossibile creare la pagina, l'indirizzo deve contenere solo lettere e numeri separati da trattini +panel.pages.page.cannot-create.invalid-template: Impossibile creare la pagina, il template specificato non è valido +panel.pages.page.cannot-create.var-missing: Impossibile creare la pagina, manca una variabile +panel.pages.page.cannot-delete-file.file-not-found: Impossibile eliminare il file, file non trovato +panel.pages.page.cannot-delete-file.page-not-found: Impossibile eliminare il file, pagina non trovata +panel.pages.page.cannot-delete.invalid-language: Impossibile eliminare la pagina, lingua %s non valida +panel.pages.page.cannot-delete.not-deletable: Impossibile eliminare la pagina, la pagina non è eliminabile +panel.pages.page.cannot-delete.page-not-found: Impossibile eliminare la pagina, pagina non trovata +panel.pages.page.cannot-edit.already-exists: Impossibile modificare la pagina, una pagina con lo stesso indirizzo esiste già +panel.pages.page.cannot-edit.index-or-error-page-slug: Impossibile cambiare l'indirizzo della pagina iniziale o di errore +panel.pages.page.cannot-edit.invalid-language: Impossibile modificare la pagina, lingua %s non valida +panel.pages.page.cannot-edit.invalid-parent: Impossibile modificare la pagina, pagina superiore non valida +panel.pages.page.cannot-edit.invalid-slug: Impossibile cambiare l'indirizzo, l'indirizzo deve contenere solo lettere e numeri separati da trattini +panel.pages.page.cannot-edit.invalid-template: Impossibile modificare la pagina, template non valido +panel.pages.page.cannot-edit.page-not-found: Impossibile modificare la pagina, pagina non trovata +panel.pages.page.cannot-edit.var-missing: Impossibile modificare la pagina, manca una variabile +panel.pages.page.cannot-move: Impossibile spostare la pagina +panel.pages.page.cannot-upload-file.page-not-found: Impossibile caricare il file, pagina non trovata +panel.pages.page.created: Pagina creata! +panel.pages.page.deleted: Pagina eliminata +panel.pages.page.edited: Pagina modificata! +panel.pages.page.file-deleted: File eliminato +panel.pages.page.image: Immagine +panel.pages.page.last-modified: Ultime modifiche +panel.pages.page.moved: Pagina spostata! +panel.pages.page.no-date: Nessuna data +panel.pages.page.no-image: Nessuna immagine +panel.pages.page.no-tags: Nessun tag +panel.pages.page.not-found: Pagina non trovata +panel.pages.page.posts-per-page: Post per pagina +panel.pages.page.publish-date: Data di pubblicazione +panel.pages.page.status: Stato +panel.pages.page.tags: Tag +panel.pages.page.title: Titolo +panel.pages.page.unpublish-date: Data di rimozione +panel.pages.page.visible: Visibile nel menu +panel.pages.pages: Pagine +panel.pages.pages.collapse-all: Riduci tutte +panel.pages.pages.expand-all: Espandi tutte +panel.pages.pages.reorder: Riordina +panel.pages.pages.search: Cerca pagine... +panel.pages.parent: Pagina superiore +panel.pages.preview-file: Anteprima +panel.pages.preview: Anteprima +panel.pages.save: Salva +panel.pages.status.not-published: Non pubblicato +panel.pages.status.not-routable: Non raggiungibile +panel.pages.status.published: Pubblicato +panel.pages.status.routable: Raggiungibile +panel.pages.template: Template +panel.pages.toggle-children: Mostra/nascondi sottopagine +panel.panel: Pannello di Amministrazione +panel.register.create-user: Formwork è installato ma non è stato trovato alcun utente. Registrane uno ora. +panel.register.register: Registra nuovo utente +panel.request.error.post-max-size: La richiesta HTTP con metodo POST supera la dimensione massima consentita +panel.updates.available-for-install: è disponibile per l'installazione +panel.updates.check: Cerca aggiornamenti +panel.updates.install-prompt: Installare l'aggiornamento? +panel.updates.install: Installa +panel.updates.installed: Aggiornamento installato! +panel.updates.latest-version-available: è l'ultima versione disponibile +panel.updates.status.cannot-check: Impossibile cercare aggiornamenti. Riprova più tardi. +panel.updates.status.cannot-install: Impossibile installare l'aggiornamento +panel.updates.status.cannot-make-backup: Impossibile eseguire il backup prima di aggiornare +panel.updates.status.checking: Cerco aggiornamenti... +panel.updates.status.found: Aggiornamento disponibile +panel.updates.status.installing: Installo aggiornamento... +panel.updates.status.up-to-date: Aggiornato! +panel.uploader.error: Impossibile caricare il file. %s. +panel.uploader.error.already-exists: Un file con lo stesso nome esiste già +panel.uploader.error.cannot-move-to-destination: Impossibile spostare il file caricato alla destinazione +panel.uploader.error.cannot-write: Impossibile salvare il file sul disco +panel.uploader.error.destination-too-long: Il percorso di destinazione è troppo lungo +panel.uploader.error.file-name-too-long: Il nome del file è troppo lungo +panel.uploader.error.file-name: Nome del file non valido +panel.uploader.error.hidden-files: Impossibile caricare i file che iniziano con '.' +panel.uploader.error.mime-type: Il tipo di file non è consentito +panel.uploader.error.no-file: Nessun file caricato +panel.uploader.error.no-temp: Cartella temporanea mancante +panel.uploader.error.partial: Il file è stato caricato solo parzialmente +panel.uploader.error.php-extension: Il caricamento è stato interrotto da un’estensione +panel.uploader.error.size: Il file caricato supera la dimensione massima consentita +panel.uploader.uploaded: File caricato +panel.user.actions: Azioni +panel.user.avatar: Immagine +panel.user.avatar.uploaded: Immagine caricata +panel.user.color-scheme: Combinazione di colori +panel.user.color-scheme.auto: Automatica +panel.user.color-scheme.dark: Scura +panel.user.color-scheme.light: Chiara +panel.user.email: E-mail +panel.user.fullname: Nome completo +panel.user.language: Lingua +panel.user.last-access: Ultimo accesso +panel.user.password: Password +panel.user.password.type-new-password: Inserisci una nuova password per cambiarla... +panel.user.role: Ruolo +panel.user.role.admin: Amministratore +panel.user.role.user: Utente +panel.user.username: Nome utente +panel.users.delete-user: Elimina utente +panel.users.delete-user.prompt: Si è sicuri di eliminare l’utente? Questa azione non può essere annullata. +panel.users.new-user: Nuovo utente +panel.users.new-user.password-suggestion: almeno 8 caratteri +panel.users.new-user.username-suggestion: da 3 a 20 lettere, numeri, - e _ +panel.users.options: Opzioni +panel.users.user-profile: Profilo utente %s +panel.users.user: Utente +panel.users.user.cannot-change-password: Impossibile cambiare la password di un altro utente. L’azione non è consentita. +panel.users.user.cannot-change-role: Impossible cambare il ruolo di %s. L’azione non è consentita. +panel.users.user.cannot-create.already-exists: Impossibile creare l’utente, un utente con lo stesso nome esiste già +panel.users.user.cannot-create.var-missing: Impossibile creare l’utente, manca una variabile +panel.users.user.cannot-delete: Impossibile eliminare l’utente. Devi essere un amministratore e l’utente non deve essere connesso. +panel.users.user.cannot-edit: Impossibile modificare l’utente %s. L’azione non è consentita. +panel.users.user.created: Utente creato +panel.users.user.deleted: Utente eliminato +panel.users.user.edited: Dati utente aggiornati +panel.users.user.not-found: Utente non trovato +panel.users.users: Utenti +panel.view-site: Visualizza sito diff --git a/panel/translations/pt.yml b/panel/translations/pt.yml new file mode 100644 index 00000000..ced5ec65 --- /dev/null +++ b/panel/translations/pt.yml @@ -0,0 +1,261 @@ +panel.backup.backup: Cópia de Segurança +panel.backup.error.cannot-download: Não é possível efectuar download da cópia de segurança. %s. +panel.backup.error.cannot-download.invalid-filename: Ficheiro de backup inválido +panel.backup.error.cannot-make: Não é possível fazer cópia de segurança. %s. +panel.backup.ready: Cópia de segurança pronta. A iniciar o download... +panel.cache.clear: Limpar cache +panel.cache.cleared: Cache limpa +panel.dashboard.dashboard: Painel +panel.dashboard.last-modified-pages: Últimas páginas editadas +panel.dashboard.quick-actions: Acções Rápidas +panel.dashboard.statistics: Estatisticas +panel.dashboard.statistics.unique-visitors: Visitantes Únicos +panel.dashboard.statistics.visits: Visitas +panel.dashboard.welcome: Bem-Vindo +panel.errors.action.report-to-github: Denúncie um problema no GitHub +panel.errors.action.return-to-dashboard: Voltar ao Painel +panel.errors.error.forbidden.description: Não tem permissões para aceder a esta página. +panel.errors.error.forbidden.heading: Oops, permissão necessária! +panel.errors.error.forbidden.status: Proibido +panel.errors.error.internal-server-error.description: Formwork encontrou um erro ao atender sua solicitação. Verifique a configuração do Formwork ou o log do servidor para erros. +panel.errors.error.internal-server-error.heading: Ops, algo errado aconteceu! +panel.errors.error.internal-server-error.status: Erro Interno do Servidor +panel.errors.error.not-found.description: A página não existe ou a solicitação não é válida. +panel.errors.error.not-found.heading: Ops, página não encontrada! +panel.errors.error.not-found.status: Não Encontrado +panel.login.attempt.failed: Falha ao tentar efetuar login! Tente novamente. +panel.login.attempt.too-many: Demasiadas tentativas de login. Tente novamente em %d minutos. +panel.login.logged-out: Você foi desconectado +panel.login.login: Login +panel.login.logout: Logout +panel.login.password: Password +panel.login.suspicious-request-detected: Uma solicitação suspeita foi detectada e, por motivos de segurança, você foi desconectado. Por favor faça login novamente. +panel.login.username: Nome do Utilizador +panel.manage: Administrar +panel.modal.action.cancel: Cancelar +panel.modal.action.continue: Continuar +panel.modal.action.delete: Remover +panel.modal.action.save: Guardar +panel.modal.action.upload-file: Enviar um ficheiro +panel.modal.images.no-images: Não há imagens aqui +panel.modal.images.no-images.upload: Por favor carregue algumas imagens +panel.modal.images.title: Escolha uma Imagem +panel.options.info: Informações +panel.options.options: Opções +panel.options.site: Site +panel.options.site.advanced: Opções Avançadas +panel.options.site.advanced.aliases: Aliases +panel.options.site.advanced.aliases.alias: Alias +panel.options.site.advanced.aliases.route: Rota +panel.options.site.advanced.metadata: Metadados HTML +panel.options.site.advanced.metadata.content: Conteúdo +panel.options.site.advanced.metadata.name: Nome +panel.options.site.info: Informações +panel.options.site.info.author: Autor +panel.options.site.info.description: Descrição +panel.options.site.info.language: Idiomas +panel.options.site.info.title: Título +panel.options.system: Sistema +panel.options.system.admin-panel: Painel de Administração +panel.options.system.admin-panel.default-color-scheme: Esquema de cores padrão +panel.options.system.admin-panel.default-color-scheme.dark: Escuro +panel.options.system.admin-panel.default-color-scheme.light: Claro +panel.options.system.admin-panel.default-language: Idioma Padrão +panel.options.system.admin-panel.logout-redirects-to: Logout redireciona para +panel.options.system.admin-panel.logout-redirects-to.home: Principal +panel.options.system.admin-panel.logout-redirects-to.login: Login +panel.options.system.admin-panel.session-timeout: Tempo limite da sessão (min) +panel.options.system.backup: Cópia de Segurança +panel.options.system.backup.backup-files-to-keep: Backups para manter no servidor +panel.options.system.cache: Cache +panel.options.system.cache.disabled: Desactivado +panel.options.system.cache.enabled: Activado +panel.options.system.cache.time: Tempo de Cache (s) +panel.options.system.date-and-time: Data e Hora +panel.options.system.date-and-time.date-format: Formato de Data +panel.options.system.date-and-time.first-weekday: Primeiro Dia da Semana +panel.options.system.date-and-time.first-weekday.monday: Segunda +panel.options.system.date-and-time.first-weekday.sunday: Domingo +panel.options.system.date-and-time.hour-format: Formato de Hora +panel.options.system.date-and-time.timezone: Fuso Horário +panel.options.system.files: Ficheiros +panel.options.system.files.allowed-extensions: Extensões Permitidas +panel.options.system.images: Imagens +panel.options.system.images.jpeg-quality: Qualidade JPEG +panel.options.system.images.jpeg-save-progressive: Guardar imagens JPEG como progressivas +panel.options.system.images.jpeg-save-progressive.disabled: Desactivado +panel.options.system.images.jpeg-save-progressive.enabled: Activado +panel.options.system.images.png-compression-level: Nível de compressão PNG +panel.options.system.images.process-uploads: Processar (optimizar) imagens enviadas +panel.options.system.images.process-uploads.disabled: Desactivado +panel.options.system.images.process-uploads.enabled: Activado +panel.options.system.images.webp-quality: Qualidade WebP +panel.options.system.languages: Idiomas +panel.options.system.languages.available-languages: Idiomas Disponiveis +panel.options.system.languages.available-languages.no-languages: Sem Idiomas +panel.options.system.languages.preferred-language: Use o idioma preferido do browser +panel.options.system.languages.preferred-language.disabled: Desactivado +panel.options.system.languages.preferred-language.enabled: Activado +panel.options.updated: Opções Actualizadas +panel.options.updates: Actualizações +panel.pages.attributes: Atributos +panel.pages.change-slug: Editar Slug +panel.pages.change-slug.generate: Criar a partir do Título +panel.pages.changes.continue: Continuar sem Guardar +panel.pages.changes.detected: Alterações Encontradas +panel.pages.changes.detected.prompt: Tem algumas alterações que não foram guardadas. Tem a certeza que deseja sair desta página? +panel.pages.content: Conteúdo +panel.pages.delete-file: Remover Ficheiro +panel.pages.delete-file.prompt: Tem certeza de que deseja remover este ficheiro? Esta acção não pode ser desfeita. +panel.pages.delete-page: Remover Página +panel.pages.delete-page.prompt: Tem certeza que deseja remover esta página? Esta ação não pode ser desfeita. +panel.pages.edit-page: Editar Página %s +panel.pages.editor.bold: Negrito +panel.pages.editor.bullet-list: Lista de marcadores +panel.pages.editor.image: Imagem +panel.pages.editor.italic: Itálico +panel.pages.editor.link: Ligação +panel.pages.editor.numbered-list: Lista ordenada +panel.pages.editor.quote: Citar +panel.pages.editor.redo: Refazer +panel.pages.editor.summary: Sumário +panel.pages.editor.undo: Desfazer +panel.pages.files: Ficheiros +panel.pages.files.upload-label: Clique aqui para escolher um ficheiro para enviar ou arrastar para aqui. +panel.pages.languages: Idiomas +panel.pages.languages.add-language: Criar %s +panel.pages.languages.edit-language: Editar %s +panel.pages.new-page: Criar Página +panel.pages.new-page.parent: Página Parente +panel.pages.new-page.site: Site +panel.pages.new-page.slug-suggestion: letras, números e hifens apenas +panel.pages.new-page.slug: Slug da Página +panel.pages.new-page.template: Template +panel.pages.new-page.title: Título +panel.pages.options: Opções +panel.pages.page.actions: Acções +panel.pages.page.cacheable: Cache +panel.pages.page.cannot-change-num: Não é possível alterar o número da página +panel.pages.page.cannot-create: Não é possível criar página +panel.pages.page.cannot-create.already-exists: Não é possível criar a página, já existe uma página com o mesmo uri +panel.pages.page.cannot-create.invalid-parent: Não é possível criar página, página parente inválida +panel.pages.page.cannot-create.invalid-slug: Não é possível criar a página, o slug da página deve conter apenas letras e números separados por hifens +panel.pages.page.cannot-create.invalid-template: Não é possível criar página, template inválido +panel.pages.page.cannot-create.var-missing: Não é possível criar página, falta uma variável +panel.pages.page.cannot-delete-file.file-not-found: Não é possível excluir o ficheiro, ficheiro não encontrado +panel.pages.page.cannot-delete-file.page-not-found: Não é possível excluir a página, página não encontrado +panel.pages.page.cannot-delete.invalid-language: 'Não é possível excluir página, idioma inválido: %s' +panel.pages.page.cannot-delete.not-deletable: Não é possível excluir a página, a página não pode ser excluída +panel.pages.page.cannot-delete.page-not-found: Não é possível excluir página, página não encontrada +panel.pages.page.cannot-edit.already-exists: Não é possível editar a página, já existe uma página com o mesmo uri +panel.pages.page.cannot-edit.index-or-error-page-slug: Não é possível editar slug de página de índice e páginas de erro +panel.pages.page.cannot-edit.invalid-language: 'Não é possível editar a página, idioma inválido: %s' +panel.pages.page.cannot-edit.invalid-parent: Não é possível editar a página, página parente inválida +panel.pages.page.cannot-edit.invalid-slug: Não é possível editar o slug da página, deve conter apenas letras e números separados por hifens. +panel.pages.page.cannot-edit.invalid-template: Não é possível editar a página, template inválido +panel.pages.page.cannot-edit.page-not-found: Não é possível editar a página, página não encontrada +panel.pages.page.cannot-edit.var-missing: Não é possível editar a página, falta uma variável +panel.pages.page.cannot-move: Não é possível mover a página +panel.pages.page.cannot-upload-file.page-not-found: Não é possível efectuar envio do ficheiro, página não encontrada +panel.pages.page.created: Página criada! +panel.pages.page.deleted: Página removida +panel.pages.page.edited: Página editada +panel.pages.page.file-deleted: Ficheiro removido +panel.pages.page.image: Imagem +panel.pages.page.last-modified: Última Modificação +panel.pages.page.moved: Página Movida! +panel.pages.page.no-date: Sem Data +panel.pages.page.no-image: Sem Imagem +panel.pages.page.no-tags: Sem Tags +panel.pages.page.not-found: Página não encontrada +panel.pages.page.posts-per-page: Items por página +panel.pages.page.publish-date: Data de Publicação +panel.pages.page.status: Estado +panel.pages.page.tags: Tags +panel.pages.page.title: Titulo +panel.pages.page.unpublish-date: Data de Cancelamento da Publicação +panel.pages.page.visible: Visivel no menu +panel.pages.pages: Páginas +panel.pages.pages.collapse-all: Recolher Todas +panel.pages.pages.expand-all: Expandir Todas +panel.pages.pages.reorder: Reordenar +panel.pages.pages.search: Procurar Páginas... +panel.pages.parent: Página Parente +panel.pages.preview-file: Preview +panel.pages.preview: Preview +panel.pages.save: Guardar +panel.pages.status.not-published: Não Publicado +panel.pages.status.not-routable: Não Roteável +panel.pages.status.published: Publicado +panel.pages.status.routable: Roteável +panel.pages.template: Template +panel.pages.toggle-children: Expandir Páginas +panel.panel: Painel de Administração +panel.register.create-user: O Formwork está instalado, mas nenhum utilizador foi encontrado. Por favor, registre um agora. +panel.register.register: Registrar Novo Utilizador +panel.request.error.post-max-size: O pedido HTTP POST excede o tamanho máximo permitido +panel.updates.available-for-install: está disponível para instalação +panel.updates.check: Verificar actualizações +panel.updates.install-prompt: Gostaria instalar a actualização? +panel.updates.install: Instalar +panel.updates.installed: Actualização instalada! +panel.updates.latest-version-available: é a última versão disponível +panel.updates.status.cannot-check: Não é possível verificar se há actualizações. Tente mais tarde. +panel.updates.status.cannot-install: Não é possível instalar actualização +panel.updates.status.cannot-make-backup: Não é possível efectuar cópia de segurança antes de actualizar +panel.updates.status.checking: Verificando actualizações... +panel.updates.status.found: Actualizações encontradas +panel.updates.status.installing: Instalando actualizações... +panel.updates.status.up-to-date: Actualizado! +panel.uploader.error: Não é possível fazer upload do ficheiro. %s. +panel.uploader.error.already-exists: Já existe um ficheiro com o mesmo nome +panel.uploader.error.cannot-move-to-destination: Falha ao mover o ficheiro enviado para o destino +panel.uploader.error.cannot-write: Falha ao gravar ficheiro no disco +panel.uploader.error.destination-too-long: Caminho de destino demasiado longo +panel.uploader.error.file-name-too-long: Nome do ficheiro demasiado longo +panel.uploader.error.file-name: Nome do ficheiro inválido +panel.uploader.error.hidden-files: Não é possível efectuar envio de ficheros ocultos que começam com um ponto +panel.uploader.error.mime-type: Tipo de ficheiro inválido +panel.uploader.error.no-file: Nenhum ficheiro foi enviado +panel.uploader.error.no-temp: Pasta temporária inexistente +panel.uploader.error.partial: O ficheiro foi enviado apenas parcialmente +panel.uploader.error.php-extension: Envio de ficheiro interrompido por extensão +panel.uploader.error.size: O ficheiro enviado excede o tamanho máximo permitido. +panel.uploader.uploaded: Ficheiro enviado +panel.user.actions: Acções +panel.user.avatar: Avatar +panel.user.avatar.uploaded: Avatar enviado +panel.user.color-scheme: Esquema de cores +panel.user.color-scheme.auto: Auto +panel.user.color-scheme.dark: Escuro +panel.user.color-scheme.light: Claro +panel.user.email: E'mail +panel.user.fullname: Nome Completo +panel.user.language: Idioma +panel.user.last-access: Último acesso +panel.user.password: Password +panel.user.password.type-new-password: Insira nova password para alterar... +panel.user.role: Cargo +panel.user.role.admin: Administrador +panel.user.role.user: Utilizador +panel.user.username: Nome do utilizador +panel.users.delete-user: Apagar Utilizador +panel.users.delete-user.prompt: Tem a certeza de que deseja excluir este utilizador? Esta acção não pode ser revertida. +panel.users.new-user: Novo Utilizador +panel.users.new-user.password-suggestion: pelo menos 8 caracteres +panel.users.new-user.username-suggestion: entre 3 a 20 letras, números e hifens. +panel.users.options: Opções +panel.users.user-profile: 'Perfil de Utilizador %s' +panel.users.user: Utilizador +panel.users.user.cannot-change-password: Não é possível alterar a senha de outro utilizador. A acção não é permitida. +panel.users.user.cannot-change-role: Não é possível alterar o cargo de %s. A acção não é permitida. +panel.users.user.cannot-create.already-exists: Não é possível criar utilizador, já existe um utilizador com o mesmo nome +panel.users.user.cannot-create.var-missing: Não é possível criar o utilizador, falta uma variável +panel.users.user.cannot-delete: Não é possível remover o utilizador. Você deve ser um administrador e o utilizador não deve estar logado. +panel.users.user.cannot-edit: Não é possível editar o utilizador %s. A acção não é permitida. +panel.users.user.created: Utilizador criado. +panel.users.user.deleted: Utilizador removido. +panel.users.user.edited: Informação do utilizador actualizada +panel.users.user.not-found: Utilizador não encontrado +panel.users.users: Utilizadores +panel.view-site: Ver Site diff --git a/panel/translations/ru.yml b/panel/translations/ru.yml new file mode 100644 index 00000000..14ad1694 --- /dev/null +++ b/panel/translations/ru.yml @@ -0,0 +1,240 @@ +panel.backup.backup: Резерв +panel.backup.error.cannot-download: Невозможно загрузить резервную копию. %s. +panel.backup.error.cannot-download.invalid-filename: Недопустимый файл резервной копии +panel.backup.error.cannot-make: Невозможно сделать резервную копию. %s. +panel.backup.ready: Резервное копирование готовы. Начинается загрузка ... +panel.cache.clear: Очистить кэш +panel.cache.cleared: Кэш очищается +panel.dashboard.dashboard: Приборная панель +panel.dashboard.last-modified-pages: В последний раз редактировали Страницы +panel.dashboard.quick-actions: Быстрые действия +panel.dashboard.statistics: Статистика +panel.dashboard.statistics.unique-visitors: Уникальные посетители +panel.dashboard.statistics.visits: Просмотров +panel.dashboard.welcome: Добро пожаловать +panel.errors.action.report-to-github: Сообщить о проблеме на GitHub +panel.errors.action.return-to-dashboard: Вернуться к панели управления +panel.errors.error.forbidden.description: У вас нет разрешения на доступ к этой странице. +panel.errors.error.forbidden.heading: К сожалению, разрешение не требуется! +panel.errors.error.forbidden.status: Запрещено +panel.errors.error.internal-server-error.description: Formwork Администратор обнаружил ошибку при обслуживании вашего запроса. Пожалуйста, проверьте конфигурацию опалубки или журнал сервера на наличие ошибок. +panel.errors.error.internal-server-error.heading: Упс! Что-то пошло не так! +panel.errors.error.internal-server-error.status: Внутренняя Ошибка Сервера +panel.errors.error.not-found.description: Страница не существует или запрос не является действительным. +panel.errors.error.not-found.heading: К сожалению, страница не найдена! +panel.errors.error.not-found.status: Не обнаружена +panel.login.attempt.failed: Войти попытка не удалась! Попробуйте еще раз. +panel.login.attempt.too-many: Слишком много попыток входа в систему. Пожалуйста, попробуйте еще раз% D минут. +panel.login.logged-out: Вы вышли из системы +panel.login.login: Авторизация +panel.login.logout: Выйти +panel.login.password: Пароль +panel.login.suspicious-request-detected: Подозрительный запрос был обнаружен, и по соображениям безопасности вы вышли из системы. Пожалуйста, войдите снова. +panel.login.username: Имя пользователя +panel.manage: Меню +panel.modal.action.cancel: Отмена +panel.modal.action.continue: Продолжить +panel.modal.action.delete: Удалить +panel.modal.action.save: Сохранить +panel.modal.action.upload-file: Загрузить файл +panel.modal.images.no-images: Там нет изображений здесь +panel.modal.images.no-images.upload: Пожалуйста, загрузите некоторые изображения +panel.modal.images.title: Выберите изображение +panel.options.info: Информация +panel.options.options: Параметры +panel.options.site: Сайт +panel.options.site.advanced: Расширенные настройки +panel.options.site.advanced.aliases: Псевдонимы +panel.options.site.advanced.aliases.alias: Псевдоним +panel.options.site.advanced.aliases.route: Маршрут +panel.options.site.advanced.metadata: Метаданные HTML +panel.options.site.advanced.metadata.content: Содержание +panel.options.site.advanced.metadata.name: Имя +panel.options.site.info: Информация +panel.options.site.info.author: Автор +panel.options.site.info.description: Описание +panel.options.site.info.language: Язык +panel.options.site.info.title: Заглавие +panel.options.system: Система +panel.options.system.admin-panel: Панель администратора +panel.options.system.admin-panel.default-language: Язык по умолчанию +panel.options.system.admin-panel.logout-redirects-to: Выход Перенаправление +panel.options.system.admin-panel.logout-redirects-to.home: Главная +panel.options.system.admin-panel.logout-redirects-to.login: Логин +panel.options.system.admin-panel.session-timeout: Тайм-аут сеанса (мин) +panel.options.system.backup: Резервный +panel.options.system.backup.backup-files-to-keep: Резервные копии, чтобы сохранить на сервере +panel.options.system.cache: Кэш +panel.options.system.cache.disabled: Выключить +panel.options.system.cache.enabled: Включить +panel.options.system.cache.time: Кэш Время (сек) +panel.options.system.date-and-time: Дата и время +panel.options.system.date-and-time.date-format: Формат даты +panel.options.system.date-and-time.first-weekday: Первый день недели +panel.options.system.date-and-time.first-weekday.monday: Понедельник +panel.options.system.date-and-time.first-weekday.sunday: Воскресенье +panel.options.system.date-and-time.hour-format: Часовой формат +panel.options.system.date-and-time.timezone: Часовой пояс +panel.options.system.files: Файлы +panel.options.system.files.allowed-extensions: Допустимые расширения +panel.options.system.images: Картинки +panel.options.system.images.jpeg-quality: JPEG Качество +panel.options.system.images.png-compression-level: PNG Уровень сжатия +panel.options.system.languages: Языки +panel.options.system.languages.available-languages: Доступные Языки +panel.options.system.languages.available-languages.no-languages: Нет Языков +panel.options.system.languages.preferred-language: Использовать предпочитаемый язык браузера +panel.options.system.languages.preferred-language.disabled: Выключить +panel.options.system.languages.preferred-language.enabled: Включить +panel.options.updated: Опции обновляются +panel.options.updates: Обновления +panel.pages.attributes: Атрибуты +panel.pages.change-slug: Редактировать Slug +panel.pages.change-slug.generate: Сформировать из названия +panel.pages.changes.continue: Продолжить без сохранения +panel.pages.changes.detected: Изменения Обнаружены +panel.pages.changes.detected.prompt: У вас есть какие-то изменения, которые не были сохранены. Вы уверены, что хотите покинуть эту страницу? +panel.pages.content: Содержание +panel.pages.delete-file: Удалить файл +panel.pages.delete-file.prompt: Вы уверены, что хотите удалить этот файл? Это действие не может быть отменено. +panel.pages.delete-page: Удалить страницу +panel.pages.delete-page.prompt: Вы уверены, что хотите удалить эту страницу? Это действие не может быть отменено. +panel.pages.edit-page: Отредактировать страницу %s +panel.pages.editor.bold: Жирный +panel.pages.editor.bullet-list: Маркированный список +panel.pages.editor.image: Изображение +panel.pages.editor.italic: Курсивный +panel.pages.editor.link: Ссылка +panel.pages.editor.numbered-list: Нумерованный список +panel.pages.editor.quote: Кавычки +panel.pages.editor.redo: Выбор +panel.pages.editor.summary: Краткий +panel.pages.editor.undo: Открыть +panel.pages.files: Файлы +panel.pages.languages: Языки +panel.pages.languages.add-language: Добавлять %s +panel.pages.languages.edit-language: Редактировать %s +panel.pages.new-page: Новая страница +panel.pages.new-page.parent: Родитель страницы +panel.pages.new-page.site: Сайт +panel.pages.new-page.slug-suggestion: буквы, цифры и дефис только +panel.pages.new-page.slug: Страница Slug +panel.pages.new-page.template: Шаблон +panel.pages.new-page.title: Заглавие +panel.pages.options: Параметры +panel.pages.page.actions: Действия +panel.pages.page.cacheable: Кешируемый +panel.pages.page.cannot-change-num: Невозможно изменить номер страницы +panel.pages.page.cannot-create: Не удается создать страницу +panel.pages.page.cannot-create.already-exists: Невозможно создать страницу, страницу с тем же URI уже существует +panel.pages.page.cannot-create.invalid-parent: Не удается создать страницу, недействительны родительской страницы +panel.pages.page.cannot-create.invalid-slug: Невозможно создать страницу, страницу пробкового должны содержать только буквы и цифры, разделенные тире +panel.pages.page.cannot-create.invalid-template: Не удается создать страницу, недопустимый шаблон +panel.pages.page.cannot-create.var-missing: Не удается создать страницу, отсутствует переменная +panel.pages.page.cannot-delete-file.file-not-found: Не удается удалить файл, файл не найден +panel.pages.page.cannot-delete-file.page-not-found: Не удается удалить файл, файл не найден +panel.pages.page.cannot-delete.invalid-language: 'Невозможно удалить страницу, недопустимый язык: %s' +panel.pages.page.cannot-delete.not-deletable: Невозможно удалить страницу, страница не файл удаляемая +panel.pages.page.cannot-delete.page-not-found: Невозможно удалить страницу, страница не найдена +panel.pages.page.cannot-edit.already-exists: Не могу редактировать страницу, страница с той же URI уже существует +panel.pages.page.cannot-edit.index-or-error-page-slug: Не могу редактировать страницу слизняка индекса и ошибок страниц +panel.pages.page.cannot-edit.invalid-language: 'Не могу редактировать страницы, недопустимый язык: %s' +panel.pages.page.cannot-edit.invalid-parent: Не могу редактировать страницы, недопустимую родительскую страницу +panel.pages.page.cannot-edit.invalid-slug: Не можете редактировать страницу слизняка, он должен содержать только буквы и цифры, разделенные тире +panel.pages.page.cannot-edit.invalid-template: Не могу редактировать страницы, неверный шаблон +panel.pages.page.cannot-edit.page-not-found: Не могу редактировать страницу, страница не найдена +panel.pages.page.cannot-edit.var-missing: Не могу редактировать страницу, отсутствует переменный +panel.pages.page.cannot-move: Невозможно переместить страницу +panel.pages.page.cannot-upload-file.page-not-found: Невозможно загрузить файл, страница не найдена +panel.pages.page.created: Страница сгенерирована! +panel.pages.page.deleted: Страница удалена +panel.pages.page.edited: Страница отредактирован +panel.pages.page.file-deleted: Файл удален +panel.pages.page.image: Изображение +panel.pages.page.last-modified: Последнее изменение +panel.pages.page.moved: Страница переехала! +panel.pages.page.no-date: Без даты +panel.pages.page.no-image: Нет изображения +panel.pages.page.no-tags: Нет тегов +panel.pages.page.not-found: Страница не найдена +panel.pages.page.posts-per-page: Сообщения на странице +panel.pages.page.publish-date: Дата публикации +panel.pages.page.status: Статус +panel.pages.page.tags: Теги +panel.pages.page.title: Заглавие +panel.pages.page.unpublish-date: Дата Отменить публикацию +panel.pages.page.visible: Видимые в меню +panel.pages.pages: Страницы +panel.pages.pages.collapse-all: Свернуть все +panel.pages.pages.expand-all: Расширить все +panel.pages.pages.reorder: Изменение порядка +panel.pages.pages.search: Поиск Страницы ... +panel.pages.parent: Родитель страницы +panel.pages.preview-file: Предварительный просмотр +panel.pages.preview: Предварительный просмотр +panel.pages.save: Сохранить +panel.pages.status.not-published: Не Опубликовано +panel.pages.status.not-routable: Не маршрутизируемый +panel.pages.status.published: Опубликованный +panel.pages.status.routable: Маршрутизируемый +panel.pages.template: Шаблон +panel.panel: Панель администрирования +panel.register.create-user: Formwork Администратор установлен, но не было найдено ни одного пользователя. Пожалуйста зарегистрировать пользователя в настоящее время. +panel.register.register: Регистрация нового пользователя +panel.request.error.post-max-size: Запрос HTTP POST превышает максимально допустимый размер +panel.updates.available-for-install: доступен для установки +panel.updates.check: Проверка обновлений +panel.updates.install-prompt: Вы хотите установить обновление? +panel.updates.install: Устанавливать +panel.updates.installed: Обновление установлено! +panel.updates.latest-version-available: это последняя версия доступна +panel.updates.status.cannot-install: Не удается установить обновление +panel.updates.status.cannot-make-backup: Невозможно сделать резервную копию перед обновлением +panel.updates.status.checking: Проверка обновлений... +panel.updates.status.found: Обновления найдены +panel.updates.status.installing: Установка обновлений ... +panel.updates.status.up-to-date: До настоящего времени! +panel.uploader.error: Невозможно загрузить файл. %s. +panel.uploader.error.cannot-write: Не удалось записать файл на диск +panel.uploader.error.file-name: Неверное имя файла +panel.uploader.error.hidden-files: Невозможно загрузить скрытые файлы, начинающиеся с точки +panel.uploader.error.mime-type: Тип файла не допускается +panel.uploader.error.no-file: Файл не был загружен +panel.uploader.error.no-temp: Отсутствующие временную папку +panel.uploader.error.partial: Загруженный файл был загружен только частично +panel.uploader.error.php-extension: Загрузка файла останавливали расширения +panel.uploader.error.size: Загруженный файл превышает максимальный размер файла +panel.uploader.uploaded: Файл загружен +panel.user.actions: Действия +panel.user.avatar: Аватар +panel.user.avatar.uploaded: Аватар закачанный +panel.user.email: Email +panel.user.fullname: Полное имя +panel.user.language: Язык +panel.user.last-access: Последний доступ +panel.user.password: Пароль +panel.user.password.type-new-password: Введите новый пароль для изменения ... +panel.user.role: Роль +panel.user.role.admin: Администратор +panel.user.role.user: Пользователь +panel.user.username: Имя пользователя +panel.users.delete-user: Удалить пользователя +panel.users.delete-user.prompt: Вы уверены, что хотите удалить этого пользователя? Это действие не может быть отменено. +panel.users.new-user: Новый пользователь +panel.users.new-user.password-suggestion: не менее 8 символов +panel.users.new-user.username-suggestion: между 3-20 букв, цифр и тире +panel.users.options: Параметры +panel.users.user-profile: '%s Профиль пользователя' +panel.users.user: Пользователь +panel.users.user.cannot-change-password: Невозможно изменить пароль другого пользователя. Действие не допускается. +panel.users.user.cannot-change-role: Невозможно изменить роль %s. Действие не допускается. +panel.users.user.cannot-create.already-exists: Невозможно создать пользователь, пользователь с таким именем уже существует +panel.users.user.cannot-create.var-missing: Невозможно создать пользователя, пропуская переменную +panel.users.user.cannot-delete: Невозможно удалить пользователь. Вы должны быть администратором, и пользователь не должен быть авторизован. +panel.users.user.cannot-edit: Невозможно изменить пользователя %s. Действие не допускается. +panel.users.user.created: Пользователь создан +panel.users.user.deleted: Пользователь удален +panel.users.user.edited: Пользовательские данные обновляются +panel.users.user.not-found: Пользователь не найден +panel.users.users: Пользователей +panel.view-site: Просмотр сайта diff --git a/admin/views/authentication/login.php b/panel/views/authentication/login.php similarity index 64% rename from admin/views/authentication/login.php rename to panel/views/authentication/login.php index 28393c8a..0ee8a8d9 100644 --- a/admin/views/authentication/login.php +++ b/panel/views/authentication/login.php @@ -1,11 +1,11 @@ layout('login') ?> - - diff --git a/admin/views/dashboard/index.php b/panel/views/dashboard/index.php similarity index 60% rename from admin/views/dashboard/index.php rename to panel/views/dashboard/index.php index 687c1810..072c2434 100644 --- a/admin/views/dashboard/index.php +++ b/panel/views/dashboard/index.php @@ -1,33 +1,33 @@ -layout('admin') ?> +layout('panel') ?>