From 51536ba9613d8f88d9db8637f77e43be6775df32 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Mon, 8 Nov 2021 14:44:32 -0500 Subject: [PATCH 1/5] Initial progress to fix action visibility based on permissions --- _build/templates/default/sass/index.scss | 69 +++++------ .../assets/modext/widgets/core/modx.grid.js | 2 + .../security/modx.grid.access.policy.js | 70 ++++++++--- .../modx.grid.access.policy.template.js | 48 ++++++-- .../modext/widgets/security/modx.grid.role.js | 111 ++++++++++++++++-- .../security/modx.grid.user.group.settings.js | 1 + .../widgets/security/modx.panel.user.group.js | 10 +- .../widgets/source/modx.panel.sources.js | 9 +- .../modext/workspace/lexicon/lexicon.grid.js | 7 ++ .../package/package.versions.grid.js | 52 ++++++-- 10 files changed, 291 insertions(+), 88 deletions(-) diff --git a/_build/templates/default/sass/index.scss b/_build/templates/default/sass/index.scss index 32f2b3ae016..47e83de689c 100644 --- a/_build/templates/default/sass/index.scss +++ b/_build/templates/default/sass/index.scss @@ -159,8 +159,8 @@ hr { } .wait { - background: transparent url($imgPath + "style/wait.gif") no-repeat scroll - center 55px; + background: transparent url($imgPath+"style/wait.gif") no-repeat scroll center + 55px; color: $darkestGray; font-size: 15px; font-weight: bold; @@ -441,7 +441,7 @@ textarea.x-form-field { bottom: 0; display: block; content: " "; - background: transparent url($imgPath + "restyle/dragndrop.svg") no-repeat + background: transparent url($imgPath+"restyle/dragndrop.svg") no-repeat center; background-size: 50% 50%; opacity: 0.1; @@ -474,7 +474,7 @@ textarea.x-form-field { } #modx-panel-packages.drag-n-drop:before { - background: transparent url($imgPath + "restyle/dragndrop.svg") no-repeat top; + background: transparent url($imgPath+"restyle/dragndrop.svg") no-repeat top; background-size: 50% 30%; z-index: 0; } @@ -562,15 +562,18 @@ a.x-grid-link:focus { } .x-editable-column { - cursor: pointer; - &:hover, - &:focus { - color: $colorSplash; - > div::after { - @include awesome-font; - content: fa-content($fa-var-pen); - margin: 0 0.5em; + cursor: default; + &:not(.editor-disabled) { + cursor: pointer; + &:hover, + &:focus { color: $colorSplash; + > div::after { + @include awesome-font; + content: fa-content($fa-var-pen); + margin: 0 0.5em; + color: $colorSplash; + } } } } @@ -836,8 +839,8 @@ a.x-grid-link:focus { } .ux-row-action-item span { - background: transparent url($imgPath + "style/go-next.png") no-repeat scroll - 1px 4px; + background: transparent url($imgPath+"style/go-next.png") no-repeat scroll 1px + 4px; display: inline !important; line-height: 24px; margin: 0 5px; @@ -846,22 +849,22 @@ a.x-grid-link:focus { } .icon-uninstall span { - background: url($imgPath + "style/delete.png") no-repeat scroll 1px 4px + background: url($imgPath+"style/delete.png") no-repeat scroll 1px 4px transparent; } .package-details span { - background: url($imgPath + "style/info.png") no-repeat scroll 1px 4px + background: url($imgPath+"style/info.png") no-repeat scroll 1px 4px transparent; } .package-download span { - background: url($imgPath + "style/download.png") no-repeat scroll 1px 4px + background: url($imgPath+"style/download.png") no-repeat scroll 1px 4px transparent; } .package-installed span { - background: url($imgPath + "style/accept.png") no-repeat scroll 1px 4px + background: url($imgPath+"style/accept.png") no-repeat scroll 1px 4px transparent; } @@ -1095,7 +1098,7 @@ a.x-grid-link:focus { } .x-rbtn td { - background-image: url($imgPath + "restyle/icons/rbtn.gif"); + background-image: url($imgPath+"restyle/icons/rbtn.gif"); background-repeat: no-repeat; border: 0 none; height: 21px; @@ -1331,38 +1334,36 @@ iframe[classname="x-hidden"] { /* file upload, is this the old legacy (single file) uploader? */ .ext-ux-uploaddialog-addbtn { - background: url($imgPath + "restyle/fileup/file-add.gif") no-repeat left - center !important; + background: url($imgPath+"restyle/fileup/file-add.gif") no-repeat left center !important; } .ext-ux-uploaddialog-removebtn { - background: url($imgPath + "restyle/fileup/file-remove.gif") no-repeat left + background: url($imgPath+"restyle/fileup/file-remove.gif") no-repeat left center !important; } .ext-ux-uploaddialog-resetbtn { - background: url($imgPath + "restyle/fileup/reset.gif") no-repeat left center !important; + background: url($imgPath+"restyle/fileup/reset.gif") no-repeat left center !important; } .ext-ux-uploaddialog-uploadstartbtn { - background: url($imgPath + "restyle/fileup/upload-start.gif") no-repeat left + background: url($imgPath+"restyle/fileup/upload-start.gif") no-repeat left center !important; } .ext-ux-uploaddialog-uploadstopbtn { - background: url($imgPath + "restyle/fileup/upload-stop.gif") no-repeat left + background: url($imgPath+"restyle/fileup/upload-stop.gif") no-repeat left center !important; } .ext-ux-uploaddialog-indicator-stoped { - background: url($imgPath + "restyle/fileup/done.gif") no-repeat center center; + background: url($imgPath+"restyle/fileup/done.gif") no-repeat center center; height: 16px; width: 16px; } .ext-ux-uploaddialog-indicator-processing { - background: url($imgPath + "restyle/fileup/loading.gif") no-repeat center - center; + background: url($imgPath+"restyle/fileup/loading.gif") no-repeat center center; height: 16px; width: 16px; } @@ -1374,19 +1375,19 @@ iframe[classname="x-hidden"] { } .ext-ux-uploaddialog-state-0 { - background-image: url($imgPath + "restyle/fileup/uncheck.gif"); + background-image: url($imgPath+"restyle/fileup/uncheck.gif"); } .ext-ux-uploaddialog-state-1 { - background-image: url($imgPath + "restyle/fileup/check.gif"); + background-image: url($imgPath+"restyle/fileup/check.gif"); } .ext-ux-uploaddialog-state-2 { - background-image: url($imgPath + "restyle/fileup/failed.gif"); + background-image: url($imgPath+"restyle/fileup/failed.gif"); } .ext-ux-uploaddialog-state-3 { - background-image: url($imgPath + "restyle/fileup/file-uploading.gif"); + background-image: url($imgPath+"restyle/fileup/file-uploading.gif"); } /* tree grid */ @@ -1731,7 +1732,7 @@ iframe[classname="x-hidden"] { } #ux-lightbox-loading { - background: url($imgPath + "style/loading.gif") no-repeat scroll center 15% + background: url($imgPath+"style/loading.gif") no-repeat scroll center 15% transparent; height: 25%; left: 0; @@ -1820,7 +1821,7 @@ iframe[classname="x-hidden"] { } #ux-lightbox-data #ux-lightbox-navClose { - background: transparent url($imgPath + "style/close.png") no-repeat scroll 0 0; + background: transparent url($imgPath+"style/close.png") no-repeat scroll 0 0; float: right; height: 16px; outline: medium none; diff --git a/manager/assets/modext/widgets/core/modx.grid.js b/manager/assets/modext/widgets/core/modx.grid.js index fc5e610fdab..2069a99bab3 100644 --- a/manager/assets/modext/widgets/core/modx.grid.js +++ b/manager/assets/modext/widgets/core/modx.grid.js @@ -179,6 +179,7 @@ Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ this.getView().refresh(false); } } + ,saveRecord: function(e) { e.record.data.menu = null; var p = this.config.saveParams || {}; @@ -666,6 +667,7 @@ Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ ,actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { var actions = this.getActions.apply(this, [record, rowIndex, colIndex, store]); + // console.log('actionsColumnRenderer record: ',record); if (this.config.disableContextMenuAction !== true) { actions.push({ text: _('context_menu'), diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.js index 4efca422a18..23a961e065b 100644 --- a/manager/assets/modext/widgets/security/modx.grid.access.policy.js +++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.js @@ -59,14 +59,26 @@ MODx.grid.AccessPolicy = function(config) { ,columns: [this.sm,{ header: _('policy_name') ,dataIndex: 'name' + ,id: 'modx-policy--policy-name' ,width: 200 - ,editor: { xtype: 'textfield' ,allowBlank: false } + ,editor: { + xtype: 'textfield', + allowBlank: false + } ,sortable: true - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=security/access/policy/update&id=' + record.data.id - }); - }, scope: this } + ,renderer: { + fn: function(value, metaData, record) { + if (!MODx.perm.policy_save || !MODx.perm.policy_edit) { + metaData.css = 'editor-disabled'; + return value; + } + return this.renderLink(value, { + href: '?a=security/access/policy/update&id=' + record.data.id, + target: '_blank' + }); + }, + scope: this + } },{ header: _('description') ,dataIndex: 'description' @@ -78,13 +90,21 @@ MODx.grid.AccessPolicy = function(config) { },{ header: _('policy_template') ,dataIndex: 'template_name' + ,id: 'modx-policy--template-name' ,width: 375 - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=security/access/policy/template/update&id=' + record.data.template - ,target: '_blank' - }); - }, scope: this } + ,renderer: { + fn: function(value, metaData, record) { + if (!MODx.perm.policy_template_save || !MODx.perm.policy_template_edit) { + metaData.css = 'editor-disabled'; + return value; + } + return this.renderLink(value, { + href: '?a=security/access/policy/template/update&id=' + record.data.template, + target: '_blank' + }); + }, + scope: this + } },{ header: _('active_permissions') ,dataIndex: 'active_of' @@ -93,6 +113,7 @@ MODx.grid.AccessPolicy = function(config) { }] ,tbar: [{ text: _('create') + ,hidden: !MODx.perm.policy_new || !MODx.perm.policy_save ,cls:'primary-button' ,scope: this ,handler: this.createPolicy @@ -102,6 +123,7 @@ MODx.grid.AccessPolicy = function(config) { ,handler: this.importPolicy },{ text: _('bulk_actions') + ,hidden: !MODx.perm.policy_delete ,menu: [{ text: _('policy_remove_multiple') ,handler: this.removeSelected @@ -141,14 +163,25 @@ MODx.grid.AccessPolicy = function(config) { }] }); MODx.grid.AccessPolicy.superclass.constructor.call(this,config); + + this.on('render', function(){ + if (!MODx.perm.policy_save || !MODx.perm.policy_edit) { + const colModel = this.getColumnModel(), + nameIdx = colModel.getIndexById('modx-policy--policy-name') + ; + colModel.setEditable(nameIdx, false); + } + }); }; Ext.extend(MODx.grid.AccessPolicy,MODx.grid.Grid,{ + search: function(tf,newValue,oldValue) { var nv = newValue || tf; this.getStore().baseParams.query = Ext.isEmpty(nv) || Ext.isObject(nv) ? '' : nv; this.getBottomToolbar().changePage(1); return true; } + ,clearFilter: function() { this.getStore().baseParams = { action: 'Security/Access/Policy/GetList' @@ -178,6 +211,7 @@ Ext.extend(MODx.grid.AccessPolicy,MODx.grid.Grid,{ this.windows.apc.reset(); this.windows.apc.show(e.target); } + ,exportPolicy: function(btn,e) { var id = this.menu.record.id; MODx.Ajax.request({ @@ -217,28 +251,32 @@ Ext.extend(MODx.grid.AccessPolicy,MODx.grid.Grid,{ var p = r.data.cls; var m = []; - if (this.getSelectionModel().getCount() > 1) { + if (this.getSelectionModel().getCount() > 1 && MODx.perm.policy_delete) { m.push({ text: _('policy_remove_multiple') ,handler: this.removeSelected }); } else { - if (p.indexOf('pedit') != -1) { + if (MODx.perm.policy_edit && MODx.perm.policy_save) { m.push({ text: _('edit') ,handler: this.editPolicy }); + } + if (MODx.perm.policy_save) { m.push({ text: _('duplicate') ,handler: this.confirm.createDelegate(this,["Security/Access/Policy/Duplicate","policy_duplicate_confirm"]) }); } - if (m.length > 0) { m.push('-'); } + if (m.length > 0) { + m.push('-'); + } m.push({ text: _('policy_export') ,handler: this.exportPolicy }); - if (p.indexOf('premove') != -1) { + if (MODx.perm.policy_delete) { if (m.length > 0) m.push('-'); m.push({ text: _('delete') diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js index 22d1f78c8a5..29c9b13e357 100644 --- a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js +++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js @@ -59,14 +59,26 @@ MODx.grid.AccessPolicyTemplate = function(config) { ,columns: [this.sm,{ header: _('name') ,dataIndex: 'name' + ,id: 'modx-policy-template--template-name' ,width: 200 - ,editor: { xtype: 'textfield' ,allowBlank: false } + ,editor: { + xtype: 'textfield', + allowBlank: false + } ,sortable: true - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=security/access/policy/template/update&id=' + record.data.id - }); - }, scope: this } + ,renderer: { + fn: function(value, metaData, record) { + if (!MODx.perm.policy_template_save || !MODx.perm.policy_template_edit) { + metaData.css = 'editor-disabled'; + return value; + } + return this.renderLink(value, { + href: '?a=security/access/policy/template/update&id=' + record.data.id, + target: '_blank' + }); + }, + scope: this + } },{ header: _('description') ,dataIndex: 'description' @@ -96,6 +108,7 @@ MODx.grid.AccessPolicyTemplate = function(config) { }] ,tbar: [{ text: _('create') + ,hidden: !MODx.perm.policy_template_new || !MODx.perm.policy_template_save ,cls:'primary-button' ,scope: this ,handler: this.createPolicyTemplate @@ -105,6 +118,7 @@ MODx.grid.AccessPolicyTemplate = function(config) { ,handler: this.importPolicyTemplate },{ text: _('bulk_actions') + ,hidden: !MODx.perm.policy_template_delete ,menu: [{ text: _('policy_remove_multiple') ,handler: this.removeSelected @@ -144,37 +158,51 @@ MODx.grid.AccessPolicyTemplate = function(config) { }] }); MODx.grid.AccessPolicyTemplate.superclass.constructor.call(this,config); + + this.on('render', function(){ + if (!MODx.perm.policy_template_save || !MODx.perm.policy_template_edit) { + const colModel = this.getColumnModel(), + nameIdx = colModel.getIndexById('modx-policy-template--template-name') + ; + colModel.setEditable(nameIdx, false); + } + }); }; Ext.extend(MODx.grid.AccessPolicyTemplate,MODx.grid.Grid,{ + getMenu: function() { var r = this.getSelectionModel().getSelected(); var p = r.data.cls; var m = []; - if (this.getSelectionModel().getCount() > 1) { + if (this.getSelectionModel().getCount() > 1 && MODx.perm.policy_template_delete) { m.push({ text: _('policy_template_remove_multiple') ,handler: this.removeSelected }); } else { - if (p.indexOf('pedit') !== -1) { + if (MODx.perm.policy_template_save && MODx.perm.policy_template_edit) { m.push({ text: _('edit') ,handler: this.editPolicyTemplate }); + } + if (MODx.perm.policy_template_save) { m.push({ text: _('duplicate') ,handler: this.confirm.createDelegate(this,["Security/Access/Policy/Template/Duplicate","policy_template_duplicate_confirm"]) }); } - if (m.length > 0) { m.push('-'); } + if (m.length > 0) { + m.push('-'); + } m.push({ text: _('policy_template_export') ,handler: this.exportPolicyTemplate }); - if (p.indexOf('premove') !== -1) { + if (MODx.perm.policy_template_delete) { if (m.length > 0) m.push('-'); m.push({ text: _('delete'), diff --git a/manager/assets/modext/widgets/security/modx.grid.role.js b/manager/assets/modext/widgets/security/modx.grid.role.js index ac47fbf628b..60fc4f43a68 100644 --- a/manager/assets/modext/widgets/security/modx.grid.role.js +++ b/manager/assets/modext/widgets/security/modx.grid.role.js @@ -20,6 +20,7 @@ MODx.grid.Role = function(config) { ,paging: true ,autosave: true ,save_action: 'Security/Role/UpdateFromGrid' + ,clicksToEdit: 1 ,columns: [{ header: _('id') ,dataIndex: 'id' @@ -28,45 +29,129 @@ MODx.grid.Role = function(config) { },{ header: _('name') ,dataIndex: 'name' + ,id: 'role--name' ,width: 150 ,sortable: true - ,editor: { xtype: 'textfield' } + ,editor: { + xtype: 'textfield' + } + ,renderer: { + fn: function(value, metaData, record) { + if (!MODx.perm.save_role || !MODx.perm.edit_role || this.isProtected(record.data.authority)) { + metaData.css = 'editor-disabled'; + // console.log('metaData: ', metaData); + // console.log('this', this); + } + return value; + }, + scope: this + } + ,listeners: { + dblclick: function(col, gp, rowIndex, e) { + // console.log('dblclick, col: ', col); + // console.log('dblclick, gp: ', gp); + // console.log('dblclick, e: ', e); + + } + } },{ header: _('description') ,dataIndex: 'description' + ,id: 'role--description' ,width: 350 - ,editor: { xtype: 'textarea' } + ,editor: { + xtype: 'textarea' + } + ,renderer: { + fn: function(value, metaData, record) { + if (!MODx.perm.save_role || !MODx.perm.edit_role || this.isProtected(record.data.authority)) { + metaData.css = 'editor-disabled'; + } + return value; + }, + scope: this + } },{ header: _('authority') ,dataIndex: 'authority' + ,id: 'role--authority' ,width: 60 - ,editor: { xtype: 'textfield' } ,sortable: true + ,editor: { + xtype: 'textfield' + } + ,renderer: { + fn: function(value, metaData, record, rowIndex, colIndex) { + const isProtected = this.isProtected(record.data.authority); + if (!MODx.perm.save_role || !MODx.perm.edit_role || isProtected) { + metaData.css = 'editor-disabled'; + if (isProtected) { + console.log(`protected row #${rowIndex} metaData:`, metaData); + } + } + return value; + }, + scope: this + } }] ,tbar: [{ text: _('create') + ,hidden: !MODx.perm.new_role || !MODx.perm.save_role ,cls:'primary-button' ,handler: this.createRole ,scope: this }] }); MODx.grid.Role.superclass.constructor.call(this,config); - this.on('beforeedit',this.checkEditable,this); + + this.on('render', function() { + if (!MODx.perm.save_role || !MODx.perm.edit_role) { + const colModel = this.getColumnModel(), + editableCols = ['role--name', 'role--description', 'role--authority'] + ; + editableCols.forEach(colId => { + const colIndex = colModel.getIndexById(colId); + colModel.setEditable(colIndex, false); + }); + } + }); }; Ext.extend(MODx.grid.Role,MODx.grid.Grid,{ - checkEditable: function(o) { - var p = o.record.data.perm || ''; - return p.indexOf('edit') != -1; + + /** + * @property {Function} isProtected - Used to exclude the permanent roles of + * 'Super User' (0) and 'Member' (9999) for all permissions levels + * + * @param {Number} authority - The authority level for the role being tested + * @return {Boolean} + */ + isProtected: function(authority) { + const protected = [0, 9999]; + return protected.includes(authority); + } + + ,actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { + // console.log(`actionsColumnRenderer called from grid.role`); + // console.log('actionsColumnRenderer store: ',store); + // console.log('actionsColumnRenderer value: ',value); + // console.log('actionsColumnRenderer rowIndex: ',rowIndex); + // console.log('actionsColumnRenderer record: ',record); + // console.log('actionsColumnRenderer in lexicon.grid, rowIndex: ',rowIndex); + // console.log('actionsColumnRenderer in lexicon.grid, arguments: ',arguments); + // console.log('actionsColumnRenderer metaData: ',metaData); + + if (MODx.perm.delete_role && !this.isProtected(record.data.authority)) { + return this.superclass().actionsColumnRenderer.apply(this, arguments); + } } ,getMenu: function() { - var r = this.getSelectionModel().getSelected(); - var p = r.data.perm || ''; - var m = []; - if (p.indexOf('remove') != -1) { + const record = this.getSelectionModel().getSelected(); + let m = []; + if (MODx.perm.delete_role && !this.isProtected(record.data.authority)) { m.push({ - text: _('delete') - ,handler: this.remove.createDelegate(this,['role_remove_confirm', 'Security/Role/Remove']) + text: _('delete'), + handler: this.remove.createDelegate(this,['role_remove_confirm', 'Security/Role/Remove']) }); } return m; diff --git a/manager/assets/modext/widgets/security/modx.grid.user.group.settings.js b/manager/assets/modext/widgets/security/modx.grid.user.group.settings.js index bc441fbb53e..1302779287d 100644 --- a/manager/assets/modext/widgets/security/modx.grid.user.group.settings.js +++ b/manager/assets/modext/widgets/security/modx.grid.user.group.settings.js @@ -36,6 +36,7 @@ MODx.grid.GroupSettings = function(config) { }] }); MODx.grid.GroupSettings.superclass.constructor.call(this,config); + console.log(`MODx.grid.GroupSettings called`); }; Ext.extend(MODx.grid.GroupSettings,MODx.grid.SettingsGrid, { _showMenu: function(g,ri,e) { diff --git a/manager/assets/modext/widgets/security/modx.panel.user.group.js b/manager/assets/modext/widgets/security/modx.panel.user.group.js index e64dfe9b5bf..bfcff0b0225 100644 --- a/manager/assets/modext/widgets/security/modx.panel.user.group.js +++ b/manager/assets/modext/widgets/security/modx.panel.user.group.js @@ -430,9 +430,17 @@ MODx.grid.UserGroupUsers = function(config) { }); MODx.grid.UserGroupUsers.superclass.constructor.call(this,config); this.addEvents('updateRole','addUser'); + console.log(`MODx.grid.UserGroupUsers called from modx.panel.user.group.js`); }; Ext.extend(MODx.grid.UserGroupUsers,MODx.grid.Grid,{ - getMenu: function() { + + actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { + if (MODx.perm.usergroup_user_edit) { + return this.superclass().actionsColumnRenderer.apply(this, arguments); + } + } + + ,getMenu: function() { var m = []; if (MODx.perm.usergroup_user_edit) { m.push({ diff --git a/manager/assets/modext/widgets/source/modx.panel.sources.js b/manager/assets/modext/widgets/source/modx.panel.sources.js index 92bf21277b5..9713a8cbffa 100644 --- a/manager/assets/modext/widgets/source/modx.panel.sources.js +++ b/manager/assets/modext/widgets/source/modx.panel.sources.js @@ -163,7 +163,14 @@ MODx.grid.Sources = function(config) { MODx.grid.Sources.superclass.constructor.call(this,config); }; Ext.extend(MODx.grid.Sources,MODx.grid.Grid,{ - getMenu: function() { + + actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { + if (record.data.cls) { + return this.superclass().actionsColumnRenderer.apply(this, arguments); + } + } + + ,getMenu: function() { var r = this.getSelectionModel().getSelected(); var p = r.data.cls; diff --git a/manager/assets/modext/workspace/lexicon/lexicon.grid.js b/manager/assets/modext/workspace/lexicon/lexicon.grid.js index 598f52da6b8..ffb3af3b8c0 100644 --- a/manager/assets/modext/workspace/lexicon/lexicon.grid.js +++ b/manager/assets/modext/workspace/lexicon/lexicon.grid.js @@ -272,6 +272,12 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ }); } + ,actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { + if (record.data.overridden) { + return this.superclass().actionsColumnRenderer.apply(this, arguments); + } + } + ,revertEntry: function() { var p = this.menu.record; p.action = 'Workspace/Lexicon/Revert'; @@ -289,6 +295,7 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ ,getMenu: function() { var r = this.getSelectionModel().getSelected(); var m = []; + console.log('getMenu, r: ', r); if (r.data.overridden) { m.push({ text: _('entry_revert') diff --git a/manager/assets/modext/workspace/package/package.versions.grid.js b/manager/assets/modext/workspace/package/package.versions.grid.js index 0223981dd67..69d9c01daa8 100644 --- a/manager/assets/modext/workspace/package/package.versions.grid.js +++ b/manager/assets/modext/workspace/package/package.versions.grid.js @@ -14,21 +14,33 @@ MODx.grid.PackageVersions = function(config) { ,signature: config.signature ,package_name: MODx.request.package_name } - ,fields: ['signature','name','version','release','created','updated','installed','state' - ,'workspace','provider','provider_name','disabled','source' - ,'readme','menu'] + ,fields: [ + 'signature','name','version','release','created','updated','installed','state', + 'workspace','provider','provider_name','disabled','source','readme','menu' + ] ,plugins: [this.exp] ,pageSize: 20 - ,columns: [this.exp,{ - header: _('name') ,dataIndex: 'name' } - ,{ header: _('version') ,dataIndex: 'version' } - ,{ header: _('release') ,dataIndex: 'release' } - ,{ header: _('installed') ,dataIndex: 'installed' ,renderer: this._rins } - ,{ - header: _('provider') - ,dataIndex: 'provider_name' - ,editable: false - }] + ,columns: [ + this.exp, + { + header: _('name'), + dataIndex: 'name' + },{ + header: _('version'), + dataIndex: 'version' + },{ + header: _('release'), + dataIndex: 'release' + },{ + header: _('installed'), + dataIndex: 'installed', + renderer: this._rins + },{ + header: _('provider'), + dataIndex: 'provider_name', + editable: false + } + ] ,primaryKey: 'signature' ,paging: true ,autosave: true @@ -53,6 +65,20 @@ Ext.extend(MODx.grid.PackageVersions,MODx.grid.Grid,{ } } + ,actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { + // var actions = this.getActions.apply(this, [record, rowIndex, colIndex, store]); + // console.log('actionsColumnRenderer store: ',store); + // console.log('actionsColumnRenderer value: ',value); + // console.log('actionsColumnRenderer rowIndex: ',rowIndex); + // console.log('actionsColumnRenderer record: ',record); + // console.log('actionsColumnRenderer in lexicon.grid, rowIndex: ',rowIndex); + // console.log('actionsColumnRenderer in lexicon.grid, arguments: ',arguments); + // console.log('actionsColumnRenderer metaData: ',metaData); + if (record.data.menu) { + return this.superclass().actionsColumnRenderer.apply(this, arguments); + } + } + ,removePriorVersion: function(btn,e) { var r = this.menu.record; MODx.msg.confirm({ From 97d848d6f3d9270f0beb7bef8f60d30bbdd1b2af Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Mon, 22 Nov 2021 01:23:53 -0500 Subject: [PATCH 2/5] Progress batch 2 --- _build/templates/default/sass/_utility.scss | 10 + _build/templates/default/sass/index.scss | 58 +- core/lexicon/en/context.inc.php | 7 + core/lexicon/en/default.inc.php | 1 + core/lexicon/en/policy.inc.php | 6 +- core/lexicon/en/user.inc.php | 11 +- .../Revolution/Processors/Context/GetList.php | 96 +- .../Processors/Security/Role/GetList.php | 51 +- .../Revolution/Processors/Source/GetList.php | 5 + .../assets/modext/widgets/core/modx.grid.js | 296 ++++- .../security/modx.grid.access.policy.js | 724 ++++++----- .../modx.grid.access.policy.template.js | 638 ++++++---- .../modext/widgets/security/modx.grid.role.js | 372 +++--- .../widgets/security/modx.grid.user.group.js | 18 +- .../widgets/security/modx.panel.user.group.js | 1107 ++++++++++------- .../widgets/security/modx.tree.user.group.js | 2 + .../widgets/source/modx.panel.sources.js | 662 ++++++---- .../widgets/system/modx.grid.context.js | 510 +++++--- .../modext/workspace/lexicon/lexicon.grid.js | 78 +- 19 files changed, 2869 insertions(+), 1783 deletions(-) diff --git a/_build/templates/default/sass/_utility.scss b/_build/templates/default/sass/_utility.scss index 27c6b20ed18..305ba847788 100644 --- a/_build/templates/default/sass/_utility.scss +++ b/_build/templates/default/sass/_utility.scss @@ -212,3 +212,13 @@ } } } + +@mixin textLink { + color: $colorSplash; + text-decoration: none; + border-bottom: 1px dotted scale-color($colorSplash, $lightness: 50%); + &:hover { + color: $black; + border-bottom-color: scale-color($black, $lightness: 40%); + } +} diff --git a/_build/templates/default/sass/index.scss b/_build/templates/default/sass/index.scss index 47e83de689c..5900380f600 100644 --- a/_build/templates/default/sass/index.scss +++ b/_build/templates/default/sass/index.scss @@ -539,6 +539,14 @@ textarea.x-form-field { } /* grids */ + +.modx-protected-row { + .x-grid3-cell-inner { + font-style: italic; + color: $colorSplash; + } +} + .x-small-editor .x-form-field { font-size: 12px !important; } @@ -551,14 +559,11 @@ textarea.x-form-field { color: #999 !important; } -a.x-grid-link { - color: $colorSplash; - text-decoration: underline; -} - -a.x-grid-link:hover, -a.x-grid-link:focus { - text-decoration: none; +.x-grid-link { + @include textLink; + &.simulated-link { + cursor: pointer; + } } .x-editable-column { @@ -826,6 +831,37 @@ a.x-grid-link:focus { } /* rowactions */ +.x-grid3-row { + &.disable-selection, + &.disable-selection.x-grid3-row-selected { + .x-grid3-row-checker { + position: relative; + &::before, + &::after { + color: $disabledTextColor; + } + &::before { + content: '\f0c8'; + } + &::after { + content: '\f715'; + font-size: 6px; + position: absolute; + left: 50%; + top: 50%; + margin-left: 2px; + margin-top: 1px; + transform: translate(-50%, -50%) rotate(98deg); + font-weight: 600; + font-family: 'Font Awesome 5 Free'; + } + &:hover { + cursor: default; + } + } + } +} + .ux-row-action-cell .x-grid3-cell-inner { padding: 1px 0 0 0; } @@ -1700,6 +1736,12 @@ iframe[classname="x-hidden"] { user-select: text !important; } +.x-selectable { + &.simulated-link * { + @include textLink; + } +} + /* Lightbox */ #ux-lightbox { left: 0; diff --git a/core/lexicon/en/context.inc.php b/core/lexicon/en/context.inc.php index 405adb938f3..edc8d78d3b3 100644 --- a/core/lexicon/en/context.inc.php +++ b/core/lexicon/en/context.inc.php @@ -6,17 +6,24 @@ * @package modx * @subpackage lexicon */ +$_lang['_context_mgr_description'] = 'The default manager or administration context for content management activity.'; +$_lang['_context_mgr_name'] = 'Manager'; +$_lang['_context_web_description'] = 'The default front-end context for your website.'; +$_lang['_context_web_name'] = 'Website'; $_lang['context'] = 'Context'; $_lang['context_add'] = 'Add Context'; $_lang['context_data'] = 'Context Data'; +$_lang['context_edit'] = 'Edit this context'; $_lang['context_err_ae'] = 'A Context with that name already exists.'; $_lang['context_err_create'] = 'An error occurred while creating the Context.'; $_lang['context_err_duplicate'] = 'An error occurred while trying to duplicate the Context.'; $_lang['context_err_load_data'] = 'Error loading context data.'; +$_lang['context_err_name_reserved'] = 'The context name “[[+reservedName]]” is reserved. Please choose another name.'; $_lang['context_err_nf'] = 'Context not found!'; $_lang['context_err_nfs'] = 'Context not found with key: [[+key]]'; $_lang['context_err_ns'] = 'Context not specified.'; $_lang['context_err_ns_key'] = 'Please specify a valid key for the Context.'; +$_lang['context_err_ns_name'] = 'Please specify a valid name for the Context.'; $_lang['context_err_remove'] = 'An error occurred while trying to delete the Context.'; $_lang['context_err_save'] = 'An error occurred while saving the Context.'; $_lang['context_id'] = 'Ctx ID'; diff --git a/core/lexicon/en/default.inc.php b/core/lexicon/en/default.inc.php index 3be6fff7f24..0eff8154d00 100644 --- a/core/lexicon/en/default.inc.php +++ b/core/lexicon/en/default.inc.php @@ -92,6 +92,7 @@ $_lang['create_user_group'] = 'Create User Group'; $_lang['created'] = 'Created'; $_lang['createdon'] = 'Creation date'; +$_lang['creator'] = 'Creator'; $_lang['current'] = 'Current'; $_lang['dashboard'] = 'Dashboard'; $_lang['data_err_load'] = 'Error loading data.'; diff --git a/core/lexicon/en/policy.inc.php b/core/lexicon/en/policy.inc.php index 7ebadfa9765..e580e39a0b4 100644 --- a/core/lexicon/en/policy.inc.php +++ b/core/lexicon/en/policy.inc.php @@ -28,6 +28,7 @@ $_lang['policy_desc_template'] = 'The Policy Template used for this Policy. Policies get their Permission lists from their Template.'; $_lang['policy_desc_lexicon'] = 'Optional. The Lexicon Topic that this Policy uses to translate the Permissions it owns.'; $_lang['policy_duplicate_confirm'] = 'Are you sure you want to duplicate this policy and all of its data?'; +$_lang['policy_edit'] = 'Edit this policy'; $_lang['policy_err_ae'] = 'A Policy already exists with the name `[[+name]]`. Please select another name.'; $_lang['policy_err_nf'] = 'Policy not found.'; $_lang['policy_err_ns'] = 'Policy not specified.'; @@ -44,17 +45,19 @@ $_lang['policy_property_remove'] = 'Delete Access Policy Property'; $_lang['policy_property_specify_name'] = 'Please specify a policy property name:'; $_lang['policy_remove_confirm'] = 'Are you sure you want to delete this Access Policy?'; -$_lang['policy_remove_multiple'] = 'Delete Policies'; +$_lang['policy_remove_multiple'] = 'Delete Selected Policies'; $_lang['policy_remove_multiple_confirm'] = 'Are you sure you want to delete these Access Policies? This is irreversible.'; $_lang['policy_template'] = 'Policy Template'; $_lang['policy_template_desc'] = 'A Policy Template defines which Permissions will show up in the Permissions grid when editing a specific Policy. You can add or remove specific Permissions from this template below. Note that removing a Permission from a Template will remove it from any Policies that use this Template.'; $_lang['policy_template_desc_name'] = 'The name of the Access Policy Template'; $_lang['policy_template_desc_description'] = 'Optional. A short description of the Access Policy Template. Also you might use lexicon keys here.'; +$_lang['policy_template_edit'] = 'Edit this policy template'; $_lang['policy_template_lexicon'] = 'Lexicon Topic'; $_lang['policy_template_desc_lexicon'] = 'Optional. The Lexicon Topic that this Policy Template uses to translate the Permissions it owns.'; $_lang['policy_template_desc_template_group'] = 'The Policy Template Group to use. This is used when selecting Policies from a dropdown menu; usually they are filtered by template group. Select an appropriate group for your Policy Template.'; $_lang['policy_template_duplicate_confirm'] = 'Are you sure you want to duplicate this Policy Template?'; $_lang['policy_template_err_ae'] = 'A Policy Template already exists with the name `[[+name]]`. Please select another name.'; +$_lang['policy_template_err_name_ns'] = 'A name is required for this Policy Template.'; $_lang['policy_template_err_nf'] = 'Policy Template not found.'; $_lang['policy_template_err_ns'] = 'Policy Template not specified.'; $_lang['policy_template_err_remove'] = 'An error occurred while trying to delete the Policy Template.'; @@ -77,6 +80,7 @@ $_lang['policy_template_context_desc'] = 'Context Policy Template with all attributes.'; $_lang['policy_template_namespace_desc'] = 'Namespace Policy Template with all attributes.'; $_lang['policy_template_group_administrator_desc'] = 'All admin policy templates.'; +$_lang['policy_template_group_err_ns'] = 'A group must be assigned for this Policy Template.'; $_lang['policy_template_group_object_desc'] = 'All Resource-based policy templates.'; $_lang['policy_template_group_resource_desc'] = 'All Object-based policy templates.'; $_lang['policy_template_group_element_desc'] = 'All Element-based policy templates.'; diff --git a/core/lexicon/en/user.inc.php b/core/lexicon/en/user.inc.php index 10c32be059f..74d5140a4dd 100644 --- a/core/lexicon/en/user.inc.php +++ b/core/lexicon/en/user.inc.php @@ -6,6 +6,10 @@ * @package modx * @subpackage lexicon */ +$_lang['_role_member_description'] = 'The lowest-authority role, usually a user of the site but not of the manager.'; +$_lang['_role_member_name'] = 'Member'; +$_lang['_role_superuser_description'] = 'The highest-authority role, for manager users with complete control over all aspects of the site.'; +$_lang['_role_superuser_name'] = 'Super User'; $_lang['active'] = 'Active'; $_lang['address'] = 'Address'; $_lang['administrator'] = 'Administrator'; @@ -40,10 +44,12 @@ $_lang['role_err_ae'] = 'A role already exists with that name.'; $_lang['role_err_duplicate'] = 'An error occurred while duplicating the role.'; $_lang['role_err_has_users'] = 'There are users with this role. It cannot be deleted.'; +$_lang['role_err_name_reserved'] = 'The role name “[[+reservedName]]” is reserved. Please choose another name.'; $_lang['role_err_nf'] = 'Role not found.'; $_lang['role_err_nfs'] = 'Role not found with id: [[+role]]'; $_lang['role_err_ns'] = 'Role not specified!'; -$_lang['role_err_ns_name'] = 'Please specify a name for the role.'; +$_lang['role_err_ns_authority'] = 'Please specify an authority level for this role.'; +$_lang['role_err_ns_name'] = 'Please specify a name for this role.'; $_lang['role_err_remove'] = 'An error occurred while trying to delete the role.'; $_lang['role_err_remove_admin'] = 'The role you are trying to delete is the admin role. This role cannot be deleted!'; $_lang['role_remove'] = 'Delete Role'; @@ -73,6 +79,7 @@ $_lang['user_country'] = 'Country'; $_lang['user_dob'] = 'Date of birth'; $_lang['user_doesnt_exist'] = 'User does not exist'; +$_lang['user_edit_account'] = 'Edit User’s Account'; $_lang['user_edit_self_msg'] = 'You may need to log out and log in again after saving to fully update your information.
Also, should you choose to generate a new password for yourself, it will be sent to you through email.'; $_lang['user_email'] = 'Email address'; $_lang['user_err_access_permissions_save'] = 'An error occurred while saving user access permissions.'; @@ -177,7 +184,7 @@ $_lang['user_remove_multiple'] = 'Delete Multiple Users'; $_lang['user_remove_multiple_confirm'] = 'Are you sure you want to delete these users? This is irreversible!'; $_lang['user_remote_data_msg'] = 'Edit remote user data here.'; -$_lang['user_role_update'] = 'Edit User Role'; +$_lang['user_role_update'] = 'Change User’s Role'; $_lang['user_setting_err_remove'] = 'An error occurred while trying to delete user settings.'; $_lang['user_setting_err_save'] = 'An error occurred while saving user settings.'; $_lang['user_settings'] = 'User Settings'; diff --git a/core/src/Revolution/Processors/Context/GetList.php b/core/src/Revolution/Processors/Context/GetList.php index 23895b5dbfb..0804753207b 100644 --- a/core/src/Revolution/Processors/Context/GetList.php +++ b/core/src/Revolution/Processors/Context/GetList.php @@ -1,16 +1,16 @@ setDefaultProperties([ 'search' => '', - 'exclude' => '', + 'exclude' => 'creator', ]); + $this->canCreate = $this->modx->hasPermission('new_context'); - $this->canEdit = $this->modx->hasPermission('edit_context'); - $this->canRemove = $this->modx->hasPermission('delete_context'); + $this->canUpdate = $this->modx->hasPermission('edit_context'); + $this->canDelete = $this->modx->hasPermission('delete_context'); return $initialized; } + /** + * {@inheritDoc} + * @return boolean + */ + public function beforeQuery() + { + /* + Implementing a little trick here since 'creator' is an arbitrary field + not present in the database, used for distinguishing core/protected row data + from user-created data + */ + if ($this->getProperty('sort') === 'creator') { + $this->setProperty('sort', 'FIELD(modContext.key, "mgr", "web")'); + $dir = $this->getProperty('dir') === 'ASC' ? 'DESC' : 'ASC' ; + $this->setProperty('dir', $dir); + } + return true; + } + /** * {@inheritDoc} * @param xPDOQuery $c @@ -66,11 +86,15 @@ public function initialize() */ public function prepareQueryBeforeCount(xPDOQuery $c) { + // $msg = "\r\n prepareQueryBeforeCount, \$properties:\r\n" . print_r($this->getProperties(), true); + // $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); + $search = $this->getProperty('search'); if (!empty($search)) { $c->where([ 'key:LIKE' => '%' . $search . '%', - 'OR:description:LIKE' => '%' . $search . '%', + 'OR:name:LIKE' => '%' . $search . '%', + 'OR:description:LIKE' => '%' . $search . '%' ]); } $exclude = $this->getProperty('exclude'); @@ -110,18 +134,42 @@ public function prepareQueryAfterCount(xPDOQuery $c) */ public function prepareRow(xPDOObject $object) { - $contextArray = $object->toArray(); - $contextArray['perm'] = []; - if ($this->canCreate) { - $contextArray['perm'][] = 'pnew'; - } - if ($this->canEdit) { - $contextArray['perm'][] = 'pedit'; + $permissions = [ + 'create' => $this->canCreate && $object->checkPolicy('save'), + 'duplicate' => $this->canCreate && $object->checkPolicy('copy'), + 'update' => $this->canUpdate && $object->checkPolicy('save'), + 'delete' => $this->canDelete && $object->checkPolicy('remove') + ]; + + // $policies = [ + // 'save' => $object->checkPolicy('save'), + // 'copy' => $object->checkPolicy('copy'), + // 'remove' => $object->checkPolicy('remove') + // ]; + // + // $msg = "\r\n context:, \$policies:\r\n" . print_r($policies, true); + // $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); + + $contextData = $object->toArray(); + + $contextKey = $object->get('key'); + $coreContexts = ['mgr', 'web']; + $isCoreContext = in_array($contextKey, $coreContexts); + + if ($isCoreContext) { + $baseKey = '_context_' . strtolower(str_replace(' ', '', $contextKey)) . '_'; + $contextData['name_trans'] = $this->modx->lexicon($baseKey . 'name'); + $contextData['description_trans'] = $this->modx->lexicon($baseKey . 'description'); } - if (!in_array($object->get('key'), ['mgr', 'web']) && $this->canRemove) { - $contextArray['perm'][] = 'premove'; + + $contextData['reserved'] = ['key' => $coreContexts, 'name' => ['Manager']]; + $contextData['isProtected'] = $isCoreContext ? true : false ; + $contextData['creator'] = $isCoreContext ? 'modx' : strtolower($this->modx->lexicon('user')) ; + if ($isCoreContext) { + unset($permissions['delete']); } + $contextData['permissions'] = $permissions; - return $contextArray; + return $contextData; } } diff --git a/core/src/Revolution/Processors/Security/Role/GetList.php b/core/src/Revolution/Processors/Security/Role/GetList.php index 338e0e4e700..50ff8bc5439 100644 --- a/core/src/Revolution/Processors/Security/Role/GetList.php +++ b/core/src/Revolution/Processors/Security/Role/GetList.php @@ -1,4 +1,5 @@ setProperty('sort', 'name'); } - $this->canRemove = $this->modx->hasPermission('delete_role'); + // $this->canRemove = $this->modx->hasPermission('delete_role'); + $this->canCreate = $this->modx->hasPermission('new_role') && $this->modx->hasPermission('save_role'); + $this->canUpdate = $this->modx->hasPermission('edit_role') && $this->modx->hasPermission('save_role'); + $this->canDelete = $this->modx->hasPermission('delete_role'); return $initialized; } @@ -90,21 +97,31 @@ public function beforeIteration(array $list) */ public function prepareRow(xPDOObject $object) { - $objectArray = $object->toArray(); - $isCoreRole = $object->get('id') === 1 - || $object->get('id') === 2 - || $object->get('name') === 'Super User' - || $object->get('name') === 'Member'; - - $perm = []; - if (!$isCoreRole) { - $perm[] = 'edit'; - if ($this->canRemove) { - $perm[] = 'remove'; - } + $permissions = [ + 'create' => $this->canCreate, + 'update' => $this->canUpdate, + 'delete' => $this->canDelete + ]; + + $roleData = $object->toArray(); + + $roleName = $object->get('name'); + $isCoreRole = $roleName === 'Super User' || $roleName === 'Member'; + + if ($isCoreRole) { + $baseKey = '_role_' . strtolower(str_replace(' ', '', $roleName)) . '_'; + $roleData['name_trans'] = $this->modx->lexicon($baseKey . 'name'); + $roleData['description_trans'] = $this->modx->lexicon($baseKey . 'description'); } - $objectArray['perm'] = implode(' ', $perm); - return $objectArray; + $roleData['reserved'] = ['name' => ['Super User', 'Member']]; + $roleData['isProtected'] = $isCoreRole ? true : false ; + $roleData['creator'] = $isCoreRole ? 'modx' : strtolower($this->modx->lexicon('user')) ; + $roleData['permissions'] = !$isCoreRole ? $permissions : [] ; + + $msg = "\r\n prepareRow, \$role:\r\n" . print_r($role, true); + $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); + + return $roleData; } } diff --git a/core/src/Revolution/Processors/Source/GetList.php b/core/src/Revolution/Processors/Source/GetList.php index 3d913b83085..3dc75e782a9 100644 --- a/core/src/Revolution/Processors/Source/GetList.php +++ b/core/src/Revolution/Processors/Source/GetList.php @@ -127,6 +127,7 @@ public function prepareRow(xPDOObject $object) } $cls = []; + $permissions = []; if ($canSave && $canEdit && $object->checkPolicy('save')) { $cls[] = 'pupdate'; } @@ -137,8 +138,12 @@ public function prepareRow(xPDOObject $object) $cls[] = 'pduplicate'; } + $objectArray['recordPerms'] = $cls; $objectArray['cls'] = implode(' ', $cls); + $msg = "\r\n prepareRow, \$objectArray:\r\n" . print_r($objectArray, true); + $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); + return $objectArray; } } diff --git a/manager/assets/modext/widgets/core/modx.grid.js b/manager/assets/modext/widgets/core/modx.grid.js index 2069a99bab3..bac1b6a550c 100644 --- a/manager/assets/modext/widgets/core/modx.grid.js +++ b/manager/assets/modext/widgets/core/modx.grid.js @@ -168,10 +168,30 @@ MODx.grid.Grid = function(config) { this.config = config; this.on('click', this.onClickHandler, this); + // console.log('MODx.grid.Grid, this', this); }; -Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ +Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { + windows: {} + ,protectedIdentifiers: null + + ,protectedDataIndex: null + + ,nonRemoveableRecords: [] + + ,userCanEdit: false + + ,userCanCreate: false + + ,userCanDelete: false + + ,gridMenuActions: [] + + ,hasSavePermissions: false + + ,showActionsMenu: true + ,onStoreException: function(dp,type,act,opt,resp){ var r = Ext.decode(resp.responseText); if (r.message) { @@ -228,7 +248,7 @@ Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ if (response.data.length) { // We get some data for specific field(s) error but not regular error message Ext.each(response.data, function(data, index, list) { - msg += (msg != '' ? '
' : '') + data.msg; + msg += (msg != '' ? '
' : '') + data.msg; }, this); } if (Ext.isEmpty(msg)) { @@ -496,7 +516,202 @@ Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ return z; } + /** + * @property {Function} setEditableColumnAccess - Enable/disable column editor based on user permissions + * + * @param {Array} columnIds - The ids of the columns that have an editor configured in the column model + * + * @return void + */ + ,setEditableColumnAccess: function(columnIds) { + if (!this.userCanEdit && !Ext.isEmpty(columnIds)) { + const colModel = this.getColumnModel(); + columnIds = columnIds.map(item => item.trim()); + columnIds.forEach(colId => { + const colIndex = colModel.getIndexById(colId); + colModel.setEditable(colIndex, false); + }); + } + } + + + /* User Group-Level Permissions Checks for the calling "class" object */ + + /** + * @property {Function} setUserCanEdit - Assigns a value to userCanEdit property based on + * the user's permissions; used to adjust which menu items are available, whether to render links + * to and item's editing page, and css cues across many grid classes + * + * @param {Array} permissions - A set of permissions keys to evaluate; note that many areas currently + * rely on a pair of permissions (save_x and edit_x), both of which must be enabled to edit a grid item + * + * @return void + */ + ,setUserCanEdit: function(permissions) { + permissions = permissions.map(item => item.trim()); + this.userCanEdit = permissions.every(permission => MODx.perm[permission]); + } + + /** + * @property {Function} setUserCanCreate - Assigns a value to userCanCreate property based on + * the user's permissions; used to adjust which menu items are available (namely the Duplicate item) + * and whether to render the Create button in the grid's toolbar + * + * @param {Array} permissions - A set of permissions keys to evaluate; note that many areas currently + * rely on a pair of permissions (save_x and new_x), both of which must be enabled to create/duplicate a grid item + * + * @return void + */ + ,setUserCanCreate: function(permissions) { + permissions = permissions.map(item => item.trim()); + this.userCanCreate = permissions.every(permission => MODx.perm[permission]); + } + + /** + * @property {Function} setUserCanDelete - Assigns a value to userCanDelete property based on + * the user's permissions; used to adjust which menu items are available in the context menus + * and whether to render the Delete menu item within a grid toolbar's Batch button + * + * @param {Array} permissions - A set of permissions keys to evaluate + * + * @return void + */ + ,setUserCanDelete: function(permissions) { + permissions = permissions.map(item => item.trim()); + this.userCanDelete = permissions.every(permission => MODx.perm[permission]); + } + + + /* Record-Level Permissions Checks, for objects with specific policies */ + + ,userCanEditRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pupdate') { + const permissions = record[permissionsProperty]; + return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + } + + ,userCanDeleteRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'premove') { + const permissions = record[permissionsProperty]; + // console.log('userCanDeleteRecord, permissions: ', permissions); + return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + } + + ,userCanDuplicateRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pduplicate') { + const permissions = record[permissionsProperty]; + return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + } + + /** + * @property {Function} setShowActionsMenu - Based on properties set in the calling child class and the + * the current user's permissions for actions taken within that class (create, edit, delete, etc), + * evaluates whether the actions menu trigger should appear and sets boolean value on the showActionsMenu property + * + * @return void + */ + ,setShowActionsMenu: function() { + // console.log('setShowActionsMenu: this.gridMenuActions: ', this.gridMenuActions); + if (this.config.disableContextMenuAction === true) { + this.showActionsMenu = false; + return; + } + const permissions = []; + this.gridMenuActions.forEach(mode => { + mode = mode == 'duplicate' ? 'userCanCreate' : 'userCan' + Ext.util.Format.capitalize(mode); + const modePermission = mode === 'userCanExport' ? true : this[mode] ; + if (['userCanCreate', 'userCanEdit'].includes(mode) && modePermission === true) { + this.hasSavePermissions = true; + } + permissions.push(modePermission); + }); + // console.log('setShowActionsMenu: final permissions: ', permissions); + if (permissions.length === 0 || permissions.every(permission => permission === false) === true) { + this.showActionsMenu = false; + return; + } + } + + /** + * @property {Function} recordIsProtected - Used to remove the ability to delete + * specific record rows, regardless of permissions levels, based on a given record identifier + * + * @param {Number} subject - The value of the current record's identifier + * @param {Number} protectedIdentifiers - The record identifiers to be protected (making them non-editable/deletable) + * + * @return {Boolean} + */ + ,recordIsProtected: function(subject, protectedIdentifiers) { + // console.log('recordIsProtected, subject: ', subject); + // console.log('recordIsProtected, protectedIdentifiers:', protectedIdentifiers); + if (Ext.isEmpty(protectedIdentifiers)) { + return false; + } + protectedIdentifiers = protectedIdentifiers.map(identifier => { + return typeof identifier === 'string' ? identifier.trim() : identifier ; + }); + + return protectedIdentifiers.includes(subject); + } + + // ,valueIsReserved: function(e, errorMessage) { + // const reserved = e.record.json.reserved; + // if (reserved && !Ext.isEmpty(reserved)) { + // console.log('valueIsReserved, reserved keys: ', Object.keys(reserved)); + // Object.keys(reserved).forEach(key => { + // if (e.field === key && reserved[key].includes(e.value)) { + // console.log('reserved value found!'); + // Ext.Msg.alert('Error', errorMessage); + // return false; + // } + // }); + // } + // return true; + // } + + // ,valueIsReserved: function(field, record, errorMessage) { + // const reserved = record.json.reserved; + // if (reserved && !Ext.isEmpty(reserved)) { + // // console.log('valueIsReserved, reserved keys: ', Object.keys(reserved)); + // console.log('valueIsReserved, record: ', record); + // Object.keys(reserved).forEach(key => { + // if (field === key && reserved[key].includes(record.data[field])) { + // console.log('reserved value found!'); + // Ext.Msg.alert('Error', errorMessage); + // return false; + // } + // }); + // } + // return true; + // } + + /** + * @property {Function} getRemovableItemsFromSelection - Prunes protected items from the current + * selection list before submitting for deletion, or for setting the state of the 'Delete Selected' + * menu item + * + * @param {String} itemIdType - The data type of the value being inspected (either string or integer) + * + * @return {Boolean|Array} + */ + ,getRemovableItemsFromSelection: function(itemIdType = 'string') { + + const selectionList = this.getSelectedAsList(), + removableItems = [] + ; + console.log('getRemovableItemsFromSelection, selectionList: ', selectionList); + if (selectionList === false) { + return false; + } + selectionList.split(',').forEach(id => { + id = itemIdType === 'string' ? id : parseInt(id) ; + if (!this.recordIsProtected(id, this.protectedIdentifiers) && !this.nonRemoveableRecords.includes(id)) { + removableItems.push(id); + } + }); + console.log('getRemovableItemsFromSelection, removableItems: ', removableItems); + return removableItems.length > 0 ? removableItems : false ; + } + ,renderEditableColumn: function(renderer) { + // console.log('renderEditableColumn...'); return function(value, metaData, record, rowIndex, colIndex, store) { if (renderer) { if (typeof renderer.fn === 'function') { @@ -666,29 +881,71 @@ Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ } ,actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { - var actions = this.getActions.apply(this, [record, rowIndex, colIndex, store]); - // console.log('actionsColumnRenderer record: ',record); - if (this.config.disableContextMenuAction !== true) { + + /* + showActionsMenu will be true if at least one user group-level permission is granted, + excluding create/new permissions (since that is not executed by our context/actions menus) + */ + console.log('actionsColumnRenderer, record', record); + if (this.showActionsMenu) { + const isProtected = this.recordIsProtected(record.data[this.protectedDataIndex], this.protectedIdentifiers); + // const isProtected = record.json.isProtected; + // console.log('actionsColumnRenderer, record', record); + // console.log('actionsColumnRenderer, this', this); + // console.log('actionsColumnRenderer, this is policy grid?', this instanceof MODx.grid.AccessPolicy); + // console.log('actionsColumnRenderer, gridMenuActions', this.gridMenuActions); + + // Export is always available; only continue filtering if grid does not offer export + if (!this.gridMenuActions.includes('export')) { + if (!this.hasSavePermissions && isProtected) { + return; + } + // Checking record-level permissions + if (record.data.hasOwnProperty('cls')) { + if (Ext.isEmpty(record.data.cls)) { + return; + } + } + if (record.json.hasOwnProperty('permissions')) { + // console.log('perms: ',record.json.permissions); + if ( + Ext.isEmpty(record.json.permissions) || + Object.values(record.json.permissions).every(permission => permission === false) === true + ) { + return; + } + } + } + const actions = this.getActions.apply(this, [record, rowIndex, colIndex, store]); + actions.push({ text: _('context_menu'), action: 'contextMenu', icon: 'gear' }); + return this._getActionsColumnTpl().apply({ + actions: actions + }); } - - return this._getActionsColumnTpl().apply({ - actions: actions - }); } - ,renderLink: function(v,attr) { - var el = new Ext.Element(document.createElement('a')); - el.addClass('x-grid-link'); - el.dom.title = _('edit'); - for (var i in attr) { - el.dom[i] = attr[i]; - } - el.dom.innerHTML = Ext.util.Format.htmlEncode(v); + /** + * + */ + ,renderLink: function(content, attributes = {}, isSimulated = false, isSimulatedTag = 'span') { + const tag = isSimulated ? isSimulatedTag : 'a', + classes = isSimulated ? 'x-grid-link simulated-link' : 'x-grid-link', + el = new Ext.Element(document.createElement(tag)) + ; + el.addClass(classes); + // Add default title if none given in attributes + if (!attributes.hasOwnProperty('title')) { + attributes.title = _('edit'); + } + Object.entries(attributes).forEach(([attr, value]) => { + el.dom[attr] = value; + }); + el.dom.innerHTML = Ext.util.Format.htmlEncode(content); return el.dom.outerHTML; } @@ -752,6 +1009,7 @@ Ext.extend(MODx.grid.Grid,Ext.grid.EditorGridPanel,{ window.history.replaceState(this.getStore().baseParams, document.title, this.makeUrl()); } } + }); /* local grid */ @@ -826,7 +1084,8 @@ MODx.grid.LocalGrid = function(config) { this.on('rowcontextmenu',this._showMenu,this); }; -Ext.extend(MODx.grid.LocalGrid,Ext.grid.EditorGridPanel,{ +Ext.extend(MODx.grid.LocalGrid, Ext.grid.EditorGridPanel, { + windows: {} ,_loadStore: function(config) { @@ -1007,7 +1266,6 @@ Ext.extend(MODx.grid.LocalGrid,Ext.grid.EditorGridPanel,{ } } - ,remove: function(config) { if (this.destroying) { return MODx.grid.LocalGrid.superclass.remove.apply(this, arguments); diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.js index 23a961e065b..c6899cdec10 100644 --- a/manager/assets/modext/widgets/security/modx.grid.access.policy.js +++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.js @@ -8,30 +8,33 @@ */ MODx.panel.AccessPolicies = function(config) { config = config || {}; - Ext.applyIf(config,{ - id: 'modx-panel-access-policies' - ,bodyStyle: '' - ,defaults: { collapsible: false ,autoHeight: true } - ,items: [{ - html: _('policies') - ,id: 'modx-policies-header' - ,xtype: 'modx-header' - },{ - layout: 'form' - ,cls: 'main-wrapper' - ,items: [{ - html: '

'+_('policy_management_msg')+'

' - ,border: false - },{ - xtype: 'modx-grid-access-policy' - ,preventRender: true + Ext.applyIf(config, { + id: 'modx-panel-access-policies', + bodyStyle: '', + defaults: { + collapsible: false, + autoHeight: true + }, + items: [{ + html: _('policies'), + id: 'modx-policies-header', + xtype: 'modx-header' + }, { + layout: 'form', + cls: 'main-wrapper', + items: [{ + html: '

' + _('policy_management_msg') + '

', + border: false + }, { + xtype: 'modx-grid-access-policy', + preventRender: true }] }] }); - MODx.panel.AccessPolicies.superclass.constructor.call(this,config); + MODx.panel.AccessPolicies.superclass.constructor.call(this, config); }; -Ext.extend(MODx.panel.AccessPolicies,MODx.FormPanel); -Ext.reg('modx-panel-access-policies',MODx.panel.AccessPolicies); +Ext.extend(MODx.panel.AccessPolicies, MODx.FormPanel); +Ext.reg('modx-panel-access-policies', MODx.panel.AccessPolicies); /** * Loads a grid of modAccessPolicies. @@ -44,275 +47,387 @@ Ext.reg('modx-panel-access-policies',MODx.panel.AccessPolicies); MODx.grid.AccessPolicy = function(config) { config = config || {}; this.sm = new Ext.grid.CheckboxSelectionModel(); - Ext.applyIf(config,{ - id: 'modx-grid-access-policy' - ,url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + id: 'modx-grid-access-policy', + url: MODx.config.connector_url, + baseParams: { action: 'Security/Access/Policy/GetList' - } - ,fields: ['id','name','description', 'description_trans', 'class','data','parent','template','template_name','active_permissions','total_permissions','active_of','cls'] - ,paging: true - ,autosave: true - ,save_action: 'Security/Access/Policy/UpdateFromGrid' - ,remoteSort: true - ,sm: this.sm - ,columns: [this.sm,{ - header: _('policy_name') - ,dataIndex: 'name' - ,id: 'modx-policy--policy-name' - ,width: 200 - ,editor: { + }, + fields: [ + 'id', + 'name', + 'description', + 'description_trans', + 'class', + 'data', + 'parent', + 'template', + 'template_name', + 'active_permissions', + 'total_permissions', + 'active_of', + 'cls' + ], + paging: true, + autosave: true, + save_action: 'Security/Access/Policy/UpdateFromGrid', + remoteSort: true, + sm: this.sm, + columns: [this.sm, { + header: _('policy_name'), + dataIndex: 'name', + id: 'modx-policy--policy-name', + width: 200, + editor: { xtype: 'textfield', allowBlank: false - } - ,sortable: true - ,renderer: { + }, + sortable: true, + renderer: { fn: function(value, metaData, record) { - if (!MODx.perm.policy_save || !MODx.perm.policy_edit) { + if (!this.userCanEdit) { metaData.css = 'editor-disabled'; return value; } return this.renderLink(value, { href: '?a=security/access/policy/update&id=' + record.data.id, - target: '_blank' + title: _('policy_edit') }); }, scope: this } - },{ - header: _('description') - ,dataIndex: 'description' - ,width: 375 - ,renderer: function(value, metaData, record) { - return Ext.util.Format.htmlEncode(record['data']['description_trans']); + }, { + header: _('description'), + dataIndex: 'description', + id: 'modx-policy--policy-description', + width: 375, + editable: false, + renderer: function(value, metaData, record) { + // const desc = !Ext.isEmpty(record.data.description_trans) ? record.data.description_trans : record.data.description ; + return Ext.util.Format.htmlEncode(record.data.description_trans); } - ,editable: false - },{ - header: _('policy_template') - ,dataIndex: 'template_name' - ,id: 'modx-policy--template-name' - ,width: 375 - ,renderer: { + }, { + header: _('policy_template'), + dataIndex: 'template_name', + id: 'modx-policy--template-name', + width: 375, + sortable: true, + renderer: { fn: function(value, metaData, record) { + // Directly referencing MODx.perm here, as these permissions are outside of this class if (!MODx.perm.policy_template_save || !MODx.perm.policy_template_edit) { metaData.css = 'editor-disabled'; return value; } return this.renderLink(value, { href: '?a=security/access/policy/template/update&id=' + record.data.template, - target: '_blank' + title: _('policy_template_edit') }); }, scope: this } - },{ - header: _('active_permissions') - ,dataIndex: 'active_of' - ,width: 100 - ,editable: false - }] - ,tbar: [{ - text: _('create') - ,hidden: !MODx.perm.policy_new || !MODx.perm.policy_save - ,cls:'primary-button' - ,scope: this - ,handler: this.createPolicy - },{ - text: _('import') - ,scope: this - ,handler: this.importPolicy - },{ - text: _('bulk_actions') - ,hidden: !MODx.perm.policy_delete - ,menu: [{ - text: _('policy_remove_multiple') - ,handler: this.removeSelected - ,scope: this - }] - },'->',{ - xtype: 'textfield' - ,name: 'search' - ,id: 'modx-policy-search' - ,cls: 'x-form-filter' - ,emptyText: _('search_ellipsis') - ,listeners: { - 'change': {fn: this.search, scope: this} - ,'render': {fn: function(cmp) { - new Ext.KeyMap(cmp.getEl(), { - key: Ext.EventObject.ENTER - ,fn: function() { - this.fireEvent('change',this.getValue()); - this.blur(); - return true;} - ,scope: cmp - }); - },scope:this} + }, { + header: _('active_permissions'), + dataIndex: 'active_of', + width: 100, + align: 'center', + editable: false + }], + tbar: [{ + text: _('create'), + cls: 'primary-button', + scope: this, + handler: this.createPolicy, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this + } } - },{ - xtype: 'button' - ,id: 'modx-sacpol-filter-clear' - ,cls: 'x-form-filter-clear' - ,text: _('filter_clear') - ,listeners: { - 'click': {fn: this.clearFilter, scope: this}, - 'mouseout': { fn: function(evt){ - this.removeClass('x-btn-focus'); + }, { + text: _('import'), + scope: this, + handler: this.importPolicy, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this } + } + }, { + text: _('bulk_actions'), + menu: [{ + text: _('policy_remove_multiple'), + itemId: 'modx-policy--bulk-menu-opt-remove', + handler: this.removeSelected, + scope: this + }], + listeners: { + render: { + fn: function(btn) { + if (!this.userCanDelete) { + btn.hide(); + } + }, + scope: this + }, + click: { + fn: function(btn) { + const removableItems = this.getRemovableItemsFromSelection('int'), + menuOptRemove = btn.menu.getComponent('modx-policy--bulk-menu-opt-remove') + ; + if (!removableItems) { + menuOptRemove.disable(); + } else { + menuOptRemove.enable(); + } + }, + scope: this + } + } + }, '->', { + xtype: 'textfield', + name: 'search', + id: 'modx-policy-search', + cls: 'x-form-filter', + emptyText: _('search_ellipsis'), + listeners: { + change: { + fn: this.search, + scope: this + }, + render: { + fn: function(cmp) { + new Ext.KeyMap(cmp.getEl(), { + key: Ext.EventObject.ENTER, + fn: function() { + this.fireEvent('change', this.getValue()); + this.blur(); + return true; + }, + scope: cmp + }); + }, + scope: this + } + } + }, { + xtype: 'button', + id: 'modx-sacpol-filter-clear', + cls: 'x-form-filter-clear', + text: _('filter_clear'), + listeners: { + click: { + fn: this.clearFilter, + scope: this + }, + mouseout: { + fn: function(evt) { + this.removeClass('x-btn-focus'); + } } } }] }); - MODx.grid.AccessPolicy.superclass.constructor.call(this,config); - this.on('render', function(){ - if (!MODx.perm.policy_save || !MODx.perm.policy_edit) { - const colModel = this.getColumnModel(), - nameIdx = colModel.getIndexById('modx-policy--policy-name') - ; - colModel.setEditable(nameIdx, false); + MODx.grid.AccessPolicy.superclass.constructor.call(this, config); + + // this.protectedDataIndex = 'id'; + // this.protectedIdentifiers = ['range', 1, 12]; + this.gridMenuActions = ['edit', 'delete', 'duplicate', 'export']; + + this.setUserCanEdit(['policy_save', 'policy_edit']); + this.setUserCanCreate(['policy_save', 'policy_new']); + this.setUserCanDelete(['policy_delete']); + this.setShowActionsMenu(); + + /* + Want to lock or ideally hide checkbox col, or change to row selection model if user has no delete perms, + but locking the selModel locks out the context menu as well ... find other solution + */ + // if (!this.userCanDelete) { + // this.selModel.lock(); + // } + this.on('beforerender', function() { + if (!this.userCanDelete) { + // const checkCol = this.getColumnModel().getColumnAt(0); + console.log('this', this); + // console.log('check col: ', this.getColumnModel().getColumnAt(0)); + // this.columns = this.columns.shift(); + // this.getColumnModel().getColumnAt(0).destroy(); + // checkCol.hideable = true; + // checkCol.destroy(); + // this.refresh(); + this.cls = 'hide-check-column' + } + }); + this.on('render', function() { + this.setEditableColumnAccess( + ['modx-policy--policy-name', 'modx-policy--policy-description'] + ); + if (!this.userCanDelete) { + this.cls = 'hide-check-column' } }); }; -Ext.extend(MODx.grid.AccessPolicy,MODx.grid.Grid,{ +Ext.extend(MODx.grid.AccessPolicy, MODx.grid.Grid, { + + getMenu: function() { + const rowData = this.getSelectionModel().getSelected().data, + m = [] + ; + if (this.userCanEdit) { + m.push({ + text: _('edit'), + handler: this.editPolicy + }); + } + if (this.userCanCreate) { + m.push({ + text: _('duplicate'), + handler: this.confirm.createDelegate( + this, ["Security/Access/Policy/Duplicate", "policy_duplicate_confirm"] + ) + }); + } + if (m.length > 0) { + m.push('-'); + } + m.push({ + text: _('policy_export'), + handler: this.exportPolicy + }); + if (this.userCanDelete) { + if (m.length > 0) { + m.push('-'); + } + m.push({ + text: _('delete'), + handler: this.confirm.createDelegate( + this, ["Security/Access/Policy/Remove", "policy_remove_confirm"] + ) + }); + } + if (m.length > 0) { + this.addContextMenuItem(m); + } + }, - search: function(tf,newValue,oldValue) { + search: function(tf, newValue, oldValue) { var nv = newValue || tf; this.getStore().baseParams.query = Ext.isEmpty(nv) || Ext.isObject(nv) ? '' : nv; this.getBottomToolbar().changePage(1); return true; - } + }, - ,clearFilter: function() { + clearFilter: function() { this.getStore().baseParams = { action: 'Security/Access/Policy/GetList' }; Ext.getCmp('modx-policy-search').reset(); this.getBottomToolbar().changePage(1); - } + }, - ,editPolicy: function(itm,e) { - MODx.loadPage('security/access/policy/update', 'id='+this.menu.record.id); - } + editPolicy: function(itm, e) { + MODx.loadPage('security/access/policy/update', 'id=' + this.menu.record.id); + }, - ,createPolicy: function(btn,e) { + createPolicy: function(btn, e) { var r = this.menu.record; if (!this.windows.apc) { this.windows.apc = MODx.load({ - xtype: 'modx-window-access-policy-create' - ,record: r - ,plugin: this.config.plugin - ,listeners: { - 'success': {fn:function(r) { - this.refresh(); - },scope:this} + xtype: 'modx-window-access-policy-create', + record: r, + plugin: this.config.plugin, + listeners: { + success: { + fn: function(r) { + this.refresh(); + }, + scope: this + } } }); } this.windows.apc.reset(); this.windows.apc.show(e.target); - } + }, - ,exportPolicy: function(btn,e) { + exportPolicy: function(btn, e) { var id = this.menu.record.id; MODx.Ajax.request({ - url: this.config.url - ,params: { - action: 'Security/Access/Policy/Export' - ,id: id - } - ,listeners: { - 'success': {fn:function(r) { - location.href = this.config.url+'?action=Security/Access/Policy/Export&download=1&id='+id+'&HTTP_MODAUTH='+MODx.siteId; - },scope:this} + url: this.config.url, + params: { + action: 'Security/Access/Policy/Export', + id: id + }, + listeners: { + success: { + fn: function(r) { + location.href = this.config.url + '?action=Security/Access/Policy/Export&download=1&id=' + id + '&HTTP_MODAUTH=' + MODx.siteId; + }, + scope: this + } } }); - } + }, - ,importPolicy: function(btn,e) { + importPolicy: function(btn, e) { var r = {}; if (!this.windows.importPolicy) { this.windows.importPolicy = MODx.load({ - xtype: 'modx-window-policy-import' - ,record: r - ,listeners: { - 'success': {fn:function(o) { - this.refresh(); - },scope:this} + xtype: 'modx-window-policy-import', + record: r, + listeners: { + success: { + fn: function(o) { + this.refresh(); + }, + scope: this + } } }); } this.windows.importPolicy.reset(); this.windows.importPolicy.setValues(r); this.windows.importPolicy.show(e.target); - } - - ,getMenu: function() { - var r = this.getSelectionModel().getSelected(); - var p = r.data.cls; - - var m = []; - if (this.getSelectionModel().getCount() > 1 && MODx.perm.policy_delete) { - m.push({ - text: _('policy_remove_multiple') - ,handler: this.removeSelected - }); - } else { - if (MODx.perm.policy_edit && MODx.perm.policy_save) { - m.push({ - text: _('edit') - ,handler: this.editPolicy - }); - } - if (MODx.perm.policy_save) { - m.push({ - text: _('duplicate') - ,handler: this.confirm.createDelegate(this,["Security/Access/Policy/Duplicate","policy_duplicate_confirm"]) - }); - } - if (m.length > 0) { - m.push('-'); - } - m.push({ - text: _('policy_export') - ,handler: this.exportPolicy - }); - if (MODx.perm.policy_delete) { - if (m.length > 0) m.push('-'); - m.push({ - text: _('delete') - ,handler: this.confirm.createDelegate(this,["Security/Access/Policy/Remove","policy_remove_confirm"]) - }); - } - } + }, - if (m.length > 0) { - this.addContextMenuItem(m); - } - } - - ,removeSelected: function() { + removeSelected: function() { var cs = this.getSelectedAsList(); if (cs === false) return false; MODx.msg.confirm({ - title: _('policy_remove_multiple') - ,text: _('policy_remove_multiple_confirm') - ,url: this.config.url - ,params: { - action: 'Security/Access/Policy/RemoveMultiple' - ,policies: cs - } - ,listeners: { - 'success': {fn:function(r) { - this.getSelectionModel().clearSelections(true); - this.refresh(); - },scope:this} + title: _('policy_remove_multiple'), + text: _('policy_remove_multiple_confirm'), + url: this.config.url, + params: { + action: 'Security/Access/Policy/RemoveMultiple', + policies: cs + }, + listeners: { + success: { + fn: function(r) { + this.getSelectionModel().clearSelections(true); + this.refresh(); + }, + scope: this + } } }); return true; } + }); -Ext.reg('modx-grid-access-policy',MODx.grid.AccessPolicy); +Ext.reg('modx-grid-access-policy', MODx.grid.AccessPolicy); /** * Generates a window for creating Access Policies. @@ -324,65 +439,65 @@ Ext.reg('modx-grid-access-policy',MODx.grid.AccessPolicy); */ MODx.window.CreateAccessPolicy = function(config) { config = config || {}; - this.ident = config.ident || 'cacp'+Ext.id(); - Ext.applyIf(config,{ - title: _('create') - ,url: MODx.config.connector_url - ,action: 'Security/Access/Policy/Create' - ,fields: [{ - fieldLabel: _('name') - ,description: MODx.expandHelp ? '' : _('policy_desc_name') - ,name: 'name' - ,id: 'modx-'+this.ident+'-name' - ,xtype: 'textfield' - ,allowBlank: false - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-name' - ,html: _('policy_desc_name') - ,cls: 'desc-under' - },{ - fieldLabel: _('policy_template') - ,description: MODx.expandHelp ? '' : _('policy_desc_template') - ,name: 'template' - ,hiddenName: 'template' - ,id: 'modx-'+this.ident+'-template' - ,xtype: 'modx-combo-access-policy-template' - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-template' - ,html: _('policy_desc_template') - ,cls: 'desc-under' - },{ - fieldLabel: _('description') - ,description: MODx.expandHelp ? '' : _('policy_desc_description') - ,name: 'description' - ,id: 'modx-'+this.ident+'-description' - ,xtype: 'textarea' - ,anchor: '100%' - ,height: 50 - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-description' - ,html: _('policy_desc_description') - ,cls: 'desc-under' - },{ - name: 'class' - ,id: 'modx-'+this.ident+'-class' - ,xtype: 'hidden' - },{ - name: 'id' - ,id: 'modx-'+this.ident+'-id' - ,xtype: 'hidden' - }] - ,keys: [] + this.ident = config.ident || 'cacp' + Ext.id(); + Ext.applyIf(config, { + title: _('create'), + url: MODx.config.connector_url, + action: 'Security/Access/Policy/Create', + fields: [{ + fieldLabel: _('name'), + description: MODx.expandHelp ? '' : _('policy_desc_name'), + name: 'name', + id: 'modx-' + this.ident + '-name', + xtype: 'textfield', + allowBlank: false, + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-name', + html: _('policy_desc_name'), + cls: 'desc-under' + }, { + fieldLabel: _('policy_template'), + description: MODx.expandHelp ? '' : _('policy_desc_template'), + name: 'template', + hiddenName: 'template', + id: 'modx-' + this.ident + '-template', + xtype: 'modx-combo-access-policy-template', + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-template', + html: _('policy_desc_template'), + cls: 'desc-under' + }, { + fieldLabel: _('description'), + description: MODx.expandHelp ? '' : _('policy_desc_description'), + name: 'description', + id: 'modx-' + this.ident + '-description', + xtype: 'textarea', + anchor: '100%', + height: 50 + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-description', + html: _('policy_desc_description'), + cls: 'desc-under' + }, { + name: 'class', + id: 'modx-' + this.ident + '-class', + xtype: 'hidden' + }, { + name: 'id', + id: 'modx-' + this.ident + '-id', + xtype: 'hidden' + }], + keys: [] }); - MODx.window.CreateAccessPolicy.superclass.constructor.call(this,config); + MODx.window.CreateAccessPolicy.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.CreateAccessPolicy,MODx.Window); -Ext.reg('modx-window-access-policy-create',MODx.window.CreateAccessPolicy); +Ext.extend(MODx.window.CreateAccessPolicy, MODx.Window); +Ext.reg('modx-window-access-policy-create', MODx.window.CreateAccessPolicy); /** * @class MODx.window.AccessPolicyTemplate @@ -392,26 +507,25 @@ Ext.reg('modx-window-access-policy-create',MODx.window.CreateAccessPolicy); */ MODx.combo.AccessPolicyTemplate = function(config) { config = config || {}; - Ext.applyIf(config,{ - name: 'template' - ,hiddenName: 'template' - ,fields: ['id','name','description','description_trans'] - ,forceSelection: true - ,typeAhead: false - ,editable: false - ,allowBlank: false - ,pageSize: 20 - ,url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + name: 'template', + hiddenName: 'template', + fields: ['id', 'name', 'description', 'description_trans'], + forceSelection: true, + typeAhead: false, + editable: false, + allowBlank: false, + pageSize: 20, + url: MODx.config.connector_url, + baseParams: { action: 'Security/Access/Policy/Template/GetList' - } - ,tpl: new Ext.XTemplate('
{name:htmlEncode}' - ,'

{description_trans:htmlEncode}

') + }, + tpl: new Ext.XTemplate('
{name:htmlEncode}', '

{description_trans:htmlEncode}

') }); - MODx.combo.AccessPolicyTemplate.superclass.constructor.call(this,config); + MODx.combo.AccessPolicyTemplate.superclass.constructor.call(this, config); }; -Ext.extend(MODx.combo.AccessPolicyTemplate,MODx.combo.ComboBox); -Ext.reg('modx-combo-access-policy-template',MODx.combo.AccessPolicyTemplate); +Ext.extend(MODx.combo.AccessPolicyTemplate, MODx.combo.ComboBox); +Ext.reg('modx-combo-access-policy-template', MODx.combo.AccessPolicyTemplate); /** * @class MODx.window.ImportPolicy @@ -421,29 +535,29 @@ Ext.reg('modx-combo-access-policy-template',MODx.combo.AccessPolicyTemplate); */ MODx.window.ImportPolicy = function(config) { config = config || {}; - this.ident = config.ident || 'imppol-'+Ext.id(); - Ext.applyIf(config,{ - title: _('policy_import') - ,id: 'modx-window-policy-import' - ,url: MODx.config.connector_url - ,action: 'Security/Access/Policy/Import' - ,fileUpload: true - ,saveBtnText: _('import') - ,fields: [{ - html: _('policy_import_msg') - ,id: this.ident+'-desc' - ,xtype: 'modx-description' - ,style: 'margin-bottom: 10px;' - },{ - xtype: 'fileuploadfield' - ,fieldLabel: _('file') - ,buttonText: _('upload.buttons.upload') - ,name: 'file' - ,id: this.ident+'-file' - ,anchor: '100%' + this.ident = config.ident || 'imppol-' + Ext.id(); + Ext.applyIf(config, { + title: _('policy_import'), + id: 'modx-window-policy-import', + url: MODx.config.connector_url, + action: 'Security/Access/Policy/Import', + fileUpload: true, + saveBtnText: _('import'), + fields: [{ + html: _('policy_import_msg'), + id: this.ident + '-desc', + xtype: 'modx-description', + style: 'margin-bottom: 10px;' + }, { + xtype: 'fileuploadfield', + fieldLabel: _('file'), + buttonText: _('upload.buttons.upload'), + name: 'file', + id: this.ident + '-file', + anchor: '100%' }] }); - MODx.window.ImportPolicy.superclass.constructor.call(this,config); + MODx.window.ImportPolicy.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.ImportPolicy,MODx.Window); -Ext.reg('modx-window-policy-import',MODx.window.ImportPolicy); +Ext.extend(MODx.window.ImportPolicy, MODx.Window); +Ext.reg('modx-window-policy-import', MODx.window.ImportPolicy); diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js index 29c9b13e357..b8f383539d4 100644 --- a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js +++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js @@ -8,30 +8,33 @@ */ MODx.panel.AccessPolicyTemplates = function(config) { config = config || {}; - Ext.applyIf(config,{ - id: 'modx-panel-access-policy-templates' - ,bodyStyle: '' - ,defaults: { collapsible: false ,autoHeight: true } - ,items: [{ - html: _('policies') - ,id: 'modx-policy-templates-header' - ,xtype: 'modx-header' - },{ - layout: 'form' - ,bodyStyle: 'padding: 15px' - ,items: [{ - html: '

'+_('policy_templates.intro_msg')+'

' - ,border: false - },{ - xtype: 'modx-grid-access-policy-templates' - ,preventRender: true + Ext.applyIf(config, { + id: 'modx-panel-access-policy-templates', + bodyStyle: '', + defaults: { + collapsible: false, + autoHeight: true + }, + items: [{ + html: _('policies'), + id: 'modx-policy-templates-header', + xtype: 'modx-header' + }, { + layout: 'form', + bodyStyle: 'padding: 15px', + items: [{ + html: '

' + _('policy_templates.intro_msg') + '

', + border: false + }, { + xtype: 'modx-grid-access-policy-templates', + preventRender: true }] }] }); - MODx.panel.AccessPolicyTemplates.superclass.constructor.call(this,config); + MODx.panel.AccessPolicyTemplates.superclass.constructor.call(this, config); }; -Ext.extend(MODx.panel.AccessPolicyTemplates,MODx.FormPanel); -Ext.reg('modx-panel-access-policy-templates',MODx.panel.AccessPolicyTemplates); +Ext.extend(MODx.panel.AccessPolicyTemplates, MODx.FormPanel); +Ext.reg('modx-panel-access-policy-templates', MODx.panel.AccessPolicyTemplates); /** * Loads a grid of modAccessPolicyTemplates. @@ -44,29 +47,39 @@ Ext.reg('modx-panel-access-policy-templates',MODx.panel.AccessPolicyTemplates); MODx.grid.AccessPolicyTemplate = function(config) { config = config || {}; this.sm = new Ext.grid.CheckboxSelectionModel(); - Ext.applyIf(config,{ - id: 'modx-grid-access-policy-template' - ,url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + id: 'modx-grid-access-policy-template', + url: MODx.config.connector_url, + baseParams: { action: 'Security/Access/Policy/Template/GetList' - } - ,fields: ['id','name','description','description_trans','template_group','template_group_name','total_permissions','policy_count','cls'] - ,paging: true - ,autosave: true - ,save_action: 'Security/Access/Policy/Template/UpdateFromGrid' - ,remoteSort: true - ,sm: this.sm - ,columns: [this.sm,{ - header: _('name') - ,dataIndex: 'name' - ,id: 'modx-policy-template--template-name' - ,width: 200 - ,editor: { + }, + fields: [ + 'id', + 'name', + 'description', + 'description_trans', + 'template_group', + 'template_group_name', + 'total_permissions', + 'policy_count', + 'cls' + ], + paging: true, + autosave: true, + save_action: 'Security/Access/Policy/Template/UpdateFromGrid', + remoteSort: true, + sm: this.sm, + columns: [this.sm, { + header: _('name'), + dataIndex: 'name', + id: 'modx-policy-template--template-name', + width: 200, + editor: { xtype: 'textfield', allowBlank: false - } - ,sortable: true - ,renderer: { + }, + sortable: true, + renderer: { fn: function(value, metaData, record) { if (!MODx.perm.policy_template_save || !MODx.perm.policy_template_edit) { metaData.css = 'editor-disabled'; @@ -74,211 +87,275 @@ MODx.grid.AccessPolicyTemplate = function(config) { } return this.renderLink(value, { href: '?a=security/access/policy/template/update&id=' + record.data.id, - target: '_blank' + title: _('policy_template_edit') }); }, scope: this } - },{ - header: _('description') - ,dataIndex: 'description' - ,width: 375 - ,editable: false - ,renderer: function(value, metaData, record) { + }, { + header: _('description'), + dataIndex: 'description', + id: 'modx-policy-template--template-description', + width: 375, + editable: false, + renderer: function(value, metaData, record) { return Ext.util.Format.htmlEncode(record['data']['description_trans']); + }, + sortable: true + }, { + header: _('template_group'), + dataIndex: 'template_group_name', + width: 375, + sortable: true + }, { + header: _('policy_count'), + dataIndex: 'policy_count', + width: 100, + align: 'center', + editable: false, + sortable: true + }, { + header: _('permissions'), + dataIndex: 'total_permissions', + width: 100, + align: 'center', + editable: false, + sortable: true + }], + tbar: [{ + text: _('create'), + cls: 'primary-button', + scope: this, + handler: this.createPolicyTemplate, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this + } } - ,sortable: true - },{ - header: _('template_group') - ,dataIndex: 'template_group_name' - ,width: 375 - ,sortable: true - },{ - header: _('policy_count') - ,dataIndex: 'policy_count' - ,width: 100 - ,editable: false - ,sortable: true - },{ - header: _('permissions') - ,dataIndex: 'total_permissions' - ,width: 100 - ,editable: false - ,sortable: true - }] - ,tbar: [{ - text: _('create') - ,hidden: !MODx.perm.policy_template_new || !MODx.perm.policy_template_save - ,cls:'primary-button' - ,scope: this - ,handler: this.createPolicyTemplate - },{ - text: _('import') - ,scope: this - ,handler: this.importPolicyTemplate - },{ - text: _('bulk_actions') - ,hidden: !MODx.perm.policy_template_delete - ,menu: [{ - text: _('policy_remove_multiple') - ,handler: this.removeSelected - ,scope: this - }] - },'->',{ - xtype: 'textfield' - ,name: 'search' - ,id: 'modx-policy-template-search' - ,cls: 'x-form-filter' - ,emptyText: _('search_ellipsis') - ,listeners: { - 'change': {fn: this.search, scope: this} - ,'render': {fn: function(cmp) { - new Ext.KeyMap(cmp.getEl(), { - key: Ext.EventObject.ENTER - ,fn: function() { - this.fireEvent('change',this.getValue()); - this.blur(); - return true;} - ,scope: cmp - }); - },scope:this} + }, { + text: _('import'), + scope: this, + handler: this.importPolicyTemplate, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this + } + } + }, { + text: _('bulk_actions'), + menu: [{ + text: _('policy_template_remove_multiple'), + itemId: 'modx-policy-template--bulk-menu-opt-remove', + handler: this.removeSelected, + scope: this + }], + listeners: { + render: { + fn: function(btn) { + if (!this.userCanDelete) { + btn.hide(); + } + }, + scope: this + }, + click: { + fn: function(btn) { + const removableItems = this.getRemovableItemsFromSelection('int'), + menuOptRemove = btn.menu.getComponent('modx-policy-template--bulk-menu-opt-remove') + ; + if (!removableItems) { + menuOptRemove.disable(); + } else { + menuOptRemove.enable(); + } + }, + scope: this + } } - },{ - xtype: 'button' - ,id: 'modx-sacpoltemp-filter-clear' - ,cls: 'x-form-filter-clear' - ,text: _('filter_clear') - ,listeners: { - 'click': {fn: this.clearFilter, scope: this}, - 'mouseout': { fn: function(evt){ - this.removeClass('x-btn-focus'); + }, '->', { + xtype: 'textfield', + name: 'search', + id: 'modx-policy-template-search', + cls: 'x-form-filter', + emptyText: _('search_ellipsis'), + listeners: { + 'change': { + fn: this.search, + scope: this + }, + 'render': { + fn: function(cmp) { + new Ext.KeyMap(cmp.getEl(), { + key: Ext.EventObject.ENTER, + fn: function() { + this.fireEvent('change', this.getValue()); + this.blur(); + return true; + }, + scope: cmp + }); + }, + scope: this } + } + }, { + xtype: 'button', + id: 'modx-sacpoltemp-filter-clear', + cls: 'x-form-filter-clear', + text: _('filter_clear'), + listeners: { + 'click': { + fn: this.clearFilter, + scope: this + }, + 'mouseout': { + fn: function(evt) { + this.removeClass('x-btn-focus'); + } } } }] }); - MODx.grid.AccessPolicyTemplate.superclass.constructor.call(this,config); + MODx.grid.AccessPolicyTemplate.superclass.constructor.call(this, config); - this.on('render', function(){ - if (!MODx.perm.policy_template_save || !MODx.perm.policy_template_edit) { - const colModel = this.getColumnModel(), - nameIdx = colModel.getIndexById('modx-policy-template--template-name') - ; - colModel.setEditable(nameIdx, false); - } + // this.protectedDataIndex = 'id'; + // this.protectedIdentifiers = [1, 3]; + this.gridMenuActions = ['edit', 'delete', 'duplicate', 'export']; + + this.setUserCanEdit(['policy_template_save', 'policy_template_edit']); + this.setUserCanCreate(['policy_template_save', 'policy_template_new']); + this.setUserCanDelete(['policy_template_delete']); + this.setShowActionsMenu(); + + this.on('render', function() { + this.setEditableColumnAccess( + ['modx-policy-template--template-name', 'modx-policy-template--template-description'] + ); }); }; -Ext.extend(MODx.grid.AccessPolicyTemplate,MODx.grid.Grid,{ +Ext.extend(MODx.grid.AccessPolicyTemplate, MODx.grid.Grid, { getMenu: function() { - var r = this.getSelectionModel().getSelected(); - var p = r.data.cls; - - var m = []; - - if (this.getSelectionModel().getCount() > 1 && MODx.perm.policy_template_delete) { + const rowData = this.getSelectionModel().getSelected().data, + m = [] + ; + if (this.userCanEdit) { m.push({ - text: _('policy_template_remove_multiple') - ,handler: this.removeSelected + text: _('edit'), + handler: this.editPolicyTemplate }); - } else { - if (MODx.perm.policy_template_save && MODx.perm.policy_template_edit) { - m.push({ - text: _('edit') - ,handler: this.editPolicyTemplate - }); - } - if (MODx.perm.policy_template_save) { - m.push({ - text: _('duplicate') - ,handler: this.confirm.createDelegate(this,["Security/Access/Policy/Template/Duplicate","policy_template_duplicate_confirm"]) - }); - } + } + if (this.userCanCreate) { + m.push({ + text: _('duplicate'), + handler: this.confirm.createDelegate( + this, ["Security/Access/Policy/Template/Duplicate", "policy_template_duplicate_confirm"] + ) + }); + } + if (m.length > 0) { + m.push('-'); + } + m.push({ + text: _('policy_template_export'), + handler: this.exportPolicyTemplate + }); + if (this.userCanDelete) { if (m.length > 0) { m.push('-'); } m.push({ - text: _('policy_template_export') - ,handler: this.exportPolicyTemplate + text: _('delete'), + handler: this.removePolicyTemplate }); - - if (MODx.perm.policy_template_delete) { - if (m.length > 0) m.push('-'); - m.push({ - text: _('delete'), - handler: this.removePolicyTemplate - }); - } } - if (m.length > 0) { this.addContextMenuItem(m); } - } + }, - ,createPolicyTemplate: function(btn,e) { + createPolicyTemplate: function(btn, e) { var r = this.menu.record; if (!this.windows.aptc) { this.windows.aptc = MODx.load({ - xtype: 'modx-window-access-policy-template-create' - ,record: r - ,plugin: this.config.plugin - ,listeners: { - 'success': {fn:function(r) { - this.refresh(); - },scope:this} + xtype: 'modx-window-access-policy-template-create', + record: r, + plugin: this.config.plugin, + listeners: { + success: { + fn: function(r) { + this.refresh(); + }, + scope: this + } } }); } this.windows.aptc.reset(); this.windows.aptc.show(e.target); - } + }, - ,importPolicyTemplate: function(btn,e) { + importPolicyTemplate: function(btn, e) { var r = {}; if (!this.windows.importPolicyTemplate) { this.windows.importPolicyTemplate = MODx.load({ - xtype: 'modx-window-policy-template-import' - ,record: r - ,listeners: { - 'success': {fn:function(o) { - this.refresh(); - },scope:this} + xtype: 'modx-window-policy-template-import', + record: r, + listeners: { + success: { + fn: function(o) { + this.refresh(); + }, + scope: this + } } }); } this.windows.importPolicyTemplate.reset(); this.windows.importPolicyTemplate.setValues(r); this.windows.importPolicyTemplate.show(e.target); - } + }, - ,exportPolicyTemplate: function(btn,e) { + exportPolicyTemplate: function(btn, e) { var id = this.menu.record.id; MODx.Ajax.request({ - url: this.config.url - ,params: { - action: 'Security/Access/Policy/Template/Export' - ,id: id - } - ,listeners: { - 'success': {fn:function(r) { - location.href = this.config.url+'?action=Security/Access/Policy/Template/Export&download=1&id='+id+'&HTTP_MODAUTH='+MODx.siteId; - },scope:this} + url: this.config.url, + params: { + action: 'Security/Access/Policy/Template/Export', + id: id + }, + listeners: { + success: { + fn: function(r) { + location.href = this.config.url + '?action=Security/Access/Policy/Template/Export&download=1&id=' + id + '&HTTP_MODAUTH=' + MODx.siteId; + }, + scope: this + } } }); - } + }, - ,editPolicyTemplate: function(itm,e) { - MODx.loadPage('security/access/policy/template/update', 'id='+this.menu.record.id); - } + editPolicyTemplate: function(itm, e) { + MODx.loadPage('security/access/policy/template/update', 'id=' + this.menu.record.id); + }, - ,removeSelected: function() { + removeSelected: function() { var cs = this.getSelectedAsList(); if (cs === false) return false; var store = this.getStore(); var policiesCount = 0; - cs.split(',').forEach(function(item){ + cs.split(',').forEach(function(item) { const record = store.getById(item); if (record) { @@ -288,29 +365,36 @@ Ext.extend(MODx.grid.AccessPolicyTemplate,MODx.grid.Grid,{ }) MODx.msg.confirm({ - title: _('policy_template_remove_multiple') - ,text: policiesCount ? _('policy_template_remove_multiple_confirm_in_use', {count: policiesCount}) : _('policy_template_remove_multiple_confirm') - ,url: this.config.url - ,params: { - action: 'Security/Access/Policy/Template/RemoveMultiple' - ,templates: cs - } - ,listeners: { - 'success': {fn:function(r) { - this.getSelectionModel().clearSelections(true); - this.refresh(); - },scope:this} + title: _('policy_template_remove_multiple'), + text: policiesCount ? _('policy_template_remove_multiple_confirm_in_use', { + count: policiesCount + }) : _('policy_template_remove_multiple_confirm'), + url: this.config.url, + params: { + action: 'Security/Access/Policy/Template/RemoveMultiple', + templates: cs + }, + listeners: { + success: { + fn: function(r) { + this.getSelectionModel().clearSelections(true); + this.refresh(); + }, + scope: this + } } }); return true; - } + }, - ,removePolicyTemplate: function() { + removePolicyTemplate: function() { if (!this.menu.record) return; MODx.msg.confirm({ title: _('warning'), - text: parseInt(this.menu.record.policy_count) ? _('policy_template_remove_confirm_in_use', {count: this.menu.record.policy_count}) : _('policy_template_remove_confirm'), + text: parseInt(this.menu.record.policy_count) ? _('policy_template_remove_confirm_in_use', { + count: this.menu.record.policy_count + }) : _('policy_template_remove_confirm'), url: this.config.url, params: { action: 'Security/Access/Policy/Template/Remove', @@ -319,28 +403,29 @@ Ext.extend(MODx.grid.AccessPolicyTemplate,MODx.grid.Grid,{ listeners: { success: { fn: this.refresh, - scope:this + scope: this } } }); - } + }, - ,search: function(tf,newValue,oldValue) { + search: function(tf, newValue, oldValue) { var nv = newValue || tf; this.getStore().baseParams.query = Ext.isEmpty(nv) || Ext.isObject(nv) ? '' : nv; this.getBottomToolbar().changePage(1); return true; - } + }, - ,clearFilter: function() { + clearFilter: function() { this.getStore().baseParams = { action: 'Security/Access/Policy/Template/GetList' }; Ext.getCmp('modx-policy-template-search').reset(); this.getBottomToolbar().changePage(1); } + }); -Ext.reg('modx-grid-access-policy-templates',MODx.grid.AccessPolicyTemplate); +Ext.reg('modx-grid-access-policy-templates', MODx.grid.AccessPolicyTemplate); /** * Generates a window for creating Access Policies. @@ -352,53 +437,56 @@ Ext.reg('modx-grid-access-policy-templates',MODx.grid.AccessPolicyTemplate); */ MODx.window.CreateAccessPolicyTemplate = function(config) { config = config || {}; - this.ident = config.ident || 'cacpt'+Ext.id(); - Ext.applyIf(config,{ - title: _('create') - ,url: MODx.config.connector_url - ,action: 'Security/Access/Policy/Template/Create' - ,fields: [{ - fieldLabel: _('name') - ,name: 'name' - ,id: 'modx-'+this.ident+'-name' - ,xtype: 'textfield' - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-name' - ,html: _('policy_template_desc_name') - ,cls: 'desc-under' - },{ - fieldLabel: _('template_group') - ,name: 'template_group' - ,id: 'modx-'+this.ident+'-template-group' - ,xtype: 'modx-combo-access-policy-template-group' - ,anchor: '100%' - ,value: 1 - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-template-group' - ,html: _('policy_template_desc_template_group') - ,cls: 'desc-under' - },{ - fieldLabel: _('description') - ,name: 'description' - ,id: 'modx-'+this.ident+'-description' - ,xtype: 'textarea' - ,anchor: '100%' - ,height: 50 - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-description' - ,html: _('policy_template_desc_description') - ,cls: 'desc-under' - }] - ,keys: [] + this.ident = config.ident || 'cacpt' + Ext.id(); + Ext.applyIf(config, { + title: _('create'), + url: MODx.config.connector_url, + action: 'Security/Access/Policy/Template/Create', + fields: [{ + fieldLabel: _('name'), + name: 'name', + id: 'modx-' + this.ident + '-name', + xtype: 'textfield', + anchor: '100%', + allowBlank: false, + blankText: _('policy_template_err_name_ns') + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-name', + html: _('policy_template_desc_name'), + cls: 'desc-under' + }, { + fieldLabel: _('template_group'), + name: 'template_group', + id: 'modx-' + this.ident + '-template-group', + xtype: 'modx-combo-access-policy-template-group', + anchor: '100%', + value: 1, + blankText: _('policy_template_group_err_ns') + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-template-group', + html: _('policy_template_desc_template_group'), + cls: 'desc-under' + }, { + fieldLabel: _('description'), + name: 'description', + id: 'modx-' + this.ident + '-description', + xtype: 'textarea', + anchor: '100%', + height: 50 + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-description', + html: _('policy_template_desc_description'), + cls: 'desc-under' + }], + keys: [] }); - MODx.window.CreateAccessPolicyTemplate.superclass.constructor.call(this,config); + MODx.window.CreateAccessPolicyTemplate.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.CreateAccessPolicyTemplate,MODx.Window); -Ext.reg('modx-window-access-policy-template-create',MODx.window.CreateAccessPolicyTemplate); +Ext.extend(MODx.window.CreateAccessPolicyTemplate, MODx.Window); +Ext.reg('modx-window-access-policy-template-create', MODx.window.CreateAccessPolicyTemplate); /** * @class MODx.window.ImportPolicyTemplate @@ -408,29 +496,29 @@ Ext.reg('modx-window-access-policy-template-create',MODx.window.CreateAccessPoli */ MODx.window.ImportPolicyTemplate = function(config) { config = config || {}; - this.ident = config.ident || 'imppt-'+Ext.id(); - Ext.applyIf(config,{ - title: _('policy_template_import') - ,id: 'modx-window-policy-template-import' - ,url: MODx.config.connector_url - ,action: 'Security/Access/Policy/Template/Import' - ,fileUpload: true - ,saveBtnText: _('import') - ,fields: [{ - html: _('policy_template_import_msg') - ,id: this.ident+'-desc' - ,xtype: 'modx-description' - ,style: 'margin-bottom: 10px;' - },{ - xtype: 'fileuploadfield' - ,fieldLabel: _('file') - ,buttonText: _('upload.buttons.upload') - ,name: 'file' - ,id: this.ident+'-file' - ,anchor: '100%' + this.ident = config.ident || 'imppt-' + Ext.id(); + Ext.applyIf(config, { + title: _('policy_template_import'), + id: 'modx-window-policy-template-import', + url: MODx.config.connector_url, + action: 'Security/Access/Policy/Template/Import', + fileUpload: true, + saveBtnText: _('import'), + fields: [{ + html: _('policy_template_import_msg'), + id: this.ident + '-desc', + xtype: 'modx-description', + style: 'margin-bottom: 10px;' + }, { + xtype: 'fileuploadfield', + fieldLabel: _('file'), + buttonText: _('upload.buttons.upload'), + name: 'file', + id: this.ident + '-file', + anchor: '100%' }] }); - MODx.window.ImportPolicyTemplate.superclass.constructor.call(this,config); + MODx.window.ImportPolicyTemplate.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.ImportPolicyTemplate,MODx.Window); -Ext.reg('modx-window-policy-template-import',MODx.window.ImportPolicyTemplate); +Ext.extend(MODx.window.ImportPolicyTemplate, MODx.Window); +Ext.reg('modx-window-policy-template-import', MODx.window.ImportPolicyTemplate); diff --git a/manager/assets/modext/widgets/security/modx.grid.role.js b/manager/assets/modext/widgets/security/modx.grid.role.js index 60fc4f43a68..22b4a48fcf8 100644 --- a/manager/assets/modext/widgets/security/modx.grid.role.js +++ b/manager/assets/modext/widgets/security/modx.grid.role.js @@ -1,5 +1,5 @@ /** - * Loads a grid of roles. + * Loads a grid of Roles. * * @class MODx.grid.Role * @extends MODx.grid.Grid @@ -9,166 +9,191 @@ */ MODx.grid.Role = function(config) { config = config || {}; - Ext.applyIf(config,{ - title: _('roles') - ,id: 'modx-grid-role' - ,url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + title: _('roles'), + id: 'modx-grid-role', + url: MODx.config.connector_url, + baseParams: { action: 'Security/Role/GetList' - } - ,fields: ['id','name','description','authority','perm'] - ,paging: true - ,autosave: true - ,save_action: 'Security/Role/UpdateFromGrid' - ,clicksToEdit: 1 - ,columns: [{ - header: _('id') - ,dataIndex: 'id' - ,width: 50 - ,sortable: true - },{ - header: _('name') - ,dataIndex: 'name' - ,id: 'role--name' - ,width: 150 - ,sortable: true - ,editor: { - xtype: 'textfield' - } - ,renderer: { + }, + fields: [ + 'id', + 'name', + 'description', + 'authority', + 'creator' + ], + paging: true, + autosave: true, + save_action: 'Security/Role/UpdateFromGrid', + stateful: true, + stateId: 'modx-grid-role-state', + columns: [{ + header: _('id'), + dataIndex: 'id', + width: 50, + sortable: true + }, { + header: _('name'), + dataIndex: 'name', + id: 'modx-role--name', + width: 150, + sortable: true, + editor: { + xtype: 'textfield', + allowBlank: false, + blankText: _('role_err_ns_name'), + validator: function(value) { + if (this.gridEditor.record.json.reserved.name.includes(value)) { + const msg = _('role_err_name_reserved', { reservedName: value }); + Ext.Msg.alert(_('error'), msg); + return false; + } else { + return true; + } + } + }, + renderer: { fn: function(value, metaData, record) { - if (!MODx.perm.save_role || !MODx.perm.edit_role || this.isProtected(record.data.authority)) { + if (!this.userCanEdit || record.json.isProtected) { metaData.css = 'editor-disabled'; - // console.log('metaData: ', metaData); - // console.log('this', this); } - return value; + value = record.json.isProtected ? record.json.name_trans : value ; + return Ext.util.Format.htmlEncode(value); }, scope: this } - ,listeners: { - dblclick: function(col, gp, rowIndex, e) { - // console.log('dblclick, col: ', col); - // console.log('dblclick, gp: ', gp); - // console.log('dblclick, e: ', e); - - } - } - },{ - header: _('description') - ,dataIndex: 'description' - ,id: 'role--description' - ,width: 350 - ,editor: { + }, { + header: _('description'), + dataIndex: 'description', + id: 'modx-role--description', + width: 350, + editor: { xtype: 'textarea' - } - ,renderer: { + }, + renderer: { fn: function(value, metaData, record) { - if (!MODx.perm.save_role || !MODx.perm.edit_role || this.isProtected(record.data.authority)) { + if (!this.userCanEdit || record.json.isProtected) { metaData.css = 'editor-disabled'; } - return value; + value = record.json.isProtected ? record.json.description_trans : value ; + return Ext.util.Format.htmlEncode(value); }, scope: this } - },{ - header: _('authority') - ,dataIndex: 'authority' - ,id: 'role--authority' - ,width: 60 - ,sortable: true - ,editor: { - xtype: 'textfield' - } - ,renderer: { - fn: function(value, metaData, record, rowIndex, colIndex) { - const isProtected = this.isProtected(record.data.authority); - if (!MODx.perm.save_role || !MODx.perm.edit_role || isProtected) { + }, { + header: _('creator'), + dataIndex: 'creator', + id: 'modx-role--creator', + width: 70, + align: 'center', + sortable: true + }, { + header: _('authority'), + dataIndex: 'authority', + id: 'modx-role--authority', + width: 60, + align: 'center', + sortable: true, + editor: { + xtype: 'numberfield', + allowNegative: false, + allowDecimals: false, + allowBlank: false, + blankText: _('role_err_ns_authority'), + maxValue: 9999 + }, + renderer: { + fn: function(value, metaData, record) { + if (!this.userCanEdit || record.json.isProtected) { metaData.css = 'editor-disabled'; - if (isProtected) { - console.log(`protected row #${rowIndex} metaData:`, metaData); - } } return value; }, scope: this } - }] - ,tbar: [{ - text: _('create') - ,hidden: !MODx.perm.new_role || !MODx.perm.save_role - ,cls:'primary-button' - ,handler: this.createRole - ,scope: this - }] - }); - MODx.grid.Role.superclass.constructor.call(this,config); - - this.on('render', function() { - if (!MODx.perm.save_role || !MODx.perm.edit_role) { - const colModel = this.getColumnModel(), - editableCols = ['role--name', 'role--description', 'role--authority'] - ; - editableCols.forEach(colId => { - const colIndex = colModel.getIndexById(colId); - colModel.setEditable(colIndex, false); - }); + }], + tbar: [{ + text: _('create'), + cls: 'primary-button', + handler: this.createRole, + scope: this, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this + } + } + }], + viewConfig: { + forceFit: true, + scrollOffset: 0, + getRowClass: function(record, index, rowParams, store) { + // Adds the returned class to the row container's css classes + return record.json.isProtected ? 'modx-protected-row' : ''; + } } }); -}; -Ext.extend(MODx.grid.Role,MODx.grid.Grid,{ + MODx.grid.Role.superclass.constructor.call(this, config); - /** - * @property {Function} isProtected - Used to exclude the permanent roles of - * 'Super User' (0) and 'Member' (9999) for all permissions levels - * - * @param {Number} authority - The authority level for the role being tested - * @return {Boolean} - */ - isProtected: function(authority) { - const protected = [0, 9999]; - return protected.includes(authority); - } + this.protectedDataIndex = 'name'; + this.protectedIdentifiers = ['Super User', 'Member']; + this.gridMenuActions = ['delete']; - ,actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { - // console.log(`actionsColumnRenderer called from grid.role`); - // console.log('actionsColumnRenderer store: ',store); - // console.log('actionsColumnRenderer value: ',value); - // console.log('actionsColumnRenderer rowIndex: ',rowIndex); - // console.log('actionsColumnRenderer record: ',record); - // console.log('actionsColumnRenderer in lexicon.grid, rowIndex: ',rowIndex); - // console.log('actionsColumnRenderer in lexicon.grid, arguments: ',arguments); - // console.log('actionsColumnRenderer metaData: ',metaData); + this.setUserCanEdit(['save_role', 'edit_role']); + this.setUserCanCreate(['save_role', 'new_role']); + this.setUserCanDelete(['delete_role']); + this.setShowActionsMenu(); - if (MODx.perm.delete_role && !this.isProtected(record.data.authority)) { - return this.superclass().actionsColumnRenderer.apply(this, arguments); + this.on({ + render: function() { + this.setEditableColumnAccess( + ['modx-role--name', 'modx-role--description', 'modx-role--authority'] + ); + }, + beforeedit: function(e) { + if (e.record.json.isProtected) { + return false; + } } - } + }); + +}; +Ext.extend(MODx.grid.Role, MODx.grid.Grid, { - ,getMenu: function() { - const record = this.getSelectionModel().getSelected(); - let m = []; - if (MODx.perm.delete_role && !this.isProtected(record.data.authority)) { + getMenu: function() { + const record = this.getSelectionModel().getSelected(), + m = [] + ; + if (this.userCanDelete && !record.json.isProtected) { m.push({ text: _('delete'), - handler: this.remove.createDelegate(this,['role_remove_confirm', 'Security/Role/Remove']) + handler: this.remove.createDelegate(this, ['role_remove_confirm', 'Security/Role/Remove']) }); } return m; - } + }, - ,createRole: function(btn,e) { - this.loadWindow(btn,e,{ - xtype: 'modx-window-role-create' - ,listeners: { - 'success': {fn: function() { - this.refresh(); - },scope:this} + createRole: function(btn, e) { + this.loadWindow(btn, e, { + xtype: 'modx-window-role-create', + listeners: { + success: { + fn: function() { + this.refresh(); + }, + scope: this + } } }); } + }); -Ext.reg('modx-grid-role',MODx.grid.Role); +Ext.reg('modx-grid-role', MODx.grid.Role); /** * @class MODx.window.CreateRole @@ -178,53 +203,56 @@ Ext.reg('modx-grid-role',MODx.grid.Role); */ MODx.window.CreateRole = function(config) { config = config || {}; - this.ident = config.ident || 'crole'+Ext.id(); - Ext.applyIf(config,{ - title: _('create') - ,url: MODx.config.connector_url - ,action: 'Security/Role/Create' - ,fields: [{ - name: 'name' - ,fieldLabel: _('name') - ,id: 'modx-'+this.ident+'-name' - ,xtype: 'textfield' - ,allowBlank: false - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-name' - ,html: _('role_desc_name') - ,cls: 'desc-under' - },{ - name: 'authority' - ,fieldLabel: _('authority') - ,xtype: 'textfield' - ,id: 'modx-'+this.ident+'-authority' - ,allowBlank: false - ,allowNegative: false - ,value: 0 - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-authority' - ,html: _('role_desc_authority') - ,cls: 'desc-under' - },{ - name: 'description' - ,fieldLabel: _('description') - ,id: 'modx-'+this.ident+'-description' - ,xtype: 'textarea' - ,anchor: '100%' - ,grow: true - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-description' - ,html: _('role_desc_description') - ,cls: 'desc-under' - }] - ,keys: [] + this.ident = config.ident || 'crole' + Ext.id(); + Ext.applyIf(config, { + title: _('create'), + url: MODx.config.connector_url, + action: 'Security/Role/Create', + fields: [{ + name: 'name', + fieldLabel: _('name'), + id: 'modx-' + this.ident + '-name', + xtype: 'textfield', + allowBlank: false, + blankText: _('role_err_ns_name'), + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-name', + html: _('role_desc_name'), + cls: 'desc-under' + }, { + name: 'authority', + fieldLabel: _('authority'), + xtype: 'numberfield', + id: 'modx-' + this.ident + '-authority', + allowBlank: false, + blankText: _('role_err_ns_authority'), + allowNegative: false, + value: 0, + maxValue: 9999, + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-authority', + html: _('role_desc_authority'), + cls: 'desc-under' + }, { + name: 'description', + fieldLabel: _('description'), + id: 'modx-' + this.ident + '-description', + xtype: 'textarea', + anchor: '100%', + grow: true + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-description', + html: _('role_desc_description'), + cls: 'desc-under' + }], + keys: [] }); - MODx.window.CreateRole.superclass.constructor.call(this,config); + MODx.window.CreateRole.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.CreateRole,MODx.Window); -Ext.reg('modx-window-role-create',MODx.window.CreateRole); +Ext.extend(MODx.window.CreateRole, MODx.Window); +Ext.reg('modx-window-role-create', MODx.window.CreateRole); diff --git a/manager/assets/modext/widgets/security/modx.grid.user.group.js b/manager/assets/modext/widgets/security/modx.grid.user.group.js index 26a56481394..b73ad2b28dc 100644 --- a/manager/assets/modext/widgets/security/modx.grid.user.group.js +++ b/manager/assets/modext/widgets/security/modx.grid.user.group.js @@ -20,7 +20,16 @@ MODx.grid.UserGroups = function(config) { ,baseParams: { action: 'Security/Group/GetList' } - ,fields: ['usergroup','name','member','role','rolename','primary_group','rank','user_group_desc'] + ,fields: [ + 'usergroup', + 'name', + 'member', + 'role', + 'rolename', + 'primary_group', + 'rank', + 'user_group_desc' + ] ,cls: 'modx-grid modx-grid-draggable' ,columns: [this.exp, { @@ -54,8 +63,8 @@ MODx.grid.UserGroups = function(config) { ,scrollable: true ,targetCfg: {} ,listeners: { - 'afterrowmove': {fn:this.onAfterRowMove,scope:this} - ,'beforerowmove': {fn:this.onBeforeRowMove,scope:this} + afterrowmove: {fn:this.onAfterRowMove,scope:this} + ,beforerowmove: {fn:this.onBeforeRowMove,scope:this} } }), this.exp] @@ -66,6 +75,9 @@ MODx.grid.UserGroups = function(config) { }] }); MODx.grid.UserGroups.superclass.constructor.call(this,config); + + console.log('MODx.grid.UserGroups loading...'); + this.userRecord = new Ext.data.Record.create(['usergroup','name','member','role','rolename','primary_group']); this.addEvents('beforeUpdateRole','afterUpdateRole','beforeAddGroup','afterAddGroup','beforeReorderGroup','afterReorderGroup'); }; diff --git a/manager/assets/modext/widgets/security/modx.panel.user.group.js b/manager/assets/modext/widgets/security/modx.panel.user.group.js index bfcff0b0225..964458daa39 100644 --- a/manager/assets/modext/widgets/security/modx.panel.user.group.js +++ b/manager/assets/modext/widgets/security/modx.panel.user.group.js @@ -6,248 +6,305 @@ */ MODx.panel.UserGroup = function(config) { config = config || {}; - Ext.applyIf(config,{ - id: 'modx-panel-user-group' - ,cls: 'container form-with-labels' - ,url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + id: 'modx-panel-user-group', + cls: 'container form-with-labels', + url: MODx.config.connector_url, + baseParams: { action: 'Security/Group/Update' - } - ,defaults: { collapsible: false ,autoHeight: true } - ,items: [this.getPageHeader(config),{ - xtype: 'modx-tabs' - ,defaults: { - autoHeight: true - ,border: true - ,bodyCssClass: 'tab-panel-wrapper' - ,hideMode: 'offsets' - } - ,id: 'modx-usergroup-tabs' - ,forceLayout: true - ,deferredRender: false - ,stateful: true - ,stateId: 'modx-usergroup-tabpanel' - ,stateEvents: ['tabchange'] - ,getState:function() { - return {activeTab:this.items.indexOf(this.getActiveTab())}; - } - ,items: [{ - title: _('general_information') - ,defaults: { - border: false - ,msgTarget: 'side' - } - ,layout: 'form' - ,itemId: 'modx-usergroup-general-panel' - ,labelAlign: 'top' - ,labelSeparator: '' - ,items: [{ - xtype: 'panel' - ,border: false - ,cls: 'main-wrapper' - ,layout: 'form' - ,items: [{ - layout: 'column' - ,border: false - ,defaults: { - layout: 'form' - ,labelAlign: 'top' - ,labelSeparator: '' - ,anchor: '100%' - ,border: false - } - ,items: [{ - columnWidth: .6 - ,items: [{ - xtype: 'hidden' - ,name: 'id' - ,id: 'modx-usergroup-id' - ,value: config.record.id - },{ - name: 'name' - ,id: 'modx-usergroup-name' - ,xtype: config.record && (config.record.name === 'Administrator' || config.record.id === 0) ? 'statictextfield' : 'textfield' - ,fieldLabel: _('name') - ,allowBlank: false - ,enableKeyEvents: true - ,disabled: config.record.id === 0 - ,anchor: '100%' - ,listeners: { - 'keyup': {scope:this,fn:function(f,e) { - Ext.getCmp('modx-header-breadcrumbs').updateHeader(Ext.util.Format.htmlEncode(f.getValue())); - }} + }, + defaults: { + collapsible: false, + autoHeight: true + }, + items: [this.getPageHeader(config), { + xtype: 'modx-tabs', + defaults: { + autoHeight: true, + border: true, + bodyCssClass: 'tab-panel-wrapper', + hideMode: 'offsets' + }, + id: 'modx-usergroup-tabs', + forceLayout: true, + deferredRender: false, + stateful: true, + stateId: 'modx-usergroup-tabpanel', + stateEvents: ['tabchange'], + getState: function() { + return { + activeTab: this.items.indexOf(this.getActiveTab()) + }; + }, + items: [{ + title: _('general_information'), + defaults: { + border: false, + msgTarget: 'side' + }, + layout: 'form', + itemId: 'modx-usergroup-general-panel', + labelAlign: 'top', + labelSeparator: '', + items: [{ + xtype: 'panel', + border: false, + cls: 'main-wrapper', + layout: 'form', + items: [{ + layout: 'column', + border: false, + defaults: { + layout: 'form', + labelAlign: 'top', + labelSeparator: '', + anchor: '100%', + border: false + }, + items: [{ + columnWidth: .6, + items: [{ + xtype: 'hidden', + name: 'id', + id: 'modx-usergroup-id', + value: config.record.id + }, { + name: 'name', + id: 'modx-usergroup-name', + xtype: config.record && (config.record.name === 'Administrator' || config.record.id === 0) ? 'statictextfield' : 'textfield', + fieldLabel: _('name'), + allowBlank: false, + enableKeyEvents: true, + disabled: config.record.id === 0, + anchor: '100%', + listeners: { + keyup: { + scope: this, + fn: function(f, e) { + Ext.getCmp('modx-header-breadcrumbs').updateHeader(Ext.util.Format.htmlEncode(f.getValue())); + } + } } - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-usergroup-name' - ,html: _('user_group_desc_name') - ,cls: 'desc-under' - },{ - name: 'description' - ,id: 'modx-usergroup-description' - ,xtype: 'textarea' - ,fieldLabel: _('description') - ,anchor: '100%' - ,grow: true - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-usergroup-description' - ,html: _('user_group_desc_description') - ,cls: 'desc-under' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-usergroup-name', + html: _('user_group_desc_name'), + cls: 'desc-under' + }, { + name: 'description', + id: 'modx-usergroup-description', + xtype: 'textarea', + fieldLabel: _('description'), + anchor: '100%', + grow: true + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-usergroup-description', + html: _('user_group_desc_description'), + cls: 'desc-under' }] - },{ - columnWidth: .4 - ,items: [{ - name: 'parent' - ,hiddenName: 'parent' - ,id: 'modx-usergroup-parent' - ,xtype: 'modx-combo-usergroup' - ,fieldLabel: _('user_group_parent') - ,editable: false - ,anchor: '100%' - ,disabled: config.record.id === 0 - ,baseParams: { - action: 'Security/Group/GetList' - ,addNone: true - ,exclude: config.record.id + }, { + columnWidth: .4, + items: [{ + name: 'parent', + hiddenName: 'parent', + id: 'modx-usergroup-parent', + xtype: 'modx-combo-usergroup', + fieldLabel: _('user_group_parent'), + editable: false, + anchor: '100%', + disabled: config.record.id === 0, + baseParams: { + action: 'Security/Group/GetList', + addNone: true, + exclude: config.record.id } - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-usergroup-parent' - ,html: _('user_group_desc_parent') - ,cls: 'desc-under' - },{ - name: 'dashboard' - ,id: 'modx-usergroup-dashboard' - ,xtype: 'modx-combo-dashboard' - ,fieldLabel: _('dashboard') - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-usergroup-dashboard' - ,html: _('user_group_desc_dashboard') - ,cls: 'desc-under' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-usergroup-parent', + html: _('user_group_desc_parent'), + cls: 'desc-under' + }, { + name: 'dashboard', + id: 'modx-usergroup-dashboard', + xtype: 'modx-combo-dashboard', + fieldLabel: _('dashboard'), + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-usergroup-dashboard', + html: _('user_group_desc_dashboard'), + cls: 'desc-under' }] }] }] }] - },{ - title: _('access_permissions') - ,itemId: 'modx-usergroup-permissions-panel' - ,items: [{ - xtype: 'modx-vtabs' - ,items: [{ - title: _('user_group_context_access') - ,itemId: 'user-group-context-access' - // ,forceLayout: true - ,hideMode: 'offsets' - ,layout: 'form' - ,items: [{ - html: '

'+_('user_group_context_access_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-user-group-context' - ,preventRender: true - ,usergroup: config.record.id - ,autoHeight: true - ,cls: 'main-wrapper' - ,listeners: { - 'afterRemoveRow': {fn:this.markDirty,scope:this} - ,'afteredit': {fn:this.markDirty,scope:this} - ,'updateAcl': {fn:this.markDirty,scope:this} - ,'createAcl': {fn:this.markDirty,scope:this} + }, { + title: _('access_permissions'), + itemId: 'modx-usergroup-permissions-panel', + items: [{ + xtype: 'modx-vtabs', + items: [{ + title: _('user_group_context_access'), + itemId: 'user-group-context-access' + // ,forceLayout: true + , + hideMode: 'offsets', + layout: 'form', + items: [{ + html: '

' + _('user_group_context_access_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-user-group-context', + preventRender: true, + usergroup: config.record.id, + autoHeight: true, + cls: 'main-wrapper', + listeners: { + afterRemoveRow: { + fn: this.markDirty, + scope: this + }, + afteredit: { + fn: this.markDirty, + scope: this + }, + updateAcl: { + fn: this.markDirty, + scope: this + }, + createAcl: { + fn: this.markDirty, + scope: this + } } }] - },{ - title: _('user_group_resourcegroup_access') - ,itemId: 'user-group-resourcegroup-access' - ,hideMode: 'offsets' - ,layout: 'form' - ,items: [{ - html: '

'+_('user_group_resourcegroup_access_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-user-group-resource-group' - ,cls: 'main-wrapper' - ,preventRender: true - ,usergroup: config.record.id - ,autoHeight: true - ,width: '97%' - ,listeners: { - 'afterRemoveRow': {fn:this.markDirty,scope:this} - ,'afteredit': {fn:this.markDirty,scope:this} - ,'updateAcl': {fn:this.markDirty,scope:this} - ,'createAcl': {fn:this.markDirty,scope:this} + }, { + title: _('user_group_resourcegroup_access'), + itemId: 'user-group-resourcegroup-access', + hideMode: 'offsets', + layout: 'form', + items: [{ + html: '

' + _('user_group_resourcegroup_access_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-user-group-resource-group', + cls: 'main-wrapper', + preventRender: true, + usergroup: config.record.id, + autoHeight: true, + width: '97%', + listeners: { + afterRemoveRow: { + fn: this.markDirty, + scope: this + }, + afteredit: { + fn: this.markDirty, + scope: this + }, + updateAcl: { + fn: this.markDirty, + scope: this + }, + createAcl: { + fn: this.markDirty, + scope: this + } } }] - },{ - title: _('user_group_category_access') - ,itemId: 'user-group-category-access' - ,hideMode: 'offsets' - ,layout: 'form' - ,items: [{ - html: '

'+_('user_group_category_access_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-user-group-category' - ,cls: 'main-wrapper' - ,preventRender: true - ,usergroup: config.record.id - ,autoHeight: true - ,width: '97%' - ,listeners: { - 'afterRemoveRow': {fn:this.markDirty,scope:this} - ,'afteredit': {fn:this.markDirty,scope:this} - ,'updateAcl': {fn:this.markDirty,scope:this} - ,'createAcl': {fn:this.markDirty,scope:this} + }, { + title: _('user_group_category_access'), + itemId: 'user-group-category-access', + hideMode: 'offsets', + layout: 'form', + items: [{ + html: '

' + _('user_group_category_access_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-user-group-category', + cls: 'main-wrapper', + preventRender: true, + usergroup: config.record.id, + autoHeight: true, + width: '97%', + listeners: { + afterRemoveRow: { + fn: this.markDirty, + scope: this + }, + afteredit: { + fn: this.markDirty, + scope: this + }, + updateAcl: { + fn: this.markDirty, + scope: this + }, + createAcl: { + fn: this.markDirty, + scope: this + } } }] - },{ - title: _('user_group_source_access') - ,itemId: 'user-group-source-access' - ,hideMode: 'offsets' - ,layout: 'form' - ,items: [{ - html: '

'+_('user_group_source_access_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-user-group-source' - ,cls: 'main-wrapper' - ,preventRender: true - ,usergroup: config.record.id - ,autoHeight: true - ,width: '97%' - ,listeners: { - 'afterRemoveRow': {fn:this.markDirty,scope:this} - ,'afteredit': {fn:this.markDirty,scope:this} - ,'updateAcl': {fn:this.markDirty,scope:this} - ,'createAcl': {fn:this.markDirty,scope:this} + }, { + title: _('user_group_source_access'), + itemId: 'user-group-source-access', + hideMode: 'offsets', + layout: 'form', + items: [{ + html: '

' + _('user_group_source_access_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-user-group-source', + cls: 'main-wrapper', + preventRender: true, + usergroup: config.record.id, + autoHeight: true, + width: '97%', + listeners: { + afterRemoveRow: { + fn: this.markDirty, + scope: this + }, + afteredit: { + fn: this.markDirty, + scope: this + }, + updateAcl: { + fn: this.markDirty, + scope: this + }, + createAcl: { + fn: this.markDirty, + scope: this + } } }] - },{ - title: _('user_group_namespace_access') - ,itemId: 'user-group-namespace-access' - ,hideMode: 'offsets' - ,layout: 'form' - ,items: [{ - html: '

' + _('user_group_namespace_access_desc') + '

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-user-group-namespace' - ,cls: 'main-wrapper' - ,preventRender: true - ,usergroup: config.record.id - ,autoHeight: true - ,width: '97%' + }, { + title: _('user_group_namespace_access'), + itemId: 'user-group-namespace-access', + hideMode: 'offsets', + layout: 'form', + items: [{ + html: '

' + _('user_group_namespace_access_desc') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-user-group-namespace', + cls: 'main-wrapper', + preventRender: true, + usergroup: config.record.id, + autoHeight: true, + width: '97%' }] - }] - ,listeners: { + }], + listeners: { render: function(vtabPanel) { - var elCatsPanelKey = vtabPanel.items.keys.indexOf('user-group-category-access'), - mediaSrcPanelKey = vtabPanel.items.keys.indexOf('user-group-source-access'), - namespacePanelKey = vtabPanel.items.keys.indexOf('user-group-namespace-access') - form = Ext.getCmp('modx-panel-user-group').getForm() - ; + const elCatsPanelKey = vtabPanel.items.keys.indexOf('user-group-category-access'), + mediaSrcPanelKey = vtabPanel.items.keys.indexOf('user-group-source-access'), + namespacePanelKey = vtabPanel.items.keys.indexOf('user-group-namespace-access'), + form = Ext.getCmp('modx-panel-user-group').getForm() + ; if (form.record.id === 0) { vtabPanel.hideTabStripItem(elCatsPanelKey); vtabPanel.hideTabStripItem(mediaSrcPanelKey); @@ -256,48 +313,57 @@ MODx.panel.UserGroup = function(config) { } } }] - },{ - title: _('users') - ,itemId: 'modx-usergroup-users-panel' - ,items: [{ - html: '

'+_('user_group_user_access_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-user-group-users' - ,cls: 'main-wrapper' - ,preventRender: true - ,usergroup: config.record.id - ,autoHeight: true - ,width: '97%' - ,listeners: { - 'afterRemoveRow': {fn:this.markDirty,scope:this} - ,'updateRole': {fn:this.markDirty,scope:this} - ,'addUser': {fn:this.markDirty,scope:this} + }, { + title: _('users'), + itemId: 'modx-usergroup-users-panel', + items: [{ + html: '

' + _('user_group_user_access_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-user-group-users', + cls: 'main-wrapper', + preventRender: true, + usergroup: config.record.id, + autoHeight: true, + width: '97%', + listeners: { + afterRemoveRow: { + fn: this.markDirty, + scope: this + }, + updateRole: { + fn: this.markDirty, + scope: this + }, + addUser: { + fn: this.markDirty, + scope: this + } } }] - },{ - title: _('settings') - ,itemId: 'modx-usergroup-settings-panel' - ,layout: 'form' - ,items: [{ - html: '

'+_('user_group_settings_desc')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-group-settings' - ,urlFilters: ['namespace', 'area', 'query'] - ,cls: 'main-wrapper' - ,preventRender: true - ,group: config.record.id - ,autoHeight: true - ,width: '97%' + }, { + title: _('settings'), + itemId: 'modx-usergroup-settings-panel', + layout: 'form', + items: [{ + html: '

' + _('user_group_settings_desc') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-group-settings', + urlFilters: ['namespace', 'area', 'query'], + cls: 'main-wrapper', + preventRender: true, + group: config.record.id, + autoHeight: true, + width: '97%' }] - }] - ,listeners: { + }], + listeners: { render: function(tabPanel) { - var usersPanelKey = tabPanel.items.keys.indexOf('modx-usergroup-users-panel'), - settingsPanelKey = tabPanel.items.keys.indexOf('modx-usergroup-settings-panel'), - form = Ext.getCmp('modx-panel-user-group').getForm() - ; + const usersPanelKey = tabPanel.items.keys.indexOf('modx-usergroup-users-panel'), + settingsPanelKey = tabPanel.items.keys.indexOf('modx-usergroup-settings-panel'), + form = Ext.getCmp('modx-panel-user-group').getForm() + ; if (form.record.id === 0) { tabPanel.hideTabStripItem(usersPanelKey); tabPanel.hideTabStripItem(settingsPanelKey); @@ -307,19 +373,28 @@ MODx.panel.UserGroup = function(config) { } } } - }] - ,useLoadingMask: false - ,listeners: { - 'setup': {fn:this.setup,scope:this} - ,'success': {fn:this.success,scope:this} - ,'beforeSubmit': {fn:this.beforeSubmit,scope:this} + }], + useLoadingMask: false, + listeners: { + setup: { + fn: this.setup, + scope: this + }, + success: { + fn: this.success, + scope: this + }, + beforeSubmit: { + fn: this.beforeSubmit, + scope: this + } } }); - MODx.panel.UserGroup.superclass.constructor.call(this,config); + MODx.panel.UserGroup.superclass.constructor.call(this, config); }; -Ext.extend(MODx.panel.UserGroup,MODx.FormPanel,{ - initialized: false - ,setup: function() { +Ext.extend(MODx.panel.UserGroup, MODx.FormPanel, { + initialized: false, + setup: function() { if (this.initialized || this.config.usergroup === '' || this.config.usergroup == undefined) { this.fireEvent('ready'); return false; @@ -328,20 +403,20 @@ Ext.extend(MODx.panel.UserGroup,MODx.FormPanel,{ this.getForm().setValues(r); Ext.getCmp('modx-header-breadcrumbs').updateHeader(Ext.util.Format.htmlEncode(r.name)); - this.fireEvent('ready',r); + this.fireEvent('ready', r); MODx.fireEvent('ready'); this.initialized = true; - } - ,beforeSubmit: function(o) {} - ,success: function(o) {} - ,getPageHeader: function(config) { + }, + beforeSubmit: function(o) {}, + success: function(o) {}, + getPageHeader: function(config) { return MODx.util.getHeaderBreadCrumbs('modx-user-group-header', [{ text: _('user_group_management'), href: MODx.getPage('security/permission') }]); } }); -Ext.reg('modx-panel-user-group',MODx.panel.UserGroup); +Ext.reg('modx-panel-user-group', MODx.panel.UserGroup); /** * @class MODx.grid.FCProfileUserGroups @@ -351,183 +426,274 @@ Ext.reg('modx-panel-user-group',MODx.panel.UserGroup); */ MODx.grid.UserGroupUsers = function(config) { config = config || {}; - Ext.applyIf(config,{ - title: '' - ,id: 'modx-grid-user-group-users' - ,url: MODx.config.connector_url - ,baseParams: { - action: 'Security/Group/User/GetList' - ,usergroup: config.usergroup - } - ,paging: true - ,grouping: true - ,remoteSort: true - ,groupBy: 'role_name' - ,singleText: _('user') - ,pluralText: _('users') - ,sortBy: 'authority' - ,sortDir: 'ASC' - ,fields: ['id','username','role','role_name','authority'] - ,columns: [{ - header: _('username') - ,dataIndex: 'username' - ,width: 175 - ,sortable: true - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=security/user/update&id=' + record.data.id - ,target: '_blank' - }); - }, scope: this } - },{ - header: _('role') - ,dataIndex: 'role_name' - ,width: 175 - ,sortable: true - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=security/permission' - ,target: '_blank' - }); - }, scope: this } - }] - ,tbar: [{ - text: _('user_group_update') - ,cls: 'primary-button' - ,handler: this.updateUserGroup - ,hidden: (MODx.perm.usergroup_edit == 0 || config.ownerCt.id != 'modx-tree-panel-usergroup') - },'->',{ - text: _('user_group_user_add') - ,cls: 'primary-button' - ,handler: this.addUser - ,hidden: MODx.perm.usergroup_user_edit == 0 - },{ - xtype: 'textfield' - ,id: 'modx-ugu-filter-username' - ,cls: 'x-form-filter' - ,listeners: { - 'change': {fn:this.searchUser,scope:this} - ,'render': {fn: function(cmp) { - new Ext.KeyMap(cmp.getEl(), { - key: Ext.EventObject.ENTER - ,fn: function() { - this.fireEvent('change',this.getValue()); - this.blur(); - return true; } - ,scope: cmp + Ext.applyIf(config, { + title: '', + id: 'modx-grid-user-group-users', + url: MODx.config.connector_url, + baseParams: { + action: 'Security/Group/User/GetList', + usergroup: config.usergroup + }, + paging: true, + grouping: true, + remoteSort: true, + groupBy: 'role_name', + singleText: _('user'), + pluralText: _('users'), + sortBy: 'authority', + sortDir: 'ASC', + fields: [ + 'id', + 'username', + 'role', + 'role_name', + 'authority' + ], + columns: [{ + header: _('username'), + dataIndex: 'username', + width: 175, + sortable: true, + renderer: { + fn: function(value, metaData, record) { + if (!this.userCanEditUser) { + return value; + } + return this.renderLink(value, { + href: '?a=security/user/update&id=' + record.data.id, + title: _('user_edit_account') }); - }} + }, + scope: this + }, + groupRenderer: function(value) { + return value; } - ,emptyText: _('search') - ,scope: this - },{ - text: _('clear_filter') - ,id: 'modx-ugu-clear-filter' - ,cls: 'x-form-filter-clear' - ,handler: this.clearFilter - ,scope: this + }, { + header: _('role'), + dataIndex: 'role_name', + width: 175, + sortable: true, + renderer: { + fn: function(value, metaData, record) { + if (this.userCanChangeRole) { + const attributes = { + title: _('user_role_update') + }; + return this.renderLink(value, attributes, true); + } + return value; + }, + scope: this + }, + groupRenderer: function(value) { + return value; + } + }], + tbar: [{ + text: _('user_group_user_add'), + cls: 'primary-button', + handler: this.addUser, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanAssignUserToGroups || this.ownerCt.id != 'modx-tree-panel-usergroup') { + btn.hide(); + } + }, + scope: this + } + } + }, { + text: _('user_group_update'), + cls: 'secondary-button', + handler: this.updateUserGroup, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanEditUserGroup || this.ownerCt.id != 'modx-tree-panel-usergroup') { + btn.hide(); + } + }, + scope: this + } + } + }, '->', { + xtype: 'textfield', + id: 'modx-ugu-filter-username', + cls: 'x-form-filter', + listeners: { + change: { + fn: this.searchUser, + scope: this + }, + render: { + fn: function(cmp) { + new Ext.KeyMap(cmp.getEl(), { + key: Ext.EventObject.ENTER, + fn: function() { + this.fireEvent('change', this.getValue()); + this.blur(); + return true; + }, + scope: cmp + }); + } + } + }, + emptyText: _('search'), + scope: this + }, { + text: _('clear_filter'), + id: 'modx-ugu-clear-filter', + cls: 'x-form-filter-clear', + handler: this.clearFilter, + scope: this }] }); - MODx.grid.UserGroupUsers.superclass.constructor.call(this,config); - this.addEvents('updateRole','addUser'); - console.log(`MODx.grid.UserGroupUsers called from modx.panel.user.group.js`); + MODx.grid.UserGroupUsers.superclass.constructor.call(this, config); + + this.addEvents('updateRole', 'addUser'); + + this.userCanEditUser = MODx.perm.edit_user && MODx.perm.save_user; + this.userCanChangeRole = MODx.perm.usergroup_user_edit; + this.userCanAssignUserToGroups = MODx.perm.usergroup_user_edit; + this.userCanEditUserGroup = MODx.perm.usergroup_edit && MODx.perm.usergroup_save; + + // Allows for simulated link functionality + this.on('cellclick', function(grid, rowIndex, columnIndex, e) { + const record = grid.getStore().getAt(rowIndex), + fieldName = grid.getColumnModel().getDataIndex(columnIndex); + if (this.userCanChangeRole && fieldName === 'role_name') { + this.updateRole(record, e) + } + }); + // console.log(`MODx.grid.UserGroupUsers loading...`); }; -Ext.extend(MODx.grid.UserGroupUsers,MODx.grid.Grid,{ +Ext.extend(MODx.grid.UserGroupUsers, MODx.grid.Grid, { actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { - if (MODx.perm.usergroup_user_edit) { - return this.superclass().actionsColumnRenderer.apply(this, arguments); + if (!this.userCanEditUserGroup && !this.userCanChangeRole) { + return; } - } - - ,getMenu: function() { + return this.superclass().actionsColumnRenderer.apply(this, arguments); + }, + + getMenu: function() { var m = []; if (MODx.perm.usergroup_user_edit) { m.push({ - text: _('user_role_update') - ,handler: this.updateRole + text: _('user_role_update'), + handler: this.updateRole }); m.push('-'); m.push({ - text: _('user_group_user_remove') - ,handler: this.removeUser + text: _('user_group_user_remove'), + handler: this.removeUser }); } return m; - } + }, - ,updateUserGroup: function() { + updateUserGroup: function() { var id = this.config.usergroup; MODx.loadPage('security/usergroup/update', 'id=' + id); - } + }, - ,updateRole: function(btn,e) { - var r = this.menu.record; - r.usergroup = this.config.usergroup; - r.user = r.id; - - this.loadWindow(btn,e,{ - xtype: 'modx-window-user-group-role-update' - ,record: r - ,listeners: { - 'success': {fn:function(r) { - this.refresh(); - this.fireEvent('updateRole',r); - },scope:this} + /** + * @property {Function} updateRole - Change user's role from an Ext menu or a simulated link + * + * @param {Object} source - Either a record object explicitly passed or the Ext menu item + * component, which is implicity passed into this handler + * @param {Ext.EventObjectImpl} e - The event triggering this handler (pass explicitly when + * triggering from an element other than an Ext menu + * + * @return void + */ + updateRole: function(source, e) { + const isMenu = source.hasOwnProperty('parentMenu') ? true : false, + record = isMenu ? this.menu.record : source, + arg1 = isMenu ? source : null, + data = { + user: record.id, + usergroup: this.config.usergroup, + role: isMenu ? record.role : record.data.role + } + ; + this.loadWindow(arg1, e, { + xtype: 'modx-window-user-group-role-update', + record: data, + listeners: { + success: { + fn: function(response) { + this.refresh(); + this.fireEvent('updateRole', response); + }, + scope: this + } } }); - } + }, - ,addUser: function(btn,e) { - var r = {usergroup:this.config.usergroup}; + addUser: function(btn, e) { + var r = { + usergroup: this.config.usergroup + }; if (!this.windows['modx-window-user-group-adduser']) { this.windows['modx-window-user-group-adduser'] = Ext.ComponentMgr.create({ - xtype: 'modx-window-user-group-adduser' - ,record: r - ,grid: this - ,listeners: { - 'success': {fn:function(r) { - this.refresh(); - this.fireEvent('addUser',r); - },scope:this} + xtype: 'modx-window-user-group-adduser', + record: r, + grid: this, + listeners: { + 'success': { + fn: function(r) { + this.refresh(); + this.fireEvent('addUser', r); + }, + scope: this + } } }); } this.windows['modx-window-user-group-adduser'].setValues(r); this.windows['modx-window-user-group-adduser'].show(e.target); - } + }, - ,removeUser: function(btn,e) { + removeUser: function(btn, e) { var r = this.menu.record; MODx.msg.confirm({ - title: _('warning') - ,text: _('user_group_user_remove_confirm') || _('confirm_remove') - ,url: this.config.url - ,params: { - action: 'Security/Group/User/Remove' - ,user: r.id - ,usergroup: this.config.usergroup - } - ,listeners: { - 'success': {fn:this.refresh,scope:this} + title: _('warning'), + text: _('user_group_user_remove_confirm') || _('confirm_remove'), + url: this.config.url, + params: { + action: 'Security/Group/User/Remove', + user: r.id, + usergroup: this.config.usergroup + }, + listeners: { + success: { + fn: this.refresh, + scope: this + } } }); - } + }, - ,searchUser: function(tf,nv,ov) { + searchUser: function(tf, nv, ov) { this.getStore().baseParams['username'] = Ext.getCmp('modx-ugu-filter-username').getValue(); this.getBottomToolbar().changePage(1); - } + }, - ,clearFilter: function(btn,e) { + clearFilter: function(btn, e) { Ext.getCmp('modx-ugu-filter-username').setValue(''); this.getStore().baseParams['username'] = ''; this.getBottomToolbar().changePage(1); } + }); -Ext.reg('modx-grid-user-group-users',MODx.grid.UserGroupUsers); +Ext.reg('modx-grid-user-group-users', MODx.grid.UserGroupUsers); /** * @class MODx.window.UpdateUserGroupRole @@ -537,30 +703,31 @@ Ext.reg('modx-grid-user-group-users',MODx.grid.UserGroupUsers); */ MODx.window.UpdateUserGroupRole = function(config) { config = config || {}; - Ext.applyIf(config,{ - id: 'modx-window-user-group-role-update' - ,title: _('user_group_user_update_role') - ,url: MODx.config.connector_url - ,action: 'Security/Group/User/Update' - ,fields: [{ - xtype: 'hidden' - ,name: 'usergroup' - ,value: config.usergroup - },{ - xtype: 'hidden' - ,name: 'user' - ,value: config.user - },{ - xtype: 'modx-combo-usergrouprole' - ,id: 'modx-uugr-role' - ,name: 'role' - ,fieldLabel: _('role') + Ext.applyIf(config, { + id: 'modx-window-user-group-role-update', + title: _('user_group_user_update_role'), + url: MODx.config.connector_url, + action: 'Security/Group/User/Update', + fields: [{ + xtype: 'hidden', + name: 'usergroup', + value: config.usergroup + }, { + xtype: 'hidden', + name: 'user', + value: config.user + }, { + xtype: 'modx-combo-usergrouprole', + id: 'modx-uugr-role', + name: 'role', + fieldLabel: _('role'), + anchor: '100%' }] }); - MODx.window.UpdateUserGroupRole.superclass.constructor.call(this,config); + MODx.window.UpdateUserGroupRole.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.UpdateUserGroupRole,MODx.Window); -Ext.reg('modx-window-user-group-role-update',MODx.window.UpdateUserGroupRole); +Ext.extend(MODx.window.UpdateUserGroupRole, MODx.Window); +Ext.reg('modx-window-user-group-role-update', MODx.window.UpdateUserGroupRole); /** * @class MODx.window.AddUserToUserGroup @@ -570,47 +737,47 @@ Ext.reg('modx-window-user-group-role-update',MODx.window.UpdateUserGroupRole); */ MODx.window.AddUserToUserGroup = function(config) { config = config || {}; - this.ident = config.ident || 'auug'+Ext.id(); - Ext.applyIf(config,{ - title: _('user_group_user_add') - ,url: MODx.config.connector_url - ,action: 'Security/Group/User/Create' - ,fields: [{ - fieldLabel: _('user') - ,description: MODx.expandHelp ? '' : _('user_group_user_add_user_desc') - ,name: 'user' - ,hiddenName: 'user' - ,id: 'modx-auug-user' - ,xtype: 'modx-combo-user' - ,editable: true - ,typeAhead: true - ,allowBlank: false - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-user' - ,html: _('user_group_user_add_user_desc') - ,cls: 'desc-under' - },{ - fieldLabel: _('role') - ,description: MODx.expandHelp ? '' : _('user_group_user_add_role_desc') - ,name: 'role' - ,hiddenName: 'role' - ,id: 'modx-auug-role' - ,xtype: 'modx-combo-role' - ,allowBlank: false - ,anchor: '100%' - },{ - xtype: MODx.expandHelp ? 'label' : 'hidden' - ,forId: 'modx-'+this.ident+'-role' - ,html: _('user_group_user_add_role_desc') - ,cls: 'desc-under' - },{ - name: 'usergroup' - ,xtype: 'hidden' + this.ident = config.ident || 'auug' + Ext.id(); + Ext.applyIf(config, { + title: _('user_group_user_add'), + url: MODx.config.connector_url, + action: 'Security/Group/User/Create', + fields: [{ + fieldLabel: _('user'), + description: MODx.expandHelp ? '' : _('user_group_user_add_user_desc'), + name: 'user', + hiddenName: 'user', + id: 'modx-auug-user', + xtype: 'modx-combo-user', + editable: true, + typeAhead: true, + allowBlank: false, + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-user', + html: _('user_group_user_add_user_desc'), + cls: 'desc-under' + }, { + fieldLabel: _('role'), + description: MODx.expandHelp ? '' : _('user_group_user_add_role_desc'), + name: 'role', + hiddenName: 'role', + id: 'modx-auug-role', + xtype: 'modx-combo-role', + allowBlank: false, + anchor: '100%' + }, { + xtype: MODx.expandHelp ? 'label' : 'hidden', + forId: 'modx-' + this.ident + '-role', + html: _('user_group_user_add_role_desc'), + cls: 'desc-under' + }, { + name: 'usergroup', + xtype: 'hidden' }] }); - MODx.window.AddUserToUserGroup.superclass.constructor.call(this,config); + MODx.window.AddUserToUserGroup.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.AddUserToUserGroup,MODx.Window); -Ext.reg('modx-window-user-group-adduser',MODx.window.AddUserToUserGroup); +Ext.extend(MODx.window.AddUserToUserGroup, MODx.Window); +Ext.reg('modx-window-user-group-adduser', MODx.window.AddUserToUserGroup); diff --git a/manager/assets/modext/widgets/security/modx.tree.user.group.js b/manager/assets/modext/widgets/security/modx.tree.user.group.js index 2a9f631c9bf..0776aeaa82a 100644 --- a/manager/assets/modext/widgets/security/modx.tree.user.group.js +++ b/manager/assets/modext/widgets/security/modx.tree.user.group.js @@ -30,6 +30,8 @@ MODx.tree.UserGroup = function(config) { }] }); MODx.tree.UserGroup.superclass.constructor.call(this,config); + + // console.log('MODx.tree.UserGroup loading...'); }; Ext.extend(MODx.tree.UserGroup,MODx.tree.Tree,{ windows: {} diff --git a/manager/assets/modext/widgets/source/modx.panel.sources.js b/manager/assets/modext/widgets/source/modx.panel.sources.js index 9713a8cbffa..f09a12565f0 100644 --- a/manager/assets/modext/widgets/source/modx.panel.sources.js +++ b/manager/assets/modext/widgets/source/modx.panel.sources.js @@ -8,51 +8,56 @@ */ MODx.panel.Sources = function(config) { config = config || {}; - Ext.applyIf(config,{ - id: 'modx-panel-sources' - ,cls: 'container' - ,bodyStyle: '' - ,defaults: { collapsible: false ,autoHeight: true } - ,items: [{ - html: _('sources') - ,id: 'modx-sources-header' - ,xtype: 'modx-header' - },MODx.getPageStructure([{ - title: _('sources') - ,layout: 'form' - ,items: [{ - html: '

'+_('sources.intro_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-sources' - ,urlFilters: ['query'] - ,cls: 'main-wrapper' - ,preventRender: true + Ext.applyIf(config, { + id: 'modx-panel-sources', + cls: 'container', + bodyStyle: '', + defaults: { + collapsible: false, + autoHeight: true + }, + items: [{ + html: _('sources'), + id: 'modx-sources-header', + xtype: 'modx-header' + }, MODx.getPageStructure([{ + title: _('sources'), + layout: 'form', + items: [{ + html: '

' + _('sources.intro_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-sources', + urlFilters: ['query'], + cls: 'main-wrapper', + preventRender: true }] - },{ - layout: 'form' - ,title: _('source_types') - ,items: [{ - html: '

'+_('source_types.intro_msg')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-source-types' - ,cls: 'main-wrapper' - ,preventRender: true + }, { + layout: 'form', + title: _('source_types'), + items: [{ + html: '

' + _('source_types.intro_msg') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-source-types', + cls: 'main-wrapper', + preventRender: true }] - }],{ - stateful: true - ,stateId: 'modx-sources-tabpanel' - ,stateEvents: ['tabchange'] - ,getState:function() { - return {activeTab:this.items.indexOf(this.getActiveTab())}; + }], { + stateful: true, + stateId: 'modx-sources-tabpanel', + stateEvents: ['tabchange'], + getState: function() { + return { + activeTab: this.items.indexOf(this.getActiveTab()) + }; } })] }); - MODx.panel.Sources.superclass.constructor.call(this,config); + MODx.panel.Sources.superclass.constructor.call(this, config); }; -Ext.extend(MODx.panel.Sources,MODx.FormPanel); -Ext.reg('modx-panel-sources',MODx.panel.Sources); +Ext.extend(MODx.panel.Sources, MODx.FormPanel); +Ext.reg('modx-panel-sources', MODx.panel.Sources); /** * Loads a grid of Sources. @@ -63,219 +68,354 @@ Ext.reg('modx-panel-sources',MODx.panel.Sources); * @xtype modx-grid-sources */ MODx.grid.Sources = function(config) { - config = config || {}; + config = config || {}; this.sm = new Ext.grid.CheckboxSelectionModel(); - Ext.applyIf(config,{ - url: MODx.config.connector_url - ,baseParams: { + + Ext.applyIf(config, { + url: MODx.config.connector_url, + baseParams: { action: 'Source/GetList' - } - ,fields: ['id','name','description','class_key','cls'] - ,paging: true - ,autosave: true - ,save_action: 'Source/UpdateFromGrid' - ,remoteSort: true - ,sm: this.sm - ,columns: [this.sm,{ - header: _('id') - ,dataIndex: 'id' - ,width: 50 - ,sortable: true - },{ - header: _('name') - ,dataIndex: 'name' - ,width: 150 - ,sortable: true - ,editor: { xtype: 'textfield' ,allowBlank: false } - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=source/update&id=' + record.data.id - }); - }, scope: this } - },{ - header: _('description') - ,dataIndex: 'description' - ,width: 300 - ,sortable: false - ,editor: { xtype: 'textarea' } - ,renderer: Ext.util.Format.htmlEncode - }] - ,tbar: [{ - text: _('create') - ,handler: { xtype: 'modx-window-source-create' ,blankValues: true } - ,cls:'primary-button' - },{ - text: _('bulk_actions') - ,menu: [{ - text: _('selected_remove') - ,handler: this.removeSelected - ,scope: this - }] - },'->',{ - xtype: 'textfield' - ,name: 'search' - ,id: 'modx-source-search' - ,cls: 'x-form-filter' - ,emptyText: _('search_ellipsis') - ,value: MODx.request.query - ,listeners: { - 'change': { - fn: function (cb, rec, ri) { - this.sourceSearch(cb, rec, ri); + }, + fields: [ + 'id', + 'name', + 'description', + 'class_key', + 'cls' + ], + paging: true, + autosave: true, + save_action: 'Source/UpdateFromGrid', + remoteSort: true, + sm: this.sm, + columns: [this.sm, { + header: _('id'), + dataIndex: 'id', + width: 50, + sortable: true + }, { + header: _('name'), + dataIndex: 'name', + id: 'modx-source--name', + width: 150, + sortable: true, + editor: { + xtype: 'textfield', + allowBlank: false + }, + renderer: { + fn: function(value, metaData, record) { + if ( + // !this.userCanEdit || + !this.userCanEditRecord(record.data) || + this.recordIsProtected(record.data[this.protectedDataIndex], this.protectedIdentifiers) + ) { + metaData.css = 'editor-disabled'; + return value; + } + return this.renderLink(value, { + href: '?a=source/update&id=' + record.data.id + }); + }, + scope: this + } + }, { + header: _('description'), + dataIndex: 'description', + id: 'modx-source--description', + width: 300, + sortable: false, + editor: { + xtype: 'textarea' + }, + renderer: { + fn: function(value, metaData, record) { + console.log('desc record: ', record); + if ( + // !this.userCanEdit || + !this.userCanEditRecord(record.data) || + this.recordIsProtected(record.data[this.protectedDataIndex], this.protectedIdentifiers) + ) { + metaData.css = 'editor-disabled'; } - ,scope: this + return value; }, - 'afterrender': { - fn: function (cb){ + scope: this + } + }], + tbar: [{ + text: _('create'), + cls: 'primary-button', + handler: { + xtype: 'modx-window-source-create', + blankValues: true + }, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this + } + } + }, { + text: _('bulk_actions'), + menu: [{ + text: _('selected_remove'), + itemId: 'modx-bulk-menu-opt-remove', + handler: this.removeSelected, + scope: this + }], + listeners: { + render: { + fn: function(btn) { + if (!this.userCanDelete) { + btn.hide(); + } + }, + scope: this + }, + click: { + fn: function(btn) { + console.log('bulk remove cb click, btn:', btn); + // console.log('bulk remove cb click, args:', arguments); + const removableSources = this.getRemovableItemsFromSelection('int'), + menuOptRemove = btn.menu.getComponent('modx-bulk-menu-opt-remove') + ; + if (!removableSources) { + console.log('disabling this menu item: ',menuOptRemove); + menuOptRemove.disable(); + } else { + menuOptRemove.enable(); + } + }, + scope: this + } + } + }, '->', { + xtype: 'textfield', + name: 'search', + id: 'modx-source-search', + cls: 'x-form-filter', + emptyText: _('search_ellipsis'), + value: MODx.request.query, + listeners: { + change: { + fn: function(cb, rec, ri) { + this.sourceSearch(cb, rec, ri); + }, + scope: this + }, + afterrender: { + fn: function(cb) { if (MODx.request.query) { this.sourceSearch(cb, cb.value); MODx.request.query = ''; } - } - ,scope: this - } - ,'render': { + }, + scope: this + }, + render: { fn: function(cmp) { new Ext.KeyMap(cmp.getEl(), { - key: Ext.EventObject.ENTER - ,fn: this.blur - ,scope: cmp + key: Ext.EventObject.ENTER, + fn: this.blur, + scope: cmp }); - } - ,scope: this + }, + scope: this } } - },{ - xtype: 'button' - ,text: _('filter_clear') - ,id: 'modx-filter-clear' - ,cls: 'x-form-filter-clear' - ,listeners: { - 'click': {fn: this.clearFilter, scope: this}, - 'mouseout': { fn: function(evt){ - this.removeClass('x-btn-focus'); - } + }, { + xtype: 'button', + text: _('filter_clear'), + id: 'modx-filter-clear', + cls: 'x-form-filter-clear', + listeners: { + click: { + fn: this.clearFilter, + scope: this + }, + mouseout: { + fn: function(evt) { + this.removeClass('x-btn-focus'); + } } } - }] + }], + viewConfig: { + forceFit: true, + scrollOffset: 0, + getRowClass: function(record, index, rowParams, store) { + // Adds the returned class to the row container's css classes + // console.log('viewConfig, record:', record); + // console.log('viewConfig, this:', this.grid.store.data.items); + return this.grid.protectedIdentifiers.includes(record.id) || !this.grid.userCanDeleteRecord(record.data) ? 'disable-selection' : ''; + } + } }); - MODx.grid.Sources.superclass.constructor.call(this,config); -}; -Ext.extend(MODx.grid.Sources,MODx.grid.Grid,{ + MODx.grid.Sources.superclass.constructor.call(this, config); - actionsColumnRenderer: function(value, metaData, record, rowIndex, colIndex, store) { - if (record.data.cls) { - return this.superclass().actionsColumnRenderer.apply(this, arguments); - } - } + this.protectedDataIndex = 'id'; + this.protectedIdentifiers = [1]; + this.nonRemoveableRecords = []; + this.gridMenuActions = ['edit', 'delete', 'duplicate']; - ,getMenu: function() { - var r = this.getSelectionModel().getSelected(); - var p = r.data.cls; + this.setUserCanEdit(['source_save', 'source_edit']); + this.setUserCanCreate(['source_save']); + this.setUserCanDelete(['source_delete']); + this.setShowActionsMenu(); - var m = []; - if (this.getSelectionModel().getCount() > 1) { + this.on({ + render: function(grid) { + this.setEditableColumnAccess( + ['modx-source--name', 'modx-source--description'] + ); + }, + beforeedit: function(e){ + if ( + this.recordIsProtected(e.record.data[this.protectedDataIndex], this.protectedIdentifiers) || + !this.userCanEditRecord(e.record.data) + ) { + return false; + } + } + }); + // console.log('sources grid, this', this); + this.getStore().on({ + load: function(store, records, params){ + // console.log('store load, this', this); + // console.log('store load, args', arguments); + records.forEach(record => { + const record = record.data; + // console.log('record: ', record); + // if (Ext.isEmpty(permissions) || permissions.indexOf('premove') === -1) { + if (Ext.isEmpty(permissions) || !userCanDeleteRecord(record)) { + this.nonRemoveableRecords.push(record.data[this.protectedDataIndex]); + } + }); + console.log('records that can not be removed: ',this.nonRemoveableRecords); + }, + scope: this + }); +}; +Ext.extend(MODx.grid.Sources, MODx.grid.Grid, { + + getMenu: function() { + const rowData = this.getSelectionModel().getSelected().data, + isProtected = this.recordIsProtected(rowData[this.protectedDataIndex], this.protectedIdentifiers), + m = [] + ; + // console.log('sources, row data: ',rowData); + // if (this.userCanEdit && !isProtected && this.userCanEditRecord(rowData)) { + if (this.userCanEdit && !isProtected && this.userCanEditRecord(rowData)) { m.push({ - text: _('selected_remove') - ,handler: this.removeSelected - ,scope: this + text: _('edit'), + handler: this.updateSource }); - } else { - if (p.indexOf('pupdate') != -1) { - m.push({ - text: _('edit') - ,handler: this.updateSource - }); - } - if (p.indexOf('pduplicate') != -1) { - m.push({ - text: _('duplicate') - ,handler: this.duplicateSource - }); - } - if (p.indexOf('premove') != -1 && r.data.id != 1 && r.data.name != 'Filesystem') { - if (m.length > 0) m.push('-'); - m.push({ - text: _('delete') - ,handler: this.removeSource - }); + } + if (this.userCanCreate && this.userCanDuplicateRecord(rowData)) { + m.push({ + text: _('duplicate'), + handler: this.duplicateSource + }); + } + if (this.userCanDelete && !isProtected && this.userCanDeleteRecord(rowData)) { + if (m.length > 0) { + m.push('-'); } + m.push({ + text: _('delete'), + handler: this.removeSource + }); } if (m.length > 0) { this.addContextMenuItem(m); } - } + }, - ,createSource: function() { + createSource: function() { MODx.loadPage('system/source/create'); - } + }, - ,updateSource: function() { - MODx.loadPage('source/update', 'id='+this.menu.record.id); - } + updateSource: function() { + MODx.loadPage('source/update', 'id=' + this.menu.record.id); + }, - ,duplicateSource: function(btn,e) { + duplicateSource: function(btn, e) { MODx.Ajax.request({ - url: this.config.url - ,params: { - action: 'Source/Duplicate' - ,id: this.menu.record.id - } - ,listeners: { - 'success': {fn:this.refresh,scope:this} + url: this.config.url, + params: { + action: 'Source/Duplicate', + id: this.menu.record.id + }, + listeners: { + 'success': { + fn: this.refresh, + scope: this + } } }); - } + }, - ,removeSource: function() { + removeSource: function() { MODx.msg.confirm({ - title: _('delete') - ,text: _('source_remove_confirm') - ,url: this.config.url - ,params: { - action: 'Source/Remove' - ,id: this.menu.record.id - } - ,listeners: { - 'success': {fn:this.refresh,scope:this} + title: _('delete'), + text: _('source_remove_confirm'), + url: this.config.url, + params: { + action: 'Source/Remove', + id: this.menu.record.id + }, + listeners: { + 'success': { + fn: this.refresh, + scope: this + } } }); - } - - ,removeSelected: function() { - var cs = this.getSelectedAsList(); - if (cs === false) return false; + }, + removeSelected: function() { + const removableSources = this.getRemovableItemsFromSelection('int'); + if (!removableSources) { + return false; + } MODx.msg.confirm({ - title: _('source_remove_multiple') - ,text: _('source_remove_multiple_confirm') - ,url: this.config.url - ,params: { - action: 'Source/RemoveMultiple' - ,sources: cs - } - ,listeners: { - 'success': {fn:function(r) { - this.getSelectionModel().clearSelections(true); - this.refresh(); - },scope:this} + title: _('source_remove_multiple'), + text: _('source_remove_multiple_confirm'), + url: this.config.url, + params: { + action: 'Source/RemoveMultiple', + sources: removableSources.join(',') + }, + listeners: { + success: { + fn: function(r) { + this.getSelectionModel().clearSelections(true); + this.refresh(); + }, + scope: this + } } }); return true; - } + }, - ,sourceSearch: function(tf,newValue,oldValue) { + sourceSearch: function(tf, newValue, oldValue) { var s = this.getStore(); s.baseParams.query = newValue; this.replaceState(); this.getBottomToolbar().changePage(1); - } + }, - ,clearFilter: function() { - var s = this.getStore(); - var sourceSearch = Ext.getCmp('modx-source-search'); - s.baseParams = { + clearFilter: function() { + const store = this.getStore(), + sourceSearch = Ext.getCmp('modx-source-search'); + store.baseParams = { action: 'Source/GetList' }; MODx.request.query = ''; @@ -283,8 +423,9 @@ Ext.extend(MODx.grid.Sources,MODx.grid.Grid,{ this.replaceState(); this.getBottomToolbar().changePage(1); } + }); -Ext.reg('modx-grid-sources',MODx.grid.Sources); +Ext.reg('modx-grid-sources', MODx.grid.Sources); /** * Generates the create Source window. @@ -296,66 +437,73 @@ Ext.reg('modx-grid-sources',MODx.grid.Sources); */ MODx.window.CreateSource = function(config) { config = config || {}; - Ext.applyIf(config,{ - title: _('create') - ,url: MODx.config.connector_url - ,autoHeight: true - ,action: 'Source/Create' - ,fields: [{ - xtype: 'textfield' - ,fieldLabel: _('name') - ,name: 'name' - ,anchor: '100%' - ,allowBlank: false - },{ - xtype: 'textarea' - ,fieldLabel: _('description') - ,name: 'description' - ,anchor: '100%' - ,grow: true - },{ - name: 'class_key' - ,hiddenName: 'class_key' - ,xtype: 'modx-combo-source-type' - ,fieldLabel: _('source_type') - ,anchor: '100%' - ,allowBlank: false - ,value: MODx.config.default_media_source_type - }] - ,keys: [] + Ext.applyIf(config, { + title: _('create'), + url: MODx.config.connector_url, + autoHeight: true, + action: 'Source/Create', + fields: [{ + xtype: 'textfield', + fieldLabel: _('name'), + name: 'name', + anchor: '100%', + allowBlank: false, + blankText: _('source_err_ns_name'), + validationEvent: 'change' + }, { + xtype: 'textarea', + fieldLabel: _('description'), + name: 'description', + anchor: '100%', + grow: true + }, { + name: 'class_key', + hiddenName: 'class_key', + xtype: 'modx-combo-source-type', + fieldLabel: _('source_type'), + anchor: '100%', + allowBlank: false, + validationEvent: 'change', + value: MODx.config.default_media_source_type + }], + keys: [] }); - MODx.window.CreateSource.superclass.constructor.call(this,config); + MODx.window.CreateSource.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.CreateSource,MODx.Window); -Ext.reg('modx-window-source-create',MODx.window.CreateSource); +Ext.extend(MODx.window.CreateSource, MODx.Window); +Ext.reg('modx-window-source-create', MODx.window.CreateSource); MODx.grid.SourceTypes = function(config) { config = config || {}; - Ext.applyIf(config,{ - url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + url: MODx.config.connector_url, + baseParams: { action: 'Source/Type/GetList' - } - ,fields: ['class','name','description'] - ,showActionsColumn: false - ,paging: true - ,remoteSort: true - ,columns: [{ - header: _('name') - ,dataIndex: 'name' - ,width: 150 - ,sortable: true - ,renderer: Ext.util.Format.htmlEncode - },{ - header: _('description') - ,dataIndex: 'description' - ,width: 300 - ,sortable: false - ,renderer: Ext.util.Format.htmlEncode + }, + fields: [ + 'class', + 'name', + 'description' + ], + showActionsColumn: false, + paging: true, + remoteSort: true, + columns: [{ + header: _('name'), + dataIndex: 'name', + width: 150, + sortable: true, + renderer: Ext.util.Format.htmlEncode + }, { + header: _('description'), + dataIndex: 'description', + width: 300, + sortable: false, + renderer: Ext.util.Format.htmlEncode }] }); - MODx.grid.SourceTypes.superclass.constructor.call(this,config); + MODx.grid.SourceTypes.superclass.constructor.call(this, config); }; -Ext.extend(MODx.grid.SourceTypes,MODx.grid.Grid); -Ext.reg('modx-grid-source-types',MODx.grid.SourceTypes); +Ext.extend(MODx.grid.SourceTypes, MODx.grid.Grid); +Ext.reg('modx-grid-source-types', MODx.grid.SourceTypes); diff --git a/manager/assets/modext/widgets/system/modx.grid.context.js b/manager/assets/modext/widgets/system/modx.grid.context.js index c4de4effded..fddc31b3f1f 100644 --- a/manager/assets/modext/widgets/system/modx.grid.context.js +++ b/manager/assets/modext/widgets/system/modx.grid.context.js @@ -8,33 +8,36 @@ */ MODx.panel.Contexts = function(config) { config = config || {}; - Ext.applyIf(config,{ - id: 'modx-panel-contexts' - ,cls: 'container' - ,bodyStyle: '' - ,defaults: { collapsible: false ,autoHeight: true } - ,items: [{ - html: _('contexts') - ,id: 'modx-contexts-header' - ,xtype: 'modx-header' - },MODx.getPageStructure([{ - title: _('contexts') - ,layout: 'form' - ,items: [{ - html: '

'+_('context_management_message')+'

' - ,xtype: 'modx-description' - },{ - xtype: 'modx-grid-contexts' - ,urlFilters: ['search'] - ,cls:'main-wrapper' - ,preventRender: true + Ext.applyIf(config, { + id: 'modx-panel-contexts', + cls: 'container', + bodyStyle: '', + defaults: { + collapsible: false, + autoHeight: true + }, + items: [{ + html: _('contexts'), + id: 'modx-contexts-header', + xtype: 'modx-header' + }, MODx.getPageStructure([{ + title: _('contexts'), + layout: 'form', + items: [{ + html: '

' + _('context_management_message') + '

', + xtype: 'modx-description' + }, { + xtype: 'modx-grid-contexts', + urlFilters: ['search'], + cls: 'main-wrapper', + preventRender: true }] }])] }); - MODx.panel.Contexts.superclass.constructor.call(this,config); + MODx.panel.Contexts.superclass.constructor.call(this, config); }; -Ext.extend(MODx.panel.Contexts,MODx.FormPanel); -Ext.reg('modx-panel-contexts',MODx.panel.Contexts); +Ext.extend(MODx.panel.Contexts, MODx.FormPanel); +Ext.reg('modx-panel-contexts', MODx.panel.Contexts); /** * Loads a grid of modContexts. @@ -46,143 +49,254 @@ Ext.reg('modx-panel-contexts',MODx.panel.Contexts); */ MODx.grid.Context = function(config) { config = config || {}; - Ext.applyIf(config,{ - title: _('contexts') - ,id: 'modx-grid-context' - ,url: MODx.config.connector_url - ,baseParams: { + Ext.applyIf(config, { + title: _('contexts'), + id: 'modx-grid-context', + url: MODx.config.connector_url, + baseParams: { action: 'Context/GetList' - } - ,fields: ['key','name','description','perm', 'rank'] - ,paging: true - ,autosave: true - ,save_action: 'Context/UpdateFromGrid' - ,remoteSort: true - ,primaryKey: 'key' - ,columns: [{ - header: _('key') - ,dataIndex: 'key' - ,width: 100 - ,sortable: true - },{ - header: _('name') - ,dataIndex: 'name' - ,width: 150 - ,sortable: true - ,editor: { xtype: 'textfield' } - ,renderer: { fn: function(v,md,record) { - return this.renderLink(v, { - href: '?a=context/update&key=' + record.data.key - }); - }, scope: this } - },{ - header: _('description') - ,dataIndex: 'description' - ,width: 575 - ,sortable: false - ,editor: { xtype: 'textarea' } - },{ - header: _('rank') - ,dataIndex: 'rank' - ,width: 100 - ,sortable: true - ,editor: { xtype: 'numberfield' } - }] - ,tbar: [{ - text: _('create') - ,cls:'primary-button' - ,handler: this.create - ,scope: this - },'->',{ - xtype: 'textfield' - ,name: 'search' - ,id: 'modx-ctx-search' - ,cls: 'x-form-filter' - ,emptyText: _('search_ellipsis') - ,value: MODx.request.search - ,listeners: { - 'change': { - fn: function (cb, rec, ri) { - this.ctxSearch(cb, rec, ri); + }, + fields: [ + 'key', + 'name', + 'description', + 'rank', + 'creator' + ], + paging: true, + autosave: true, + save_action: 'Context/UpdateFromGrid', + remoteSort: true, + primaryKey: 'key', + columns: [{ + header: _('key'), + dataIndex: 'key', + width: 100, + sortable: true + }, { + header: _('name'), + dataIndex: 'name', + id: 'modx-context--name', + width: 150, + sortable: true, + editor: { + xtype: 'textfield', + allowBlank: false, + blankText: _('context_err_ns_name'), + validator: function(value) { + if (this.gridEditor.record.json.reserved.name.includes(value)) { + const msg = _('context_err_name_reserved', { reservedName: value }); + Ext.Msg.alert(_('error'), msg); + return false; + } else { + return true; + } + } + }, + renderer: { + fn: function(value, metaData, record) { + if (!this.userCanEdit || record.json.key === 'mgr') { + metaData.css = 'editor-disabled'; + if (!this.userCanEdit) { + return value; + } + } + return this.renderLink(value, { + href: '?a=context/update&key=' + record.data.key, + title: _('context_edit') + }); + }, + scope: this + } + }, { + header: _('description'), + dataIndex: 'description', + id: 'modx-context--description', + width: 575, + sortable: false, + editor: { + xtype: 'textarea' + }, + renderer: { + fn: function(value, metaData, record) { + value = value || record.json.description_trans; + if (!this.userCanEdit || record.json.key === 'mgr') { + metaData.css = 'editor-disabled'; + } + return value; + }, + scope: this + } + }, { + header: _('creator'), + dataIndex: 'creator', + id: 'modx-context--creator', + width: 70, + align: 'center', + sortable: true + }, { + header: _('rank'), + dataIndex: 'rank', + id: 'modx-context--rank', + width: 100, + align: 'center', + sortable: true, + editor: { + xtype: 'numberfield' + }, + renderer: { + fn: function(value, metaData, record) { + if (!this.userCanEdit || record.json.key === 'mgr') { + metaData.css = 'editor-disabled'; } - ,scope: this + return value; + }, + scope: this + } + }], + tbar: [{ + text: _('create'), + cls: 'primary-button', + handler: this.create, + scope: this, + listeners: { + render: { + fn: function(btn) { + if (!this.userCanCreate) { + btn.hide(); + } + }, + scope: this + } + } + }, '->', { + xtype: 'textfield', + name: 'search', + id: 'modx-ctx-search', + cls: 'x-form-filter', + emptyText: _('search_ellipsis'), + value: MODx.request.search, + listeners: { + change: { + fn: function(cb, rec, ri) { + this.ctxSearch(cb, rec, ri); + }, + scope: this }, - 'afterrender': { - fn: function (cb){ + afterrender: { + fn: function(cb) { if (MODx.request.search) { this.ctxSearch(cb, cb.value); MODx.request.search = ''; } - } - ,scope: this - } - ,'render': { + }, + scope: this + }, + render: { fn: function(cmp) { new Ext.KeyMap(cmp.getEl(), { - key: Ext.EventObject.ENTER - ,fn: this.blur - ,scope: cmp + key: Ext.EventObject.ENTER, + fn: this.blur, + scope: cmp }); - } - ,scope: this + }, + scope: this } } - },{ - xtype: 'button' - ,id: 'modx-filter-clear' - ,cls: 'x-form-filter-clear' - ,text: _('filter_clear') - ,listeners: { - 'click': {fn: this.clearFilter, scope: this}, - 'mouseout': { fn: function(evt){ - this.removeClass('x-btn-focus'); - } + }, { + xtype: 'button', + id: 'modx-filter-clear', + cls: 'x-form-filter-clear', + text: _('filter_clear'), + listeners: { + click: { + fn: this.clearFilter, + scope: this + }, + mouseout: { + fn: function(evt) { + this.removeClass('x-btn-focus'); + } } } - }] + }], + viewConfig: { + forceFit: true, + scrollOffset: 0, + getRowClass: function(record, index, rowParams, store) { + // Adds the returned class to the row container's css classes + return record.json.isProtected ? 'modx-protected-row' : ''; + } + } + }); + MODx.grid.Context.superclass.constructor.call(this, config); + + this.protectedDataIndex = 'key'; + this.protectedIdentifiers = ['mgr', 'web']; + this.gridMenuActions = ['edit', 'delete', 'duplicate']; + + this.setUserCanEdit(['save_context', 'edit_context']); + this.setUserCanCreate(['save_context', 'new_context']); + this.setUserCanDelete(['delete_context']); + this.setShowActionsMenu(); + + this.on({ + render: function() { + this.setEditableColumnAccess( + ['modx-context--name', 'modx-context--description', 'modx-context--rank'] + ); + }, + beforeedit: function(e) { + if (e.record.json.key === 'mgr') { + return false; + } + } }); - MODx.grid.Context.superclass.constructor.call(this,config); }; -Ext.extend(MODx.grid.Context,MODx.grid.Grid,{ +Ext.extend(MODx.grid.Context, MODx.grid.Grid, { + getMenu: function() { - var r = this.getSelectionModel().getSelected(); - var p = r.data.perm; - var m = []; - if (p.indexOf('pnew') != -1) { + const record = this.getSelectionModel().getSelected(), + m = [] + ; + + if (this.userCanCreate) { m.push({ - text: _('duplicate') - ,handler: this.duplicateContext - ,scope: this + text: _('duplicate'), + handler: this.duplicateContext, + scope: this }); } - if (p.indexOf('pedit') != -1) { + if (this.userCanEdit) { m.push({ - text: _('edit') - ,handler: this.updateContext + text: _('edit'), + handler: this.updateContext }); } - if (p.indexOf('premove') != -1) { - m.push('-'); + if (this.userCanDelete && !record.json.isProtected) { + if (m.length > 0) { + m.push('-'); + } m.push({ - text: _('delete') - ,handler: this.remove - ,scope: this + text: _('delete'), + handler: this.remove, + scope: this }); } return m; - } + }, - ,create: function(btn, e) { + create: function(btn, e) { if (this.createWindow) { this.createWindow.destroy(); } this.createWindow = MODx.load({ xtype: 'modx-window-context-create', - closeAction:'close', + closeAction: 'close', listeners: { - 'success': { + success: { fn: function() { this.afterAction(); }, @@ -191,34 +305,37 @@ Ext.extend(MODx.grid.Context,MODx.grid.Grid,{ } }); this.createWindow.show(e.target); - } + }, - ,updateContext: function(itm,e) { - MODx.loadPage('context/update', 'key='+this.menu.record.key); - } + updateContext: function(itm, e) { + MODx.loadPage('context/update', 'key=' + this.menu.record.key); + }, - ,duplicateContext: function() { + duplicateContext: function() { var r = { - key: this.menu.record.key - ,newkey: '' + key: this.menu.record.key, + newkey: '' }; var w = MODx.load({ - xtype: 'modx-window-context-duplicate' - ,record: r - ,listeners: { - 'success': {fn:function() { - this.refresh(); - var tree = Ext.getCmp('modx-resource-tree'); - if (tree) { - tree.refresh(); - } - },scope:this} + xtype: 'modx-window-context-duplicate', + record: r, + listeners: { + success: { + fn: function() { + this.refresh(); + var tree = Ext.getCmp('modx-resource-tree'); + if (tree) { + tree.refresh(); + } + }, + scope: this + } } }); w.show(); - } + }, - ,remove: function(btn, e) { + remove: function(btn, e) { MODx.msg.confirm({ title: _('warning'), text: _('context_remove_confirm'), @@ -228,7 +345,7 @@ Ext.extend(MODx.grid.Context,MODx.grid.Grid,{ key: this.menu.record.key }, listeners: { - 'success': { + success: { fn: function() { this.afterAction(); }, @@ -236,16 +353,16 @@ Ext.extend(MODx.grid.Context,MODx.grid.Grid,{ } } }); - } + }, - ,ctxSearch: function(tf,newValue,oldValue) { + ctxSearch: function(tf, newValue, oldValue) { var s = this.getStore(); s.baseParams.search = newValue; this.replaceState(); this.getBottomToolbar().changePage(1); - } + }, - ,clearFilter: function() { + clearFilter: function() { var s = this.getStore(); var ctxSearch = Ext.getCmp('modx-ctx-search'); s.baseParams = { @@ -255,9 +372,9 @@ Ext.extend(MODx.grid.Context,MODx.grid.Grid,{ ctxSearch.setValue(''); this.replaceState(); this.getBottomToolbar().changePage(1); - } + }, - ,afterAction: function() { + afterAction: function() { var cmp = Ext.getCmp('modx-resource-tree'); if (cmp) { cmp.refresh(); @@ -266,30 +383,8 @@ Ext.extend(MODx.grid.Context,MODx.grid.Grid,{ this.refresh(); } - ,getActions: function(record, rowIndex, colIndex, store) { - var permissions = record.data.perm; - var actions = []; - - if (~permissions.indexOf('pedit')) { - actions.push({ - action: 'updateContext', - icon: 'pencil-square-o', - text: _('edit') - }); - } - - if (~permissions.indexOf('premove')) { - actions.push({ - action: 'remove', - icon: 'trash-o', - text: _('delete') - }); - } - - return actions; - } }); -Ext.reg('modx-grid-contexts',MODx.grid.Context); +Ext.reg('modx-grid-contexts', MODx.grid.Context); /** * Generates the create context window. @@ -301,38 +396,41 @@ Ext.reg('modx-grid-contexts',MODx.grid.Context); */ MODx.window.CreateContext = function(config) { config = config || {}; - Ext.applyIf(config,{ - title: _('create') - ,url: MODx.config.connector_url - ,action: 'Context/Create' - ,fields: [{ - xtype: 'textfield' - ,fieldLabel: _('context_key') - ,name: 'key' - ,anchor: '100%' - ,maxLength: 100 - },{ - xtype: 'textfield' - ,fieldLabel: _('name') - ,name: 'name' - ,anchor: '100%' - ,maxLength: 100 - },{ - xtype: 'textarea' - ,fieldLabel: _('description') - ,name: 'description' - ,anchor: '100%' - ,grow: true - },{ - xtype: 'numberfield' - ,fieldLabel: _('rank') - ,name: 'rank' - ,allowBlank: true - ,anchor: '100%' - }] - ,keys: [] + Ext.applyIf(config, { + title: _('create'), + url: MODx.config.connector_url, + action: 'Context/Create', + fields: [{ + xtype: 'textfield', + fieldLabel: _('context_key'), + name: 'key', + anchor: '100%', + maxLength: 100, + allowBlank: false, + blankText: _('context_err_ns_key') + }, { + xtype: 'textfield', + fieldLabel: _('name'), + name: 'name', + anchor: '100%', + maxLength: 100, + allowBlank: false, + blankText: _('context_err_ns_name') + }, { + xtype: 'textarea', + fieldLabel: _('description'), + name: 'description', + anchor: '100%', + grow: true + }, { + xtype: 'numberfield', + fieldLabel: _('rank'), + name: 'rank', + anchor: '100%' + }], + keys: [] }); - MODx.window.CreateContext.superclass.constructor.call(this,config); + MODx.window.CreateContext.superclass.constructor.call(this, config); }; -Ext.extend(MODx.window.CreateContext,MODx.Window); -Ext.reg('modx-window-context-create',MODx.window.CreateContext); +Ext.extend(MODx.window.CreateContext, MODx.Window); +Ext.reg('modx-window-context-create', MODx.window.CreateContext); diff --git a/manager/assets/modext/workspace/lexicon/lexicon.grid.js b/manager/assets/modext/workspace/lexicon/lexicon.grid.js index ffb3af3b8c0..1a07d3e81fa 100644 --- a/manager/assets/modext/workspace/lexicon/lexicon.grid.js +++ b/manager/assets/modext/workspace/lexicon/lexicon.grid.js @@ -13,14 +13,15 @@ MODx.grid.Lexicon = function(config) { ,url: MODx.config.connector_url ,fields: ['name','value','namespace','topic','language','editedon','overridden'] ,baseParams: { - action: 'Workspace/Lexicon/GetList' - ,'namespace': MODx.request['ns'] ? MODx.request['ns'] : 'core' - ,topic: '' - ,language: MODx.config.cultureKey || 'en' + action: 'Workspace/Lexicon/GetList', + namespace: MODx.request['ns'] ? MODx.request['ns'] : 'core', + topic: '', + language: MODx.config.cultureKey || 'en' } ,width: '98%' ,paging: true ,autosave: true + ,preventSaveRefresh: false ,save_action: 'Workspace/Lexicon/UpdateFromGrid' ,columns: [{ header: _('name') @@ -33,7 +34,9 @@ MODx.grid.Lexicon = function(config) { ,dataIndex: 'value' ,width: 500 ,sortable: false - ,editor: {xtype: 'textarea'} + ,editor: { + xtype: 'textarea' + } ,renderer: this._renderStatus },{ header: _('last_modified') @@ -59,7 +62,10 @@ MODx.grid.Lexicon = function(config) { ,preselectValue: MODx.request['ns'] ? MODx.request['ns'] : '' ,width: 150 ,listeners: { - 'select': {fn: this.changeNamespace,scope:this} + select: { + fn: this.changeNamespace, + scope: this + } } },{ xtype: 'tbtext' @@ -71,12 +77,15 @@ MODx.grid.Lexicon = function(config) { ,value: 'default' ,width: 150 ,baseParams: { - action: 'Workspace/Lexicon/Topic/GetList' - ,'namespace': MODx.request['ns'] ? MODx.request['ns'] : '' - ,'language': 'en' + action: 'Workspace/Lexicon/Topic/GetList', + namespace: MODx.request['ns'] ? MODx.request['ns'] : '', + language: 'en' } ,listeners: { - 'select': {fn:this.changeTopic,scope:this} + select: { + fn: this.changeTopic, + scope: this + } } },{ xtype: 'tbtext' @@ -90,10 +99,13 @@ MODx.grid.Lexicon = function(config) { ,width: 100 ,baseParams: { action: 'System/Language/GetList' - ,'namespace': MODx.request['ns'] ? MODx.request['ns'] : '' + ,namespace: MODx.request['ns'] ? MODx.request['ns'] : '' } ,listeners: { - 'select': {fn:this.changeLanguage,scope:this} + select: { + fn: this.changeLanguage, + scope: this + } } },{ xtype: 'textfield' @@ -103,14 +115,20 @@ MODx.grid.Lexicon = function(config) { ,itemId: 'search' ,emptyText: _('search_by_key') ,listeners: { - 'change': {fn:this.filter.createDelegate(this,['search'],true),scope:this} - ,'render': {fn: function(cmp) { - new Ext.KeyMap(cmp.getEl(), { - key: Ext.EventObject.ENTER - ,fn: this.blur - ,scope: cmp - }); - },scope:this} + change: { + fn: this.filter.createDelegate(this,['search'],true), + scope: this + }, + render: { + fn: function(cmp) { + new Ext.KeyMap(cmp.getEl(), { + key: Ext.EventObject.ENTER, + fn: this.blur, + scope: cmp + }); + }, + scope:this + } } },{ xtype: 'button' @@ -119,11 +137,15 @@ MODx.grid.Lexicon = function(config) { ,itemId: 'clear' ,text: _('filter_clear') ,listeners: { - 'click': {fn: this.clearFilter, scope: this}, - 'mouseout': { fn: function(evt){ + click: { + fn: this.clearFilter, + scope: this + }, + mouseout: { + fn: function(evt){ this.removeClass('x-btn-focus'); } - } + } } }] ,pagingItems: [{ @@ -135,6 +157,7 @@ MODx.grid.Lexicon = function(config) { MODx.grid.Lexicon.superclass.constructor.call(this,config); }; Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ + console: null ,_renderStatus: function(v,md,rec,ri) { @@ -152,7 +175,6 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ if (Ext.isEmpty(value)) { return '—'; } - return new Date(value*1000).format(MODx.config.manager_date_format + ' ' + MODx.config.manager_time_format); } @@ -162,6 +184,7 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ this.getBottomToolbar().changePage(1); return true; } + ,clearFilter: function() { this.store.baseParams = { action: 'Workspace/Lexicon/GetList' @@ -185,12 +208,15 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ tb.getComponent('search').setValue(''); } + ,changeNamespace: function(cb,nv,ov) { this.setFilterParams(cb.getValue(),'default','en'); } + ,changeTopic: function(cb,nv,ov) { this.setFilterParams(null,cb.getValue()); } + ,changeLanguage: function(cb,nv,ov) { this.setFilterParams(null,null,cb.getValue()); } @@ -236,6 +262,7 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ } this.getBottomToolbar().changePage(1); } + ,loadWindow2: function(btn,e,o) { var tb = this.getTopToolbar(); this.menu.record = { @@ -247,6 +274,7 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ } this.loadWindow(btn, e, o); } + ,reloadFromBase: function() { Ext.Ajax.timeout = 0; var topic = '/workspace/lexicon/reload/'; @@ -292,6 +320,7 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ } }); } + ,getMenu: function() { var r = this.getSelectionModel().getSelected(); var m = []; @@ -328,6 +357,7 @@ Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ this.createEntryWindow.setValues(r); this.createEntryWindow.show(e.target); } + }); Ext.reg('modx-grid-lexicon',MODx.grid.Lexicon); From 18de612a4e03c75e777e9f7040000080b2e486cc Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Tue, 23 Nov 2021 02:37:41 -0500 Subject: [PATCH 3/5] Progress batch 3 --- _build/templates/default/sass/_forms.scss | 228 +++++++++--------- _build/templates/default/sass/index.scss | 21 +- core/lexicon/en/source.inc.php | 4 + .../Revolution/Processors/Context/GetList.php | 4 +- .../Processors/Security/Role/GetList.php | 5 +- .../Revolution/Processors/Source/GetList.php | 76 ++++-- .../Revolution/Processors/Source/Update.php | 26 ++ .../assets/modext/widgets/core/modx.grid.js | 118 ++++++--- .../modext/widgets/security/modx.grid.role.js | 6 +- .../widgets/source/modx.panel.sources.js | 101 ++++---- .../widgets/system/modx.grid.context.js | 26 +- manager/templates/default/css/index.css | 96 +++++--- 12 files changed, 447 insertions(+), 264 deletions(-) diff --git a/_build/templates/default/sass/_forms.scss b/_build/templates/default/sass/_forms.scss index 5216afed1ab..695f2d10b82 100644 --- a/_build/templates/default/sass/_forms.scss +++ b/_build/templates/default/sass/_forms.scss @@ -35,7 +35,7 @@ textarea.x-form-field, border-radius: $borderRadius; border: 1px solid $borderColor; position: relative; - transition: border-color .25s; + transition: border-color 0.25s; } .x-viewport .x-trigger-wrap-focus, @@ -101,7 +101,7 @@ input::-moz-focus-inner { padding: 0 0 0 3px; top: 0; right: 0; - transition: all .25s; + transition: all 0.25s; width: 16px; height: 16px; @@ -109,7 +109,9 @@ input::-moz-focus-inner { @extend %pseudo-font; box-sizing: border-box; color: scale-color($coreFieldLabelColor, $lightness: 50%); - content: fa-content($fa-var-undo-alt); /* better match IMO for the action being taken */ + content: fa-content( + $fa-var-undo-alt + ); /* better match IMO for the action being taken */ font-size: 14px; position: relative; bottom: 2px; @@ -120,12 +122,12 @@ input::-moz-focus-inner { height: 16px; } &.modx-field-reset { - &::before { - content: fa-content($fa-var-undo-alt); - } - &:hover::before { - color: $green; - } + &::before { + content: fa-content($fa-var-undo-alt); + } + &:hover::before { + color: $green; + } } &.modx-field-clear { &::before { @@ -199,19 +201,21 @@ input::-moz-focus-inner { border-style: solid; border-width: 10px 10px 10px 0; border-color: transparent $lightGray transparent transparent; - content: ''; + content: ""; position: absolute; top: 0; left: -10px; - transform: rotate(360deg); /* for better anti-aliasing in webkit browsers */ + transform: rotate( + 360deg + ); /* for better anti-aliasing in webkit browsers */ width: 0; height: 0; } &:after { background-color: $white; - border-radius: 50%; /* make a circle */ - content: ''; + border-radius: 50%; /* make a circle */ + content: ""; position: absolute; top: 8px; left: -4px; @@ -233,7 +237,8 @@ input::-moz-focus-inner { background-color: darken($colorSplash, 6%); &:before { - border-color: transparent darken($colorSplash, 6%) transparent transparent; + border-color: transparent darken($colorSplash, 6%) transparent + transparent; } } } @@ -245,7 +250,7 @@ input::-moz-focus-inner { border: 1px solid $borderColor; border-radius: $borderRadius; padding: 5px; - transition: all .25s; + transition: all 0.25s; &:focus { border: 1px solid $borderColorFocus; @@ -289,7 +294,6 @@ input::-moz-focus-inner { } .x-window & { - .x-form-item-label { padding: 10px 0 4px 0; /* move the form fields a bit tighter together inside windows */ } @@ -309,7 +313,7 @@ input::-moz-focus-inner { &.disabled { label { - color: scale-color($coreFieldLabelColor, $lightness: 50%); + color: scale-color($coreFieldLabelColor, $lightness: 50%); } } @@ -322,8 +326,7 @@ input::-moz-focus-inner { /* prevent columns used inside form elements to have too much spacing, some custom TV types need this */ .x-column-inner > .x-column { - - ~.x-column { + ~ .x-column { margin-left: 5px; } @@ -349,10 +352,10 @@ input::-moz-focus-inner { display: block; font-size: 12px; font-style: italic; - margin: .4em 0 0 0; + margin: 0.4em 0 0 0; &.toggle-slider-above { - margin: .3em 0; + margin: 0.3em 0; padding-left: 3.9em; } @@ -364,15 +367,15 @@ input::-moz-focus-inner { .example-list { ul { - margin: .4em 0; + margin: 0.4em 0; li { position: relative; - margin-bottom: .25em; + margin-bottom: 0.25em; padding-left: 1.25em; &::before { @extend %pseudo-font; position: absolute; - left: .2em; + left: 0.2em; top: 0; content: fa-content($fa-var-angle-double-right); color: scale-color($mediumGray, $lightness: 20%); @@ -382,7 +385,7 @@ input::-moz-focus-inner { } .example-input, .copy-this { - padding: 0 .3em; + padding: 0 0.3em; border-radius: 2px; transition: width 1s; } @@ -398,35 +401,35 @@ input::-moz-focus-inner { } .copy-this { - color: scale-color($blue, $lightness: -5%, $saturation: -40%); - background-color: scale-color($blue, $lightness: 92%, $saturation: -15%); - &:hover { - background-color: scale-color($blue, $lightness: 87%, $saturation: 5%); - color: scale-color($blue, $lightness: -35%); - cursor: pointer; - &::after { - @extend %pseudo-font; - content: fa-content($fa-var-copy); - color: scale-color($blue, $saturation: -40%); - display: inherit; - margin-left: .5em; - } - &:active { - color: $darkGray; - &::after { - color: $darkGray; - } - } + color: scale-color($blue, $lightness: -5%, $saturation: -40%); + background-color: scale-color($blue, $lightness: 92%, $saturation: -15%); + &:hover { + background-color: scale-color($blue, $lightness: 87%, $saturation: 5%); + color: scale-color($blue, $lightness: -35%); + cursor: pointer; + &::after { + @extend %pseudo-font; + content: fa-content($fa-var-copy); + color: scale-color($blue, $saturation: -40%); + display: inherit; + margin-left: 0.5em; + } + &:active { + color: $darkGray; + &::after { + color: $darkGray; + } } + } } .feedback { - margin-left: .75em; - color: scale-color($blue, $lightness: -35%); - font-style: normal; - &.item-copied { - opacity: 1; - transition: opacity 1.5s; - } + margin-left: 0.75em; + color: scale-color($blue, $lightness: -35%); + font-style: normal; + &.item-copied { + opacity: 1; + transition: opacity 1.5s; + } } a { @@ -441,13 +444,12 @@ input::-moz-focus-inner { .deemphasize { font-style: normal; } - } .fs-toggle { padding-top: 1em; margin-top: 2em; - margin-bottom: .5em; + margin-bottom: 0.5em; border-top: 1px dashed $borderColor; } @@ -506,7 +508,6 @@ input::-moz-focus-inner { } } } - } .x-form-field { @@ -569,14 +570,14 @@ input::-moz-focus-inner { content: fa-content($fa-var-chevron-down); font-size: 14px; margin-top: -7px; /* half of the height to center vertically with top 50% */ - opacity: .8; + opacity: 0.8; filter: alpha(opacity=60); /* for IE <= 8 */ position: absolute; top: 50%; right: 0; text-align: center; width: 30px; - transition: opacity .25s; + transition: opacity 0.25s; } &.x-form-trigger-over, @@ -626,7 +627,6 @@ input::-moz-focus-inner { content: fa-content($fa-var-file-code); font-weight: 400; } - } &.x-datetime-wrap { @@ -635,7 +635,6 @@ input::-moz-focus-inner { .ux-datetime-date { .x-form-trigger { - &:before { content: fa-content($fa-var-calendar); } @@ -644,7 +643,6 @@ input::-moz-focus-inner { .ux-datetime-time { .x-form-trigger { - &:before { content: fa-content($fa-var-clock); } @@ -726,7 +724,7 @@ input::-moz-focus-inner { padding-left: 3px; &:before { - content: ''; + content: ""; } } @@ -734,7 +732,7 @@ input::-moz-focus-inner { @extend %pseudo-font; box-sizing: border-box; - content: ''; + content: ""; font-size: 18px; padding-right: 3px; position: absolute; @@ -819,12 +817,10 @@ input::-moz-focus-inner { /* Special checboxes for resources and tv configs */ #modx-resource-tabs, #modx-tv-tabs { - .x-form-check-wrap, .x-fieldset-checkbox-toggle legend, .x-fieldset legend { - [type="checkbox"]{ - + [type="checkbox"] { position: absolute; left: -9999px; html[dir="rtl"] & { @@ -832,11 +828,11 @@ input::-moz-focus-inner { left: unset; } - &+.x-form-cb-label, - &+.x-fieldset-header-text { + & + .x-form-cb-label, + & + .x-fieldset-header-text { position: relative; padding-left: 3.6em; - padding-top: .2em; + padding-top: 0.2em; margin-left: 0; cursor: pointer; box-sizing: border-box; @@ -844,9 +840,9 @@ input::-moz-focus-inner { &:before, &:after { - content: ''; + content: ""; position: absolute; - transition: all .2s ease; + transition: all 0.2s ease; font-size: inherit; } @@ -863,7 +859,7 @@ input::-moz-focus-inner { &:after { left: 0.1em; top: 0.8em; - margin-top: -.65em; + margin-top: -0.65em; height: 1.3em; width: 1.3em; border-radius: 50%; @@ -873,9 +869,8 @@ input::-moz-focus-inner { } &:checked { - - &+.x-form-cb-label, - &+.x-fieldset-header-text { + & + .x-form-cb-label, + & + .x-fieldset-header-text { &:after { left: 1.6em; top: 0.8em; @@ -889,9 +884,8 @@ input::-moz-focus-inner { } &.danger:checked { - - &+.x-form-cb-label, - &+.x-fieldset-header-text { + & + .x-form-cb-label, + & + .x-fieldset-header-text { &:before { background-color: $red; border-color: $red; @@ -900,9 +894,8 @@ input::-moz-focus-inner { } &.warning:checked { - - &+.x-form-cb-label, - &+.x-fieldset-header-text { + & + .x-form-cb-label, + & + .x-fieldset-header-text { &:before { background-color: $orange; border-color: $orange; @@ -930,12 +923,11 @@ input::-moz-focus-inner { } /* applies to new xcheckboxgroup custom checkbox group */ &.aggregated-group { - padding-left: 1em; - padding-right: 1em; + padding-left: 1em; + padding-right: 1em; } } - /* superboxselect / multi-select field */ .x-superboxselect { height: auto !important; /* override the extjs default theme style of 18px */ @@ -985,13 +977,13 @@ input::-moz-focus-inner { cursor: pointer; display: inline-block; /*font-size: 1px;*/ outline: 0; /* fix firefox dotted outlines */ - opacity: .6; + opacity: 0.6; filter: alpha(opacity=60); /* for IE <= 8 */ padding: 0; position: absolute; top: 0; right: 0; - transition: opacity .25s; + transition: opacity 0.25s; width: 16px; height: 100%; @@ -1084,7 +1076,7 @@ input::-moz-focus-inner { margin-bottom: 2px; } - input[type=text], + input[type="text"], textarea { background-color: $coreFieldBg; background-image: none; @@ -1094,7 +1086,7 @@ input::-moz-focus-inner { width: 97%; } - input[type=text] { + input[type="text"] { font-size: 13px; height: 20px !important; padding: 5px; @@ -1132,21 +1124,22 @@ input::-moz-focus-inner { } .x-editor .x-form-check-wrap { - background-color: $white -} - -/* fix combo on grid editor bug */ -.x-grid-editor .x-form-field-wrap { - background: #f6f2f7 url($imgPath + 'modx-theme/form/combo-bck.png') repeat-x scroll 0 100%; -} - -.x-grid-editor .x-form-field-wrap input { - background-color: transparent !important; + background-color: $white; } -.x-grid-editor .x-form-field-wrap img { - background-color: $white; - background-image: url($imgPath + 'modx-theme/form/trigger.png'); +.x-grid-editor { + z-index: 9002 !important; + .x-form-field-wrap { + background: #f6f2f7 url($imgPath+"modx-theme/form/combo-bck.png") repeat-x + scroll 0 100%; + input { + background-color: transparent !important; + } + img { + background-color: $white; + background-image: url($imgPath+"modx-theme/form/trigger.png"); + } + } } .x-form-grow-sizer { @@ -1176,7 +1169,6 @@ input::-moz-focus-inner { .x-grid3 { .x-small-editor { - .x-form-text, .x-form-field-wrap { font: $fontSmall; @@ -1279,7 +1271,7 @@ input::-moz-focus-inner { .x-btn { padding: 1px; - transition: color .25s; + transition: color 0.25s; &.x-btn-over, &:hover, @@ -1294,7 +1286,7 @@ input::-moz-focus-inner { &.x-item-disabled { color: $buttonColor; - opacity: .4; + opacity: 0.4; } button:before { @@ -1338,7 +1330,11 @@ input::-moz-focus-inner { } /* the second text cell, "of X" */ - .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell { + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell { .xtb-text { display: inline-block; position: absolute; @@ -1350,7 +1346,15 @@ input::-moz-focus-inner { } /* the last regular button >>, yes, I know it's ugly but tell that Microsoft and say thanks for IE8 =) */ - .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell { + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell + + .x-toolbar-cell { .x-btn { margin-right: 0; } @@ -1359,13 +1363,13 @@ input::-moz-focus-inner { /* the refresh button */ .x-toolbar-cell:last-child { opacity: 0; - transition: opacity .25s; + transition: opacity 0.25s; .x-btn { font-size: 12px; line-height: 1; margin: 0; - opacity: .4; + opacity: 0.4; padding: 0; position: absolute; bottom: 2px; @@ -1401,7 +1405,7 @@ input::-moz-focus-inner { } .x-combo-list-hd { - background-image: url($imgPath + 'modx-theme/layout/panel-title-light-bg.gif'); + background-image: url($imgPath+"modx-theme/layout/panel-title-light-bg.gif"); border-bottom-color: #bcbcbc; color: #464646; } @@ -1448,18 +1452,18 @@ input::-moz-focus-inner { .x-date-mp-ybtn a.x-date-mp-prev, .x-date-mp-ybtn a.x-date-mp-next { display: inline-block; - opacity: .6; + opacity: 0.6; filter: alpha(opacity=60); /* for IE <= 8 */ margin: 0 auto; position: relative; - transition: opacity .25s; + transition: opacity 0.25s; &:before { @extend %pseudo-font; box-sizing: border-box; color: $colorSplash; - content: ''; + content: ""; font-size: 18px; position: absolute; top: 0; @@ -1688,7 +1692,7 @@ td.x-date-mp-sep { border-radius: $borderRadius; background-color: $coreFieldBg; border: 1px solid $borderColor; - background: url('../images/tp-no-preview.png') no-repeat center center; + background: url("../images/tp-no-preview.png") no-repeat center center; overflow: hidden; .x-panel-bwrap, @@ -1709,6 +1713,6 @@ td.x-date-mp-sep { bottom: 0; padding: 10px 20px; color: #fff; - background-color: rgba(0, 0, 0, .8); + background-color: rgba(0, 0, 0, 0.8); } } diff --git a/_build/templates/default/sass/index.scss b/_build/templates/default/sass/index.scss index 5900380f600..61a9cdd9850 100644 --- a/_build/templates/default/sass/index.scss +++ b/_build/templates/default/sass/index.scss @@ -567,19 +567,32 @@ textarea.x-form-field { } .x-editable-column { - cursor: default; + cursor: default; &:not(.editor-disabled) { cursor: pointer; &:hover, &:focus { color: $colorSplash; - > div::after { + > div { + &::after { + @include awesome-font; + content: fa-content($fa-var-pen); + margin: 0 0.5em; + color: $colorSplash; + } + } + } + /* + a:hover { + &::after { @include awesome-font; - content: fa-content($fa-var-pen); - margin: 0 0.5em; + content: '\f35d'; + margin: 0 0 0 0.5em; + border-bottom: none; color: $colorSplash; } } + */ } } diff --git a/core/lexicon/en/source.inc.php b/core/lexicon/en/source.inc.php index 8dcec92baff..662fd83b80e 100644 --- a/core/lexicon/en/source.inc.php +++ b/core/lexicon/en/source.inc.php @@ -6,6 +6,8 @@ * @package modx * @subpackage lexicon */ +$_lang['_source_filesystem_description'] = 'The default manager source containing all files this installation of MODX has access to.'; +$_lang['_source_filesystem_name'] = 'Filesystem'; $_lang['access'] = 'Access Permissions'; $_lang['base_path'] = 'Base Path'; $_lang['base_path_relative'] = 'Base Path Relative?'; @@ -20,7 +22,9 @@ $_lang['source_access_remove_confirm'] = 'Are you sure you want to delete Access to this Source for this User Group?'; $_lang['source_access_update'] = 'Edit Access'; $_lang['source_description_desc'] = 'A short description of the Media Source.'; +$_lang['source_edit'] = 'Edit the settings for this source'; $_lang['source_err_ae_name'] = 'A Media Source with that name already exists! Please specify a new name.'; +$_lang['source_err_name_reserved'] = 'The source name “[[+reservedName]]” is reserved. Please choose another name.'; $_lang['source_err_nf'] = 'Media Source not found!'; $_lang['source_err_init'] = 'Could not initialize "[[+source]]" Media Source!'; $_lang['source_err_nfs'] = 'No Media Source can be found with the id: [[+id]].'; diff --git a/core/src/Revolution/Processors/Context/GetList.php b/core/src/Revolution/Processors/Context/GetList.php index 0804753207b..787037af6ee 100644 --- a/core/src/Revolution/Processors/Context/GetList.php +++ b/core/src/Revolution/Processors/Context/GetList.php @@ -33,11 +33,9 @@ class GetList extends GetListProcessor public $permission = 'view_context'; public $languageTopics = ['context']; public $defaultSortField = 'key'; - /** @var boolean $canCreate Determines whether or not the user can create a context (/duplicate one) */ + protected $canCreate = false; - /** @var boolean $canUpdate Determines whether or not the user can edit a Context */ protected $canUpdate = false; - /** @var boolean $canDelete Determines whether or not the user can remove a Context */ protected $canDelete = false; /** diff --git a/core/src/Revolution/Processors/Security/Role/GetList.php b/core/src/Revolution/Processors/Security/Role/GetList.php index 50ff8bc5439..854b654e172 100644 --- a/core/src/Revolution/Processors/Security/Role/GetList.php +++ b/core/src/Revolution/Processors/Security/Role/GetList.php @@ -97,6 +97,7 @@ public function beforeIteration(array $list) */ public function prepareRow(xPDOObject $object) { + // Note: Role does not have a checkPolicy() method $permissions = [ 'create' => $this->canCreate, 'update' => $this->canUpdate, @@ -119,8 +120,8 @@ public function prepareRow(xPDOObject $object) $roleData['creator'] = $isCoreRole ? 'modx' : strtolower($this->modx->lexicon('user')) ; $roleData['permissions'] = !$isCoreRole ? $permissions : [] ; - $msg = "\r\n prepareRow, \$role:\r\n" . print_r($role, true); - $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); + // $msg = "\r\n prepareRow, \$role:\r\n" . print_r($role, true); + // $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); return $roleData; } diff --git a/core/src/Revolution/Processors/Source/GetList.php b/core/src/Revolution/Processors/Source/GetList.php index 3dc75e782a9..db17211550b 100644 --- a/core/src/Revolution/Processors/Source/GetList.php +++ b/core/src/Revolution/Processors/Source/GetList.php @@ -30,6 +30,10 @@ class GetList extends GetListProcessor public $languageTopics = ['source']; public $permission = 'source_view'; + protected $canCreate = false; + protected $canUpdate = false; + protected $canDelete = false; + /** * {@inheritDoc} * @return boolean @@ -41,10 +45,35 @@ public function initialize() 'showNone' => false, 'query' => '', 'streamsOnly' => false, + 'exclude' => 'creator' ]); + + $this->canCreate = $this->modx->hasPermission('source_save'); + $this->canUpdate = $this->modx->hasPermission('source_edit'); + $this->canDelete = $this->modx->hasPermission('source_delete'); + return $initialized; } + /** + * {@inheritDoc} + * @return boolean + */ + public function beforeQuery() + { + /* + Implementing a little trick here since 'creator' is an arbitrary field + not present in the database, used for distinguishing core/protected row data + from user-created data + */ + if ($this->getProperty('sort') === 'creator') { + $this->setProperty('sort', 'FIELD(modMediaSource.name, "Filesystem")'); + $dir = $this->getProperty('dir') === 'ASC' ? 'DESC' : 'ASC' ; + $this->setProperty('dir', $dir); + } + return true; + } + /** * {@inheritDoc} * @param array $list @@ -114,36 +143,33 @@ public function getSortClassKey() */ public function prepareRow(xPDOObject $object) { - $canEdit = $this->modx->hasPermission('source_edit'); - $canSave = $this->modx->hasPermission('source_save'); - $canRemove = $this->modx->hasPermission('source_delete'); + $permissions = [ + 'create' => $this->canCreate && $object->checkPolicy('save'), + 'duplicate' => $this->canCreate && $object->checkPolicy('copy'), + 'update' => $this->canUpdate && $object->checkPolicy('save'), + 'delete' => $this->canDelete && $object->checkPolicy('remove') + ]; - $objectArray = $object->toArray(); - $objectArray['iconCls'] = $this->modx->getOption('mgr_source_icon', null, 'icon-folder-open-o'); + $sourceData = $object->toArray(); - $props = $object->getPropertyList(); - if (isset($props['iconCls']) && !empty($props['iconCls'])) { - $objectArray['iconCls'] = $props['iconCls']; - } + $sourceKey = $object->get('name'); + $coreSources = ['Filesystem']; + $isCoreSource = in_array($sourceKey, $coreSources); - $cls = []; - $permissions = []; - if ($canSave && $canEdit && $object->checkPolicy('save')) { - $cls[] = 'pupdate'; - } - if ($canRemove && $object->checkPolicy('remove')) { - $cls[] = 'premove'; - } - if ($canSave && $object->checkPolicy('copy')) { - $cls[] = 'pduplicate'; + if ($isCoreSource) { + $baseKey = '_source_' . strtolower(str_replace(' ', '', $sourceKey)) . '_'; + $sourceData['name_trans'] = $this->modx->lexicon($baseKey . 'name'); + $sourceData['description_trans'] = $this->modx->lexicon($baseKey . 'description'); } - $objectArray['recordPerms'] = $cls; - $objectArray['cls'] = implode(' ', $cls); - - $msg = "\r\n prepareRow, \$objectArray:\r\n" . print_r($objectArray, true); - $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); + $sourceData['reserved'] = ['name' => $coreSources]; + $sourceData['isProtected'] = $isCoreSource ? true : false ; + $sourceData['creator'] = $isCoreSource ? 'modx' : strtolower($this->modx->lexicon('user')) ; + if ($isCoreSource) { + unset($permissions['delete']); + } + $sourceData['permissions'] = $permissions; - return $objectArray; + return $sourceData; } } diff --git a/core/src/Revolution/Processors/Source/Update.php b/core/src/Revolution/Processors/Source/Update.php index 0b49c6944dc..341d9dc03a7 100644 --- a/core/src/Revolution/Processors/Source/Update.php +++ b/core/src/Revolution/Processors/Source/Update.php @@ -1,4 +1,5 @@ object->get('name'); + $id = $this->object->get('id'); + + if (empty($name)) { + $this->addFieldError('name', $this->modx->lexicon('source_err_ns_name')); + } elseif ($this->alreadyExists($name, $id)) { + $this->addFieldError('name', $this->modx->lexicon('source_err_ae_name', [ + 'name' => $name, + ])); + } $this->setSourceProperties(); + return parent::beforeSave(); } + /** + * Check to see if a Media Source with the specified name already exists + * @param string $name + * @return boolean + */ + public function alreadyExists($name, $id) + { + return $this->modx->getCount(modMediaSource::class, [ + 'name' => $name, + 'id:!=' => $id + ]) > 0; + } + /** * Sets the properties on the source * @return void diff --git a/manager/assets/modext/widgets/core/modx.grid.js b/manager/assets/modext/widgets/core/modx.grid.js index bac1b6a550c..85d581c5c34 100644 --- a/manager/assets/modext/widgets/core/modx.grid.js +++ b/manager/assets/modext/widgets/core/modx.grid.js @@ -584,20 +584,32 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { /* Record-Level Permissions Checks, for objects with specific policies */ - ,userCanEditRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pupdate') { - const permissions = record[permissionsProperty]; - return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + // ,userCanEditRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pupdate') { + // const permissions = record[permissionsProperty]; + // return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + // } + ,userCanEditRecord: function(record) { + const permissions = record.json.permissions; + return !Ext.isEmpty(permissions) && permissions.update === true ? true : false ; } - ,userCanDeleteRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'premove') { - const permissions = record[permissionsProperty]; - // console.log('userCanDeleteRecord, permissions: ', permissions); - return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + // ,userCanDeleteRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'premove') { + // const permissions = record[permissionsProperty]; + // // console.log('userCanDeleteRecord, permissions: ', permissions); + // return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + // } + ,userCanDeleteRecord: function(record) { + const permissions = record.json.permissions; + return !Ext.isEmpty(permissions) && !record.json.isProtected && permissions.delete === true ? true : false ; } - ,userCanDuplicateRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pduplicate') { - const permissions = record[permissionsProperty]; - return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + // ,userCanDuplicateRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pduplicate') { + // const permissions = record[permissionsProperty]; + // return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; + // } + ,userCanDuplicateRecord: function(record) { + const permissions = record.json.permissions; + return !Ext.isEmpty(permissions) && permissions.duplicate === true ? true : false ; } /** @@ -651,36 +663,62 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { return protectedIdentifiers.includes(subject); } - // ,valueIsReserved: function(e, errorMessage) { - // const reserved = e.record.json.reserved; - // if (reserved && !Ext.isEmpty(reserved)) { - // console.log('valueIsReserved, reserved keys: ', Object.keys(reserved)); - // Object.keys(reserved).forEach(key => { - // if (e.field === key && reserved[key].includes(e.value)) { - // console.log('reserved value found!'); - // Ext.Msg.alert('Error', errorMessage); - // return false; - // } - // }); - // } - // return true; - // } + /* + Note to self: The following valueIsReserved methods worked, but when called + from the column model's field validator or from listeners (afteredit/etc) + the event timing was too early (the record.json.permissions and other extra + properties are not yet set) + */ + /* + ,valueIsReserved: function(e, errorMessage) { + const reserved = e.record.json.reserved; + if (reserved && !Ext.isEmpty(reserved)) { + console.log('valueIsReserved, reserved keys: ', Object.keys(reserved)); + Object.keys(reserved).forEach(key => { + if (e.field === key && reserved[key].includes(e.value)) { + console.log('reserved value found!'); + Ext.Msg.alert('Error', errorMessage); + return false; + } + }); + } + return true; + } + */ + /* + ,valueIsReserved: function(field, record, errorMessage) { + const reserved = record.json.reserved; + if (reserved && !Ext.isEmpty(reserved)) { + // console.log('valueIsReserved, reserved keys: ', Object.keys(reserved)); + console.log('valueIsReserved, record: ', record); + Object.keys(reserved).forEach(key => { + if (field === key && reserved[key].includes(record.data[field])) { + console.log('reserved value found!'); + Ext.Msg.alert('Error', errorMessage); + return false; + } + }); + } + return true; + } + */ - // ,valueIsReserved: function(field, record, errorMessage) { - // const reserved = record.json.reserved; - // if (reserved && !Ext.isEmpty(reserved)) { - // // console.log('valueIsReserved, reserved keys: ', Object.keys(reserved)); - // console.log('valueIsReserved, record: ', record); - // Object.keys(reserved).forEach(key => { - // if (field === key && reserved[key].includes(record.data[field])) { - // console.log('reserved value found!'); - // Ext.Msg.alert('Error', errorMessage); - // return false; - // } - // }); - // } - // return true; - // } + /** + * + */ + ,valueIsReserved: function(reservedValues, value) { + if (!Ext.isArray(reservedValues)) { + reservedValues = reservedValues.split(','); + } + let isReserved = false; + reservedValues.forEach(reserved => { + if (reserved.toLowerCase() === value.toLowerCase()) { + isReserved = true; + return; + } + }); + return isReserved; + } /** * @property {Function} getRemovableItemsFromSelection - Prunes protected items from the current @@ -909,7 +947,7 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { if (record.json.hasOwnProperty('permissions')) { // console.log('perms: ',record.json.permissions); if ( - Ext.isEmpty(record.json.permissions) || + Ext.isEmpty(record.json.permissions) || Object.values(record.json.permissions).every(permission => permission === false) === true ) { return; diff --git a/manager/assets/modext/widgets/security/modx.grid.role.js b/manager/assets/modext/widgets/security/modx.grid.role.js index 22b4a48fcf8..0ec817b0162 100644 --- a/manager/assets/modext/widgets/security/modx.grid.role.js +++ b/manager/assets/modext/widgets/security/modx.grid.role.js @@ -43,8 +43,12 @@ MODx.grid.Role = function(config) { xtype: 'textfield', allowBlank: false, blankText: _('role_err_ns_name'), + validationEvent: 'change', validator: function(value) { - if (this.gridEditor.record.json.reserved.name.includes(value)) { + const grid = Ext.getCmp('modx-grid-role'), + reserved = this.gridEditor.record.json.reserved.name + ; + if (grid.valueIsReserved(reserved, value)) { const msg = _('role_err_name_reserved', { reservedName: value }); Ext.Msg.alert(_('error'), msg); return false; diff --git a/manager/assets/modext/widgets/source/modx.panel.sources.js b/manager/assets/modext/widgets/source/modx.panel.sources.js index f09a12565f0..28f2cf3abb2 100644 --- a/manager/assets/modext/widgets/source/modx.panel.sources.js +++ b/manager/assets/modext/widgets/source/modx.panel.sources.js @@ -73,6 +73,7 @@ MODx.grid.Sources = function(config) { this.sm = new Ext.grid.CheckboxSelectionModel(); Ext.applyIf(config, { + id: 'modx-grid-sources', url: MODx.config.connector_url, baseParams: { action: 'Source/GetList' @@ -82,13 +83,15 @@ MODx.grid.Sources = function(config) { 'name', 'description', 'class_key', - 'cls' + 'creator' ], paging: true, autosave: true, save_action: 'Source/UpdateFromGrid', remoteSort: true, sm: this.sm, + stateful: true, + stateId: 'modx-grid-sources-state', columns: [this.sm, { header: _('id'), dataIndex: 'id', @@ -102,20 +105,40 @@ MODx.grid.Sources = function(config) { sortable: true, editor: { xtype: 'textfield', - allowBlank: false + allowBlank: false, + blankText: _('source_err_ns_name'), + validationEvent: 'change', + validator: function(value) { + const grid = Ext.getCmp('modx-grid-sources'), + reserved = this.gridEditor.record.json.reserved.name + ; + if (grid.valueIsReserved(reserved, value)) { + const msg = _('source_err_name_reserved', { reservedName: value }); + Ext.Msg.alert(_('error'), msg); + return false; + } else { + return true; + } + }, + listeners: { + change: function(e) { + console.log('listener, change, args', arguments); + } + } }, renderer: { fn: function(value, metaData, record) { - if ( - // !this.userCanEdit || - !this.userCanEditRecord(record.data) || - this.recordIsProtected(record.data[this.protectedDataIndex], this.protectedIdentifiers) - ) { + value = value || record.json.name_trans; + const userCanEdit = this.userCanEdit && this.userCanEditRecord(record); + if (!userCanEdit || record.json.name === 'Filesystem') { metaData.css = 'editor-disabled'; - return value; + if (!userCanEdit) { + return value; + } } return this.renderLink(value, { - href: '?a=source/update&id=' + record.data.id + href: '?a=source/update&id=' + record.data.id, + title: _('source_edit') }); }, scope: this @@ -131,18 +154,22 @@ MODx.grid.Sources = function(config) { }, renderer: { fn: function(value, metaData, record) { - console.log('desc record: ', record); - if ( - // !this.userCanEdit || - !this.userCanEditRecord(record.data) || - this.recordIsProtected(record.data[this.protectedDataIndex], this.protectedIdentifiers) - ) { + value = value || record.json.description_trans; + const userCanEdit = this.userCanEdit && this.userCanEditRecord(record); + if (!userCanEdit || record.json.name === 'Filesystem') { metaData.css = 'editor-disabled'; } return value; }, scope: this } + }, { + header: _('creator'), + dataIndex: 'creator', + id: 'modx-source--creator', + width: 70, + align: 'center', + sortable: true }], tbar: [{ text: _('create'), @@ -180,13 +207,10 @@ MODx.grid.Sources = function(config) { }, click: { fn: function(btn) { - console.log('bulk remove cb click, btn:', btn); - // console.log('bulk remove cb click, args:', arguments); const removableSources = this.getRemovableItemsFromSelection('int'), menuOptRemove = btn.menu.getComponent('modx-bulk-menu-opt-remove') ; if (!removableSources) { - console.log('disabling this menu item: ',menuOptRemove); menuOptRemove.disable(); } else { menuOptRemove.enable(); @@ -251,9 +275,8 @@ MODx.grid.Sources = function(config) { scrollOffset: 0, getRowClass: function(record, index, rowParams, store) { // Adds the returned class to the row container's css classes - // console.log('viewConfig, record:', record); - // console.log('viewConfig, this:', this.grid.store.data.items); - return this.grid.protectedIdentifiers.includes(record.id) || !this.grid.userCanDeleteRecord(record.data) ? 'disable-selection' : ''; + const disableClasses = record.json.isProtected ? 'modx-protected-row disable-selection' : 'disable-selection' ; + return !this.grid.userCanDeleteRecord(record) ? disableClasses : ''; } } }); @@ -276,54 +299,44 @@ MODx.grid.Sources = function(config) { ); }, beforeedit: function(e){ - if ( - this.recordIsProtected(e.record.data[this.protectedDataIndex], this.protectedIdentifiers) || - !this.userCanEditRecord(e.record.data) - ) { + if (e.record.json.name === 'Filesystem' || !this.userCanEditRecord(e.record)) { return false; } } }); - // console.log('sources grid, this', this); + this.getStore().on({ load: function(store, records, params){ - // console.log('store load, this', this); - // console.log('store load, args', arguments); records.forEach(record => { - const record = record.data; - // console.log('record: ', record); - // if (Ext.isEmpty(permissions) || permissions.indexOf('premove') === -1) { - if (Ext.isEmpty(permissions) || !userCanDeleteRecord(record)) { - this.nonRemoveableRecords.push(record.data[this.protectedDataIndex]); + if (!this.userCanDeleteRecord(record)) { + this.nonRemoveableRecords.push(record.id); } }); - console.log('records that can not be removed: ',this.nonRemoveableRecords); + // console.log('records that can not be removed: ',this.nonRemoveableRecords); }, scope: this }); + }; Ext.extend(MODx.grid.Sources, MODx.grid.Grid, { getMenu: function() { - const rowData = this.getSelectionModel().getSelected().data, - isProtected = this.recordIsProtected(rowData[this.protectedDataIndex], this.protectedIdentifiers), + const record = this.getSelectionModel().getSelected(), m = [] ; - // console.log('sources, row data: ',rowData); - // if (this.userCanEdit && !isProtected && this.userCanEditRecord(rowData)) { - if (this.userCanEdit && !isProtected && this.userCanEditRecord(rowData)) { + if (this.userCanEdit && this.userCanEditRecord(record)) { m.push({ text: _('edit'), handler: this.updateSource }); } - if (this.userCanCreate && this.userCanDuplicateRecord(rowData)) { + if (this.userCanCreate && this.userCanDuplicateRecord(record)) { m.push({ text: _('duplicate'), handler: this.duplicateSource }); } - if (this.userCanDelete && !isProtected && this.userCanDeleteRecord(rowData)) { + if (this.userCanDelete && this.userCanDeleteRecord(record)) { if (m.length > 0) { m.push('-'); } @@ -380,6 +393,12 @@ Ext.extend(MODx.grid.Sources, MODx.grid.Grid, { }, removeSelected: function() { + /* + getRemovableItemsFromSelection must be run here, as any non-removeable rows + that get selected (simply by clicking anywhere on the row) can not be de-selected + programmatically. This ensures that non-removeables are discarded before sending + to the processor. + */ const removableSources = this.getRemovableItemsFromSelection('int'); if (!removableSources) { return false; diff --git a/manager/assets/modext/widgets/system/modx.grid.context.js b/manager/assets/modext/widgets/system/modx.grid.context.js index fddc31b3f1f..a2e5026ad03 100644 --- a/manager/assets/modext/widgets/system/modx.grid.context.js +++ b/manager/assets/modext/widgets/system/modx.grid.context.js @@ -68,6 +68,8 @@ MODx.grid.Context = function(config) { save_action: 'Context/UpdateFromGrid', remoteSort: true, primaryKey: 'key', + stateful: true, + stateId: 'modx-grid-context-state', columns: [{ header: _('key'), dataIndex: 'key', @@ -83,8 +85,12 @@ MODx.grid.Context = function(config) { xtype: 'textfield', allowBlank: false, blankText: _('context_err_ns_name'), + validationEvent: 'change', validator: function(value) { - if (this.gridEditor.record.json.reserved.name.includes(value)) { + const grid = Ext.getCmp('modx-grid-context'), + reserved = this.gridEditor.record.json.reserved.name + ; + if (grid.valueIsReserved(reserved, value)) { const msg = _('context_err_name_reserved', { reservedName: value }); Ext.Msg.alert(_('error'), msg); return false; @@ -95,9 +101,11 @@ MODx.grid.Context = function(config) { }, renderer: { fn: function(value, metaData, record) { - if (!this.userCanEdit || record.json.key === 'mgr') { + value = value || record.json.name_trans; + const userCanEdit = this.userCanEdit && this.userCanEditRecord(record); + if (!userCanEdit || record.json.key === 'mgr') { metaData.css = 'editor-disabled'; - if (!this.userCanEdit) { + if (!userCanEdit) { return value; } } @@ -120,7 +128,8 @@ MODx.grid.Context = function(config) { renderer: { fn: function(value, metaData, record) { value = value || record.json.description_trans; - if (!this.userCanEdit || record.json.key === 'mgr') { + const userCanEdit = this.userCanEdit && this.userCanEditRecord(record); + if (!userCanEdit || record.json.key === 'mgr') { metaData.css = 'editor-disabled'; } return value; @@ -146,7 +155,8 @@ MODx.grid.Context = function(config) { }, renderer: { fn: function(value, metaData, record) { - if (!this.userCanEdit || record.json.key === 'mgr') { + const userCanEdit = this.userCanEdit && this.userCanEditRecord(record); + if (!userCanEdit || record.json.key === 'mgr') { metaData.css = 'editor-disabled'; } return value; @@ -260,7 +270,7 @@ Ext.extend(MODx.grid.Context, MODx.grid.Grid, { m = [] ; - if (this.userCanCreate) { + if (this.userCanCreate && this.userCanDuplicateRecord(record)) { m.push({ text: _('duplicate'), handler: this.duplicateContext, @@ -268,14 +278,14 @@ Ext.extend(MODx.grid.Context, MODx.grid.Grid, { }); } - if (this.userCanEdit) { + if (this.userCanEdit && this.userCanEditRecord(record)) { m.push({ text: _('edit'), handler: this.updateContext }); } - if (this.userCanDelete && !record.json.isProtected) { + if (this.userCanDelete && this.userCanDeleteRecord(record)) { if (m.length > 0) { m.push('-'); } diff --git a/manager/templates/default/css/index.css b/manager/templates/default/css/index.css index 8bc20660fde..1c50c849d37 100644 --- a/manager/templates/default/css/index.css +++ b/manager/templates/default/css/index.css @@ -1,20 +1,3 @@ -/* -* -* Copyright (C) 2021 MODX LLC -* -* This file is part of MODX Revolution and was compiled using Grunt. -* -* MODX Revolution is free software: you can redistribute it and/or modify it under the terms of the -* GNU General Public License as published by the Free Software Foundation, either version 2 of the -* License, or (at your option) any later version. -* -* MODX Revolution is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -* -* See the GNU General Public License for more details. You should have received a copy of the GNU -* General Public License along with MODX Revolution. If not, see . -* -*/ /*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ /* Document ========================================================================== */ @@ -21891,15 +21874,15 @@ html[dir=rtl] #modx-tv-tabs .x-fieldset legend [type=checkbox] { background-color: #FFF; } -/* fix combo on grid editor bug */ +.x-grid-editor { + z-index: 9002 !important; +} .x-grid-editor .x-form-field-wrap { background: #f6f2f7 url("../images/modx-theme/form/combo-bck.png") repeat-x scroll 0 100%; } - .x-grid-editor .x-form-field-wrap input { background-color: transparent !important; } - .x-grid-editor .x-form-field-wrap img { background-color: #FFF; background-image: url("../images/modx-theme/form/trigger.png"); @@ -26365,6 +26348,11 @@ textarea.x-form-field { } /* grids */ +.modx-protected-row .x-grid3-cell-inner { + font-style: italic; + color: #234368; +} + .x-small-editor .x-form-field { font-size: 12px !important; } @@ -26377,23 +26365,40 @@ textarea.x-form-field { color: #999 !important; } -a.x-grid-link { +.x-grid-link { color: #234368; - text-decoration: underline; -} - -a.x-grid-link:hover, -a.x-grid-link:focus { text-decoration: none; + border-bottom: 1px dotted #749fd0; +} +.x-grid-link:hover { + color: black; + border-bottom-color: #336299; +} +.x-grid-link.simulated-link { + cursor: pointer; } .x-editable-column { + cursor: default; +} +.x-editable-column:not(.editor-disabled) { cursor: pointer; + /* + a:hover { + &::after { + @include awesome-font; + content: '\f35d'; + margin: 0 0 0 0.5em; + border-bottom: none; + color: $colorSplash; + } + } + */ } -.x-editable-column:hover, .x-editable-column:focus { +.x-editable-column:not(.editor-disabled):hover, .x-editable-column:not(.editor-disabled):focus { color: #234368; } -.x-editable-column:hover > div::after, .x-editable-column:focus > div::after { +.x-editable-column:not(.editor-disabled):hover > div::after, .x-editable-column:not(.editor-disabled):focus > div::after { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: inline-block; @@ -26635,6 +26640,31 @@ a.x-grid-link:focus { } /* rowactions */ +.x-grid3-row.disable-selection .x-grid3-row-checker, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker { + position: relative; +} +.x-grid3-row.disable-selection .x-grid3-row-checker::before, .x-grid3-row.disable-selection .x-grid3-row-checker::after, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::before, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::after { + color: #aaaaaa; +} +.x-grid3-row.disable-selection .x-grid3-row-checker::before, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::before { + content: "\f0c8"; +} +.x-grid3-row.disable-selection .x-grid3-row-checker::after, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::after { + content: "\f715"; + font-size: 6px; + position: absolute; + left: 50%; + top: 50%; + margin-left: 2px; + margin-top: 1px; + transform: translate(-50%, -50%) rotate(98deg); + font-weight: 600; + font-family: "Font Awesome 5 Free"; +} +.x-grid3-row.disable-selection .x-grid3-row-checker:hover, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker:hover { + cursor: default; +} + .ux-row-action-cell .x-grid3-cell-inner { padding: 1px 0 0 0; } @@ -27441,6 +27471,16 @@ html[dir=rtl] .x-hide-offsets { user-select: text !important; } +.x-selectable.simulated-link * { + color: #234368; + text-decoration: none; + border-bottom: 1px dotted #749fd0; +} +.x-selectable.simulated-link *:hover { + color: black; + border-bottom-color: #336299; +} + /* Lightbox */ #ux-lightbox { left: 0; From c8d2dac74d83330896394053fd2d2fad0c753c53 Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Wed, 24 Nov 2021 23:47:10 -0500 Subject: [PATCH 4/5] Progress batch 4 --- _build/templates/default/sass/index.scss | 11 ----- .../Revolution/Processors/Context/GetList.php | 13 ------ .../Processors/Security/Role/GetList.php | 6 --- .../Revolution/Processors/Source/GetList.php | 1 - .../assets/modext/widgets/core/modx.grid.js | 42 +++++++------------ .../widgets/system/modx.grid.context.js | 2 +- manager/templates/default/css/index.css | 11 ----- 7 files changed, 16 insertions(+), 70 deletions(-) diff --git a/_build/templates/default/sass/index.scss b/_build/templates/default/sass/index.scss index 61a9cdd9850..4448fa28be5 100644 --- a/_build/templates/default/sass/index.scss +++ b/_build/templates/default/sass/index.scss @@ -582,17 +582,6 @@ textarea.x-form-field { } } } - /* - a:hover { - &::after { - @include awesome-font; - content: '\f35d'; - margin: 0 0 0 0.5em; - border-bottom: none; - color: $colorSplash; - } - } - */ } } diff --git a/core/src/Revolution/Processors/Context/GetList.php b/core/src/Revolution/Processors/Context/GetList.php index 787037af6ee..e7a45dd3aee 100644 --- a/core/src/Revolution/Processors/Context/GetList.php +++ b/core/src/Revolution/Processors/Context/GetList.php @@ -84,9 +84,6 @@ public function beforeQuery() */ public function prepareQueryBeforeCount(xPDOQuery $c) { - // $msg = "\r\n prepareQueryBeforeCount, \$properties:\r\n" . print_r($this->getProperties(), true); - // $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); - $search = $this->getProperty('search'); if (!empty($search)) { $c->where([ @@ -139,17 +136,7 @@ public function prepareRow(xPDOObject $object) 'delete' => $this->canDelete && $object->checkPolicy('remove') ]; - // $policies = [ - // 'save' => $object->checkPolicy('save'), - // 'copy' => $object->checkPolicy('copy'), - // 'remove' => $object->checkPolicy('remove') - // ]; - // - // $msg = "\r\n context:, \$policies:\r\n" . print_r($policies, true); - // $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); - $contextData = $object->toArray(); - $contextKey = $object->get('key'); $coreContexts = ['mgr', 'web']; $isCoreContext = in_array($contextKey, $coreContexts); diff --git a/core/src/Revolution/Processors/Security/Role/GetList.php b/core/src/Revolution/Processors/Security/Role/GetList.php index 854b654e172..e6d024e3c8f 100644 --- a/core/src/Revolution/Processors/Security/Role/GetList.php +++ b/core/src/Revolution/Processors/Security/Role/GetList.php @@ -33,7 +33,6 @@ class GetList extends GetListProcessor public $permission = 'view_role'; public $defaultSortField = 'authority'; - // public $canRemove = false; protected $canCreate = false; protected $canUpdate = false; protected $canDelete = false; @@ -52,7 +51,6 @@ public function initialize() $this->setProperty('sort', 'name'); } - // $this->canRemove = $this->modx->hasPermission('delete_role'); $this->canCreate = $this->modx->hasPermission('new_role') && $this->modx->hasPermission('save_role'); $this->canUpdate = $this->modx->hasPermission('edit_role') && $this->modx->hasPermission('save_role'); $this->canDelete = $this->modx->hasPermission('delete_role'); @@ -105,7 +103,6 @@ public function prepareRow(xPDOObject $object) ]; $roleData = $object->toArray(); - $roleName = $object->get('name'); $isCoreRole = $roleName === 'Super User' || $roleName === 'Member'; @@ -120,9 +117,6 @@ public function prepareRow(xPDOObject $object) $roleData['creator'] = $isCoreRole ? 'modx' : strtolower($this->modx->lexicon('user')) ; $roleData['permissions'] = !$isCoreRole ? $permissions : [] ; - // $msg = "\r\n prepareRow, \$role:\r\n" . print_r($role, true); - // $this->modx->log(\modX::LOG_LEVEL_ERROR, $msg, '', __CLASS__); - return $roleData; } } diff --git a/core/src/Revolution/Processors/Source/GetList.php b/core/src/Revolution/Processors/Source/GetList.php index db17211550b..f4dbecd4761 100644 --- a/core/src/Revolution/Processors/Source/GetList.php +++ b/core/src/Revolution/Processors/Source/GetList.php @@ -151,7 +151,6 @@ public function prepareRow(xPDOObject $object) ]; $sourceData = $object->toArray(); - $sourceKey = $object->get('name'); $coreSources = ['Filesystem']; $isCoreSource = in_array($sourceKey, $coreSources); diff --git a/manager/assets/modext/widgets/core/modx.grid.js b/manager/assets/modext/widgets/core/modx.grid.js index 85d581c5c34..ba518bdbcb4 100644 --- a/manager/assets/modext/widgets/core/modx.grid.js +++ b/manager/assets/modext/widgets/core/modx.grid.js @@ -190,7 +190,7 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { ,hasSavePermissions: false - ,showActionsMenu: true + ,showActionsMenu: null ,onStoreException: function(dp,type,act,opt,resp){ var r = Ext.decode(resp.responseText); @@ -584,29 +584,16 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { /* Record-Level Permissions Checks, for objects with specific policies */ - // ,userCanEditRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pupdate') { - // const permissions = record[permissionsProperty]; - // return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; - // } ,userCanEditRecord: function(record) { const permissions = record.json.permissions; return !Ext.isEmpty(permissions) && permissions.update === true ? true : false ; } - // ,userCanDeleteRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'premove') { - // const permissions = record[permissionsProperty]; - // // console.log('userCanDeleteRecord, permissions: ', permissions); - // return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; - // } ,userCanDeleteRecord: function(record) { const permissions = record.json.permissions; return !Ext.isEmpty(permissions) && !record.json.isProtected && permissions.delete === true ? true : false ; } - // ,userCanDuplicateRecord: function(record, permissionsProperty = 'cls', permissionsKey = 'pduplicate') { - // const permissions = record[permissionsProperty]; - // return !Ext.isEmpty(permissions) && permissions.indexOf(permissionsKey) !== -1 ? true : false ; - // } ,userCanDuplicateRecord: function(record) { const permissions = record.json.permissions; return !Ext.isEmpty(permissions) && permissions.duplicate === true ? true : false ; @@ -635,10 +622,10 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { permissions.push(modePermission); }); // console.log('setShowActionsMenu: final permissions: ', permissions); - if (permissions.length === 0 || permissions.every(permission => permission === false) === true) { - this.showActionsMenu = false; - return; - } + this.showActionsMenu = permissions.length === 0 || permissions.every(permission => permission === false) === true + ? false + : true + ; } /** @@ -924,11 +911,10 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { showActionsMenu will be true if at least one user group-level permission is granted, excluding create/new permissions (since that is not executed by our context/actions menus) */ - console.log('actionsColumnRenderer, record', record); + // console.log('actionsColumnRenderer, record', record); if (this.showActionsMenu) { - const isProtected = this.recordIsProtected(record.data[this.protectedDataIndex], this.protectedIdentifiers); - // const isProtected = record.json.isProtected; - // console.log('actionsColumnRenderer, record', record); + const isProtected = record.json.isProtected; + console.log('actionsColumnRenderer, showActionsMenu = true, record:', record); // console.log('actionsColumnRenderer, this', this); // console.log('actionsColumnRenderer, this is policy grid?', this instanceof MODx.grid.AccessPolicy); // console.log('actionsColumnRenderer, gridMenuActions', this.gridMenuActions); @@ -954,17 +940,19 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { } } } - const actions = this.getActions.apply(this, [record, rowIndex, colIndex, store]); + } + const actions = this.getActions.apply(this, arguments); + if (this.config.disableContextMenuAction !== true) { actions.push({ text: _('context_menu'), action: 'contextMenu', icon: 'gear' }); - return this._getActionsColumnTpl().apply({ - actions: actions - }); } + return this._getActionsColumnTpl().apply({ + actions: actions + }); } /** @@ -987,7 +975,7 @@ Ext.extend(MODx.grid.Grid, Ext.grid.EditorGridPanel, { return el.dom.outerHTML; } - ,getActions: function(record, rowIndex, colIndex, store) { + ,getActions: function(value, metaData, record, rowIndex, colIndex, store) { return []; } diff --git a/manager/assets/modext/widgets/system/modx.grid.context.js b/manager/assets/modext/widgets/system/modx.grid.context.js index a2e5026ad03..41ea7e56fd9 100644 --- a/manager/assets/modext/widgets/system/modx.grid.context.js +++ b/manager/assets/modext/widgets/system/modx.grid.context.js @@ -257,7 +257,7 @@ MODx.grid.Context = function(config) { ); }, beforeedit: function(e) { - if (e.record.json.key === 'mgr') { + if (e.record.json.key === 'mgr' || !this.userCanEditRecord(e.record)) { return false; } } diff --git a/manager/templates/default/css/index.css b/manager/templates/default/css/index.css index 1c50c849d37..ae4bea62e5f 100644 --- a/manager/templates/default/css/index.css +++ b/manager/templates/default/css/index.css @@ -26383,17 +26383,6 @@ textarea.x-form-field { } .x-editable-column:not(.editor-disabled) { cursor: pointer; - /* - a:hover { - &::after { - @include awesome-font; - content: '\f35d'; - margin: 0 0 0 0.5em; - border-bottom: none; - color: $colorSplash; - } - } - */ } .x-editable-column:not(.editor-disabled):hover, .x-editable-column:not(.editor-disabled):focus { color: #234368; From 9b32a404c2e27508fb989a4bde9f49a9a8a3f5ed Mon Sep 17 00:00:00 2001 From: Jim Graham Date: Thu, 25 Nov 2021 01:40:37 -0500 Subject: [PATCH 5/5] Delete index.css --- manager/templates/default/css/index.css | 28133 ---------------------- 1 file changed, 28133 deletions(-) delete mode 100644 manager/templates/default/css/index.css diff --git a/manager/templates/default/css/index.css b/manager/templates/default/css/index.css deleted file mode 100644 index ae4bea62e5f..00000000000 --- a/manager/templates/default/css/index.css +++ /dev/null @@ -1,28133 +0,0 @@ -/*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ -/* Document - ========================================================================== */ -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in - * IE on Windows Phone and in iOS. - */ -html { - line-height: 1.15; - /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; - /* 2 */ -} - -/* Sections - ========================================================================== */ -/** - * Remove the margin in all browsers (opinionated). - */ -body { - margin: 0; -} - -/** - * Add the correct display in IE 9-. - */ -article, -aside, -footer, -header, -nav, -section { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ -/** - * Add the correct display in IE 9-. - */ -figcaption, -figure { - display: block; -} - -/** - * Add the correct margin in IE 8. - */ -figure { - margin: 1em 40px; -} - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ -hr { - box-sizing: content-box; - /* 1 */ - height: 0; - /* 1 */ - overflow: visible; - /* 2 */ -} - -/** - * Add the correct display in IE. - */ -main { - display: block; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ -pre { - font-family: monospace, monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/* Links - ========================================================================== */ -/** - * 1. Remove the gray background on active links in IE 10. - * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. - */ -a { - background-color: transparent; - /* 1 */ - -webkit-text-decoration-skip: objects; - /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ -/** - * 1. Remove the bottom border in Chrome 57- and Firefox 39-. - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ -abbr[title] { - border-bottom: none; - /* 1 */ - text-decoration: underline; - /* 2 */ - text-decoration: underline dotted; - /* 2 */ -} - -/** - * Prevent the duplicate application of `bolder` by the next rule in Safari 6. - */ -b, -strong { - font-weight: inherit; -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ -code, -kbd, -samp { - font-family: monospace, monospace; - /* 1 */ - font-size: 1em; - /* 2 */ -} - -/** - * Add the correct font style in Android 4.3-. - */ -dfn { - font-style: italic; -} - -/** - * Add the correct background and color in IE 9-. - */ -mark { - background-color: #ff0; - color: #000; -} - -/** - * Add the correct font size in all browsers. - */ -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ -/** - * Add the correct display in IE 9-. - */ -audio, -video { - display: inline-block; -} - -/** - * Add the correct display in iOS 4-7. - */ -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Remove the border on images inside links in IE 10-. - */ -img { - border-style: none; -} - -/** - * Hide the overflow in IE. - */ -svg:not(:root) { - overflow: hidden; -} - -/* Forms - ========================================================================== */ -/** - * 1. Change the font styles in all browsers (opinionated). - * 2. Remove the margin in Firefox and Safari. - */ -button, -input, -optgroup, -select, -textarea { - font-family: sans-serif; - /* 1 */ - font-size: 100%; - /* 1 */ - line-height: 1.15; - /* 1 */ - margin: 0; - /* 2 */ -} - -/** - * Show the overflow in IE. - */ -button { - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ -button, -select { - /* 1 */ - text-transform: none; -} - -/** - * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` - * controls in Android 4. - * 2. Correct the inability to style clickable types in iOS and Safari. - */ -button, -html [type=button], -[type=reset], -[type=submit] { - -webkit-appearance: button; - /* 2 */ -} - -button, -[type=button], -[type=reset], -[type=submit] { - /** - * Remove the inner border and padding in Firefox. - */ - /** - * Restore the focus styles unset by the previous rule. - */ -} -button::-moz-focus-inner, -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner { - border-style: none; - padding: 0; -} -button:-moz-focusring, -[type=button]:-moz-focusring, -[type=reset]:-moz-focusring, -[type=submit]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Show the overflow in Edge. - */ -input { - overflow: visible; -} - -/** - * 1. Add the correct box sizing in IE 10-. - * 2. Remove the padding in IE 10-. - */ -[type=checkbox], -[type=radio] { - box-sizing: border-box; - /* 1 */ - padding: 0; - /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ -[type=search] { - -webkit-appearance: textfield; - /* 1 */ - outline-offset: -2px; - /* 2 */ - /** - * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. - */ -} -[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ -::-webkit-file-upload-button { - -webkit-appearance: button; - /* 1 */ - font: inherit; - /* 2 */ -} - -/** - * Correct the padding in Firefox. - */ -fieldset { - padding: 0.35em 0.75em 0.625em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ -legend { - box-sizing: border-box; - /* 1 */ - display: table; - /* 1 */ - max-width: 100%; - /* 1 */ - padding: 0; - /* 3 */ - color: inherit; - /* 2 */ - white-space: normal; - /* 1 */ -} - -/** - * 1. Add the correct display in IE 9-. - * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ -progress { - display: inline-block; - /* 1 */ - vertical-align: baseline; - /* 2 */ -} - -/** - * Remove the default vertical scrollbar in IE. - */ -textarea { - overflow: auto; -} - -/* Interactive - ========================================================================== */ -/* - * Add the correct display in Edge, IE, and Firefox. - */ -details { - display: block; -} - -/* - * Add the correct display in all browsers. - */ -summary { - display: list-item; -} - -/* - * Add the correct display in IE 9-. - */ -menu { - display: block; -} - -/* Scripting - ========================================================================== */ -/** - * Add the correct display in IE 9-. - */ -canvas { - display: inline-block; -} - -/** - * Add the correct display in IE. - */ -template { - display: none; -} - -/* Hidden - ========================================================================== */ -/** - * Add the correct display in IE 10-. - */ -[hidden] { - display: none; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa, -.fas, -.far, -.fal, -.fad, -.fab { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; -} - -.fa-lg, .fa-large { - font-size: 1.3333333333em; - line-height: 0.75em; - vertical-align: -0.0667em; -} - -.fa-xs { - font-size: 0.75em; -} - -.fa-sm { - font-size: 0.875em; -} - -.fa-1x { - font-size: 1em; -} - -.fa-2x { - font-size: 2em; -} - -.fa-3x { - font-size: 3em; -} - -.fa-4x { - font-size: 4em; -} - -.fa-5x { - font-size: 5em; -} - -.fa-6x { - font-size: 6em; -} - -.fa-7x { - font-size: 7em; -} - -.fa-8x { - font-size: 8em; -} - -.fa-9x { - font-size: 9em; -} - -.fa-10x { - font-size: 10em; -} - -.fa-fw { - text-align: center; - width: 1.25em; -} - -.fa-ul { - list-style-type: none; - margin-left: 2.5em; - padding-left: 0; -} -.fa-ul > li { - position: relative; -} - -.fa-li { - left: -2em; - position: absolute; - text-align: center; - width: 2em; - line-height: inherit; -} - -.fa-border { - border: solid 0.08em #eee; - border-radius: 0.1em; - padding: 0.2em 0.25em 0.15em; -} - -.fa-pull-left { - float: left; -} - -.fa-pull-right { - float: right; -} - -.fa.fa-pull-left, -.fas.fa-pull-left, -.far.fa-pull-left, -.fal.fa-pull-left, -.fab.fa-pull-left { - margin-right: 0.3em; -} -.fa.fa-pull-right, -.fas.fa-pull-right, -.far.fa-pull-right, -.fal.fa-pull-right, -.fab.fa-pull-right { - margin-left: 0.3em; -} - -.fa-spin, .modx-manager-search-results .loading-indicator:before { - animation: fa-spin 2s infinite linear; -} - -.fa-pulse { - animation: fa-spin 1s infinite steps(8); -} - -@keyframes fa-spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - transform: rotate(90deg); -} - -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - transform: rotate(180deg); -} - -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - transform: rotate(270deg); -} - -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - transform: scale(-1, 1); -} - -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - transform: scale(1, -1); -} - -.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - transform: scale(-1, -1); -} - -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270, -:root .fa-flip-horizontal, -:root .fa-flip-vertical, -:root .fa-flip-both { - filter: none; -} - -.fa-stack { - display: inline-block; - height: 2em; - line-height: 2em; - position: relative; - vertical-align: middle; - width: 2.5em; -} - -.fa-stack-1x, -.fa-stack-2x { - left: 0; - position: absolute; - text-align: center; - width: 100%; -} - -.fa-stack-1x { - line-height: inherit; -} - -.fa-stack-2x { - font-size: 2em; -} - -.fa-inverse { - color: #fff; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen -readers do not read off random characters that represent icons */ -.fa-500px:before { - content: "\f26e"; -} - -.fa-accessible-icon:before { - content: "\f368"; -} - -.fa-accusoft:before { - content: "\f369"; -} - -.fa-acquisitions-incorporated:before { - content: "\f6af"; -} - -.fa-ad:before { - content: "\f641"; -} - -.fa-address-book:before { - content: "\f2b9"; -} - -.fa-address-card:before { - content: "\f2bb"; -} - -.fa-adjust:before { - content: "\f042"; -} - -.fa-adn:before { - content: "\f170"; -} - -.fa-adversal:before { - content: "\f36a"; -} - -.fa-affiliatetheme:before { - content: "\f36b"; -} - -.fa-air-freshener:before { - content: "\f5d0"; -} - -.fa-airbnb:before { - content: "\f834"; -} - -.fa-algolia:before { - content: "\f36c"; -} - -.fa-align-center:before { - content: "\f037"; -} - -.fa-align-justify:before { - content: "\f039"; -} - -.fa-align-left:before { - content: "\f036"; -} - -.fa-align-right:before { - content: "\f038"; -} - -.fa-alipay:before { - content: "\f642"; -} - -.fa-allergies:before { - content: "\f461"; -} - -.fa-amazon:before { - content: "\f270"; -} - -.fa-amazon-pay:before { - content: "\f42c"; -} - -.fa-ambulance:before { - content: "\f0f9"; -} - -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; -} - -.fa-amilia:before { - content: "\f36d"; -} - -.fa-anchor:before { - content: "\f13d"; -} - -.fa-android:before { - content: "\f17b"; -} - -.fa-angellist:before { - content: "\f209"; -} - -.fa-angle-double-down:before { - content: "\f103"; -} - -.fa-angle-double-left:before { - content: "\f100"; -} - -.fa-angle-double-right:before { - content: "\f101"; -} - -.fa-angle-double-up:before { - content: "\f102"; -} - -.fa-angle-down:before { - content: "\f107"; -} - -.fa-angle-left:before { - content: "\f104"; -} - -.fa-angle-right:before { - content: "\f105"; -} - -.fa-angle-up:before { - content: "\f106"; -} - -.fa-angry:before { - content: "\f556"; -} - -.fa-angrycreative:before { - content: "\f36e"; -} - -.fa-angular:before { - content: "\f420"; -} - -.fa-ankh:before { - content: "\f644"; -} - -.fa-app-store:before { - content: "\f36f"; -} - -.fa-app-store-ios:before { - content: "\f370"; -} - -.fa-apper:before { - content: "\f371"; -} - -.fa-apple:before { - content: "\f179"; -} - -.fa-apple-alt:before { - content: "\f5d1"; -} - -.fa-apple-pay:before { - content: "\f415"; -} - -.fa-archive:before { - content: "\f187"; -} - -.fa-archway:before { - content: "\f557"; -} - -.fa-arrow-alt-circle-down:before { - content: "\f358"; -} - -.fa-arrow-alt-circle-left:before { - content: "\f359"; -} - -.fa-arrow-alt-circle-right:before { - content: "\f35a"; -} - -.fa-arrow-alt-circle-up:before { - content: "\f35b"; -} - -.fa-arrow-circle-down:before { - content: "\f0ab"; -} - -.fa-arrow-circle-left:before { - content: "\f0a8"; -} - -.fa-arrow-circle-right:before { - content: "\f0a9"; -} - -.fa-arrow-circle-up:before { - content: "\f0aa"; -} - -.fa-arrow-down:before { - content: "\f063"; -} - -.fa-arrow-left:before { - content: "\f060"; -} - -.fa-arrow-right:before { - content: "\f061"; -} - -.fa-arrow-up:before { - content: "\f062"; -} - -.fa-arrows-alt:before { - content: "\f0b2"; -} - -.fa-arrows-alt-h:before { - content: "\f337"; -} - -.fa-arrows-alt-v:before { - content: "\f338"; -} - -.fa-artstation:before { - content: "\f77a"; -} - -.fa-assistive-listening-systems:before { - content: "\f2a2"; -} - -.fa-asterisk:before { - content: "\f069"; -} - -.fa-asymmetrik:before { - content: "\f372"; -} - -.fa-at:before { - content: "\f1fa"; -} - -.fa-atlas:before { - content: "\f558"; -} - -.fa-atlassian:before { - content: "\f77b"; -} - -.fa-atom:before { - content: "\f5d2"; -} - -.fa-audible:before { - content: "\f373"; -} - -.fa-audio-description:before { - content: "\f29e"; -} - -.fa-autoprefixer:before { - content: "\f41c"; -} - -.fa-avianex:before { - content: "\f374"; -} - -.fa-aviato:before { - content: "\f421"; -} - -.fa-award:before { - content: "\f559"; -} - -.fa-aws:before { - content: "\f375"; -} - -.fa-baby:before { - content: "\f77c"; -} - -.fa-baby-carriage:before { - content: "\f77d"; -} - -.fa-backspace:before { - content: "\f55a"; -} - -.fa-backward:before { - content: "\f04a"; -} - -.fa-bacon:before { - content: "\f7e5"; -} - -.fa-bacteria:before { - content: "\e059"; -} - -.fa-bacterium:before { - content: "\e05a"; -} - -.fa-bahai:before { - content: "\f666"; -} - -.fa-balance-scale:before { - content: "\f24e"; -} - -.fa-balance-scale-left:before { - content: "\f515"; -} - -.fa-balance-scale-right:before { - content: "\f516"; -} - -.fa-ban:before { - content: "\f05e"; -} - -.fa-band-aid:before { - content: "\f462"; -} - -.fa-bandcamp:before { - content: "\f2d5"; -} - -.fa-barcode:before { - content: "\f02a"; -} - -.fa-bars:before { - content: "\f0c9"; -} - -.fa-baseball-ball:before { - content: "\f433"; -} - -.fa-basketball-ball:before { - content: "\f434"; -} - -.fa-bath:before { - content: "\f2cd"; -} - -.fa-battery-empty:before { - content: "\f244"; -} - -.fa-battery-full:before { - content: "\f240"; -} - -.fa-battery-half:before { - content: "\f242"; -} - -.fa-battery-quarter:before { - content: "\f243"; -} - -.fa-battery-three-quarters:before { - content: "\f241"; -} - -.fa-battle-net:before { - content: "\f835"; -} - -.fa-bed:before { - content: "\f236"; -} - -.fa-beer:before { - content: "\f0fc"; -} - -.fa-behance:before { - content: "\f1b4"; -} - -.fa-behance-square:before { - content: "\f1b5"; -} - -.fa-bell:before { - content: "\f0f3"; -} - -.fa-bell-slash:before { - content: "\f1f6"; -} - -.fa-bezier-curve:before { - content: "\f55b"; -} - -.fa-bible:before { - content: "\f647"; -} - -.fa-bicycle:before { - content: "\f206"; -} - -.fa-biking:before { - content: "\f84a"; -} - -.fa-bimobject:before { - content: "\f378"; -} - -.fa-binoculars:before { - content: "\f1e5"; -} - -.fa-biohazard:before { - content: "\f780"; -} - -.fa-birthday-cake:before { - content: "\f1fd"; -} - -.fa-bitbucket:before { - content: "\f171"; -} - -.fa-bitcoin:before { - content: "\f379"; -} - -.fa-bity:before { - content: "\f37a"; -} - -.fa-black-tie:before { - content: "\f27e"; -} - -.fa-blackberry:before { - content: "\f37b"; -} - -.fa-blender:before { - content: "\f517"; -} - -.fa-blender-phone:before { - content: "\f6b6"; -} - -.fa-blind:before { - content: "\f29d"; -} - -.fa-blog:before { - content: "\f781"; -} - -.fa-blogger:before { - content: "\f37c"; -} - -.fa-blogger-b:before { - content: "\f37d"; -} - -.fa-bluetooth:before { - content: "\f293"; -} - -.fa-bluetooth-b:before { - content: "\f294"; -} - -.fa-bold:before { - content: "\f032"; -} - -.fa-bolt:before { - content: "\f0e7"; -} - -.fa-bomb:before { - content: "\f1e2"; -} - -.fa-bone:before { - content: "\f5d7"; -} - -.fa-bong:before { - content: "\f55c"; -} - -.fa-book:before { - content: "\f02d"; -} - -.fa-book-dead:before { - content: "\f6b7"; -} - -.fa-book-medical:before { - content: "\f7e6"; -} - -.fa-book-open:before { - content: "\f518"; -} - -.fa-book-reader:before { - content: "\f5da"; -} - -.fa-bookmark:before { - content: "\f02e"; -} - -.fa-bootstrap:before { - content: "\f836"; -} - -.fa-border-all:before { - content: "\f84c"; -} - -.fa-border-none:before { - content: "\f850"; -} - -.fa-border-style:before { - content: "\f853"; -} - -.fa-bowling-ball:before { - content: "\f436"; -} - -.fa-box:before { - content: "\f466"; -} - -.fa-box-open:before { - content: "\f49e"; -} - -.fa-box-tissue:before { - content: "\e05b"; -} - -.fa-boxes:before { - content: "\f468"; -} - -.fa-braille:before { - content: "\f2a1"; -} - -.fa-brain:before { - content: "\f5dc"; -} - -.fa-bread-slice:before { - content: "\f7ec"; -} - -.fa-briefcase:before { - content: "\f0b1"; -} - -.fa-briefcase-medical:before { - content: "\f469"; -} - -.fa-broadcast-tower:before { - content: "\f519"; -} - -.fa-broom:before { - content: "\f51a"; -} - -.fa-brush:before { - content: "\f55d"; -} - -.fa-btc:before { - content: "\f15a"; -} - -.fa-buffer:before { - content: "\f837"; -} - -.fa-bug:before { - content: "\f188"; -} - -.fa-building:before { - content: "\f1ad"; -} - -.fa-bullhorn:before { - content: "\f0a1"; -} - -.fa-bullseye:before { - content: "\f140"; -} - -.fa-burn:before { - content: "\f46a"; -} - -.fa-buromobelexperte:before { - content: "\f37f"; -} - -.fa-bus:before { - content: "\f207"; -} - -.fa-bus-alt:before { - content: "\f55e"; -} - -.fa-business-time:before { - content: "\f64a"; -} - -.fa-buy-n-large:before { - content: "\f8a6"; -} - -.fa-buysellads:before { - content: "\f20d"; -} - -.fa-calculator:before { - content: "\f1ec"; -} - -.fa-calendar:before { - content: "\f133"; -} - -.fa-calendar-alt:before { - content: "\f073"; -} - -.fa-calendar-check:before { - content: "\f274"; -} - -.fa-calendar-day:before { - content: "\f783"; -} - -.fa-calendar-minus:before { - content: "\f272"; -} - -.fa-calendar-plus:before { - content: "\f271"; -} - -.fa-calendar-times:before { - content: "\f273"; -} - -.fa-calendar-week:before { - content: "\f784"; -} - -.fa-camera:before { - content: "\f030"; -} - -.fa-camera-retro:before { - content: "\f083"; -} - -.fa-campground:before { - content: "\f6bb"; -} - -.fa-canadian-maple-leaf:before { - content: "\f785"; -} - -.fa-candy-cane:before { - content: "\f786"; -} - -.fa-cannabis:before { - content: "\f55f"; -} - -.fa-capsules:before { - content: "\f46b"; -} - -.fa-car:before { - content: "\f1b9"; -} - -.fa-car-alt:before { - content: "\f5de"; -} - -.fa-car-battery:before { - content: "\f5df"; -} - -.fa-car-crash:before { - content: "\f5e1"; -} - -.fa-car-side:before { - content: "\f5e4"; -} - -.fa-caravan:before { - content: "\f8ff"; -} - -.fa-caret-down:before { - content: "\f0d7"; -} - -.fa-caret-left:before { - content: "\f0d9"; -} - -.fa-caret-right:before { - content: "\f0da"; -} - -.fa-caret-square-down:before { - content: "\f150"; -} - -.fa-caret-square-left:before { - content: "\f191"; -} - -.fa-caret-square-right:before { - content: "\f152"; -} - -.fa-caret-square-up:before { - content: "\f151"; -} - -.fa-caret-up:before { - content: "\f0d8"; -} - -.fa-carrot:before { - content: "\f787"; -} - -.fa-cart-arrow-down:before { - content: "\f218"; -} - -.fa-cart-plus:before { - content: "\f217"; -} - -.fa-cash-register:before { - content: "\f788"; -} - -.fa-cat:before { - content: "\f6be"; -} - -.fa-cc-amazon-pay:before { - content: "\f42d"; -} - -.fa-cc-amex:before { - content: "\f1f3"; -} - -.fa-cc-apple-pay:before { - content: "\f416"; -} - -.fa-cc-diners-club:before { - content: "\f24c"; -} - -.fa-cc-discover:before { - content: "\f1f2"; -} - -.fa-cc-jcb:before { - content: "\f24b"; -} - -.fa-cc-mastercard:before { - content: "\f1f1"; -} - -.fa-cc-paypal:before { - content: "\f1f4"; -} - -.fa-cc-stripe:before { - content: "\f1f5"; -} - -.fa-cc-visa:before { - content: "\f1f0"; -} - -.fa-centercode:before { - content: "\f380"; -} - -.fa-centos:before { - content: "\f789"; -} - -.fa-certificate:before { - content: "\f0a3"; -} - -.fa-chair:before { - content: "\f6c0"; -} - -.fa-chalkboard:before { - content: "\f51b"; -} - -.fa-chalkboard-teacher:before { - content: "\f51c"; -} - -.fa-charging-station:before { - content: "\f5e7"; -} - -.fa-chart-area:before { - content: "\f1fe"; -} - -.fa-chart-bar:before { - content: "\f080"; -} - -.fa-chart-line:before { - content: "\f201"; -} - -.fa-chart-pie:before { - content: "\f200"; -} - -.fa-check:before { - content: "\f00c"; -} - -.fa-check-circle:before { - content: "\f058"; -} - -.fa-check-double:before { - content: "\f560"; -} - -.fa-check-square:before { - content: "\f14a"; -} - -.fa-cheese:before { - content: "\f7ef"; -} - -.fa-chess:before { - content: "\f439"; -} - -.fa-chess-bishop:before { - content: "\f43a"; -} - -.fa-chess-board:before { - content: "\f43c"; -} - -.fa-chess-king:before { - content: "\f43f"; -} - -.fa-chess-knight:before { - content: "\f441"; -} - -.fa-chess-pawn:before { - content: "\f443"; -} - -.fa-chess-queen:before { - content: "\f445"; -} - -.fa-chess-rook:before { - content: "\f447"; -} - -.fa-chevron-circle-down:before { - content: "\f13a"; -} - -.fa-chevron-circle-left:before { - content: "\f137"; -} - -.fa-chevron-circle-right:before { - content: "\f138"; -} - -.fa-chevron-circle-up:before { - content: "\f139"; -} - -.fa-chevron-down:before { - content: "\f078"; -} - -.fa-chevron-left:before { - content: "\f053"; -} - -.fa-chevron-right:before { - content: "\f054"; -} - -.fa-chevron-up:before { - content: "\f077"; -} - -.fa-child:before { - content: "\f1ae"; -} - -.fa-chrome:before { - content: "\f268"; -} - -.fa-chromecast:before { - content: "\f838"; -} - -.fa-church:before { - content: "\f51d"; -} - -.fa-circle:before { - content: "\f111"; -} - -.fa-circle-notch:before { - content: "\f1ce"; -} - -.fa-city:before { - content: "\f64f"; -} - -.fa-clinic-medical:before { - content: "\f7f2"; -} - -.fa-clipboard:before { - content: "\f328"; -} - -.fa-clipboard-check:before { - content: "\f46c"; -} - -.fa-clipboard-list:before { - content: "\f46d"; -} - -.fa-clock:before { - content: "\f017"; -} - -.fa-clone:before { - content: "\f24d"; -} - -.fa-closed-captioning:before { - content: "\f20a"; -} - -.fa-cloud:before { - content: "\f0c2"; -} - -.fa-cloud-download-alt:before { - content: "\f381"; -} - -.fa-cloud-meatball:before { - content: "\f73b"; -} - -.fa-cloud-moon:before { - content: "\f6c3"; -} - -.fa-cloud-moon-rain:before { - content: "\f73c"; -} - -.fa-cloud-rain:before { - content: "\f73d"; -} - -.fa-cloud-showers-heavy:before { - content: "\f740"; -} - -.fa-cloud-sun:before { - content: "\f6c4"; -} - -.fa-cloud-sun-rain:before { - content: "\f743"; -} - -.fa-cloud-upload-alt:before { - content: "\f382"; -} - -.fa-cloudflare:before { - content: "\e07d"; -} - -.fa-cloudscale:before { - content: "\f383"; -} - -.fa-cloudsmith:before { - content: "\f384"; -} - -.fa-cloudversify:before { - content: "\f385"; -} - -.fa-cocktail:before { - content: "\f561"; -} - -.fa-code:before { - content: "\f121"; -} - -.fa-code-branch:before { - content: "\f126"; -} - -.fa-codepen:before { - content: "\f1cb"; -} - -.fa-codiepie:before { - content: "\f284"; -} - -.fa-coffee:before { - content: "\f0f4"; -} - -.fa-cog:before { - content: "\f013"; -} - -.fa-cogs:before { - content: "\f085"; -} - -.fa-coins:before { - content: "\f51e"; -} - -.fa-columns:before { - content: "\f0db"; -} - -.fa-comment:before { - content: "\f075"; -} - -.fa-comment-alt:before { - content: "\f27a"; -} - -.fa-comment-dollar:before { - content: "\f651"; -} - -.fa-comment-dots:before { - content: "\f4ad"; -} - -.fa-comment-medical:before { - content: "\f7f5"; -} - -.fa-comment-slash:before { - content: "\f4b3"; -} - -.fa-comments:before { - content: "\f086"; -} - -.fa-comments-dollar:before { - content: "\f653"; -} - -.fa-compact-disc:before { - content: "\f51f"; -} - -.fa-compass:before { - content: "\f14e"; -} - -.fa-compress:before { - content: "\f066"; -} - -.fa-compress-alt:before { - content: "\f422"; -} - -.fa-compress-arrows-alt:before { - content: "\f78c"; -} - -.fa-concierge-bell:before { - content: "\f562"; -} - -.fa-confluence:before { - content: "\f78d"; -} - -.fa-connectdevelop:before { - content: "\f20e"; -} - -.fa-contao:before { - content: "\f26d"; -} - -.fa-cookie:before { - content: "\f563"; -} - -.fa-cookie-bite:before { - content: "\f564"; -} - -.fa-copy:before { - content: "\f0c5"; -} - -.fa-copyright:before { - content: "\f1f9"; -} - -.fa-cotton-bureau:before { - content: "\f89e"; -} - -.fa-couch:before { - content: "\f4b8"; -} - -.fa-cpanel:before { - content: "\f388"; -} - -.fa-creative-commons:before { - content: "\f25e"; -} - -.fa-creative-commons-by:before { - content: "\f4e7"; -} - -.fa-creative-commons-nc:before { - content: "\f4e8"; -} - -.fa-creative-commons-nc-eu:before { - content: "\f4e9"; -} - -.fa-creative-commons-nc-jp:before { - content: "\f4ea"; -} - -.fa-creative-commons-nd:before { - content: "\f4eb"; -} - -.fa-creative-commons-pd:before { - content: "\f4ec"; -} - -.fa-creative-commons-pd-alt:before { - content: "\f4ed"; -} - -.fa-creative-commons-remix:before { - content: "\f4ee"; -} - -.fa-creative-commons-sa:before { - content: "\f4ef"; -} - -.fa-creative-commons-sampling:before { - content: "\f4f0"; -} - -.fa-creative-commons-sampling-plus:before { - content: "\f4f1"; -} - -.fa-creative-commons-share:before { - content: "\f4f2"; -} - -.fa-creative-commons-zero:before { - content: "\f4f3"; -} - -.fa-credit-card:before { - content: "\f09d"; -} - -.fa-critical-role:before { - content: "\f6c9"; -} - -.fa-crop:before { - content: "\f125"; -} - -.fa-crop-alt:before { - content: "\f565"; -} - -.fa-cross:before { - content: "\f654"; -} - -.fa-crosshairs:before { - content: "\f05b"; -} - -.fa-crow:before { - content: "\f520"; -} - -.fa-crown:before { - content: "\f521"; -} - -.fa-crutch:before { - content: "\f7f7"; -} - -.fa-css3:before { - content: "\f13c"; -} - -.fa-css3-alt:before { - content: "\f38b"; -} - -.fa-cube:before { - content: "\f1b2"; -} - -.fa-cubes:before { - content: "\f1b3"; -} - -.fa-cut:before { - content: "\f0c4"; -} - -.fa-cuttlefish:before { - content: "\f38c"; -} - -.fa-d-and-d:before { - content: "\f38d"; -} - -.fa-d-and-d-beyond:before { - content: "\f6ca"; -} - -.fa-dailymotion:before { - content: "\e052"; -} - -.fa-dashcube:before { - content: "\f210"; -} - -.fa-database:before { - content: "\f1c0"; -} - -.fa-deaf:before { - content: "\f2a4"; -} - -.fa-deezer:before { - content: "\e077"; -} - -.fa-delicious:before { - content: "\f1a5"; -} - -.fa-democrat:before { - content: "\f747"; -} - -.fa-deploydog:before { - content: "\f38e"; -} - -.fa-deskpro:before { - content: "\f38f"; -} - -.fa-desktop:before { - content: "\f108"; -} - -.fa-dev:before { - content: "\f6cc"; -} - -.fa-deviantart:before { - content: "\f1bd"; -} - -.fa-dharmachakra:before { - content: "\f655"; -} - -.fa-dhl:before { - content: "\f790"; -} - -.fa-diagnoses:before { - content: "\f470"; -} - -.fa-diaspora:before { - content: "\f791"; -} - -.fa-dice:before { - content: "\f522"; -} - -.fa-dice-d20:before { - content: "\f6cf"; -} - -.fa-dice-d6:before { - content: "\f6d1"; -} - -.fa-dice-five:before { - content: "\f523"; -} - -.fa-dice-four:before { - content: "\f524"; -} - -.fa-dice-one:before { - content: "\f525"; -} - -.fa-dice-six:before { - content: "\f526"; -} - -.fa-dice-three:before { - content: "\f527"; -} - -.fa-dice-two:before { - content: "\f528"; -} - -.fa-digg:before { - content: "\f1a6"; -} - -.fa-digital-ocean:before { - content: "\f391"; -} - -.fa-digital-tachograph:before { - content: "\f566"; -} - -.fa-directions:before { - content: "\f5eb"; -} - -.fa-discord:before { - content: "\f392"; -} - -.fa-discourse:before { - content: "\f393"; -} - -.fa-disease:before { - content: "\f7fa"; -} - -.fa-divide:before { - content: "\f529"; -} - -.fa-dizzy:before { - content: "\f567"; -} - -.fa-dna:before { - content: "\f471"; -} - -.fa-dochub:before { - content: "\f394"; -} - -.fa-docker:before { - content: "\f395"; -} - -.fa-dog:before { - content: "\f6d3"; -} - -.fa-dollar-sign:before { - content: "\f155"; -} - -.fa-dolly:before { - content: "\f472"; -} - -.fa-dolly-flatbed:before { - content: "\f474"; -} - -.fa-donate:before { - content: "\f4b9"; -} - -.fa-door-closed:before { - content: "\f52a"; -} - -.fa-door-open:before { - content: "\f52b"; -} - -.fa-dot-circle:before { - content: "\f192"; -} - -.fa-dove:before { - content: "\f4ba"; -} - -.fa-download:before { - content: "\f019"; -} - -.fa-draft2digital:before { - content: "\f396"; -} - -.fa-drafting-compass:before { - content: "\f568"; -} - -.fa-dragon:before { - content: "\f6d5"; -} - -.fa-draw-polygon:before { - content: "\f5ee"; -} - -.fa-dribbble:before { - content: "\f17d"; -} - -.fa-dribbble-square:before { - content: "\f397"; -} - -.fa-dropbox:before { - content: "\f16b"; -} - -.fa-drum:before { - content: "\f569"; -} - -.fa-drum-steelpan:before { - content: "\f56a"; -} - -.fa-drumstick-bite:before { - content: "\f6d7"; -} - -.fa-drupal:before { - content: "\f1a9"; -} - -.fa-dumbbell:before { - content: "\f44b"; -} - -.fa-dumpster:before { - content: "\f793"; -} - -.fa-dumpster-fire:before { - content: "\f794"; -} - -.fa-dungeon:before { - content: "\f6d9"; -} - -.fa-dyalog:before { - content: "\f399"; -} - -.fa-earlybirds:before { - content: "\f39a"; -} - -.fa-ebay:before { - content: "\f4f4"; -} - -.fa-edge:before { - content: "\f282"; -} - -.fa-edge-legacy:before { - content: "\e078"; -} - -.fa-edit:before { - content: "\f044"; -} - -.fa-egg:before { - content: "\f7fb"; -} - -.fa-eject:before { - content: "\f052"; -} - -.fa-elementor:before { - content: "\f430"; -} - -.fa-ellipsis-h:before { - content: "\f141"; -} - -.fa-ellipsis-v:before { - content: "\f142"; -} - -.fa-ello:before { - content: "\f5f1"; -} - -.fa-ember:before { - content: "\f423"; -} - -.fa-empire:before { - content: "\f1d1"; -} - -.fa-envelope:before { - content: "\f0e0"; -} - -.fa-envelope-open:before { - content: "\f2b6"; -} - -.fa-envelope-open-text:before { - content: "\f658"; -} - -.fa-envelope-square:before { - content: "\f199"; -} - -.fa-envira:before { - content: "\f299"; -} - -.fa-equals:before { - content: "\f52c"; -} - -.fa-eraser:before { - content: "\f12d"; -} - -.fa-erlang:before { - content: "\f39d"; -} - -.fa-ethereum:before { - content: "\f42e"; -} - -.fa-ethernet:before { - content: "\f796"; -} - -.fa-etsy:before { - content: "\f2d7"; -} - -.fa-euro-sign:before { - content: "\f153"; -} - -.fa-evernote:before { - content: "\f839"; -} - -.fa-exchange-alt:before { - content: "\f362"; -} - -.fa-exclamation:before { - content: "\f12a"; -} - -.fa-exclamation-circle:before { - content: "\f06a"; -} - -.fa-exclamation-triangle:before { - content: "\f071"; -} - -.fa-expand:before { - content: "\f065"; -} - -.fa-expand-alt:before { - content: "\f424"; -} - -.fa-expand-arrows-alt:before { - content: "\f31e"; -} - -.fa-expeditedssl:before { - content: "\f23e"; -} - -.fa-external-link-alt:before { - content: "\f35d"; -} - -.fa-external-link-square-alt:before { - content: "\f360"; -} - -.fa-eye:before { - content: "\f06e"; -} - -.fa-eye-dropper:before { - content: "\f1fb"; -} - -.fa-eye-slash:before { - content: "\f070"; -} - -.fa-facebook:before { - content: "\f09a"; -} - -.fa-facebook-f:before { - content: "\f39e"; -} - -.fa-facebook-messenger:before { - content: "\f39f"; -} - -.fa-facebook-square:before { - content: "\f082"; -} - -.fa-fan:before { - content: "\f863"; -} - -.fa-fantasy-flight-games:before { - content: "\f6dc"; -} - -.fa-fast-backward:before { - content: "\f049"; -} - -.fa-fast-forward:before { - content: "\f050"; -} - -.fa-faucet:before { - content: "\e005"; -} - -.fa-fax:before { - content: "\f1ac"; -} - -.fa-feather:before { - content: "\f52d"; -} - -.fa-feather-alt:before { - content: "\f56b"; -} - -.fa-fedex:before { - content: "\f797"; -} - -.fa-fedora:before { - content: "\f798"; -} - -.fa-female:before { - content: "\f182"; -} - -.fa-fighter-jet:before { - content: "\f0fb"; -} - -.fa-figma:before { - content: "\f799"; -} - -.fa-file:before { - content: "\f15b"; -} - -.fa-file-alt:before { - content: "\f15c"; -} - -.fa-file-archive:before { - content: "\f1c6"; -} - -.fa-file-audio:before { - content: "\f1c7"; -} - -.fa-file-code:before { - content: "\f1c9"; -} - -.fa-file-contract:before { - content: "\f56c"; -} - -.fa-file-csv:before { - content: "\f6dd"; -} - -.fa-file-download:before { - content: "\f56d"; -} - -.fa-file-excel:before { - content: "\f1c3"; -} - -.fa-file-export:before { - content: "\f56e"; -} - -.fa-file-image:before { - content: "\f1c5"; -} - -.fa-file-import:before { - content: "\f56f"; -} - -.fa-file-invoice:before { - content: "\f570"; -} - -.fa-file-invoice-dollar:before { - content: "\f571"; -} - -.fa-file-medical:before { - content: "\f477"; -} - -.fa-file-medical-alt:before { - content: "\f478"; -} - -.fa-file-pdf:before { - content: "\f1c1"; -} - -.fa-file-powerpoint:before { - content: "\f1c4"; -} - -.fa-file-prescription:before { - content: "\f572"; -} - -.fa-file-signature:before { - content: "\f573"; -} - -.fa-file-upload:before { - content: "\f574"; -} - -.fa-file-video:before { - content: "\f1c8"; -} - -.fa-file-word:before { - content: "\f1c2"; -} - -.fa-fill:before { - content: "\f575"; -} - -.fa-fill-drip:before { - content: "\f576"; -} - -.fa-film:before { - content: "\f008"; -} - -.fa-filter:before { - content: "\f0b0"; -} - -.fa-fingerprint:before { - content: "\f577"; -} - -.fa-fire:before { - content: "\f06d"; -} - -.fa-fire-alt:before { - content: "\f7e4"; -} - -.fa-fire-extinguisher:before { - content: "\f134"; -} - -.fa-firefox:before { - content: "\f269"; -} - -.fa-firefox-browser:before { - content: "\e007"; -} - -.fa-first-aid:before { - content: "\f479"; -} - -.fa-first-order:before { - content: "\f2b0"; -} - -.fa-first-order-alt:before { - content: "\f50a"; -} - -.fa-firstdraft:before { - content: "\f3a1"; -} - -.fa-fish:before { - content: "\f578"; -} - -.fa-fist-raised:before { - content: "\f6de"; -} - -.fa-flag:before { - content: "\f024"; -} - -.fa-flag-checkered:before { - content: "\f11e"; -} - -.fa-flag-usa:before { - content: "\f74d"; -} - -.fa-flask:before { - content: "\f0c3"; -} - -.fa-flickr:before { - content: "\f16e"; -} - -.fa-flipboard:before { - content: "\f44d"; -} - -.fa-flushed:before { - content: "\f579"; -} - -.fa-fly:before { - content: "\f417"; -} - -.fa-folder:before { - content: "\f07b"; -} - -.fa-folder-minus:before { - content: "\f65d"; -} - -.fa-folder-open:before { - content: "\f07c"; -} - -.fa-folder-plus:before { - content: "\f65e"; -} - -.fa-font:before { - content: "\f031"; -} - -.fa-font-awesome:before { - content: "\f2b4"; -} - -.fa-font-awesome-alt:before { - content: "\f35c"; -} - -.fa-font-awesome-flag:before { - content: "\f425"; -} - -.fa-font-awesome-logo-full:before { - content: "\f4e6"; -} - -.fa-fonticons:before { - content: "\f280"; -} - -.fa-fonticons-fi:before { - content: "\f3a2"; -} - -.fa-football-ball:before { - content: "\f44e"; -} - -.fa-fort-awesome:before { - content: "\f286"; -} - -.fa-fort-awesome-alt:before { - content: "\f3a3"; -} - -.fa-forumbee:before { - content: "\f211"; -} - -.fa-forward:before { - content: "\f04e"; -} - -.fa-foursquare:before { - content: "\f180"; -} - -.fa-free-code-camp:before { - content: "\f2c5"; -} - -.fa-freebsd:before { - content: "\f3a4"; -} - -.fa-frog:before { - content: "\f52e"; -} - -.fa-frown:before { - content: "\f119"; -} - -.fa-frown-open:before { - content: "\f57a"; -} - -.fa-fulcrum:before { - content: "\f50b"; -} - -.fa-funnel-dollar:before { - content: "\f662"; -} - -.fa-futbol:before { - content: "\f1e3"; -} - -.fa-galactic-republic:before { - content: "\f50c"; -} - -.fa-galactic-senate:before { - content: "\f50d"; -} - -.fa-gamepad:before { - content: "\f11b"; -} - -.fa-gas-pump:before { - content: "\f52f"; -} - -.fa-gavel:before { - content: "\f0e3"; -} - -.fa-gem:before { - content: "\f3a5"; -} - -.fa-genderless:before { - content: "\f22d"; -} - -.fa-get-pocket:before { - content: "\f265"; -} - -.fa-gg:before { - content: "\f260"; -} - -.fa-gg-circle:before { - content: "\f261"; -} - -.fa-ghost:before { - content: "\f6e2"; -} - -.fa-gift:before { - content: "\f06b"; -} - -.fa-gifts:before { - content: "\f79c"; -} - -.fa-git:before { - content: "\f1d3"; -} - -.fa-git-alt:before { - content: "\f841"; -} - -.fa-git-square:before { - content: "\f1d2"; -} - -.fa-github:before { - content: "\f09b"; -} - -.fa-github-alt:before { - content: "\f113"; -} - -.fa-github-square:before { - content: "\f092"; -} - -.fa-gitkraken:before { - content: "\f3a6"; -} - -.fa-gitlab:before { - content: "\f296"; -} - -.fa-gitter:before { - content: "\f426"; -} - -.fa-glass-cheers:before { - content: "\f79f"; -} - -.fa-glass-martini:before { - content: "\f000"; -} - -.fa-glass-martini-alt:before { - content: "\f57b"; -} - -.fa-glass-whiskey:before { - content: "\f7a0"; -} - -.fa-glasses:before { - content: "\f530"; -} - -.fa-glide:before { - content: "\f2a5"; -} - -.fa-glide-g:before { - content: "\f2a6"; -} - -.fa-globe:before { - content: "\f0ac"; -} - -.fa-globe-africa:before { - content: "\f57c"; -} - -.fa-globe-americas:before { - content: "\f57d"; -} - -.fa-globe-asia:before { - content: "\f57e"; -} - -.fa-globe-europe:before { - content: "\f7a2"; -} - -.fa-gofore:before { - content: "\f3a7"; -} - -.fa-golf-ball:before { - content: "\f450"; -} - -.fa-goodreads:before { - content: "\f3a8"; -} - -.fa-goodreads-g:before { - content: "\f3a9"; -} - -.fa-google:before { - content: "\f1a0"; -} - -.fa-google-drive:before { - content: "\f3aa"; -} - -.fa-google-pay:before { - content: "\e079"; -} - -.fa-google-play:before { - content: "\f3ab"; -} - -.fa-google-plus:before { - content: "\f2b3"; -} - -.fa-google-plus-g:before { - content: "\f0d5"; -} - -.fa-google-plus-square:before { - content: "\f0d4"; -} - -.fa-google-wallet:before { - content: "\f1ee"; -} - -.fa-gopuram:before { - content: "\f664"; -} - -.fa-graduation-cap:before { - content: "\f19d"; -} - -.fa-gratipay:before { - content: "\f184"; -} - -.fa-grav:before { - content: "\f2d6"; -} - -.fa-greater-than:before { - content: "\f531"; -} - -.fa-greater-than-equal:before { - content: "\f532"; -} - -.fa-grimace:before { - content: "\f57f"; -} - -.fa-grin:before { - content: "\f580"; -} - -.fa-grin-alt:before { - content: "\f581"; -} - -.fa-grin-beam:before { - content: "\f582"; -} - -.fa-grin-beam-sweat:before { - content: "\f583"; -} - -.fa-grin-hearts:before { - content: "\f584"; -} - -.fa-grin-squint:before { - content: "\f585"; -} - -.fa-grin-squint-tears:before { - content: "\f586"; -} - -.fa-grin-stars:before { - content: "\f587"; -} - -.fa-grin-tears:before { - content: "\f588"; -} - -.fa-grin-tongue:before { - content: "\f589"; -} - -.fa-grin-tongue-squint:before { - content: "\f58a"; -} - -.fa-grin-tongue-wink:before { - content: "\f58b"; -} - -.fa-grin-wink:before { - content: "\f58c"; -} - -.fa-grip-horizontal:before { - content: "\f58d"; -} - -.fa-grip-lines:before { - content: "\f7a4"; -} - -.fa-grip-lines-vertical:before { - content: "\f7a5"; -} - -.fa-grip-vertical:before { - content: "\f58e"; -} - -.fa-gripfire:before { - content: "\f3ac"; -} - -.fa-grunt:before { - content: "\f3ad"; -} - -.fa-guilded:before { - content: "\e07e"; -} - -.fa-guitar:before { - content: "\f7a6"; -} - -.fa-gulp:before { - content: "\f3ae"; -} - -.fa-h-square:before { - content: "\f0fd"; -} - -.fa-hacker-news:before { - content: "\f1d4"; -} - -.fa-hacker-news-square:before { - content: "\f3af"; -} - -.fa-hackerrank:before { - content: "\f5f7"; -} - -.fa-hamburger:before { - content: "\f805"; -} - -.fa-hammer:before { - content: "\f6e3"; -} - -.fa-hamsa:before { - content: "\f665"; -} - -.fa-hand-holding:before { - content: "\f4bd"; -} - -.fa-hand-holding-heart:before { - content: "\f4be"; -} - -.fa-hand-holding-medical:before { - content: "\e05c"; -} - -.fa-hand-holding-usd:before { - content: "\f4c0"; -} - -.fa-hand-holding-water:before { - content: "\f4c1"; -} - -.fa-hand-lizard:before { - content: "\f258"; -} - -.fa-hand-middle-finger:before { - content: "\f806"; -} - -.fa-hand-paper:before { - content: "\f256"; -} - -.fa-hand-peace:before { - content: "\f25b"; -} - -.fa-hand-point-down:before { - content: "\f0a7"; -} - -.fa-hand-point-left:before { - content: "\f0a5"; -} - -.fa-hand-point-right:before { - content: "\f0a4"; -} - -.fa-hand-point-up:before { - content: "\f0a6"; -} - -.fa-hand-pointer:before { - content: "\f25a"; -} - -.fa-hand-rock:before { - content: "\f255"; -} - -.fa-hand-scissors:before { - content: "\f257"; -} - -.fa-hand-sparkles:before { - content: "\e05d"; -} - -.fa-hand-spock:before { - content: "\f259"; -} - -.fa-hands:before { - content: "\f4c2"; -} - -.fa-hands-helping:before { - content: "\f4c4"; -} - -.fa-hands-wash:before { - content: "\e05e"; -} - -.fa-handshake:before { - content: "\f2b5"; -} - -.fa-handshake-alt-slash:before { - content: "\e05f"; -} - -.fa-handshake-slash:before { - content: "\e060"; -} - -.fa-hanukiah:before { - content: "\f6e6"; -} - -.fa-hard-hat:before { - content: "\f807"; -} - -.fa-hashtag:before { - content: "\f292"; -} - -.fa-hat-cowboy:before { - content: "\f8c0"; -} - -.fa-hat-cowboy-side:before { - content: "\f8c1"; -} - -.fa-hat-wizard:before { - content: "\f6e8"; -} - -.fa-hdd:before { - content: "\f0a0"; -} - -.fa-head-side-cough:before { - content: "\e061"; -} - -.fa-head-side-cough-slash:before { - content: "\e062"; -} - -.fa-head-side-mask:before { - content: "\e063"; -} - -.fa-head-side-virus:before { - content: "\e064"; -} - -.fa-heading:before { - content: "\f1dc"; -} - -.fa-headphones:before { - content: "\f025"; -} - -.fa-headphones-alt:before { - content: "\f58f"; -} - -.fa-headset:before { - content: "\f590"; -} - -.fa-heart:before { - content: "\f004"; -} - -.fa-heart-broken:before { - content: "\f7a9"; -} - -.fa-heartbeat:before { - content: "\f21e"; -} - -.fa-helicopter:before { - content: "\f533"; -} - -.fa-highlighter:before { - content: "\f591"; -} - -.fa-hiking:before { - content: "\f6ec"; -} - -.fa-hippo:before { - content: "\f6ed"; -} - -.fa-hips:before { - content: "\f452"; -} - -.fa-hire-a-helper:before { - content: "\f3b0"; -} - -.fa-history:before { - content: "\f1da"; -} - -.fa-hive:before { - content: "\e07f"; -} - -.fa-hockey-puck:before { - content: "\f453"; -} - -.fa-holly-berry:before { - content: "\f7aa"; -} - -.fa-home:before { - content: "\f015"; -} - -.fa-hooli:before { - content: "\f427"; -} - -.fa-hornbill:before { - content: "\f592"; -} - -.fa-horse:before { - content: "\f6f0"; -} - -.fa-horse-head:before { - content: "\f7ab"; -} - -.fa-hospital:before { - content: "\f0f8"; -} - -.fa-hospital-alt:before { - content: "\f47d"; -} - -.fa-hospital-symbol:before { - content: "\f47e"; -} - -.fa-hospital-user:before { - content: "\f80d"; -} - -.fa-hot-tub:before { - content: "\f593"; -} - -.fa-hotdog:before { - content: "\f80f"; -} - -.fa-hotel:before { - content: "\f594"; -} - -.fa-hotjar:before { - content: "\f3b1"; -} - -.fa-hourglass:before { - content: "\f254"; -} - -.fa-hourglass-end:before { - content: "\f253"; -} - -.fa-hourglass-half:before { - content: "\f252"; -} - -.fa-hourglass-start:before { - content: "\f251"; -} - -.fa-house-damage:before { - content: "\f6f1"; -} - -.fa-house-user:before { - content: "\e065"; -} - -.fa-houzz:before { - content: "\f27c"; -} - -.fa-hryvnia:before { - content: "\f6f2"; -} - -.fa-html5:before { - content: "\f13b"; -} - -.fa-hubspot:before { - content: "\f3b2"; -} - -.fa-i-cursor:before { - content: "\f246"; -} - -.fa-ice-cream:before { - content: "\f810"; -} - -.fa-icicles:before { - content: "\f7ad"; -} - -.fa-icons:before { - content: "\f86d"; -} - -.fa-id-badge:before { - content: "\f2c1"; -} - -.fa-id-card:before { - content: "\f2c2"; -} - -.fa-id-card-alt:before { - content: "\f47f"; -} - -.fa-ideal:before { - content: "\e013"; -} - -.fa-igloo:before { - content: "\f7ae"; -} - -.fa-image:before { - content: "\f03e"; -} - -.fa-images:before { - content: "\f302"; -} - -.fa-imdb:before { - content: "\f2d8"; -} - -.fa-inbox:before { - content: "\f01c"; -} - -.fa-indent:before { - content: "\f03c"; -} - -.fa-industry:before { - content: "\f275"; -} - -.fa-infinity:before { - content: "\f534"; -} - -.fa-info:before { - content: "\f129"; -} - -.fa-info-circle:before { - content: "\f05a"; -} - -.fa-innosoft:before { - content: "\e080"; -} - -.fa-instagram:before { - content: "\f16d"; -} - -.fa-instagram-square:before { - content: "\e055"; -} - -.fa-instalod:before { - content: "\e081"; -} - -.fa-intercom:before { - content: "\f7af"; -} - -.fa-internet-explorer:before { - content: "\f26b"; -} - -.fa-invision:before { - content: "\f7b0"; -} - -.fa-ioxhost:before { - content: "\f208"; -} - -.fa-italic:before { - content: "\f033"; -} - -.fa-itch-io:before { - content: "\f83a"; -} - -.fa-itunes:before { - content: "\f3b4"; -} - -.fa-itunes-note:before { - content: "\f3b5"; -} - -.fa-java:before { - content: "\f4e4"; -} - -.fa-jedi:before { - content: "\f669"; -} - -.fa-jedi-order:before { - content: "\f50e"; -} - -.fa-jenkins:before { - content: "\f3b6"; -} - -.fa-jira:before { - content: "\f7b1"; -} - -.fa-joget:before { - content: "\f3b7"; -} - -.fa-joint:before { - content: "\f595"; -} - -.fa-joomla:before { - content: "\f1aa"; -} - -.fa-journal-whills:before { - content: "\f66a"; -} - -.fa-js:before { - content: "\f3b8"; -} - -.fa-js-square:before { - content: "\f3b9"; -} - -.fa-jsfiddle:before { - content: "\f1cc"; -} - -.fa-kaaba:before { - content: "\f66b"; -} - -.fa-kaggle:before { - content: "\f5fa"; -} - -.fa-key:before { - content: "\f084"; -} - -.fa-keybase:before { - content: "\f4f5"; -} - -.fa-keyboard:before { - content: "\f11c"; -} - -.fa-keycdn:before { - content: "\f3ba"; -} - -.fa-khanda:before { - content: "\f66d"; -} - -.fa-kickstarter:before { - content: "\f3bb"; -} - -.fa-kickstarter-k:before { - content: "\f3bc"; -} - -.fa-kiss:before { - content: "\f596"; -} - -.fa-kiss-beam:before { - content: "\f597"; -} - -.fa-kiss-wink-heart:before { - content: "\f598"; -} - -.fa-kiwi-bird:before { - content: "\f535"; -} - -.fa-korvue:before { - content: "\f42f"; -} - -.fa-landmark:before { - content: "\f66f"; -} - -.fa-language:before { - content: "\f1ab"; -} - -.fa-laptop:before { - content: "\f109"; -} - -.fa-laptop-code:before { - content: "\f5fc"; -} - -.fa-laptop-house:before { - content: "\e066"; -} - -.fa-laptop-medical:before { - content: "\f812"; -} - -.fa-laravel:before { - content: "\f3bd"; -} - -.fa-lastfm:before { - content: "\f202"; -} - -.fa-lastfm-square:before { - content: "\f203"; -} - -.fa-laugh:before { - content: "\f599"; -} - -.fa-laugh-beam:before { - content: "\f59a"; -} - -.fa-laugh-squint:before { - content: "\f59b"; -} - -.fa-laugh-wink:before { - content: "\f59c"; -} - -.fa-layer-group:before { - content: "\f5fd"; -} - -.fa-leaf:before { - content: "\f06c"; -} - -.fa-leanpub:before { - content: "\f212"; -} - -.fa-lemon:before { - content: "\f094"; -} - -.fa-less:before { - content: "\f41d"; -} - -.fa-less-than:before { - content: "\f536"; -} - -.fa-less-than-equal:before { - content: "\f537"; -} - -.fa-level-down-alt:before { - content: "\f3be"; -} - -.fa-level-up-alt:before { - content: "\f3bf"; -} - -.fa-life-ring:before { - content: "\f1cd"; -} - -.fa-lightbulb:before { - content: "\f0eb"; -} - -.fa-line:before { - content: "\f3c0"; -} - -.fa-link:before { - content: "\f0c1"; -} - -.fa-linkedin:before { - content: "\f08c"; -} - -.fa-linkedin-in:before { - content: "\f0e1"; -} - -.fa-linode:before { - content: "\f2b8"; -} - -.fa-linux:before { - content: "\f17c"; -} - -.fa-lira-sign:before { - content: "\f195"; -} - -.fa-list:before { - content: "\f03a"; -} - -.fa-list-alt:before { - content: "\f022"; -} - -.fa-list-ol:before { - content: "\f0cb"; -} - -.fa-list-ul:before { - content: "\f0ca"; -} - -.fa-location-arrow:before { - content: "\f124"; -} - -.fa-lock:before { - content: "\f023"; -} - -.fa-lock-open:before { - content: "\f3c1"; -} - -.fa-long-arrow-alt-down:before { - content: "\f309"; -} - -.fa-long-arrow-alt-left:before { - content: "\f30a"; -} - -.fa-long-arrow-alt-right:before { - content: "\f30b"; -} - -.fa-long-arrow-alt-up:before { - content: "\f30c"; -} - -.fa-low-vision:before { - content: "\f2a8"; -} - -.fa-luggage-cart:before { - content: "\f59d"; -} - -.fa-lungs:before { - content: "\f604"; -} - -.fa-lungs-virus:before { - content: "\e067"; -} - -.fa-lyft:before { - content: "\f3c3"; -} - -.fa-magento:before { - content: "\f3c4"; -} - -.fa-magic:before { - content: "\f0d0"; -} - -.fa-magnet:before { - content: "\f076"; -} - -.fa-mail-bulk:before { - content: "\f674"; -} - -.fa-mailchimp:before { - content: "\f59e"; -} - -.fa-male:before { - content: "\f183"; -} - -.fa-mandalorian:before { - content: "\f50f"; -} - -.fa-map:before { - content: "\f279"; -} - -.fa-map-marked:before { - content: "\f59f"; -} - -.fa-map-marked-alt:before { - content: "\f5a0"; -} - -.fa-map-marker:before { - content: "\f041"; -} - -.fa-map-marker-alt:before { - content: "\f3c5"; -} - -.fa-map-pin:before { - content: "\f276"; -} - -.fa-map-signs:before { - content: "\f277"; -} - -.fa-markdown:before { - content: "\f60f"; -} - -.fa-marker:before { - content: "\f5a1"; -} - -.fa-mars:before { - content: "\f222"; -} - -.fa-mars-double:before { - content: "\f227"; -} - -.fa-mars-stroke:before { - content: "\f229"; -} - -.fa-mars-stroke-h:before { - content: "\f22b"; -} - -.fa-mars-stroke-v:before { - content: "\f22a"; -} - -.fa-mask:before { - content: "\f6fa"; -} - -.fa-mastodon:before { - content: "\f4f6"; -} - -.fa-maxcdn:before { - content: "\f136"; -} - -.fa-mdb:before { - content: "\f8ca"; -} - -.fa-medal:before { - content: "\f5a2"; -} - -.fa-medapps:before { - content: "\f3c6"; -} - -.fa-medium:before { - content: "\f23a"; -} - -.fa-medium-m:before { - content: "\f3c7"; -} - -.fa-medkit:before { - content: "\f0fa"; -} - -.fa-medrt:before { - content: "\f3c8"; -} - -.fa-meetup:before { - content: "\f2e0"; -} - -.fa-megaport:before { - content: "\f5a3"; -} - -.fa-meh:before { - content: "\f11a"; -} - -.fa-meh-blank:before { - content: "\f5a4"; -} - -.fa-meh-rolling-eyes:before { - content: "\f5a5"; -} - -.fa-memory:before { - content: "\f538"; -} - -.fa-mendeley:before { - content: "\f7b3"; -} - -.fa-menorah:before { - content: "\f676"; -} - -.fa-mercury:before { - content: "\f223"; -} - -.fa-meteor:before { - content: "\f753"; -} - -.fa-microblog:before { - content: "\e01a"; -} - -.fa-microchip:before { - content: "\f2db"; -} - -.fa-microphone:before { - content: "\f130"; -} - -.fa-microphone-alt:before { - content: "\f3c9"; -} - -.fa-microphone-alt-slash:before { - content: "\f539"; -} - -.fa-microphone-slash:before { - content: "\f131"; -} - -.fa-microscope:before { - content: "\f610"; -} - -.fa-microsoft:before { - content: "\f3ca"; -} - -.fa-minus:before { - content: "\f068"; -} - -.fa-minus-circle:before { - content: "\f056"; -} - -.fa-minus-square:before { - content: "\f146"; -} - -.fa-mitten:before { - content: "\f7b5"; -} - -.fa-mix:before { - content: "\f3cb"; -} - -.fa-mixcloud:before { - content: "\f289"; -} - -.fa-mixer:before { - content: "\e056"; -} - -.fa-mizuni:before { - content: "\f3cc"; -} - -.fa-mobile:before { - content: "\f10b"; -} - -.fa-mobile-alt:before { - content: "\f3cd"; -} - -.fa-modx:before { - content: "\f285"; -} - -.fa-monero:before { - content: "\f3d0"; -} - -.fa-money-bill:before { - content: "\f0d6"; -} - -.fa-money-bill-alt:before { - content: "\f3d1"; -} - -.fa-money-bill-wave:before { - content: "\f53a"; -} - -.fa-money-bill-wave-alt:before { - content: "\f53b"; -} - -.fa-money-check:before { - content: "\f53c"; -} - -.fa-money-check-alt:before { - content: "\f53d"; -} - -.fa-monument:before { - content: "\f5a6"; -} - -.fa-moon:before { - content: "\f186"; -} - -.fa-mortar-pestle:before { - content: "\f5a7"; -} - -.fa-mosque:before { - content: "\f678"; -} - -.fa-motorcycle:before { - content: "\f21c"; -} - -.fa-mountain:before { - content: "\f6fc"; -} - -.fa-mouse:before { - content: "\f8cc"; -} - -.fa-mouse-pointer:before { - content: "\f245"; -} - -.fa-mug-hot:before { - content: "\f7b6"; -} - -.fa-music:before { - content: "\f001"; -} - -.fa-napster:before { - content: "\f3d2"; -} - -.fa-neos:before { - content: "\f612"; -} - -.fa-network-wired:before { - content: "\f6ff"; -} - -.fa-neuter:before { - content: "\f22c"; -} - -.fa-newspaper:before { - content: "\f1ea"; -} - -.fa-nimblr:before { - content: "\f5a8"; -} - -.fa-node:before { - content: "\f419"; -} - -.fa-node-js:before { - content: "\f3d3"; -} - -.fa-not-equal:before { - content: "\f53e"; -} - -.fa-notes-medical:before { - content: "\f481"; -} - -.fa-npm:before { - content: "\f3d4"; -} - -.fa-ns8:before { - content: "\f3d5"; -} - -.fa-nutritionix:before { - content: "\f3d6"; -} - -.fa-object-group:before { - content: "\f247"; -} - -.fa-object-ungroup:before { - content: "\f248"; -} - -.fa-octopus-deploy:before { - content: "\e082"; -} - -.fa-odnoklassniki:before { - content: "\f263"; -} - -.fa-odnoklassniki-square:before { - content: "\f264"; -} - -.fa-oil-can:before { - content: "\f613"; -} - -.fa-old-republic:before { - content: "\f510"; -} - -.fa-om:before { - content: "\f679"; -} - -.fa-opencart:before { - content: "\f23d"; -} - -.fa-openid:before { - content: "\f19b"; -} - -.fa-opera:before { - content: "\f26a"; -} - -.fa-optin-monster:before { - content: "\f23c"; -} - -.fa-orcid:before { - content: "\f8d2"; -} - -.fa-osi:before { - content: "\f41a"; -} - -.fa-otter:before { - content: "\f700"; -} - -.fa-outdent:before { - content: "\f03b"; -} - -.fa-page4:before { - content: "\f3d7"; -} - -.fa-pagelines:before { - content: "\f18c"; -} - -.fa-pager:before { - content: "\f815"; -} - -.fa-paint-brush:before { - content: "\f1fc"; -} - -.fa-paint-roller:before { - content: "\f5aa"; -} - -.fa-palette:before { - content: "\f53f"; -} - -.fa-palfed:before { - content: "\f3d8"; -} - -.fa-pallet:before { - content: "\f482"; -} - -.fa-paper-plane:before { - content: "\f1d8"; -} - -.fa-paperclip:before { - content: "\f0c6"; -} - -.fa-parachute-box:before { - content: "\f4cd"; -} - -.fa-paragraph:before { - content: "\f1dd"; -} - -.fa-parking:before { - content: "\f540"; -} - -.fa-passport:before { - content: "\f5ab"; -} - -.fa-pastafarianism:before { - content: "\f67b"; -} - -.fa-paste:before { - content: "\f0ea"; -} - -.fa-patreon:before { - content: "\f3d9"; -} - -.fa-pause:before { - content: "\f04c"; -} - -.fa-pause-circle:before { - content: "\f28b"; -} - -.fa-paw:before { - content: "\f1b0"; -} - -.fa-paypal:before { - content: "\f1ed"; -} - -.fa-peace:before { - content: "\f67c"; -} - -.fa-pen:before { - content: "\f304"; -} - -.fa-pen-alt:before { - content: "\f305"; -} - -.fa-pen-fancy:before { - content: "\f5ac"; -} - -.fa-pen-nib:before { - content: "\f5ad"; -} - -.fa-pen-square:before { - content: "\f14b"; -} - -.fa-pencil-alt:before { - content: "\f303"; -} - -.fa-pencil-ruler:before { - content: "\f5ae"; -} - -.fa-penny-arcade:before { - content: "\f704"; -} - -.fa-people-arrows:before { - content: "\e068"; -} - -.fa-people-carry:before { - content: "\f4ce"; -} - -.fa-pepper-hot:before { - content: "\f816"; -} - -.fa-perbyte:before { - content: "\e083"; -} - -.fa-percent:before { - content: "\f295"; -} - -.fa-percentage:before { - content: "\f541"; -} - -.fa-periscope:before { - content: "\f3da"; -} - -.fa-person-booth:before { - content: "\f756"; -} - -.fa-phabricator:before { - content: "\f3db"; -} - -.fa-phoenix-framework:before { - content: "\f3dc"; -} - -.fa-phoenix-squadron:before { - content: "\f511"; -} - -.fa-phone:before { - content: "\f095"; -} - -.fa-phone-alt:before { - content: "\f879"; -} - -.fa-phone-slash:before { - content: "\f3dd"; -} - -.fa-phone-square:before { - content: "\f098"; -} - -.fa-phone-square-alt:before { - content: "\f87b"; -} - -.fa-phone-volume:before { - content: "\f2a0"; -} - -.fa-photo-video:before { - content: "\f87c"; -} - -.fa-php:before { - content: "\f457"; -} - -.fa-pied-piper:before { - content: "\f2ae"; -} - -.fa-pied-piper-alt:before { - content: "\f1a8"; -} - -.fa-pied-piper-hat:before { - content: "\f4e5"; -} - -.fa-pied-piper-pp:before { - content: "\f1a7"; -} - -.fa-pied-piper-square:before { - content: "\e01e"; -} - -.fa-piggy-bank:before { - content: "\f4d3"; -} - -.fa-pills:before { - content: "\f484"; -} - -.fa-pinterest:before { - content: "\f0d2"; -} - -.fa-pinterest-p:before { - content: "\f231"; -} - -.fa-pinterest-square:before { - content: "\f0d3"; -} - -.fa-pizza-slice:before { - content: "\f818"; -} - -.fa-place-of-worship:before { - content: "\f67f"; -} - -.fa-plane:before { - content: "\f072"; -} - -.fa-plane-arrival:before { - content: "\f5af"; -} - -.fa-plane-departure:before { - content: "\f5b0"; -} - -.fa-plane-slash:before { - content: "\e069"; -} - -.fa-play:before { - content: "\f04b"; -} - -.fa-play-circle:before { - content: "\f144"; -} - -.fa-playstation:before { - content: "\f3df"; -} - -.fa-plug:before { - content: "\f1e6"; -} - -.fa-plus:before { - content: "\f067"; -} - -.fa-plus-circle:before { - content: "\f055"; -} - -.fa-plus-square:before { - content: "\f0fe"; -} - -.fa-podcast:before { - content: "\f2ce"; -} - -.fa-poll:before { - content: "\f681"; -} - -.fa-poll-h:before { - content: "\f682"; -} - -.fa-poo:before { - content: "\f2fe"; -} - -.fa-poo-storm:before { - content: "\f75a"; -} - -.fa-poop:before { - content: "\f619"; -} - -.fa-portrait:before { - content: "\f3e0"; -} - -.fa-pound-sign:before { - content: "\f154"; -} - -.fa-power-off:before { - content: "\f011"; -} - -.fa-pray:before { - content: "\f683"; -} - -.fa-praying-hands:before { - content: "\f684"; -} - -.fa-prescription:before { - content: "\f5b1"; -} - -.fa-prescription-bottle:before { - content: "\f485"; -} - -.fa-prescription-bottle-alt:before { - content: "\f486"; -} - -.fa-print:before { - content: "\f02f"; -} - -.fa-procedures:before { - content: "\f487"; -} - -.fa-product-hunt:before { - content: "\f288"; -} - -.fa-project-diagram:before { - content: "\f542"; -} - -.fa-pump-medical:before { - content: "\e06a"; -} - -.fa-pump-soap:before { - content: "\e06b"; -} - -.fa-pushed:before { - content: "\f3e1"; -} - -.fa-puzzle-piece:before { - content: "\f12e"; -} - -.fa-python:before { - content: "\f3e2"; -} - -.fa-qq:before { - content: "\f1d6"; -} - -.fa-qrcode:before { - content: "\f029"; -} - -.fa-question:before { - content: "\f128"; -} - -.fa-question-circle:before { - content: "\f059"; -} - -.fa-quidditch:before { - content: "\f458"; -} - -.fa-quinscape:before { - content: "\f459"; -} - -.fa-quora:before { - content: "\f2c4"; -} - -.fa-quote-left:before { - content: "\f10d"; -} - -.fa-quote-right:before { - content: "\f10e"; -} - -.fa-quran:before { - content: "\f687"; -} - -.fa-r-project:before { - content: "\f4f7"; -} - -.fa-radiation:before { - content: "\f7b9"; -} - -.fa-radiation-alt:before { - content: "\f7ba"; -} - -.fa-rainbow:before { - content: "\f75b"; -} - -.fa-random:before { - content: "\f074"; -} - -.fa-raspberry-pi:before { - content: "\f7bb"; -} - -.fa-ravelry:before { - content: "\f2d9"; -} - -.fa-react:before { - content: "\f41b"; -} - -.fa-reacteurope:before { - content: "\f75d"; -} - -.fa-readme:before { - content: "\f4d5"; -} - -.fa-rebel:before { - content: "\f1d0"; -} - -.fa-receipt:before { - content: "\f543"; -} - -.fa-record-vinyl:before { - content: "\f8d9"; -} - -.fa-recycle:before { - content: "\f1b8"; -} - -.fa-red-river:before { - content: "\f3e3"; -} - -.fa-reddit:before { - content: "\f1a1"; -} - -.fa-reddit-alien:before { - content: "\f281"; -} - -.fa-reddit-square:before { - content: "\f1a2"; -} - -.fa-redhat:before { - content: "\f7bc"; -} - -.fa-redo:before { - content: "\f01e"; -} - -.fa-redo-alt:before { - content: "\f2f9"; -} - -.fa-registered:before { - content: "\f25d"; -} - -.fa-remove-format:before { - content: "\f87d"; -} - -.fa-renren:before { - content: "\f18b"; -} - -.fa-reply:before { - content: "\f3e5"; -} - -.fa-reply-all:before { - content: "\f122"; -} - -.fa-replyd:before { - content: "\f3e6"; -} - -.fa-republican:before { - content: "\f75e"; -} - -.fa-researchgate:before { - content: "\f4f8"; -} - -.fa-resolving:before { - content: "\f3e7"; -} - -.fa-restroom:before { - content: "\f7bd"; -} - -.fa-retweet:before { - content: "\f079"; -} - -.fa-rev:before { - content: "\f5b2"; -} - -.fa-ribbon:before { - content: "\f4d6"; -} - -.fa-ring:before { - content: "\f70b"; -} - -.fa-road:before { - content: "\f018"; -} - -.fa-robot:before { - content: "\f544"; -} - -.fa-rocket:before { - content: "\f135"; -} - -.fa-rocketchat:before { - content: "\f3e8"; -} - -.fa-rockrms:before { - content: "\f3e9"; -} - -.fa-route:before { - content: "\f4d7"; -} - -.fa-rss:before { - content: "\f09e"; -} - -.fa-rss-square:before { - content: "\f143"; -} - -.fa-ruble-sign:before { - content: "\f158"; -} - -.fa-ruler:before { - content: "\f545"; -} - -.fa-ruler-combined:before { - content: "\f546"; -} - -.fa-ruler-horizontal:before { - content: "\f547"; -} - -.fa-ruler-vertical:before { - content: "\f548"; -} - -.fa-running:before { - content: "\f70c"; -} - -.fa-rupee-sign:before { - content: "\f156"; -} - -.fa-rust:before { - content: "\e07a"; -} - -.fa-sad-cry:before { - content: "\f5b3"; -} - -.fa-sad-tear:before { - content: "\f5b4"; -} - -.fa-safari:before { - content: "\f267"; -} - -.fa-salesforce:before { - content: "\f83b"; -} - -.fa-sass:before { - content: "\f41e"; -} - -.fa-satellite:before { - content: "\f7bf"; -} - -.fa-satellite-dish:before { - content: "\f7c0"; -} - -.fa-save:before { - content: "\f0c7"; -} - -.fa-schlix:before { - content: "\f3ea"; -} - -.fa-school:before { - content: "\f549"; -} - -.fa-screwdriver:before { - content: "\f54a"; -} - -.fa-scribd:before { - content: "\f28a"; -} - -.fa-scroll:before { - content: "\f70e"; -} - -.fa-sd-card:before { - content: "\f7c2"; -} - -.fa-search:before { - content: "\f002"; -} - -.fa-search-dollar:before { - content: "\f688"; -} - -.fa-search-location:before { - content: "\f689"; -} - -.fa-search-minus:before { - content: "\f010"; -} - -.fa-search-plus:before { - content: "\f00e"; -} - -.fa-searchengin:before { - content: "\f3eb"; -} - -.fa-seedling:before { - content: "\f4d8"; -} - -.fa-sellcast:before { - content: "\f2da"; -} - -.fa-sellsy:before { - content: "\f213"; -} - -.fa-server:before { - content: "\f233"; -} - -.fa-servicestack:before { - content: "\f3ec"; -} - -.fa-shapes:before { - content: "\f61f"; -} - -.fa-share:before { - content: "\f064"; -} - -.fa-share-alt:before { - content: "\f1e0"; -} - -.fa-share-alt-square:before { - content: "\f1e1"; -} - -.fa-share-square:before { - content: "\f14d"; -} - -.fa-shekel-sign:before { - content: "\f20b"; -} - -.fa-shield-alt:before { - content: "\f3ed"; -} - -.fa-shield-virus:before { - content: "\e06c"; -} - -.fa-ship:before { - content: "\f21a"; -} - -.fa-shipping-fast:before { - content: "\f48b"; -} - -.fa-shirtsinbulk:before { - content: "\f214"; -} - -.fa-shoe-prints:before { - content: "\f54b"; -} - -.fa-shopify:before { - content: "\e057"; -} - -.fa-shopping-bag:before { - content: "\f290"; -} - -.fa-shopping-basket:before { - content: "\f291"; -} - -.fa-shopping-cart:before { - content: "\f07a"; -} - -.fa-shopware:before { - content: "\f5b5"; -} - -.fa-shower:before { - content: "\f2cc"; -} - -.fa-shuttle-van:before { - content: "\f5b6"; -} - -.fa-sign:before { - content: "\f4d9"; -} - -.fa-sign-in-alt:before { - content: "\f2f6"; -} - -.fa-sign-language:before { - content: "\f2a7"; -} - -.fa-sign-out-alt:before { - content: "\f2f5"; -} - -.fa-signal:before { - content: "\f012"; -} - -.fa-signature:before { - content: "\f5b7"; -} - -.fa-sim-card:before { - content: "\f7c4"; -} - -.fa-simplybuilt:before { - content: "\f215"; -} - -.fa-sink:before { - content: "\e06d"; -} - -.fa-sistrix:before { - content: "\f3ee"; -} - -.fa-sitemap:before { - content: "\f0e8"; -} - -.fa-sith:before { - content: "\f512"; -} - -.fa-skating:before { - content: "\f7c5"; -} - -.fa-sketch:before { - content: "\f7c6"; -} - -.fa-skiing:before { - content: "\f7c9"; -} - -.fa-skiing-nordic:before { - content: "\f7ca"; -} - -.fa-skull:before { - content: "\f54c"; -} - -.fa-skull-crossbones:before { - content: "\f714"; -} - -.fa-skyatlas:before { - content: "\f216"; -} - -.fa-skype:before { - content: "\f17e"; -} - -.fa-slack:before { - content: "\f198"; -} - -.fa-slack-hash:before { - content: "\f3ef"; -} - -.fa-slash:before { - content: "\f715"; -} - -.fa-sleigh:before { - content: "\f7cc"; -} - -.fa-sliders-h:before { - content: "\f1de"; -} - -.fa-slideshare:before { - content: "\f1e7"; -} - -.fa-smile:before { - content: "\f118"; -} - -.fa-smile-beam:before { - content: "\f5b8"; -} - -.fa-smile-wink:before { - content: "\f4da"; -} - -.fa-smog:before { - content: "\f75f"; -} - -.fa-smoking:before { - content: "\f48d"; -} - -.fa-smoking-ban:before { - content: "\f54d"; -} - -.fa-sms:before { - content: "\f7cd"; -} - -.fa-snapchat:before { - content: "\f2ab"; -} - -.fa-snapchat-ghost:before { - content: "\f2ac"; -} - -.fa-snapchat-square:before { - content: "\f2ad"; -} - -.fa-snowboarding:before { - content: "\f7ce"; -} - -.fa-snowflake:before { - content: "\f2dc"; -} - -.fa-snowman:before { - content: "\f7d0"; -} - -.fa-snowplow:before { - content: "\f7d2"; -} - -.fa-soap:before { - content: "\e06e"; -} - -.fa-socks:before { - content: "\f696"; -} - -.fa-solar-panel:before { - content: "\f5ba"; -} - -.fa-sort:before { - content: "\f0dc"; -} - -.fa-sort-alpha-down:before { - content: "\f15d"; -} - -.fa-sort-alpha-down-alt:before { - content: "\f881"; -} - -.fa-sort-alpha-up:before { - content: "\f15e"; -} - -.fa-sort-alpha-up-alt:before { - content: "\f882"; -} - -.fa-sort-amount-down:before { - content: "\f160"; -} - -.fa-sort-amount-down-alt:before { - content: "\f884"; -} - -.fa-sort-amount-up:before { - content: "\f161"; -} - -.fa-sort-amount-up-alt:before { - content: "\f885"; -} - -.fa-sort-down:before { - content: "\f0dd"; -} - -.fa-sort-numeric-down:before { - content: "\f162"; -} - -.fa-sort-numeric-down-alt:before { - content: "\f886"; -} - -.fa-sort-numeric-up:before { - content: "\f163"; -} - -.fa-sort-numeric-up-alt:before { - content: "\f887"; -} - -.fa-sort-up:before { - content: "\f0de"; -} - -.fa-soundcloud:before { - content: "\f1be"; -} - -.fa-sourcetree:before { - content: "\f7d3"; -} - -.fa-spa:before { - content: "\f5bb"; -} - -.fa-space-shuttle:before { - content: "\f197"; -} - -.fa-speakap:before { - content: "\f3f3"; -} - -.fa-speaker-deck:before { - content: "\f83c"; -} - -.fa-spell-check:before { - content: "\f891"; -} - -.fa-spider:before { - content: "\f717"; -} - -.fa-spinner:before { - content: "\f110"; -} - -.fa-splotch:before { - content: "\f5bc"; -} - -.fa-spotify:before { - content: "\f1bc"; -} - -.fa-spray-can:before { - content: "\f5bd"; -} - -.fa-square:before { - content: "\f0c8"; -} - -.fa-square-full:before { - content: "\f45c"; -} - -.fa-square-root-alt:before { - content: "\f698"; -} - -.fa-squarespace:before { - content: "\f5be"; -} - -.fa-stack-exchange:before { - content: "\f18d"; -} - -.fa-stack-overflow:before { - content: "\f16c"; -} - -.fa-stackpath:before { - content: "\f842"; -} - -.fa-stamp:before { - content: "\f5bf"; -} - -.fa-star:before { - content: "\f005"; -} - -.fa-star-and-crescent:before { - content: "\f699"; -} - -.fa-star-half:before { - content: "\f089"; -} - -.fa-star-half-alt:before { - content: "\f5c0"; -} - -.fa-star-of-david:before { - content: "\f69a"; -} - -.fa-star-of-life:before { - content: "\f621"; -} - -.fa-staylinked:before { - content: "\f3f5"; -} - -.fa-steam:before { - content: "\f1b6"; -} - -.fa-steam-square:before { - content: "\f1b7"; -} - -.fa-steam-symbol:before { - content: "\f3f6"; -} - -.fa-step-backward:before { - content: "\f048"; -} - -.fa-step-forward:before { - content: "\f051"; -} - -.fa-stethoscope:before { - content: "\f0f1"; -} - -.fa-sticker-mule:before { - content: "\f3f7"; -} - -.fa-sticky-note:before { - content: "\f249"; -} - -.fa-stop:before { - content: "\f04d"; -} - -.fa-stop-circle:before { - content: "\f28d"; -} - -.fa-stopwatch:before { - content: "\f2f2"; -} - -.fa-stopwatch-20:before { - content: "\e06f"; -} - -.fa-store:before { - content: "\f54e"; -} - -.fa-store-alt:before { - content: "\f54f"; -} - -.fa-store-alt-slash:before { - content: "\e070"; -} - -.fa-store-slash:before { - content: "\e071"; -} - -.fa-strava:before { - content: "\f428"; -} - -.fa-stream:before { - content: "\f550"; -} - -.fa-street-view:before { - content: "\f21d"; -} - -.fa-strikethrough:before { - content: "\f0cc"; -} - -.fa-stripe:before { - content: "\f429"; -} - -.fa-stripe-s:before { - content: "\f42a"; -} - -.fa-stroopwafel:before { - content: "\f551"; -} - -.fa-studiovinari:before { - content: "\f3f8"; -} - -.fa-stumbleupon:before { - content: "\f1a4"; -} - -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} - -.fa-subscript:before { - content: "\f12c"; -} - -.fa-subway:before { - content: "\f239"; -} - -.fa-suitcase:before { - content: "\f0f2"; -} - -.fa-suitcase-rolling:before { - content: "\f5c1"; -} - -.fa-sun:before { - content: "\f185"; -} - -.fa-superpowers:before { - content: "\f2dd"; -} - -.fa-superscript:before { - content: "\f12b"; -} - -.fa-supple:before { - content: "\f3f9"; -} - -.fa-surprise:before { - content: "\f5c2"; -} - -.fa-suse:before { - content: "\f7d6"; -} - -.fa-swatchbook:before { - content: "\f5c3"; -} - -.fa-swift:before { - content: "\f8e1"; -} - -.fa-swimmer:before { - content: "\f5c4"; -} - -.fa-swimming-pool:before { - content: "\f5c5"; -} - -.fa-symfony:before { - content: "\f83d"; -} - -.fa-synagogue:before { - content: "\f69b"; -} - -.fa-sync:before { - content: "\f021"; -} - -.fa-sync-alt:before { - content: "\f2f1"; -} - -.fa-syringe:before { - content: "\f48e"; -} - -.fa-table:before { - content: "\f0ce"; -} - -.fa-table-tennis:before { - content: "\f45d"; -} - -.fa-tablet:before { - content: "\f10a"; -} - -.fa-tablet-alt:before { - content: "\f3fa"; -} - -.fa-tablets:before { - content: "\f490"; -} - -.fa-tachometer-alt:before { - content: "\f3fd"; -} - -.fa-tag:before { - content: "\f02b"; -} - -.fa-tags:before { - content: "\f02c"; -} - -.fa-tape:before { - content: "\f4db"; -} - -.fa-tasks:before { - content: "\f0ae"; -} - -.fa-taxi:before { - content: "\f1ba"; -} - -.fa-teamspeak:before { - content: "\f4f9"; -} - -.fa-teeth:before { - content: "\f62e"; -} - -.fa-teeth-open:before { - content: "\f62f"; -} - -.fa-telegram:before { - content: "\f2c6"; -} - -.fa-telegram-plane:before { - content: "\f3fe"; -} - -.fa-temperature-high:before { - content: "\f769"; -} - -.fa-temperature-low:before { - content: "\f76b"; -} - -.fa-tencent-weibo:before { - content: "\f1d5"; -} - -.fa-tenge:before { - content: "\f7d7"; -} - -.fa-terminal:before { - content: "\f120"; -} - -.fa-text-height:before { - content: "\f034"; -} - -.fa-text-width:before { - content: "\f035"; -} - -.fa-th:before { - content: "\f00a"; -} - -.fa-th-large:before { - content: "\f009"; -} - -.fa-th-list:before { - content: "\f00b"; -} - -.fa-the-red-yeti:before { - content: "\f69d"; -} - -.fa-theater-masks:before { - content: "\f630"; -} - -.fa-themeco:before { - content: "\f5c6"; -} - -.fa-themeisle:before { - content: "\f2b2"; -} - -.fa-thermometer:before { - content: "\f491"; -} - -.fa-thermometer-empty:before { - content: "\f2cb"; -} - -.fa-thermometer-full:before { - content: "\f2c7"; -} - -.fa-thermometer-half:before { - content: "\f2c9"; -} - -.fa-thermometer-quarter:before { - content: "\f2ca"; -} - -.fa-thermometer-three-quarters:before { - content: "\f2c8"; -} - -.fa-think-peaks:before { - content: "\f731"; -} - -.fa-thumbs-down:before { - content: "\f165"; -} - -.fa-thumbs-up:before { - content: "\f164"; -} - -.fa-thumbtack:before { - content: "\f08d"; -} - -.fa-ticket-alt:before { - content: "\f3ff"; -} - -.fa-tiktok:before { - content: "\e07b"; -} - -.fa-times:before { - content: "\f00d"; -} - -.fa-times-circle:before { - content: "\f057"; -} - -.fa-tint:before { - content: "\f043"; -} - -.fa-tint-slash:before { - content: "\f5c7"; -} - -.fa-tired:before { - content: "\f5c8"; -} - -.fa-toggle-off:before { - content: "\f204"; -} - -.fa-toggle-on:before { - content: "\f205"; -} - -.fa-toilet:before { - content: "\f7d8"; -} - -.fa-toilet-paper:before { - content: "\f71e"; -} - -.fa-toilet-paper-slash:before { - content: "\e072"; -} - -.fa-toolbox:before { - content: "\f552"; -} - -.fa-tools:before { - content: "\f7d9"; -} - -.fa-tooth:before { - content: "\f5c9"; -} - -.fa-torah:before { - content: "\f6a0"; -} - -.fa-torii-gate:before { - content: "\f6a1"; -} - -.fa-tractor:before { - content: "\f722"; -} - -.fa-trade-federation:before { - content: "\f513"; -} - -.fa-trademark:before { - content: "\f25c"; -} - -.fa-traffic-light:before { - content: "\f637"; -} - -.fa-trailer:before { - content: "\e041"; -} - -.fa-train:before { - content: "\f238"; -} - -.fa-tram:before { - content: "\f7da"; -} - -.fa-transgender:before { - content: "\f224"; -} - -.fa-transgender-alt:before { - content: "\f225"; -} - -.fa-trash:before { - content: "\f1f8"; -} - -.fa-trash-alt:before { - content: "\f2ed"; -} - -.fa-trash-restore:before { - content: "\f829"; -} - -.fa-trash-restore-alt:before { - content: "\f82a"; -} - -.fa-tree:before { - content: "\f1bb"; -} - -.fa-trello:before { - content: "\f181"; -} - -.fa-trophy:before { - content: "\f091"; -} - -.fa-truck:before { - content: "\f0d1"; -} - -.fa-truck-loading:before { - content: "\f4de"; -} - -.fa-truck-monster:before { - content: "\f63b"; -} - -.fa-truck-moving:before { - content: "\f4df"; -} - -.fa-truck-pickup:before { - content: "\f63c"; -} - -.fa-tshirt:before { - content: "\f553"; -} - -.fa-tty:before { - content: "\f1e4"; -} - -.fa-tumblr:before { - content: "\f173"; -} - -.fa-tumblr-square:before { - content: "\f174"; -} - -.fa-tv:before { - content: "\f26c"; -} - -.fa-twitch:before { - content: "\f1e8"; -} - -.fa-twitter:before { - content: "\f099"; -} - -.fa-twitter-square:before { - content: "\f081"; -} - -.fa-typo3:before { - content: "\f42b"; -} - -.fa-uber:before { - content: "\f402"; -} - -.fa-ubuntu:before { - content: "\f7df"; -} - -.fa-uikit:before { - content: "\f403"; -} - -.fa-umbraco:before { - content: "\f8e8"; -} - -.fa-umbrella:before { - content: "\f0e9"; -} - -.fa-umbrella-beach:before { - content: "\f5ca"; -} - -.fa-uncharted:before { - content: "\e084"; -} - -.fa-underline:before { - content: "\f0cd"; -} - -.fa-undo:before { - content: "\f0e2"; -} - -.fa-undo-alt:before { - content: "\f2ea"; -} - -.fa-uniregistry:before { - content: "\f404"; -} - -.fa-unity:before { - content: "\e049"; -} - -.fa-universal-access:before { - content: "\f29a"; -} - -.fa-university:before { - content: "\f19c"; -} - -.fa-unlink:before { - content: "\f127"; -} - -.fa-unlock:before { - content: "\f09c"; -} - -.fa-unlock-alt:before { - content: "\f13e"; -} - -.fa-unsplash:before { - content: "\e07c"; -} - -.fa-untappd:before { - content: "\f405"; -} - -.fa-upload:before { - content: "\f093"; -} - -.fa-ups:before { - content: "\f7e0"; -} - -.fa-usb:before { - content: "\f287"; -} - -.fa-user:before { - content: "\f007"; -} - -.fa-user-alt:before { - content: "\f406"; -} - -.fa-user-alt-slash:before { - content: "\f4fa"; -} - -.fa-user-astronaut:before { - content: "\f4fb"; -} - -.fa-user-check:before { - content: "\f4fc"; -} - -.fa-user-circle:before { - content: "\f2bd"; -} - -.fa-user-clock:before { - content: "\f4fd"; -} - -.fa-user-cog:before { - content: "\f4fe"; -} - -.fa-user-edit:before { - content: "\f4ff"; -} - -.fa-user-friends:before { - content: "\f500"; -} - -.fa-user-graduate:before { - content: "\f501"; -} - -.fa-user-injured:before { - content: "\f728"; -} - -.fa-user-lock:before { - content: "\f502"; -} - -.fa-user-md:before { - content: "\f0f0"; -} - -.fa-user-minus:before { - content: "\f503"; -} - -.fa-user-ninja:before { - content: "\f504"; -} - -.fa-user-nurse:before { - content: "\f82f"; -} - -.fa-user-plus:before { - content: "\f234"; -} - -.fa-user-secret:before { - content: "\f21b"; -} - -.fa-user-shield:before { - content: "\f505"; -} - -.fa-user-slash:before { - content: "\f506"; -} - -.fa-user-tag:before { - content: "\f507"; -} - -.fa-user-tie:before { - content: "\f508"; -} - -.fa-user-times:before { - content: "\f235"; -} - -.fa-users:before { - content: "\f0c0"; -} - -.fa-users-cog:before { - content: "\f509"; -} - -.fa-users-slash:before { - content: "\e073"; -} - -.fa-usps:before { - content: "\f7e1"; -} - -.fa-ussunnah:before { - content: "\f407"; -} - -.fa-utensil-spoon:before { - content: "\f2e5"; -} - -.fa-utensils:before { - content: "\f2e7"; -} - -.fa-vaadin:before { - content: "\f408"; -} - -.fa-vector-square:before { - content: "\f5cb"; -} - -.fa-venus:before { - content: "\f221"; -} - -.fa-venus-double:before { - content: "\f226"; -} - -.fa-venus-mars:before { - content: "\f228"; -} - -.fa-vest:before { - content: "\e085"; -} - -.fa-vest-patches:before { - content: "\e086"; -} - -.fa-viacoin:before { - content: "\f237"; -} - -.fa-viadeo:before { - content: "\f2a9"; -} - -.fa-viadeo-square:before { - content: "\f2aa"; -} - -.fa-vial:before { - content: "\f492"; -} - -.fa-vials:before { - content: "\f493"; -} - -.fa-viber:before { - content: "\f409"; -} - -.fa-video:before { - content: "\f03d"; -} - -.fa-video-slash:before { - content: "\f4e2"; -} - -.fa-vihara:before { - content: "\f6a7"; -} - -.fa-vimeo:before { - content: "\f40a"; -} - -.fa-vimeo-square:before { - content: "\f194"; -} - -.fa-vimeo-v:before { - content: "\f27d"; -} - -.fa-vine:before { - content: "\f1ca"; -} - -.fa-virus:before { - content: "\e074"; -} - -.fa-virus-slash:before { - content: "\e075"; -} - -.fa-viruses:before { - content: "\e076"; -} - -.fa-vk:before { - content: "\f189"; -} - -.fa-vnv:before { - content: "\f40b"; -} - -.fa-voicemail:before { - content: "\f897"; -} - -.fa-volleyball-ball:before { - content: "\f45f"; -} - -.fa-volume-down:before { - content: "\f027"; -} - -.fa-volume-mute:before { - content: "\f6a9"; -} - -.fa-volume-off:before { - content: "\f026"; -} - -.fa-volume-up:before { - content: "\f028"; -} - -.fa-vote-yea:before { - content: "\f772"; -} - -.fa-vr-cardboard:before { - content: "\f729"; -} - -.fa-vuejs:before { - content: "\f41f"; -} - -.fa-walking:before { - content: "\f554"; -} - -.fa-wallet:before { - content: "\f555"; -} - -.fa-warehouse:before { - content: "\f494"; -} - -.fa-watchman-monitoring:before { - content: "\e087"; -} - -.fa-water:before { - content: "\f773"; -} - -.fa-wave-square:before { - content: "\f83e"; -} - -.fa-waze:before { - content: "\f83f"; -} - -.fa-weebly:before { - content: "\f5cc"; -} - -.fa-weibo:before { - content: "\f18a"; -} - -.fa-weight:before { - content: "\f496"; -} - -.fa-weight-hanging:before { - content: "\f5cd"; -} - -.fa-weixin:before { - content: "\f1d7"; -} - -.fa-whatsapp:before { - content: "\f232"; -} - -.fa-whatsapp-square:before { - content: "\f40c"; -} - -.fa-wheelchair:before { - content: "\f193"; -} - -.fa-whmcs:before { - content: "\f40d"; -} - -.fa-wifi:before { - content: "\f1eb"; -} - -.fa-wikipedia-w:before { - content: "\f266"; -} - -.fa-wind:before { - content: "\f72e"; -} - -.fa-window-close:before { - content: "\f410"; -} - -.fa-window-maximize:before { - content: "\f2d0"; -} - -.fa-window-minimize:before { - content: "\f2d1"; -} - -.fa-window-restore:before { - content: "\f2d2"; -} - -.fa-windows:before { - content: "\f17a"; -} - -.fa-wine-bottle:before { - content: "\f72f"; -} - -.fa-wine-glass:before { - content: "\f4e3"; -} - -.fa-wine-glass-alt:before { - content: "\f5ce"; -} - -.fa-wix:before { - content: "\f5cf"; -} - -.fa-wizards-of-the-coast:before { - content: "\f730"; -} - -.fa-wodu:before { - content: "\e088"; -} - -.fa-wolf-pack-battalion:before { - content: "\f514"; -} - -.fa-won-sign:before { - content: "\f159"; -} - -.fa-wordpress:before { - content: "\f19a"; -} - -.fa-wordpress-simple:before { - content: "\f411"; -} - -.fa-wpbeginner:before { - content: "\f297"; -} - -.fa-wpexplorer:before { - content: "\f2de"; -} - -.fa-wpforms:before { - content: "\f298"; -} - -.fa-wpressr:before { - content: "\f3e4"; -} - -.fa-wrench:before { - content: "\f0ad"; -} - -.fa-x-ray:before { - content: "\f497"; -} - -.fa-xbox:before { - content: "\f412"; -} - -.fa-xing:before { - content: "\f168"; -} - -.fa-xing-square:before { - content: "\f169"; -} - -.fa-y-combinator:before { - content: "\f23b"; -} - -.fa-yahoo:before { - content: "\f19e"; -} - -.fa-yammer:before { - content: "\f840"; -} - -.fa-yandex:before { - content: "\f413"; -} - -.fa-yandex-international:before { - content: "\f414"; -} - -.fa-yarn:before { - content: "\f7e3"; -} - -.fa-yelp:before { - content: "\f1e9"; -} - -.fa-yen-sign:before { - content: "\f157"; -} - -.fa-yin-yang:before { - content: "\f6ad"; -} - -.fa-yoast:before { - content: "\f2b1"; -} - -.fa-youtube:before { - content: "\f167"; -} - -.fa-youtube-square:before { - content: "\f431"; -} - -.fa-zhihu:before { - content: "\f63f"; -} - -.sr-only { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: "Font Awesome 5 Free"; - font-style: normal; - font-weight: 900; - font-display: block; - src: url("../fonts/fa-solid-900.eot"); - src: url("../fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-solid-900.woff2") format("woff2"), url("../fonts/fa-solid-900.woff") format("woff"), url("../fonts/fa-solid-900.ttf") format("truetype"), url("../fonts/fa-solid-900.svg#fontawesome") format("svg"); -} -.fa, -.fas { - font-family: "Font Awesome 5 Free"; - font-weight: 900; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: "Font Awesome 5 Free"; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../fonts/fa-regular-400.eot"); - src: url("../fonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-regular-400.woff2") format("woff2"), url("../fonts/fa-regular-400.woff") format("woff"), url("../fonts/fa-regular-400.ttf") format("truetype"), url("../fonts/fa-regular-400.svg#fontawesome") format("svg"); -} -.far { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: "Font Awesome 5 Brands"; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../fonts/fa-brands-400.eot"); - src: url("../fonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-brands-400.woff2") format("woff2"), url("../fonts/fa-brands-400.woff") format("woff"), url("../fonts/fa-brands-400.ttf") format("truetype"), url("../fonts/fa-brands-400.svg#fontawesome") format("svg"); -} -.fab { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-glass:before { - content: "\f000"; -} - -.fa.fa-meetup { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-star-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-star-o:before { - content: "\f005"; -} - -.fa.fa-remove:before { - content: "\f00d"; -} - -.fa.fa-close:before { - content: "\f00d"; -} - -.fa.fa-gear:before { - content: "\f013"; -} - -.fa.fa-trash-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-trash-o:before { - content: "\f2ed"; -} - -.fa.fa-file-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-o:before { - content: "\f15b"; -} - -.fa.fa-clock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-clock-o:before { - content: "\f017"; -} - -.fa.fa-arrow-circle-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-arrow-circle-o-down:before { - content: "\f358"; -} - -.fa.fa-arrow-circle-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-arrow-circle-o-up:before { - content: "\f35b"; -} - -.fa.fa-play-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-play-circle-o:before { - content: "\f144"; -} - -.fa.fa-repeat:before { - content: "\f01e"; -} - -.fa.fa-rotate-right:before { - content: "\f01e"; -} - -.fa.fa-refresh:before { - content: "\f021"; -} - -.fa.fa-list-alt { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-dedent:before { - content: "\f03b"; -} - -.fa.fa-video-camera:before { - content: "\f03d"; -} - -.fa.fa-picture-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-picture-o:before { - content: "\f03e"; -} - -.fa.fa-photo { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-photo:before { - content: "\f03e"; -} - -.fa.fa-image { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-image:before { - content: "\f03e"; -} - -.fa.fa-pencil:before { - content: "\f303"; -} - -.fa.fa-map-marker:before { - content: "\f3c5"; -} - -.fa.fa-pencil-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-pencil-square-o:before { - content: "\f044"; -} - -.fa.fa-share-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-share-square-o:before { - content: "\f14d"; -} - -.fa.fa-check-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-check-square-o:before { - content: "\f14a"; -} - -.fa.fa-arrows:before { - content: "\f0b2"; -} - -.fa.fa-times-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-times-circle-o:before { - content: "\f057"; -} - -.fa.fa-check-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-check-circle-o:before { - content: "\f058"; -} - -.fa.fa-mail-forward:before { - content: "\f064"; -} - -.fa.fa-expand:before { - content: "\f424"; -} - -.fa.fa-compress:before { - content: "\f422"; -} - -.fa.fa-eye { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-eye-slash { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-warning:before { - content: "\f071"; -} - -.fa.fa-calendar:before { - content: "\f073"; -} - -.fa.fa-arrows-v:before { - content: "\f338"; -} - -.fa.fa-arrows-h:before { - content: "\f337"; -} - -.fa.fa-bar-chart { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-bar-chart:before { - content: "\f080"; -} - -.fa.fa-bar-chart-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-bar-chart-o:before { - content: "\f080"; -} - -.fa.fa-twitter-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-facebook-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gears:before { - content: "\f085"; -} - -.fa.fa-thumbs-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-thumbs-o-up:before { - content: "\f164"; -} - -.fa.fa-thumbs-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-thumbs-o-down:before { - content: "\f165"; -} - -.fa.fa-heart-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-heart-o:before { - content: "\f004"; -} - -.fa.fa-sign-out:before { - content: "\f2f5"; -} - -.fa.fa-linkedin-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-linkedin-square:before { - content: "\f08c"; -} - -.fa.fa-thumb-tack:before { - content: "\f08d"; -} - -.fa.fa-external-link:before { - content: "\f35d"; -} - -.fa.fa-sign-in:before { - content: "\f2f6"; -} - -.fa.fa-github-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-lemon-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-lemon-o:before { - content: "\f094"; -} - -.fa.fa-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-square-o:before { - content: "\f0c8"; -} - -.fa.fa-bookmark-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-bookmark-o:before { - content: "\f02e"; -} - -.fa.fa-twitter { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-facebook { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-facebook:before { - content: "\f39e"; -} - -.fa.fa-facebook-f { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-facebook-f:before { - content: "\f39e"; -} - -.fa.fa-github { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-credit-card { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-feed:before { - content: "\f09e"; -} - -.fa.fa-hdd-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hdd-o:before { - content: "\f0a0"; -} - -.fa.fa-hand-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-o-right:before { - content: "\f0a4"; -} - -.fa.fa-hand-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-o-left:before { - content: "\f0a5"; -} - -.fa.fa-hand-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-o-up:before { - content: "\f0a6"; -} - -.fa.fa-hand-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-o-down:before { - content: "\f0a7"; -} - -.fa.fa-arrows-alt:before { - content: "\f31e"; -} - -.fa.fa-group:before { - content: "\f0c0"; -} - -.fa.fa-chain:before { - content: "\f0c1"; -} - -.fa.fa-scissors:before { - content: "\f0c4"; -} - -.fa.fa-files-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-files-o:before { - content: "\f0c5"; -} - -.fa.fa-floppy-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-floppy-o:before { - content: "\f0c7"; -} - -.fa.fa-navicon:before { - content: "\f0c9"; -} - -.fa.fa-reorder:before { - content: "\f0c9"; -} - -.fa.fa-pinterest { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-pinterest-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-plus-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-plus { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-plus:before { - content: "\f0d5"; -} - -.fa.fa-money { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-money:before { - content: "\f3d1"; -} - -.fa.fa-unsorted:before { - content: "\f0dc"; -} - -.fa.fa-sort-desc:before { - content: "\f0dd"; -} - -.fa.fa-sort-asc:before { - content: "\f0de"; -} - -.fa.fa-linkedin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-linkedin:before { - content: "\f0e1"; -} - -.fa.fa-rotate-left:before { - content: "\f0e2"; -} - -.fa.fa-legal:before { - content: "\f0e3"; -} - -.fa.fa-tachometer:before { - content: "\f3fd"; -} - -.fa.fa-dashboard:before { - content: "\f3fd"; -} - -.fa.fa-comment-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-comment-o:before { - content: "\f075"; -} - -.fa.fa-comments-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-comments-o:before { - content: "\f086"; -} - -.fa.fa-flash:before { - content: "\f0e7"; -} - -.fa.fa-clipboard { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-paste { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-paste:before { - content: "\f328"; -} - -.fa.fa-lightbulb-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-lightbulb-o:before { - content: "\f0eb"; -} - -.fa.fa-exchange:before { - content: "\f362"; -} - -.fa.fa-cloud-download:before { - content: "\f381"; -} - -.fa.fa-cloud-upload:before { - content: "\f382"; -} - -.fa.fa-bell-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-bell-o:before { - content: "\f0f3"; -} - -.fa.fa-cutlery:before { - content: "\f2e7"; -} - -.fa.fa-file-text-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-text-o:before { - content: "\f15c"; -} - -.fa.fa-building-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-building-o:before { - content: "\f1ad"; -} - -.fa.fa-hospital-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hospital-o:before { - content: "\f0f8"; -} - -.fa.fa-tablet:before { - content: "\f3fa"; -} - -.fa.fa-mobile:before { - content: "\f3cd"; -} - -.fa.fa-mobile-phone:before { - content: "\f3cd"; -} - -.fa.fa-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-circle-o:before { - content: "\f111"; -} - -.fa.fa-mail-reply:before { - content: "\f3e5"; -} - -.fa.fa-github-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-folder-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-folder-o:before { - content: "\f07b"; -} - -.fa.fa-folder-open-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-folder-open-o:before { - content: "\f07c"; -} - -.fa.fa-smile-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-smile-o:before { - content: "\f118"; -} - -.fa.fa-frown-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-frown-o:before { - content: "\f119"; -} - -.fa.fa-meh-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-meh-o:before { - content: "\f11a"; -} - -.fa.fa-keyboard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-keyboard-o:before { - content: "\f11c"; -} - -.fa.fa-flag-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-flag-o:before { - content: "\f024"; -} - -.fa.fa-mail-reply-all:before { - content: "\f122"; -} - -.fa.fa-star-half-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-star-half-o:before { - content: "\f089"; -} - -.fa.fa-star-half-empty { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-star-half-empty:before { - content: "\f089"; -} - -.fa.fa-star-half-full { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-star-half-full:before { - content: "\f089"; -} - -.fa.fa-code-fork:before { - content: "\f126"; -} - -.fa.fa-chain-broken:before { - content: "\f127"; -} - -.fa.fa-shield:before { - content: "\f3ed"; -} - -.fa.fa-calendar-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-calendar-o:before { - content: "\f133"; -} - -.fa.fa-maxcdn { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-html5 { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-css3 { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ticket:before { - content: "\f3ff"; -} - -.fa.fa-minus-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-minus-square-o:before { - content: "\f146"; -} - -.fa.fa-level-up:before { - content: "\f3bf"; -} - -.fa.fa-level-down:before { - content: "\f3be"; -} - -.fa.fa-pencil-square:before { - content: "\f14b"; -} - -.fa.fa-external-link-square:before { - content: "\f360"; -} - -.fa.fa-compass { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-caret-square-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-caret-square-o-down:before { - content: "\f150"; -} - -.fa.fa-toggle-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-toggle-down:before { - content: "\f150"; -} - -.fa.fa-caret-square-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-caret-square-o-up:before { - content: "\f151"; -} - -.fa.fa-toggle-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-toggle-up:before { - content: "\f151"; -} - -.fa.fa-caret-square-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-caret-square-o-right:before { - content: "\f152"; -} - -.fa.fa-toggle-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-toggle-right:before { - content: "\f152"; -} - -.fa.fa-eur:before { - content: "\f153"; -} - -.fa.fa-euro:before { - content: "\f153"; -} - -.fa.fa-gbp:before { - content: "\f154"; -} - -.fa.fa-usd:before { - content: "\f155"; -} - -.fa.fa-dollar:before { - content: "\f155"; -} - -.fa.fa-inr:before { - content: "\f156"; -} - -.fa.fa-rupee:before { - content: "\f156"; -} - -.fa.fa-jpy:before { - content: "\f157"; -} - -.fa.fa-cny:before { - content: "\f157"; -} - -.fa.fa-rmb:before { - content: "\f157"; -} - -.fa.fa-yen:before { - content: "\f157"; -} - -.fa.fa-rub:before { - content: "\f158"; -} - -.fa.fa-ruble:before { - content: "\f158"; -} - -.fa.fa-rouble:before { - content: "\f158"; -} - -.fa.fa-krw:before { - content: "\f159"; -} - -.fa.fa-won:before { - content: "\f159"; -} - -.fa.fa-btc { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bitcoin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bitcoin:before { - content: "\f15a"; -} - -.fa.fa-file-text:before { - content: "\f15c"; -} - -.fa.fa-sort-alpha-asc:before { - content: "\f15d"; -} - -.fa.fa-sort-alpha-desc:before { - content: "\f881"; -} - -.fa.fa-sort-amount-asc:before { - content: "\f160"; -} - -.fa.fa-sort-amount-desc:before { - content: "\f884"; -} - -.fa.fa-sort-numeric-asc:before { - content: "\f162"; -} - -.fa.fa-sort-numeric-desc:before { - content: "\f886"; -} - -.fa.fa-youtube-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-youtube { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-xing { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-xing-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-youtube-play { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-youtube-play:before { - content: "\f167"; -} - -.fa.fa-dropbox { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-stack-overflow { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-instagram { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-flickr { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-adn { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bitbucket { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bitbucket-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bitbucket-square:before { - content: "\f171"; -} - -.fa.fa-tumblr { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-tumblr-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-long-arrow-down:before { - content: "\f309"; -} - -.fa.fa-long-arrow-up:before { - content: "\f30c"; -} - -.fa.fa-long-arrow-left:before { - content: "\f30a"; -} - -.fa.fa-long-arrow-right:before { - content: "\f30b"; -} - -.fa.fa-apple { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-windows { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-android { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-linux { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-dribbble { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-skype { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-foursquare { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-trello { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gratipay { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gittip { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gittip:before { - content: "\f184"; -} - -.fa.fa-sun-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-sun-o:before { - content: "\f185"; -} - -.fa.fa-moon-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-moon-o:before { - content: "\f186"; -} - -.fa.fa-vk { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-weibo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-renren { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-pagelines { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-stack-exchange { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-arrow-circle-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-arrow-circle-o-right:before { - content: "\f35a"; -} - -.fa.fa-arrow-circle-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-arrow-circle-o-left:before { - content: "\f359"; -} - -.fa.fa-caret-square-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-caret-square-o-left:before { - content: "\f191"; -} - -.fa.fa-toggle-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-toggle-left:before { - content: "\f191"; -} - -.fa.fa-dot-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-dot-circle-o:before { - content: "\f192"; -} - -.fa.fa-vimeo-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-try:before { - content: "\f195"; -} - -.fa.fa-turkish-lira:before { - content: "\f195"; -} - -.fa.fa-plus-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-plus-square-o:before { - content: "\f0fe"; -} - -.fa.fa-slack { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wordpress { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-openid { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-institution:before { - content: "\f19c"; -} - -.fa.fa-bank:before { - content: "\f19c"; -} - -.fa.fa-mortar-board:before { - content: "\f19d"; -} - -.fa.fa-yahoo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-reddit { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-reddit-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-stumbleupon-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-stumbleupon { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-delicious { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-digg { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-pied-piper-pp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-pied-piper-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-drupal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-joomla { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-spoon:before { - content: "\f2e5"; -} - -.fa.fa-behance { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-behance-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-steam { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-steam-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-automobile:before { - content: "\f1b9"; -} - -.fa.fa-envelope-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-envelope-o:before { - content: "\f0e0"; -} - -.fa.fa-spotify { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-deviantart { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-soundcloud { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-file-pdf-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-pdf-o:before { - content: "\f1c1"; -} - -.fa.fa-file-word-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-word-o:before { - content: "\f1c2"; -} - -.fa.fa-file-excel-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-excel-o:before { - content: "\f1c3"; -} - -.fa.fa-file-powerpoint-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-powerpoint-o:before { - content: "\f1c4"; -} - -.fa.fa-file-image-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-image-o:before { - content: "\f1c5"; -} - -.fa.fa-file-photo-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-photo-o:before { - content: "\f1c5"; -} - -.fa.fa-file-picture-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-picture-o:before { - content: "\f1c5"; -} - -.fa.fa-file-archive-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-archive-o:before { - content: "\f1c6"; -} - -.fa.fa-file-zip-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-zip-o:before { - content: "\f1c6"; -} - -.fa.fa-file-audio-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-audio-o:before { - content: "\f1c7"; -} - -.fa.fa-file-sound-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-sound-o:before { - content: "\f1c7"; -} - -.fa.fa-file-video-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-video-o:before { - content: "\f1c8"; -} - -.fa.fa-file-movie-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-movie-o:before { - content: "\f1c8"; -} - -.fa.fa-file-code-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-file-code-o:before { - content: "\f1c9"; -} - -.fa.fa-vine { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-codepen { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-jsfiddle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-life-ring { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-life-bouy { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-life-bouy:before { - content: "\f1cd"; -} - -.fa.fa-life-buoy { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-life-buoy:before { - content: "\f1cd"; -} - -.fa.fa-life-saver { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-life-saver:before { - content: "\f1cd"; -} - -.fa.fa-support { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-support:before { - content: "\f1cd"; -} - -.fa.fa-circle-o-notch:before { - content: "\f1ce"; -} - -.fa.fa-rebel { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ra { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ra:before { - content: "\f1d0"; -} - -.fa.fa-resistance { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-resistance:before { - content: "\f1d0"; -} - -.fa.fa-empire { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ge { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ge:before { - content: "\f1d1"; -} - -.fa.fa-git-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-git { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-hacker-news { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-y-combinator-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-y-combinator-square:before { - content: "\f1d4"; -} - -.fa.fa-yc-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-yc-square:before { - content: "\f1d4"; -} - -.fa.fa-tencent-weibo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-qq { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-weixin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wechat { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wechat:before { - content: "\f1d7"; -} - -.fa.fa-send:before { - content: "\f1d8"; -} - -.fa.fa-paper-plane-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-paper-plane-o:before { - content: "\f1d8"; -} - -.fa.fa-send-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-send-o:before { - content: "\f1d8"; -} - -.fa.fa-circle-thin { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-circle-thin:before { - content: "\f111"; -} - -.fa.fa-header:before { - content: "\f1dc"; -} - -.fa.fa-sliders:before { - content: "\f1de"; -} - -.fa.fa-futbol-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-futbol-o:before { - content: "\f1e3"; -} - -.fa.fa-soccer-ball-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-soccer-ball-o:before { - content: "\f1e3"; -} - -.fa.fa-slideshare { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-twitch { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-yelp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-newspaper-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-newspaper-o:before { - content: "\f1ea"; -} - -.fa.fa-paypal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-wallet { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-visa { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-mastercard { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-discover { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-amex { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-paypal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-stripe { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bell-slash-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-bell-slash-o:before { - content: "\f1f6"; -} - -.fa.fa-trash:before { - content: "\f2ed"; -} - -.fa.fa-copyright { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-eyedropper:before { - content: "\f1fb"; -} - -.fa.fa-area-chart:before { - content: "\f1fe"; -} - -.fa.fa-pie-chart:before { - content: "\f200"; -} - -.fa.fa-line-chart:before { - content: "\f201"; -} - -.fa.fa-lastfm { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-lastfm-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ioxhost { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-angellist { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-cc:before { - content: "\f20a"; -} - -.fa.fa-ils:before { - content: "\f20b"; -} - -.fa.fa-shekel:before { - content: "\f20b"; -} - -.fa.fa-sheqel:before { - content: "\f20b"; -} - -.fa.fa-meanpath { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-meanpath:before { - content: "\f2b4"; -} - -.fa.fa-buysellads { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-connectdevelop { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-dashcube { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-forumbee { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-leanpub { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-sellsy { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-shirtsinbulk { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-simplybuilt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-skyatlas { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-diamond { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-diamond:before { - content: "\f3a5"; -} - -.fa.fa-intersex:before { - content: "\f224"; -} - -.fa.fa-facebook-official { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-facebook-official:before { - content: "\f09a"; -} - -.fa.fa-pinterest-p { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-whatsapp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-hotel:before { - content: "\f236"; -} - -.fa.fa-viacoin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-medium { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-y-combinator { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-yc { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-yc:before { - content: "\f23b"; -} - -.fa.fa-optin-monster { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-opencart { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-expeditedssl { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-battery-4:before { - content: "\f240"; -} - -.fa.fa-battery:before { - content: "\f240"; -} - -.fa.fa-battery-3:before { - content: "\f241"; -} - -.fa.fa-battery-2:before { - content: "\f242"; -} - -.fa.fa-battery-1:before { - content: "\f243"; -} - -.fa.fa-battery-0:before { - content: "\f244"; -} - -.fa.fa-object-group { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-object-ungroup { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-sticky-note-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-sticky-note-o:before { - content: "\f249"; -} - -.fa.fa-cc-jcb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cc-diners-club { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-clone { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hourglass-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hourglass-o:before { - content: "\f254"; -} - -.fa.fa-hourglass-1:before { - content: "\f251"; -} - -.fa.fa-hourglass-2:before { - content: "\f252"; -} - -.fa.fa-hourglass-3:before { - content: "\f253"; -} - -.fa.fa-hand-rock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-rock-o:before { - content: "\f255"; -} - -.fa.fa-hand-grab-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-grab-o:before { - content: "\f255"; -} - -.fa.fa-hand-paper-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-paper-o:before { - content: "\f256"; -} - -.fa.fa-hand-stop-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-stop-o:before { - content: "\f256"; -} - -.fa.fa-hand-scissors-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-scissors-o:before { - content: "\f257"; -} - -.fa.fa-hand-lizard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-lizard-o:before { - content: "\f258"; -} - -.fa.fa-hand-spock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-spock-o:before { - content: "\f259"; -} - -.fa.fa-hand-pointer-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-pointer-o:before { - content: "\f25a"; -} - -.fa.fa-hand-peace-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-hand-peace-o:before { - content: "\f25b"; -} - -.fa.fa-registered { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-creative-commons { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gg { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gg-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-tripadvisor { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-odnoklassniki { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-odnoklassniki-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-get-pocket { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wikipedia-w { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-safari { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-chrome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-firefox { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-opera { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-internet-explorer { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-television:before { - content: "\f26c"; -} - -.fa.fa-contao { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-500px { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-amazon { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-calendar-plus-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-calendar-plus-o:before { - content: "\f271"; -} - -.fa.fa-calendar-minus-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-calendar-minus-o:before { - content: "\f272"; -} - -.fa.fa-calendar-times-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-calendar-times-o:before { - content: "\f273"; -} - -.fa.fa-calendar-check-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-calendar-check-o:before { - content: "\f274"; -} - -.fa.fa-map-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-map-o:before { - content: "\f279"; -} - -.fa.fa-commenting:before { - content: "\f4ad"; -} - -.fa.fa-commenting-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-commenting-o:before { - content: "\f4ad"; -} - -.fa.fa-houzz { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-vimeo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-vimeo:before { - content: "\f27d"; -} - -.fa.fa-black-tie { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-fonticons { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-reddit-alien { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-edge { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-credit-card-alt:before { - content: "\f09d"; -} - -.fa.fa-codiepie { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-modx { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-fort-awesome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-usb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-product-hunt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-mixcloud { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-scribd { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-pause-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-pause-circle-o:before { - content: "\f28b"; -} - -.fa.fa-stop-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-stop-circle-o:before { - content: "\f28d"; -} - -.fa.fa-bluetooth { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-bluetooth-b { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-gitlab { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wpbeginner { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wpforms { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-envira { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wheelchair-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wheelchair-alt:before { - content: "\f368"; -} - -.fa.fa-question-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-question-circle-o:before { - content: "\f059"; -} - -.fa.fa-volume-control-phone:before { - content: "\f2a0"; -} - -.fa.fa-asl-interpreting:before { - content: "\f2a3"; -} - -.fa.fa-deafness:before { - content: "\f2a4"; -} - -.fa.fa-hard-of-hearing:before { - content: "\f2a4"; -} - -.fa.fa-glide { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-glide-g { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-signing:before { - content: "\f2a7"; -} - -.fa.fa-viadeo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-viadeo-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-snapchat { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-snapchat-ghost { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-snapchat-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-pied-piper { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-first-order { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-yoast { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-themeisle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-plus-official { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-plus-official:before { - content: "\f2b3"; -} - -.fa.fa-google-plus-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-google-plus-circle:before { - content: "\f2b3"; -} - -.fa.fa-font-awesome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-fa { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-fa:before { - content: "\f2b4"; -} - -.fa.fa-handshake-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-handshake-o:before { - content: "\f2b5"; -} - -.fa.fa-envelope-open-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-envelope-open-o:before { - content: "\f2b6"; -} - -.fa.fa-linode { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-address-book-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-address-book-o:before { - content: "\f2b9"; -} - -.fa.fa-vcard:before { - content: "\f2bb"; -} - -.fa.fa-address-card-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-address-card-o:before { - content: "\f2bb"; -} - -.fa.fa-vcard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-vcard-o:before { - content: "\f2bb"; -} - -.fa.fa-user-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-user-circle-o:before { - content: "\f2bd"; -} - -.fa.fa-user-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-user-o:before { - content: "\f007"; -} - -.fa.fa-id-badge { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-drivers-license:before { - content: "\f2c2"; -} - -.fa.fa-id-card-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-id-card-o:before { - content: "\f2c2"; -} - -.fa.fa-drivers-license-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-drivers-license-o:before { - content: "\f2c2"; -} - -.fa.fa-quora { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-free-code-camp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-telegram { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-thermometer-4:before { - content: "\f2c7"; -} - -.fa.fa-thermometer:before { - content: "\f2c7"; -} - -.fa.fa-thermometer-3:before { - content: "\f2c8"; -} - -.fa.fa-thermometer-2:before { - content: "\f2c9"; -} - -.fa.fa-thermometer-1:before { - content: "\f2ca"; -} - -.fa.fa-thermometer-0:before { - content: "\f2cb"; -} - -.fa.fa-bathtub:before { - content: "\f2cd"; -} - -.fa.fa-s15:before { - content: "\f2cd"; -} - -.fa.fa-window-maximize { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-window-restore { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-times-rectangle:before { - content: "\f410"; -} - -.fa.fa-window-close-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-window-close-o:before { - content: "\f410"; -} - -.fa.fa-times-rectangle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-times-rectangle-o:before { - content: "\f410"; -} - -.fa.fa-bandcamp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-grav { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-etsy { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-imdb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-ravelry { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-eercast { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-eercast:before { - content: "\f2da"; -} - -.fa.fa-snowflake-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.fa.fa-snowflake-o:before { - content: "\f2dc"; -} - -.fa.fa-superpowers { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-wpexplorer { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.fa.fa-cab:before { - content: "\f1ba"; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.icon, -.fas, -.far, -.fal, -.fad, -.fab { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; -} - -.icon-lg, .icon-large { - font-size: 1.3333333333em; - line-height: 0.75em; - vertical-align: -0.0667em; -} - -.icon-xs { - font-size: 0.75em; -} - -.icon-sm { - font-size: 0.875em; -} - -.icon-1x { - font-size: 1em; -} - -.icon-2x { - font-size: 2em; -} - -.icon-3x { - font-size: 3em; -} - -.icon-4x { - font-size: 4em; -} - -.icon-5x { - font-size: 5em; -} - -.icon-6x { - font-size: 6em; -} - -.icon-7x { - font-size: 7em; -} - -.icon-8x { - font-size: 8em; -} - -.icon-9x { - font-size: 9em; -} - -.icon-10x { - font-size: 10em; -} - -.icon-fw { - text-align: center; - width: 1.25em; -} - -.icon-ul { - list-style-type: none; - margin-left: 2.5em; - padding-left: 0; -} -.icon-ul > li { - position: relative; -} - -.icon-li { - left: -2em; - position: absolute; - text-align: center; - width: 2em; - line-height: inherit; -} - -.icon-border { - border: solid 0.08em #eee; - border-radius: 0.1em; - padding: 0.2em 0.25em 0.15em; -} - -.icon-pull-left { - float: left; -} - -.icon-pull-right { - float: right; -} - -.icon.icon-pull-left, -.fas.icon-pull-left, -.far.icon-pull-left, -.fal.icon-pull-left, -.fab.icon-pull-left { - margin-right: 0.3em; -} -.icon.icon-pull-right, -.fas.icon-pull-right, -.far.icon-pull-right, -.fal.icon-pull-right, -.fab.icon-pull-right { - margin-left: 0.3em; -} - -.icon-spin { - animation: fa-spin 2s infinite linear; -} - -.icon-pulse { - animation: fa-spin 1s infinite steps(8); -} - -@keyframes fa-spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} -.icon-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - transform: rotate(90deg); -} - -.icon-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - transform: rotate(180deg); -} - -.icon-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - transform: rotate(270deg); -} - -.icon-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - transform: scale(-1, 1); -} - -.icon-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - transform: scale(1, -1); -} - -.icon-flip-both, .icon-flip-horizontal.icon-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; - transform: scale(-1, -1); -} - -:root .icon-rotate-90, -:root .icon-rotate-180, -:root .icon-rotate-270, -:root .icon-flip-horizontal, -:root .icon-flip-vertical, -:root .icon-flip-both { - filter: none; -} - -.icon-stack { - display: inline-block; - height: 2em; - line-height: 2em; - position: relative; - vertical-align: middle; - width: 2.5em; -} - -.icon-stack-1x, -.icon-stack-2x { - left: 0; - position: absolute; - text-align: center; - width: 100%; -} - -.icon-stack-1x { - line-height: inherit; -} - -.icon-stack-2x { - font-size: 2em; -} - -.icon-inverse { - color: #fff; -} - -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen -readers do not read off random characters that represent icons */ -.icon-500px:before { - content: "\f26e"; -} - -.icon-accessible-icon:before { - content: "\f368"; -} - -.icon-accusoft:before { - content: "\f369"; -} - -.icon-acquisitions-incorporated:before { - content: "\f6af"; -} - -.icon-ad:before { - content: "\f641"; -} - -.icon-address-book:before { - content: "\f2b9"; -} - -.icon-address-card:before { - content: "\f2bb"; -} - -.icon-adjust:before { - content: "\f042"; -} - -.icon-adn:before { - content: "\f170"; -} - -.icon-adversal:before { - content: "\f36a"; -} - -.icon-affiliatetheme:before { - content: "\f36b"; -} - -.icon-air-freshener:before { - content: "\f5d0"; -} - -.icon-airbnb:before { - content: "\f834"; -} - -.icon-algolia:before { - content: "\f36c"; -} - -.icon-align-center:before { - content: "\f037"; -} - -.icon-align-justify:before { - content: "\f039"; -} - -.icon-align-left:before { - content: "\f036"; -} - -.icon-align-right:before { - content: "\f038"; -} - -.icon-alipay:before { - content: "\f642"; -} - -.icon-allergies:before { - content: "\f461"; -} - -.icon-amazon:before { - content: "\f270"; -} - -.icon-amazon-pay:before { - content: "\f42c"; -} - -.icon-ambulance:before { - content: "\f0f9"; -} - -.icon-american-sign-language-interpreting:before { - content: "\f2a3"; -} - -.icon-amilia:before { - content: "\f36d"; -} - -.icon-anchor:before { - content: "\f13d"; -} - -.icon-android:before { - content: "\f17b"; -} - -.icon-angellist:before { - content: "\f209"; -} - -.icon-angle-double-down:before { - content: "\f103"; -} - -.icon-angle-double-left:before { - content: "\f100"; -} - -.icon-angle-double-right:before { - content: "\f101"; -} - -.icon-angle-double-up:before { - content: "\f102"; -} - -.icon-angle-down:before { - content: "\f107"; -} - -.icon-angle-left:before { - content: "\f104"; -} - -.icon-angle-right:before { - content: "\f105"; -} - -.icon-angle-up:before { - content: "\f106"; -} - -.icon-angry:before { - content: "\f556"; -} - -.icon-angrycreative:before { - content: "\f36e"; -} - -.icon-angular:before { - content: "\f420"; -} - -.icon-ankh:before { - content: "\f644"; -} - -.icon-app-store:before { - content: "\f36f"; -} - -.icon-app-store-ios:before { - content: "\f370"; -} - -.icon-apper:before { - content: "\f371"; -} - -.icon-apple:before { - content: "\f179"; -} - -.icon-apple-alt:before { - content: "\f5d1"; -} - -.icon-apple-pay:before { - content: "\f415"; -} - -.icon-archive:before { - content: "\f187"; -} - -.icon-archway:before { - content: "\f557"; -} - -.icon-arrow-alt-circle-down:before { - content: "\f358"; -} - -.icon-arrow-alt-circle-left:before { - content: "\f359"; -} - -.icon-arrow-alt-circle-right:before { - content: "\f35a"; -} - -.icon-arrow-alt-circle-up:before { - content: "\f35b"; -} - -.icon-arrow-circle-down:before { - content: "\f0ab"; -} - -.icon-arrow-circle-left:before { - content: "\f0a8"; -} - -.icon-arrow-circle-right:before { - content: "\f0a9"; -} - -.icon-arrow-circle-up:before { - content: "\f0aa"; -} - -.icon-arrow-down:before { - content: "\f063"; -} - -.icon-arrow-left:before { - content: "\f060"; -} - -.icon-arrow-right:before { - content: "\f061"; -} - -.icon-arrow-up:before { - content: "\f062"; -} - -.icon-arrows-alt:before { - content: "\f0b2"; -} - -.icon-arrows-alt-h:before { - content: "\f337"; -} - -.icon-arrows-alt-v:before { - content: "\f338"; -} - -.icon-artstation:before { - content: "\f77a"; -} - -.icon-assistive-listening-systems:before { - content: "\f2a2"; -} - -.icon-asterisk:before { - content: "\f069"; -} - -.icon-asymmetrik:before { - content: "\f372"; -} - -.icon-at:before { - content: "\f1fa"; -} - -.icon-atlas:before { - content: "\f558"; -} - -.icon-atlassian:before { - content: "\f77b"; -} - -.icon-atom:before { - content: "\f5d2"; -} - -.icon-audible:before { - content: "\f373"; -} - -.icon-audio-description:before { - content: "\f29e"; -} - -.icon-autoprefixer:before { - content: "\f41c"; -} - -.icon-avianex:before { - content: "\f374"; -} - -.icon-aviato:before { - content: "\f421"; -} - -.icon-award:before { - content: "\f559"; -} - -.icon-aws:before { - content: "\f375"; -} - -.icon-baby:before { - content: "\f77c"; -} - -.icon-baby-carriage:before { - content: "\f77d"; -} - -.icon-backspace:before { - content: "\f55a"; -} - -.icon-backward:before { - content: "\f04a"; -} - -.icon-bacon:before { - content: "\f7e5"; -} - -.icon-bacteria:before { - content: "\e059"; -} - -.icon-bacterium:before { - content: "\e05a"; -} - -.icon-bahai:before { - content: "\f666"; -} - -.icon-balance-scale:before { - content: "\f24e"; -} - -.icon-balance-scale-left:before { - content: "\f515"; -} - -.icon-balance-scale-right:before { - content: "\f516"; -} - -.icon-ban:before { - content: "\f05e"; -} - -.icon-band-aid:before { - content: "\f462"; -} - -.icon-bandcamp:before { - content: "\f2d5"; -} - -.icon-barcode:before { - content: "\f02a"; -} - -.icon-bars:before { - content: "\f0c9"; -} - -.icon-baseball-ball:before { - content: "\f433"; -} - -.icon-basketball-ball:before { - content: "\f434"; -} - -.icon-bath:before { - content: "\f2cd"; -} - -.icon-battery-empty:before { - content: "\f244"; -} - -.icon-battery-full:before { - content: "\f240"; -} - -.icon-battery-half:before { - content: "\f242"; -} - -.icon-battery-quarter:before { - content: "\f243"; -} - -.icon-battery-three-quarters:before { - content: "\f241"; -} - -.icon-battle-net:before { - content: "\f835"; -} - -.icon-bed:before { - content: "\f236"; -} - -.icon-beer:before { - content: "\f0fc"; -} - -.icon-behance:before { - content: "\f1b4"; -} - -.icon-behance-square:before { - content: "\f1b5"; -} - -.icon-bell:before { - content: "\f0f3"; -} - -.icon-bell-slash:before { - content: "\f1f6"; -} - -.icon-bezier-curve:before { - content: "\f55b"; -} - -.icon-bible:before { - content: "\f647"; -} - -.icon-bicycle:before { - content: "\f206"; -} - -.icon-biking:before { - content: "\f84a"; -} - -.icon-bimobject:before { - content: "\f378"; -} - -.icon-binoculars:before { - content: "\f1e5"; -} - -.icon-biohazard:before { - content: "\f780"; -} - -.icon-birthday-cake:before { - content: "\f1fd"; -} - -.icon-bitbucket:before { - content: "\f171"; -} - -.icon-bitcoin:before { - content: "\f379"; -} - -.icon-bity:before { - content: "\f37a"; -} - -.icon-black-tie:before { - content: "\f27e"; -} - -.icon-blackberry:before { - content: "\f37b"; -} - -.icon-blender:before { - content: "\f517"; -} - -.icon-blender-phone:before { - content: "\f6b6"; -} - -.icon-blind:before { - content: "\f29d"; -} - -.icon-blog:before { - content: "\f781"; -} - -.icon-blogger:before { - content: "\f37c"; -} - -.icon-blogger-b:before { - content: "\f37d"; -} - -.icon-bluetooth:before { - content: "\f293"; -} - -.icon-bluetooth-b:before { - content: "\f294"; -} - -.icon-bold:before { - content: "\f032"; -} - -.icon-bolt:before { - content: "\f0e7"; -} - -.icon-bomb:before { - content: "\f1e2"; -} - -.icon-bone:before { - content: "\f5d7"; -} - -.icon-bong:before { - content: "\f55c"; -} - -.icon-book:before { - content: "\f02d"; -} - -.icon-book-dead:before { - content: "\f6b7"; -} - -.icon-book-medical:before { - content: "\f7e6"; -} - -.icon-book-open:before { - content: "\f518"; -} - -.icon-book-reader:before { - content: "\f5da"; -} - -.icon-bookmark:before { - content: "\f02e"; -} - -.icon-bootstrap:before { - content: "\f836"; -} - -.icon-border-all:before { - content: "\f84c"; -} - -.icon-border-none:before { - content: "\f850"; -} - -.icon-border-style:before { - content: "\f853"; -} - -.icon-bowling-ball:before { - content: "\f436"; -} - -.icon-box:before { - content: "\f466"; -} - -.icon-box-open:before { - content: "\f49e"; -} - -.icon-box-tissue:before { - content: "\e05b"; -} - -.icon-boxes:before { - content: "\f468"; -} - -.icon-braille:before { - content: "\f2a1"; -} - -.icon-brain:before { - content: "\f5dc"; -} - -.icon-bread-slice:before { - content: "\f7ec"; -} - -.icon-briefcase:before { - content: "\f0b1"; -} - -.icon-briefcase-medical:before { - content: "\f469"; -} - -.icon-broadcast-tower:before { - content: "\f519"; -} - -.icon-broom:before { - content: "\f51a"; -} - -.icon-brush:before { - content: "\f55d"; -} - -.icon-btc:before { - content: "\f15a"; -} - -.icon-buffer:before { - content: "\f837"; -} - -.icon-bug:before { - content: "\f188"; -} - -.icon-building:before { - content: "\f1ad"; -} - -.icon-bullhorn:before { - content: "\f0a1"; -} - -.icon-bullseye:before { - content: "\f140"; -} - -.icon-burn:before { - content: "\f46a"; -} - -.icon-buromobelexperte:before { - content: "\f37f"; -} - -.icon-bus:before { - content: "\f207"; -} - -.icon-bus-alt:before { - content: "\f55e"; -} - -.icon-business-time:before { - content: "\f64a"; -} - -.icon-buy-n-large:before { - content: "\f8a6"; -} - -.icon-buysellads:before { - content: "\f20d"; -} - -.icon-calculator:before { - content: "\f1ec"; -} - -.icon-calendar:before { - content: "\f133"; -} - -.icon-calendar-alt:before { - content: "\f073"; -} - -.icon-calendar-check:before { - content: "\f274"; -} - -.icon-calendar-day:before { - content: "\f783"; -} - -.icon-calendar-minus:before { - content: "\f272"; -} - -.icon-calendar-plus:before { - content: "\f271"; -} - -.icon-calendar-times:before { - content: "\f273"; -} - -.icon-calendar-week:before { - content: "\f784"; -} - -.icon-camera:before { - content: "\f030"; -} - -.icon-camera-retro:before { - content: "\f083"; -} - -.icon-campground:before { - content: "\f6bb"; -} - -.icon-canadian-maple-leaf:before { - content: "\f785"; -} - -.icon-candy-cane:before { - content: "\f786"; -} - -.icon-cannabis:before { - content: "\f55f"; -} - -.icon-capsules:before { - content: "\f46b"; -} - -.icon-car:before { - content: "\f1b9"; -} - -.icon-car-alt:before { - content: "\f5de"; -} - -.icon-car-battery:before { - content: "\f5df"; -} - -.icon-car-crash:before { - content: "\f5e1"; -} - -.icon-car-side:before { - content: "\f5e4"; -} - -.icon-caravan:before { - content: "\f8ff"; -} - -.icon-caret-down:before { - content: "\f0d7"; -} - -.icon-caret-left:before { - content: "\f0d9"; -} - -.icon-caret-right:before { - content: "\f0da"; -} - -.icon-caret-square-down:before { - content: "\f150"; -} - -.icon-caret-square-left:before { - content: "\f191"; -} - -.icon-caret-square-right:before { - content: "\f152"; -} - -.icon-caret-square-up:before { - content: "\f151"; -} - -.icon-caret-up:before { - content: "\f0d8"; -} - -.icon-carrot:before { - content: "\f787"; -} - -.icon-cart-arrow-down:before { - content: "\f218"; -} - -.icon-cart-plus:before { - content: "\f217"; -} - -.icon-cash-register:before { - content: "\f788"; -} - -.icon-cat:before { - content: "\f6be"; -} - -.icon-cc-amazon-pay:before { - content: "\f42d"; -} - -.icon-cc-amex:before { - content: "\f1f3"; -} - -.icon-cc-apple-pay:before { - content: "\f416"; -} - -.icon-cc-diners-club:before { - content: "\f24c"; -} - -.icon-cc-discover:before { - content: "\f1f2"; -} - -.icon-cc-jcb:before { - content: "\f24b"; -} - -.icon-cc-mastercard:before { - content: "\f1f1"; -} - -.icon-cc-paypal:before { - content: "\f1f4"; -} - -.icon-cc-stripe:before { - content: "\f1f5"; -} - -.icon-cc-visa:before { - content: "\f1f0"; -} - -.icon-centercode:before { - content: "\f380"; -} - -.icon-centos:before { - content: "\f789"; -} - -.icon-certificate:before { - content: "\f0a3"; -} - -.icon-chair:before { - content: "\f6c0"; -} - -.icon-chalkboard:before { - content: "\f51b"; -} - -.icon-chalkboard-teacher:before { - content: "\f51c"; -} - -.icon-charging-station:before { - content: "\f5e7"; -} - -.icon-chart-area:before { - content: "\f1fe"; -} - -.icon-chart-bar:before { - content: "\f080"; -} - -.icon-chart-line:before { - content: "\f201"; -} - -.icon-chart-pie:before { - content: "\f200"; -} - -.icon-check:before { - content: "\f00c"; -} - -.icon-check-circle:before { - content: "\f058"; -} - -.icon-check-double:before { - content: "\f560"; -} - -.icon-check-square:before { - content: "\f14a"; -} - -.icon-cheese:before { - content: "\f7ef"; -} - -.icon-chess:before { - content: "\f439"; -} - -.icon-chess-bishop:before { - content: "\f43a"; -} - -.icon-chess-board:before { - content: "\f43c"; -} - -.icon-chess-king:before { - content: "\f43f"; -} - -.icon-chess-knight:before { - content: "\f441"; -} - -.icon-chess-pawn:before { - content: "\f443"; -} - -.icon-chess-queen:before { - content: "\f445"; -} - -.icon-chess-rook:before { - content: "\f447"; -} - -.icon-chevron-circle-down:before { - content: "\f13a"; -} - -.icon-chevron-circle-left:before { - content: "\f137"; -} - -.icon-chevron-circle-right:before { - content: "\f138"; -} - -.icon-chevron-circle-up:before { - content: "\f139"; -} - -.icon-chevron-down:before { - content: "\f078"; -} - -.icon-chevron-left:before { - content: "\f053"; -} - -.icon-chevron-right:before { - content: "\f054"; -} - -.icon-chevron-up:before { - content: "\f077"; -} - -.icon-child:before { - content: "\f1ae"; -} - -.icon-chrome:before { - content: "\f268"; -} - -.icon-chromecast:before { - content: "\f838"; -} - -.icon-church:before { - content: "\f51d"; -} - -.icon-circle:before { - content: "\f111"; -} - -.icon-circle-notch:before { - content: "\f1ce"; -} - -.icon-city:before { - content: "\f64f"; -} - -.icon-clinic-medical:before { - content: "\f7f2"; -} - -.icon-clipboard:before { - content: "\f328"; -} - -.icon-clipboard-check:before { - content: "\f46c"; -} - -.icon-clipboard-list:before { - content: "\f46d"; -} - -.icon-clock:before { - content: "\f017"; -} - -.icon-clone:before { - content: "\f24d"; -} - -.icon-closed-captioning:before { - content: "\f20a"; -} - -.icon-cloud:before { - content: "\f0c2"; -} - -.icon-cloud-download-alt:before { - content: "\f381"; -} - -.icon-cloud-meatball:before { - content: "\f73b"; -} - -.icon-cloud-moon:before { - content: "\f6c3"; -} - -.icon-cloud-moon-rain:before { - content: "\f73c"; -} - -.icon-cloud-rain:before { - content: "\f73d"; -} - -.icon-cloud-showers-heavy:before { - content: "\f740"; -} - -.icon-cloud-sun:before { - content: "\f6c4"; -} - -.icon-cloud-sun-rain:before { - content: "\f743"; -} - -.icon-cloud-upload-alt:before { - content: "\f382"; -} - -.icon-cloudflare:before { - content: "\e07d"; -} - -.icon-cloudscale:before { - content: "\f383"; -} - -.icon-cloudsmith:before { - content: "\f384"; -} - -.icon-cloudversify:before { - content: "\f385"; -} - -.icon-cocktail:before { - content: "\f561"; -} - -.icon-code:before { - content: "\f121"; -} - -.icon-code-branch:before { - content: "\f126"; -} - -.icon-codepen:before { - content: "\f1cb"; -} - -.icon-codiepie:before { - content: "\f284"; -} - -.icon-coffee:before { - content: "\f0f4"; -} - -.icon-cog:before { - content: "\f013"; -} - -.icon-cogs:before { - content: "\f085"; -} - -.icon-coins:before { - content: "\f51e"; -} - -.icon-columns:before { - content: "\f0db"; -} - -.icon-comment:before { - content: "\f075"; -} - -.icon-comment-alt:before { - content: "\f27a"; -} - -.icon-comment-dollar:before { - content: "\f651"; -} - -.icon-comment-dots:before { - content: "\f4ad"; -} - -.icon-comment-medical:before { - content: "\f7f5"; -} - -.icon-comment-slash:before { - content: "\f4b3"; -} - -.icon-comments:before { - content: "\f086"; -} - -.icon-comments-dollar:before { - content: "\f653"; -} - -.icon-compact-disc:before { - content: "\f51f"; -} - -.icon-compass:before { - content: "\f14e"; -} - -.icon-compress:before { - content: "\f066"; -} - -.icon-compress-alt:before { - content: "\f422"; -} - -.icon-compress-arrows-alt:before { - content: "\f78c"; -} - -.icon-concierge-bell:before { - content: "\f562"; -} - -.icon-confluence:before { - content: "\f78d"; -} - -.icon-connectdevelop:before { - content: "\f20e"; -} - -.icon-contao:before { - content: "\f26d"; -} - -.icon-cookie:before { - content: "\f563"; -} - -.icon-cookie-bite:before { - content: "\f564"; -} - -.icon-copy:before { - content: "\f0c5"; -} - -.icon-copyright:before { - content: "\f1f9"; -} - -.icon-cotton-bureau:before { - content: "\f89e"; -} - -.icon-couch:before { - content: "\f4b8"; -} - -.icon-cpanel:before { - content: "\f388"; -} - -.icon-creative-commons:before { - content: "\f25e"; -} - -.icon-creative-commons-by:before { - content: "\f4e7"; -} - -.icon-creative-commons-nc:before { - content: "\f4e8"; -} - -.icon-creative-commons-nc-eu:before { - content: "\f4e9"; -} - -.icon-creative-commons-nc-jp:before { - content: "\f4ea"; -} - -.icon-creative-commons-nd:before { - content: "\f4eb"; -} - -.icon-creative-commons-pd:before { - content: "\f4ec"; -} - -.icon-creative-commons-pd-alt:before { - content: "\f4ed"; -} - -.icon-creative-commons-remix:before { - content: "\f4ee"; -} - -.icon-creative-commons-sa:before { - content: "\f4ef"; -} - -.icon-creative-commons-sampling:before { - content: "\f4f0"; -} - -.icon-creative-commons-sampling-plus:before { - content: "\f4f1"; -} - -.icon-creative-commons-share:before { - content: "\f4f2"; -} - -.icon-creative-commons-zero:before { - content: "\f4f3"; -} - -.icon-credit-card:before { - content: "\f09d"; -} - -.icon-critical-role:before { - content: "\f6c9"; -} - -.icon-crop:before { - content: "\f125"; -} - -.icon-crop-alt:before { - content: "\f565"; -} - -.icon-cross:before { - content: "\f654"; -} - -.icon-crosshairs:before { - content: "\f05b"; -} - -.icon-crow:before { - content: "\f520"; -} - -.icon-crown:before { - content: "\f521"; -} - -.icon-crutch:before { - content: "\f7f7"; -} - -.icon-css3:before { - content: "\f13c"; -} - -.icon-css3-alt:before { - content: "\f38b"; -} - -.icon-cube:before { - content: "\f1b2"; -} - -.icon-cubes:before { - content: "\f1b3"; -} - -.icon-cut:before { - content: "\f0c4"; -} - -.icon-cuttlefish:before { - content: "\f38c"; -} - -.icon-d-and-d:before { - content: "\f38d"; -} - -.icon-d-and-d-beyond:before { - content: "\f6ca"; -} - -.icon-dailymotion:before { - content: "\e052"; -} - -.icon-dashcube:before { - content: "\f210"; -} - -.icon-database:before { - content: "\f1c0"; -} - -.icon-deaf:before { - content: "\f2a4"; -} - -.icon-deezer:before { - content: "\e077"; -} - -.icon-delicious:before { - content: "\f1a5"; -} - -.icon-democrat:before { - content: "\f747"; -} - -.icon-deploydog:before { - content: "\f38e"; -} - -.icon-deskpro:before { - content: "\f38f"; -} - -.icon-desktop:before { - content: "\f108"; -} - -.icon-dev:before { - content: "\f6cc"; -} - -.icon-deviantart:before { - content: "\f1bd"; -} - -.icon-dharmachakra:before { - content: "\f655"; -} - -.icon-dhl:before { - content: "\f790"; -} - -.icon-diagnoses:before { - content: "\f470"; -} - -.icon-diaspora:before { - content: "\f791"; -} - -.icon-dice:before { - content: "\f522"; -} - -.icon-dice-d20:before { - content: "\f6cf"; -} - -.icon-dice-d6:before { - content: "\f6d1"; -} - -.icon-dice-five:before { - content: "\f523"; -} - -.icon-dice-four:before { - content: "\f524"; -} - -.icon-dice-one:before { - content: "\f525"; -} - -.icon-dice-six:before { - content: "\f526"; -} - -.icon-dice-three:before { - content: "\f527"; -} - -.icon-dice-two:before { - content: "\f528"; -} - -.icon-digg:before { - content: "\f1a6"; -} - -.icon-digital-ocean:before { - content: "\f391"; -} - -.icon-digital-tachograph:before { - content: "\f566"; -} - -.icon-directions:before { - content: "\f5eb"; -} - -.icon-discord:before { - content: "\f392"; -} - -.icon-discourse:before { - content: "\f393"; -} - -.icon-disease:before { - content: "\f7fa"; -} - -.icon-divide:before { - content: "\f529"; -} - -.icon-dizzy:before { - content: "\f567"; -} - -.icon-dna:before { - content: "\f471"; -} - -.icon-dochub:before { - content: "\f394"; -} - -.icon-docker:before { - content: "\f395"; -} - -.icon-dog:before { - content: "\f6d3"; -} - -.icon-dollar-sign:before { - content: "\f155"; -} - -.icon-dolly:before { - content: "\f472"; -} - -.icon-dolly-flatbed:before { - content: "\f474"; -} - -.icon-donate:before { - content: "\f4b9"; -} - -.icon-door-closed:before { - content: "\f52a"; -} - -.icon-door-open:before { - content: "\f52b"; -} - -.icon-dot-circle:before { - content: "\f192"; -} - -.icon-dove:before { - content: "\f4ba"; -} - -.icon-download:before { - content: "\f019"; -} - -.icon-draft2digital:before { - content: "\f396"; -} - -.icon-drafting-compass:before { - content: "\f568"; -} - -.icon-dragon:before { - content: "\f6d5"; -} - -.icon-draw-polygon:before { - content: "\f5ee"; -} - -.icon-dribbble:before { - content: "\f17d"; -} - -.icon-dribbble-square:before { - content: "\f397"; -} - -.icon-dropbox:before { - content: "\f16b"; -} - -.icon-drum:before { - content: "\f569"; -} - -.icon-drum-steelpan:before { - content: "\f56a"; -} - -.icon-drumstick-bite:before { - content: "\f6d7"; -} - -.icon-drupal:before { - content: "\f1a9"; -} - -.icon-dumbbell:before { - content: "\f44b"; -} - -.icon-dumpster:before { - content: "\f793"; -} - -.icon-dumpster-fire:before { - content: "\f794"; -} - -.icon-dungeon:before { - content: "\f6d9"; -} - -.icon-dyalog:before { - content: "\f399"; -} - -.icon-earlybirds:before { - content: "\f39a"; -} - -.icon-ebay:before { - content: "\f4f4"; -} - -.icon-edge:before { - content: "\f282"; -} - -.icon-edge-legacy:before { - content: "\e078"; -} - -.icon-edit:before { - content: "\f044"; -} - -.icon-egg:before { - content: "\f7fb"; -} - -.icon-eject:before { - content: "\f052"; -} - -.icon-elementor:before { - content: "\f430"; -} - -.icon-ellipsis-h:before { - content: "\f141"; -} - -.icon-ellipsis-v:before { - content: "\f142"; -} - -.icon-ello:before { - content: "\f5f1"; -} - -.icon-ember:before { - content: "\f423"; -} - -.icon-empire:before { - content: "\f1d1"; -} - -.icon-envelope:before { - content: "\f0e0"; -} - -.icon-envelope-open:before { - content: "\f2b6"; -} - -.icon-envelope-open-text:before { - content: "\f658"; -} - -.icon-envelope-square:before { - content: "\f199"; -} - -.icon-envira:before { - content: "\f299"; -} - -.icon-equals:before { - content: "\f52c"; -} - -.icon-eraser:before { - content: "\f12d"; -} - -.icon-erlang:before { - content: "\f39d"; -} - -.icon-ethereum:before { - content: "\f42e"; -} - -.icon-ethernet:before { - content: "\f796"; -} - -.icon-etsy:before { - content: "\f2d7"; -} - -.icon-euro-sign:before { - content: "\f153"; -} - -.icon-evernote:before { - content: "\f839"; -} - -.icon-exchange-alt:before { - content: "\f362"; -} - -.icon-exclamation:before { - content: "\f12a"; -} - -.icon-exclamation-circle:before { - content: "\f06a"; -} - -.icon-exclamation-triangle:before { - content: "\f071"; -} - -.icon-expand:before { - content: "\f065"; -} - -.icon-expand-alt:before { - content: "\f424"; -} - -.icon-expand-arrows-alt:before { - content: "\f31e"; -} - -.icon-expeditedssl:before { - content: "\f23e"; -} - -.icon-external-link-alt:before { - content: "\f35d"; -} - -.icon-external-link-square-alt:before { - content: "\f360"; -} - -.icon-eye:before { - content: "\f06e"; -} - -.icon-eye-dropper:before { - content: "\f1fb"; -} - -.icon-eye-slash:before { - content: "\f070"; -} - -.icon-facebook:before { - content: "\f09a"; -} - -.icon-facebook-f:before { - content: "\f39e"; -} - -.icon-facebook-messenger:before { - content: "\f39f"; -} - -.icon-facebook-square:before { - content: "\f082"; -} - -.icon-fan:before { - content: "\f863"; -} - -.icon-fantasy-flight-games:before { - content: "\f6dc"; -} - -.icon-fast-backward:before { - content: "\f049"; -} - -.icon-fast-forward:before { - content: "\f050"; -} - -.icon-faucet:before { - content: "\e005"; -} - -.icon-fax:before { - content: "\f1ac"; -} - -.icon-feather:before { - content: "\f52d"; -} - -.icon-feather-alt:before { - content: "\f56b"; -} - -.icon-fedex:before { - content: "\f797"; -} - -.icon-fedora:before { - content: "\f798"; -} - -.icon-female:before { - content: "\f182"; -} - -.icon-fighter-jet:before { - content: "\f0fb"; -} - -.icon-figma:before { - content: "\f799"; -} - -.icon-file:before { - content: "\f15b"; -} - -.icon-file-alt:before { - content: "\f15c"; -} - -.icon-file-archive:before { - content: "\f1c6"; -} - -.icon-file-audio:before { - content: "\f1c7"; -} - -.icon-file-code:before { - content: "\f1c9"; -} - -.icon-file-contract:before { - content: "\f56c"; -} - -.icon-file-csv:before { - content: "\f6dd"; -} - -.icon-file-download:before { - content: "\f56d"; -} - -.icon-file-excel:before { - content: "\f1c3"; -} - -.icon-file-export:before { - content: "\f56e"; -} - -.icon-file-image:before { - content: "\f1c5"; -} - -.icon-file-import:before { - content: "\f56f"; -} - -.icon-file-invoice:before { - content: "\f570"; -} - -.icon-file-invoice-dollar:before { - content: "\f571"; -} - -.icon-file-medical:before { - content: "\f477"; -} - -.icon-file-medical-alt:before { - content: "\f478"; -} - -.icon-file-pdf:before { - content: "\f1c1"; -} - -.icon-file-powerpoint:before { - content: "\f1c4"; -} - -.icon-file-prescription:before { - content: "\f572"; -} - -.icon-file-signature:before { - content: "\f573"; -} - -.icon-file-upload:before { - content: "\f574"; -} - -.icon-file-video:before { - content: "\f1c8"; -} - -.icon-file-word:before { - content: "\f1c2"; -} - -.icon-fill:before { - content: "\f575"; -} - -.icon-fill-drip:before { - content: "\f576"; -} - -.icon-film:before { - content: "\f008"; -} - -.icon-filter:before { - content: "\f0b0"; -} - -.icon-fingerprint:before { - content: "\f577"; -} - -.icon-fire:before { - content: "\f06d"; -} - -.icon-fire-alt:before { - content: "\f7e4"; -} - -.icon-fire-extinguisher:before { - content: "\f134"; -} - -.icon-firefox:before { - content: "\f269"; -} - -.icon-firefox-browser:before { - content: "\e007"; -} - -.icon-first-aid:before { - content: "\f479"; -} - -.icon-first-order:before { - content: "\f2b0"; -} - -.icon-first-order-alt:before { - content: "\f50a"; -} - -.icon-firstdraft:before { - content: "\f3a1"; -} - -.icon-fish:before { - content: "\f578"; -} - -.icon-fist-raised:before { - content: "\f6de"; -} - -.icon-flag:before { - content: "\f024"; -} - -.icon-flag-checkered:before { - content: "\f11e"; -} - -.icon-flag-usa:before { - content: "\f74d"; -} - -.icon-flask:before { - content: "\f0c3"; -} - -.icon-flickr:before { - content: "\f16e"; -} - -.icon-flipboard:before { - content: "\f44d"; -} - -.icon-flushed:before { - content: "\f579"; -} - -.icon-fly:before { - content: "\f417"; -} - -.icon-folder:before { - content: "\f07b"; -} - -.icon-folder-minus:before { - content: "\f65d"; -} - -.icon-folder-open:before { - content: "\f07c"; -} - -.icon-folder-plus:before { - content: "\f65e"; -} - -.icon-font:before { - content: "\f031"; -} - -.icon-font-awesome:before { - content: "\f2b4"; -} - -.icon-font-awesome-alt:before { - content: "\f35c"; -} - -.icon-font-awesome-flag:before { - content: "\f425"; -} - -.icon-font-awesome-logo-full:before { - content: "\f4e6"; -} - -.icon-fonticons:before { - content: "\f280"; -} - -.icon-fonticons-fi:before { - content: "\f3a2"; -} - -.icon-football-ball:before { - content: "\f44e"; -} - -.icon-fort-awesome:before { - content: "\f286"; -} - -.icon-fort-awesome-alt:before { - content: "\f3a3"; -} - -.icon-forumbee:before { - content: "\f211"; -} - -.icon-forward:before { - content: "\f04e"; -} - -.icon-foursquare:before { - content: "\f180"; -} - -.icon-free-code-camp:before { - content: "\f2c5"; -} - -.icon-freebsd:before { - content: "\f3a4"; -} - -.icon-frog:before { - content: "\f52e"; -} - -.icon-frown:before { - content: "\f119"; -} - -.icon-frown-open:before { - content: "\f57a"; -} - -.icon-fulcrum:before { - content: "\f50b"; -} - -.icon-funnel-dollar:before { - content: "\f662"; -} - -.icon-futbol:before { - content: "\f1e3"; -} - -.icon-galactic-republic:before { - content: "\f50c"; -} - -.icon-galactic-senate:before { - content: "\f50d"; -} - -.icon-gamepad:before { - content: "\f11b"; -} - -.icon-gas-pump:before { - content: "\f52f"; -} - -.icon-gavel:before { - content: "\f0e3"; -} - -.icon-gem:before { - content: "\f3a5"; -} - -.icon-genderless:before { - content: "\f22d"; -} - -.icon-get-pocket:before { - content: "\f265"; -} - -.icon-gg:before { - content: "\f260"; -} - -.icon-gg-circle:before { - content: "\f261"; -} - -.icon-ghost:before { - content: "\f6e2"; -} - -.icon-gift:before { - content: "\f06b"; -} - -.icon-gifts:before { - content: "\f79c"; -} - -.icon-git:before { - content: "\f1d3"; -} - -.icon-git-alt:before { - content: "\f841"; -} - -.icon-git-square:before { - content: "\f1d2"; -} - -.icon-github:before { - content: "\f09b"; -} - -.icon-github-alt:before { - content: "\f113"; -} - -.icon-github-square:before { - content: "\f092"; -} - -.icon-gitkraken:before { - content: "\f3a6"; -} - -.icon-gitlab:before { - content: "\f296"; -} - -.icon-gitter:before { - content: "\f426"; -} - -.icon-glass-cheers:before { - content: "\f79f"; -} - -.icon-glass-martini:before { - content: "\f000"; -} - -.icon-glass-martini-alt:before { - content: "\f57b"; -} - -.icon-glass-whiskey:before { - content: "\f7a0"; -} - -.icon-glasses:before { - content: "\f530"; -} - -.icon-glide:before { - content: "\f2a5"; -} - -.icon-glide-g:before { - content: "\f2a6"; -} - -.icon-globe:before { - content: "\f0ac"; -} - -.icon-globe-africa:before { - content: "\f57c"; -} - -.icon-globe-americas:before { - content: "\f57d"; -} - -.icon-globe-asia:before { - content: "\f57e"; -} - -.icon-globe-europe:before { - content: "\f7a2"; -} - -.icon-gofore:before { - content: "\f3a7"; -} - -.icon-golf-ball:before { - content: "\f450"; -} - -.icon-goodreads:before { - content: "\f3a8"; -} - -.icon-goodreads-g:before { - content: "\f3a9"; -} - -.icon-google:before { - content: "\f1a0"; -} - -.icon-google-drive:before { - content: "\f3aa"; -} - -.icon-google-pay:before { - content: "\e079"; -} - -.icon-google-play:before { - content: "\f3ab"; -} - -.icon-google-plus:before { - content: "\f2b3"; -} - -.icon-google-plus-g:before { - content: "\f0d5"; -} - -.icon-google-plus-square:before { - content: "\f0d4"; -} - -.icon-google-wallet:before { - content: "\f1ee"; -} - -.icon-gopuram:before { - content: "\f664"; -} - -.icon-graduation-cap:before { - content: "\f19d"; -} - -.icon-gratipay:before { - content: "\f184"; -} - -.icon-grav:before { - content: "\f2d6"; -} - -.icon-greater-than:before { - content: "\f531"; -} - -.icon-greater-than-equal:before { - content: "\f532"; -} - -.icon-grimace:before { - content: "\f57f"; -} - -.icon-grin:before { - content: "\f580"; -} - -.icon-grin-alt:before { - content: "\f581"; -} - -.icon-grin-beam:before { - content: "\f582"; -} - -.icon-grin-beam-sweat:before { - content: "\f583"; -} - -.icon-grin-hearts:before { - content: "\f584"; -} - -.icon-grin-squint:before { - content: "\f585"; -} - -.icon-grin-squint-tears:before { - content: "\f586"; -} - -.icon-grin-stars:before { - content: "\f587"; -} - -.icon-grin-tears:before { - content: "\f588"; -} - -.icon-grin-tongue:before { - content: "\f589"; -} - -.icon-grin-tongue-squint:before { - content: "\f58a"; -} - -.icon-grin-tongue-wink:before { - content: "\f58b"; -} - -.icon-grin-wink:before { - content: "\f58c"; -} - -.icon-grip-horizontal:before { - content: "\f58d"; -} - -.icon-grip-lines:before { - content: "\f7a4"; -} - -.icon-grip-lines-vertical:before { - content: "\f7a5"; -} - -.icon-grip-vertical:before { - content: "\f58e"; -} - -.icon-gripfire:before { - content: "\f3ac"; -} - -.icon-grunt:before { - content: "\f3ad"; -} - -.icon-guilded:before { - content: "\e07e"; -} - -.icon-guitar:before { - content: "\f7a6"; -} - -.icon-gulp:before { - content: "\f3ae"; -} - -.icon-h-square:before { - content: "\f0fd"; -} - -.icon-hacker-news:before { - content: "\f1d4"; -} - -.icon-hacker-news-square:before { - content: "\f3af"; -} - -.icon-hackerrank:before { - content: "\f5f7"; -} - -.icon-hamburger:before { - content: "\f805"; -} - -.icon-hammer:before { - content: "\f6e3"; -} - -.icon-hamsa:before { - content: "\f665"; -} - -.icon-hand-holding:before { - content: "\f4bd"; -} - -.icon-hand-holding-heart:before { - content: "\f4be"; -} - -.icon-hand-holding-medical:before { - content: "\e05c"; -} - -.icon-hand-holding-usd:before { - content: "\f4c0"; -} - -.icon-hand-holding-water:before { - content: "\f4c1"; -} - -.icon-hand-lizard:before { - content: "\f258"; -} - -.icon-hand-middle-finger:before { - content: "\f806"; -} - -.icon-hand-paper:before { - content: "\f256"; -} - -.icon-hand-peace:before { - content: "\f25b"; -} - -.icon-hand-point-down:before { - content: "\f0a7"; -} - -.icon-hand-point-left:before { - content: "\f0a5"; -} - -.icon-hand-point-right:before { - content: "\f0a4"; -} - -.icon-hand-point-up:before { - content: "\f0a6"; -} - -.icon-hand-pointer:before { - content: "\f25a"; -} - -.icon-hand-rock:before { - content: "\f255"; -} - -.icon-hand-scissors:before { - content: "\f257"; -} - -.icon-hand-sparkles:before { - content: "\e05d"; -} - -.icon-hand-spock:before { - content: "\f259"; -} - -.icon-hands:before { - content: "\f4c2"; -} - -.icon-hands-helping:before { - content: "\f4c4"; -} - -.icon-hands-wash:before { - content: "\e05e"; -} - -.icon-handshake:before { - content: "\f2b5"; -} - -.icon-handshake-alt-slash:before { - content: "\e05f"; -} - -.icon-handshake-slash:before { - content: "\e060"; -} - -.icon-hanukiah:before { - content: "\f6e6"; -} - -.icon-hard-hat:before { - content: "\f807"; -} - -.icon-hashtag:before { - content: "\f292"; -} - -.icon-hat-cowboy:before { - content: "\f8c0"; -} - -.icon-hat-cowboy-side:before { - content: "\f8c1"; -} - -.icon-hat-wizard:before { - content: "\f6e8"; -} - -.icon-hdd:before { - content: "\f0a0"; -} - -.icon-head-side-cough:before { - content: "\e061"; -} - -.icon-head-side-cough-slash:before { - content: "\e062"; -} - -.icon-head-side-mask:before { - content: "\e063"; -} - -.icon-head-side-virus:before { - content: "\e064"; -} - -.icon-heading:before { - content: "\f1dc"; -} - -.icon-headphones:before { - content: "\f025"; -} - -.icon-headphones-alt:before { - content: "\f58f"; -} - -.icon-headset:before { - content: "\f590"; -} - -.icon-heart:before { - content: "\f004"; -} - -.icon-heart-broken:before { - content: "\f7a9"; -} - -.icon-heartbeat:before { - content: "\f21e"; -} - -.icon-helicopter:before { - content: "\f533"; -} - -.icon-highlighter:before { - content: "\f591"; -} - -.icon-hiking:before { - content: "\f6ec"; -} - -.icon-hippo:before { - content: "\f6ed"; -} - -.icon-hips:before { - content: "\f452"; -} - -.icon-hire-a-helper:before { - content: "\f3b0"; -} - -.icon-history:before { - content: "\f1da"; -} - -.icon-hive:before { - content: "\e07f"; -} - -.icon-hockey-puck:before { - content: "\f453"; -} - -.icon-holly-berry:before { - content: "\f7aa"; -} - -.icon-home:before { - content: "\f015"; -} - -.icon-hooli:before { - content: "\f427"; -} - -.icon-hornbill:before { - content: "\f592"; -} - -.icon-horse:before { - content: "\f6f0"; -} - -.icon-horse-head:before { - content: "\f7ab"; -} - -.icon-hospital:before { - content: "\f0f8"; -} - -.icon-hospital-alt:before { - content: "\f47d"; -} - -.icon-hospital-symbol:before { - content: "\f47e"; -} - -.icon-hospital-user:before { - content: "\f80d"; -} - -.icon-hot-tub:before { - content: "\f593"; -} - -.icon-hotdog:before { - content: "\f80f"; -} - -.icon-hotel:before { - content: "\f594"; -} - -.icon-hotjar:before { - content: "\f3b1"; -} - -.icon-hourglass:before { - content: "\f254"; -} - -.icon-hourglass-end:before { - content: "\f253"; -} - -.icon-hourglass-half:before { - content: "\f252"; -} - -.icon-hourglass-start:before { - content: "\f251"; -} - -.icon-house-damage:before { - content: "\f6f1"; -} - -.icon-house-user:before { - content: "\e065"; -} - -.icon-houzz:before { - content: "\f27c"; -} - -.icon-hryvnia:before { - content: "\f6f2"; -} - -.icon-html5:before { - content: "\f13b"; -} - -.icon-hubspot:before { - content: "\f3b2"; -} - -.icon-i-cursor:before { - content: "\f246"; -} - -.icon-ice-cream:before { - content: "\f810"; -} - -.icon-icicles:before { - content: "\f7ad"; -} - -.icon-icons:before { - content: "\f86d"; -} - -.icon-id-badge:before { - content: "\f2c1"; -} - -.icon-id-card:before { - content: "\f2c2"; -} - -.icon-id-card-alt:before { - content: "\f47f"; -} - -.icon-ideal:before { - content: "\e013"; -} - -.icon-igloo:before { - content: "\f7ae"; -} - -.icon-image:before { - content: "\f03e"; -} - -.icon-images:before { - content: "\f302"; -} - -.icon-imdb:before { - content: "\f2d8"; -} - -.icon-inbox:before { - content: "\f01c"; -} - -.icon-indent:before { - content: "\f03c"; -} - -.icon-industry:before { - content: "\f275"; -} - -.icon-infinity:before { - content: "\f534"; -} - -.icon-info:before { - content: "\f129"; -} - -.icon-info-circle:before { - content: "\f05a"; -} - -.icon-innosoft:before { - content: "\e080"; -} - -.icon-instagram:before { - content: "\f16d"; -} - -.icon-instagram-square:before { - content: "\e055"; -} - -.icon-instalod:before { - content: "\e081"; -} - -.icon-intercom:before { - content: "\f7af"; -} - -.icon-internet-explorer:before { - content: "\f26b"; -} - -.icon-invision:before { - content: "\f7b0"; -} - -.icon-ioxhost:before { - content: "\f208"; -} - -.icon-italic:before { - content: "\f033"; -} - -.icon-itch-io:before { - content: "\f83a"; -} - -.icon-itunes:before { - content: "\f3b4"; -} - -.icon-itunes-note:before { - content: "\f3b5"; -} - -.icon-java:before { - content: "\f4e4"; -} - -.icon-jedi:before { - content: "\f669"; -} - -.icon-jedi-order:before { - content: "\f50e"; -} - -.icon-jenkins:before { - content: "\f3b6"; -} - -.icon-jira:before { - content: "\f7b1"; -} - -.icon-joget:before { - content: "\f3b7"; -} - -.icon-joint:before { - content: "\f595"; -} - -.icon-joomla:before { - content: "\f1aa"; -} - -.icon-journal-whills:before { - content: "\f66a"; -} - -.icon-js:before { - content: "\f3b8"; -} - -.icon-js-square:before { - content: "\f3b9"; -} - -.icon-jsfiddle:before { - content: "\f1cc"; -} - -.icon-kaaba:before { - content: "\f66b"; -} - -.icon-kaggle:before { - content: "\f5fa"; -} - -.icon-key:before { - content: "\f084"; -} - -.icon-keybase:before { - content: "\f4f5"; -} - -.icon-keyboard:before { - content: "\f11c"; -} - -.icon-keycdn:before { - content: "\f3ba"; -} - -.icon-khanda:before { - content: "\f66d"; -} - -.icon-kickstarter:before { - content: "\f3bb"; -} - -.icon-kickstarter-k:before { - content: "\f3bc"; -} - -.icon-kiss:before { - content: "\f596"; -} - -.icon-kiss-beam:before { - content: "\f597"; -} - -.icon-kiss-wink-heart:before { - content: "\f598"; -} - -.icon-kiwi-bird:before { - content: "\f535"; -} - -.icon-korvue:before { - content: "\f42f"; -} - -.icon-landmark:before { - content: "\f66f"; -} - -.icon-language:before { - content: "\f1ab"; -} - -.icon-laptop:before { - content: "\f109"; -} - -.icon-laptop-code:before { - content: "\f5fc"; -} - -.icon-laptop-house:before { - content: "\e066"; -} - -.icon-laptop-medical:before { - content: "\f812"; -} - -.icon-laravel:before { - content: "\f3bd"; -} - -.icon-lastfm:before { - content: "\f202"; -} - -.icon-lastfm-square:before { - content: "\f203"; -} - -.icon-laugh:before { - content: "\f599"; -} - -.icon-laugh-beam:before { - content: "\f59a"; -} - -.icon-laugh-squint:before { - content: "\f59b"; -} - -.icon-laugh-wink:before { - content: "\f59c"; -} - -.icon-layer-group:before { - content: "\f5fd"; -} - -.icon-leaf:before { - content: "\f06c"; -} - -.icon-leanpub:before { - content: "\f212"; -} - -.icon-lemon:before { - content: "\f094"; -} - -.icon-less:before { - content: "\f41d"; -} - -.icon-less-than:before { - content: "\f536"; -} - -.icon-less-than-equal:before { - content: "\f537"; -} - -.icon-level-down-alt:before { - content: "\f3be"; -} - -.icon-level-up-alt:before { - content: "\f3bf"; -} - -.icon-life-ring:before { - content: "\f1cd"; -} - -.icon-lightbulb:before { - content: "\f0eb"; -} - -.icon-line:before { - content: "\f3c0"; -} - -.icon-link:before { - content: "\f0c1"; -} - -.icon-linkedin:before { - content: "\f08c"; -} - -.icon-linkedin-in:before { - content: "\f0e1"; -} - -.icon-linode:before { - content: "\f2b8"; -} - -.icon-linux:before { - content: "\f17c"; -} - -.icon-lira-sign:before { - content: "\f195"; -} - -.icon-list:before { - content: "\f03a"; -} - -.icon-list-alt:before { - content: "\f022"; -} - -.icon-list-ol:before { - content: "\f0cb"; -} - -.icon-list-ul:before { - content: "\f0ca"; -} - -.icon-location-arrow:before { - content: "\f124"; -} - -.icon-lock:before { - content: "\f023"; -} - -.icon-lock-open:before { - content: "\f3c1"; -} - -.icon-long-arrow-alt-down:before { - content: "\f309"; -} - -.icon-long-arrow-alt-left:before { - content: "\f30a"; -} - -.icon-long-arrow-alt-right:before { - content: "\f30b"; -} - -.icon-long-arrow-alt-up:before { - content: "\f30c"; -} - -.icon-low-vision:before { - content: "\f2a8"; -} - -.icon-luggage-cart:before { - content: "\f59d"; -} - -.icon-lungs:before { - content: "\f604"; -} - -.icon-lungs-virus:before { - content: "\e067"; -} - -.icon-lyft:before { - content: "\f3c3"; -} - -.icon-magento:before { - content: "\f3c4"; -} - -.icon-magic:before { - content: "\f0d0"; -} - -.icon-magnet:before { - content: "\f076"; -} - -.icon-mail-bulk:before { - content: "\f674"; -} - -.icon-mailchimp:before { - content: "\f59e"; -} - -.icon-male:before { - content: "\f183"; -} - -.icon-mandalorian:before { - content: "\f50f"; -} - -.icon-map:before { - content: "\f279"; -} - -.icon-map-marked:before { - content: "\f59f"; -} - -.icon-map-marked-alt:before { - content: "\f5a0"; -} - -.icon-map-marker:before { - content: "\f041"; -} - -.icon-map-marker-alt:before { - content: "\f3c5"; -} - -.icon-map-pin:before { - content: "\f276"; -} - -.icon-map-signs:before { - content: "\f277"; -} - -.icon-markdown:before { - content: "\f60f"; -} - -.icon-marker:before { - content: "\f5a1"; -} - -.icon-mars:before { - content: "\f222"; -} - -.icon-mars-double:before { - content: "\f227"; -} - -.icon-mars-stroke:before { - content: "\f229"; -} - -.icon-mars-stroke-h:before { - content: "\f22b"; -} - -.icon-mars-stroke-v:before { - content: "\f22a"; -} - -.icon-mask:before { - content: "\f6fa"; -} - -.icon-mastodon:before { - content: "\f4f6"; -} - -.icon-maxcdn:before { - content: "\f136"; -} - -.icon-mdb:before { - content: "\f8ca"; -} - -.icon-medal:before { - content: "\f5a2"; -} - -.icon-medapps:before { - content: "\f3c6"; -} - -.icon-medium:before { - content: "\f23a"; -} - -.icon-medium-m:before { - content: "\f3c7"; -} - -.icon-medkit:before { - content: "\f0fa"; -} - -.icon-medrt:before { - content: "\f3c8"; -} - -.icon-meetup:before { - content: "\f2e0"; -} - -.icon-megaport:before { - content: "\f5a3"; -} - -.icon-meh:before { - content: "\f11a"; -} - -.icon-meh-blank:before { - content: "\f5a4"; -} - -.icon-meh-rolling-eyes:before { - content: "\f5a5"; -} - -.icon-memory:before { - content: "\f538"; -} - -.icon-mendeley:before { - content: "\f7b3"; -} - -.icon-menorah:before { - content: "\f676"; -} - -.icon-mercury:before { - content: "\f223"; -} - -.icon-meteor:before { - content: "\f753"; -} - -.icon-microblog:before { - content: "\e01a"; -} - -.icon-microchip:before { - content: "\f2db"; -} - -.icon-microphone:before { - content: "\f130"; -} - -.icon-microphone-alt:before { - content: "\f3c9"; -} - -.icon-microphone-alt-slash:before { - content: "\f539"; -} - -.icon-microphone-slash:before { - content: "\f131"; -} - -.icon-microscope:before { - content: "\f610"; -} - -.icon-microsoft:before { - content: "\f3ca"; -} - -.icon-minus:before { - content: "\f068"; -} - -.icon-minus-circle:before { - content: "\f056"; -} - -.icon-minus-square:before { - content: "\f146"; -} - -.icon-mitten:before { - content: "\f7b5"; -} - -.icon-mix:before { - content: "\f3cb"; -} - -.icon-mixcloud:before { - content: "\f289"; -} - -.icon-mixer:before { - content: "\e056"; -} - -.icon-mizuni:before { - content: "\f3cc"; -} - -.icon-mobile:before { - content: "\f10b"; -} - -.icon-mobile-alt:before { - content: "\f3cd"; -} - -.icon-modx:before { - content: "\f285"; -} - -.icon-monero:before { - content: "\f3d0"; -} - -.icon-money-bill:before { - content: "\f0d6"; -} - -.icon-money-bill-alt:before { - content: "\f3d1"; -} - -.icon-money-bill-wave:before { - content: "\f53a"; -} - -.icon-money-bill-wave-alt:before { - content: "\f53b"; -} - -.icon-money-check:before { - content: "\f53c"; -} - -.icon-money-check-alt:before { - content: "\f53d"; -} - -.icon-monument:before { - content: "\f5a6"; -} - -.icon-moon:before { - content: "\f186"; -} - -.icon-mortar-pestle:before { - content: "\f5a7"; -} - -.icon-mosque:before { - content: "\f678"; -} - -.icon-motorcycle:before { - content: "\f21c"; -} - -.icon-mountain:before { - content: "\f6fc"; -} - -.icon-mouse:before { - content: "\f8cc"; -} - -.icon-mouse-pointer:before { - content: "\f245"; -} - -.icon-mug-hot:before { - content: "\f7b6"; -} - -.icon-music:before { - content: "\f001"; -} - -.icon-napster:before { - content: "\f3d2"; -} - -.icon-neos:before { - content: "\f612"; -} - -.icon-network-wired:before { - content: "\f6ff"; -} - -.icon-neuter:before { - content: "\f22c"; -} - -.icon-newspaper:before { - content: "\f1ea"; -} - -.icon-nimblr:before { - content: "\f5a8"; -} - -.icon-node:before { - content: "\f419"; -} - -.icon-node-js:before { - content: "\f3d3"; -} - -.icon-not-equal:before { - content: "\f53e"; -} - -.icon-notes-medical:before { - content: "\f481"; -} - -.icon-npm:before { - content: "\f3d4"; -} - -.icon-ns8:before { - content: "\f3d5"; -} - -.icon-nutritionix:before { - content: "\f3d6"; -} - -.icon-object-group:before { - content: "\f247"; -} - -.icon-object-ungroup:before { - content: "\f248"; -} - -.icon-octopus-deploy:before { - content: "\e082"; -} - -.icon-odnoklassniki:before { - content: "\f263"; -} - -.icon-odnoklassniki-square:before { - content: "\f264"; -} - -.icon-oil-can:before { - content: "\f613"; -} - -.icon-old-republic:before { - content: "\f510"; -} - -.icon-om:before { - content: "\f679"; -} - -.icon-opencart:before { - content: "\f23d"; -} - -.icon-openid:before { - content: "\f19b"; -} - -.icon-opera:before { - content: "\f26a"; -} - -.icon-optin-monster:before { - content: "\f23c"; -} - -.icon-orcid:before { - content: "\f8d2"; -} - -.icon-osi:before { - content: "\f41a"; -} - -.icon-otter:before { - content: "\f700"; -} - -.icon-outdent:before { - content: "\f03b"; -} - -.icon-page4:before { - content: "\f3d7"; -} - -.icon-pagelines:before { - content: "\f18c"; -} - -.icon-pager:before { - content: "\f815"; -} - -.icon-paint-brush:before { - content: "\f1fc"; -} - -.icon-paint-roller:before { - content: "\f5aa"; -} - -.icon-palette:before { - content: "\f53f"; -} - -.icon-palfed:before { - content: "\f3d8"; -} - -.icon-pallet:before { - content: "\f482"; -} - -.icon-paper-plane:before { - content: "\f1d8"; -} - -.icon-paperclip:before { - content: "\f0c6"; -} - -.icon-parachute-box:before { - content: "\f4cd"; -} - -.icon-paragraph:before { - content: "\f1dd"; -} - -.icon-parking:before { - content: "\f540"; -} - -.icon-passport:before { - content: "\f5ab"; -} - -.icon-pastafarianism:before { - content: "\f67b"; -} - -.icon-paste:before { - content: "\f0ea"; -} - -.icon-patreon:before { - content: "\f3d9"; -} - -.icon-pause:before { - content: "\f04c"; -} - -.icon-pause-circle:before { - content: "\f28b"; -} - -.icon-paw:before { - content: "\f1b0"; -} - -.icon-paypal:before { - content: "\f1ed"; -} - -.icon-peace:before { - content: "\f67c"; -} - -.icon-pen:before { - content: "\f304"; -} - -.icon-pen-alt:before { - content: "\f305"; -} - -.icon-pen-fancy:before { - content: "\f5ac"; -} - -.icon-pen-nib:before { - content: "\f5ad"; -} - -.icon-pen-square:before { - content: "\f14b"; -} - -.icon-pencil-alt:before { - content: "\f303"; -} - -.icon-pencil-ruler:before { - content: "\f5ae"; -} - -.icon-penny-arcade:before { - content: "\f704"; -} - -.icon-people-arrows:before { - content: "\e068"; -} - -.icon-people-carry:before { - content: "\f4ce"; -} - -.icon-pepper-hot:before { - content: "\f816"; -} - -.icon-perbyte:before { - content: "\e083"; -} - -.icon-percent:before { - content: "\f295"; -} - -.icon-percentage:before { - content: "\f541"; -} - -.icon-periscope:before { - content: "\f3da"; -} - -.icon-person-booth:before { - content: "\f756"; -} - -.icon-phabricator:before { - content: "\f3db"; -} - -.icon-phoenix-framework:before { - content: "\f3dc"; -} - -.icon-phoenix-squadron:before { - content: "\f511"; -} - -.icon-phone:before { - content: "\f095"; -} - -.icon-phone-alt:before { - content: "\f879"; -} - -.icon-phone-slash:before { - content: "\f3dd"; -} - -.icon-phone-square:before { - content: "\f098"; -} - -.icon-phone-square-alt:before { - content: "\f87b"; -} - -.icon-phone-volume:before { - content: "\f2a0"; -} - -.icon-photo-video:before { - content: "\f87c"; -} - -.icon-php:before { - content: "\f457"; -} - -.icon-pied-piper:before { - content: "\f2ae"; -} - -.icon-pied-piper-alt:before { - content: "\f1a8"; -} - -.icon-pied-piper-hat:before { - content: "\f4e5"; -} - -.icon-pied-piper-pp:before { - content: "\f1a7"; -} - -.icon-pied-piper-square:before { - content: "\e01e"; -} - -.icon-piggy-bank:before { - content: "\f4d3"; -} - -.icon-pills:before { - content: "\f484"; -} - -.icon-pinterest:before { - content: "\f0d2"; -} - -.icon-pinterest-p:before { - content: "\f231"; -} - -.icon-pinterest-square:before { - content: "\f0d3"; -} - -.icon-pizza-slice:before { - content: "\f818"; -} - -.icon-place-of-worship:before { - content: "\f67f"; -} - -.icon-plane:before { - content: "\f072"; -} - -.icon-plane-arrival:before { - content: "\f5af"; -} - -.icon-plane-departure:before { - content: "\f5b0"; -} - -.icon-plane-slash:before { - content: "\e069"; -} - -.icon-play:before { - content: "\f04b"; -} - -.icon-play-circle:before { - content: "\f144"; -} - -.icon-playstation:before { - content: "\f3df"; -} - -.icon-plug:before { - content: "\f1e6"; -} - -.icon-plus:before { - content: "\f067"; -} - -.icon-plus-circle:before { - content: "\f055"; -} - -.icon-plus-square:before { - content: "\f0fe"; -} - -.icon-podcast:before { - content: "\f2ce"; -} - -.icon-poll:before { - content: "\f681"; -} - -.icon-poll-h:before { - content: "\f682"; -} - -.icon-poo:before { - content: "\f2fe"; -} - -.icon-poo-storm:before { - content: "\f75a"; -} - -.icon-poop:before { - content: "\f619"; -} - -.icon-portrait:before { - content: "\f3e0"; -} - -.icon-pound-sign:before { - content: "\f154"; -} - -.icon-power-off:before { - content: "\f011"; -} - -.icon-pray:before { - content: "\f683"; -} - -.icon-praying-hands:before { - content: "\f684"; -} - -.icon-prescription:before { - content: "\f5b1"; -} - -.icon-prescription-bottle:before { - content: "\f485"; -} - -.icon-prescription-bottle-alt:before { - content: "\f486"; -} - -.icon-print:before { - content: "\f02f"; -} - -.icon-procedures:before { - content: "\f487"; -} - -.icon-product-hunt:before { - content: "\f288"; -} - -.icon-project-diagram:before { - content: "\f542"; -} - -.icon-pump-medical:before { - content: "\e06a"; -} - -.icon-pump-soap:before { - content: "\e06b"; -} - -.icon-pushed:before { - content: "\f3e1"; -} - -.icon-puzzle-piece:before { - content: "\f12e"; -} - -.icon-python:before { - content: "\f3e2"; -} - -.icon-qq:before { - content: "\f1d6"; -} - -.icon-qrcode:before { - content: "\f029"; -} - -.icon-question:before { - content: "\f128"; -} - -.icon-question-circle:before { - content: "\f059"; -} - -.icon-quidditch:before { - content: "\f458"; -} - -.icon-quinscape:before { - content: "\f459"; -} - -.icon-quora:before { - content: "\f2c4"; -} - -.icon-quote-left:before { - content: "\f10d"; -} - -.icon-quote-right:before { - content: "\f10e"; -} - -.icon-quran:before { - content: "\f687"; -} - -.icon-r-project:before { - content: "\f4f7"; -} - -.icon-radiation:before { - content: "\f7b9"; -} - -.icon-radiation-alt:before { - content: "\f7ba"; -} - -.icon-rainbow:before { - content: "\f75b"; -} - -.icon-random:before { - content: "\f074"; -} - -.icon-raspberry-pi:before { - content: "\f7bb"; -} - -.icon-ravelry:before { - content: "\f2d9"; -} - -.icon-react:before { - content: "\f41b"; -} - -.icon-reacteurope:before { - content: "\f75d"; -} - -.icon-readme:before { - content: "\f4d5"; -} - -.icon-rebel:before { - content: "\f1d0"; -} - -.icon-receipt:before { - content: "\f543"; -} - -.icon-record-vinyl:before { - content: "\f8d9"; -} - -.icon-recycle:before { - content: "\f1b8"; -} - -.icon-red-river:before { - content: "\f3e3"; -} - -.icon-reddit:before { - content: "\f1a1"; -} - -.icon-reddit-alien:before { - content: "\f281"; -} - -.icon-reddit-square:before { - content: "\f1a2"; -} - -.icon-redhat:before { - content: "\f7bc"; -} - -.icon-redo:before { - content: "\f01e"; -} - -.icon-redo-alt:before { - content: "\f2f9"; -} - -.icon-registered:before { - content: "\f25d"; -} - -.icon-remove-format:before { - content: "\f87d"; -} - -.icon-renren:before { - content: "\f18b"; -} - -.icon-reply:before { - content: "\f3e5"; -} - -.icon-reply-all:before { - content: "\f122"; -} - -.icon-replyd:before { - content: "\f3e6"; -} - -.icon-republican:before { - content: "\f75e"; -} - -.icon-researchgate:before { - content: "\f4f8"; -} - -.icon-resolving:before { - content: "\f3e7"; -} - -.icon-restroom:before { - content: "\f7bd"; -} - -.icon-retweet:before { - content: "\f079"; -} - -.icon-rev:before { - content: "\f5b2"; -} - -.icon-ribbon:before { - content: "\f4d6"; -} - -.icon-ring:before { - content: "\f70b"; -} - -.icon-road:before { - content: "\f018"; -} - -.icon-robot:before { - content: "\f544"; -} - -.icon-rocket:before { - content: "\f135"; -} - -.icon-rocketchat:before { - content: "\f3e8"; -} - -.icon-rockrms:before { - content: "\f3e9"; -} - -.icon-route:before { - content: "\f4d7"; -} - -.icon-rss:before { - content: "\f09e"; -} - -.icon-rss-square:before { - content: "\f143"; -} - -.icon-ruble-sign:before { - content: "\f158"; -} - -.icon-ruler:before { - content: "\f545"; -} - -.icon-ruler-combined:before { - content: "\f546"; -} - -.icon-ruler-horizontal:before { - content: "\f547"; -} - -.icon-ruler-vertical:before { - content: "\f548"; -} - -.icon-running:before { - content: "\f70c"; -} - -.icon-rupee-sign:before { - content: "\f156"; -} - -.icon-rust:before { - content: "\e07a"; -} - -.icon-sad-cry:before { - content: "\f5b3"; -} - -.icon-sad-tear:before { - content: "\f5b4"; -} - -.icon-safari:before { - content: "\f267"; -} - -.icon-salesforce:before { - content: "\f83b"; -} - -.icon-sass:before { - content: "\f41e"; -} - -.icon-satellite:before { - content: "\f7bf"; -} - -.icon-satellite-dish:before { - content: "\f7c0"; -} - -.icon-save:before { - content: "\f0c7"; -} - -.icon-schlix:before { - content: "\f3ea"; -} - -.icon-school:before { - content: "\f549"; -} - -.icon-screwdriver:before { - content: "\f54a"; -} - -.icon-scribd:before { - content: "\f28a"; -} - -.icon-scroll:before { - content: "\f70e"; -} - -.icon-sd-card:before { - content: "\f7c2"; -} - -.icon-search:before { - content: "\f002"; -} - -.icon-search-dollar:before { - content: "\f688"; -} - -.icon-search-location:before { - content: "\f689"; -} - -.icon-search-minus:before { - content: "\f010"; -} - -.icon-search-plus:before { - content: "\f00e"; -} - -.icon-searchengin:before { - content: "\f3eb"; -} - -.icon-seedling:before { - content: "\f4d8"; -} - -.icon-sellcast:before { - content: "\f2da"; -} - -.icon-sellsy:before { - content: "\f213"; -} - -.icon-server:before { - content: "\f233"; -} - -.icon-servicestack:before { - content: "\f3ec"; -} - -.icon-shapes:before { - content: "\f61f"; -} - -.icon-share:before { - content: "\f064"; -} - -.icon-share-alt:before { - content: "\f1e0"; -} - -.icon-share-alt-square:before { - content: "\f1e1"; -} - -.icon-share-square:before { - content: "\f14d"; -} - -.icon-shekel-sign:before { - content: "\f20b"; -} - -.icon-shield-alt:before { - content: "\f3ed"; -} - -.icon-shield-virus:before { - content: "\e06c"; -} - -.icon-ship:before { - content: "\f21a"; -} - -.icon-shipping-fast:before { - content: "\f48b"; -} - -.icon-shirtsinbulk:before { - content: "\f214"; -} - -.icon-shoe-prints:before { - content: "\f54b"; -} - -.icon-shopify:before { - content: "\e057"; -} - -.icon-shopping-bag:before { - content: "\f290"; -} - -.icon-shopping-basket:before { - content: "\f291"; -} - -.icon-shopping-cart:before { - content: "\f07a"; -} - -.icon-shopware:before { - content: "\f5b5"; -} - -.icon-shower:before { - content: "\f2cc"; -} - -.icon-shuttle-van:before { - content: "\f5b6"; -} - -.icon-sign:before { - content: "\f4d9"; -} - -.icon-sign-in-alt:before { - content: "\f2f6"; -} - -.icon-sign-language:before { - content: "\f2a7"; -} - -.icon-sign-out-alt:before { - content: "\f2f5"; -} - -.icon-signal:before { - content: "\f012"; -} - -.icon-signature:before { - content: "\f5b7"; -} - -.icon-sim-card:before { - content: "\f7c4"; -} - -.icon-simplybuilt:before { - content: "\f215"; -} - -.icon-sink:before { - content: "\e06d"; -} - -.icon-sistrix:before { - content: "\f3ee"; -} - -.icon-sitemap:before { - content: "\f0e8"; -} - -.icon-sith:before { - content: "\f512"; -} - -.icon-skating:before { - content: "\f7c5"; -} - -.icon-sketch:before { - content: "\f7c6"; -} - -.icon-skiing:before { - content: "\f7c9"; -} - -.icon-skiing-nordic:before { - content: "\f7ca"; -} - -.icon-skull:before { - content: "\f54c"; -} - -.icon-skull-crossbones:before { - content: "\f714"; -} - -.icon-skyatlas:before { - content: "\f216"; -} - -.icon-skype:before { - content: "\f17e"; -} - -.icon-slack:before { - content: "\f198"; -} - -.icon-slack-hash:before { - content: "\f3ef"; -} - -.icon-slash:before { - content: "\f715"; -} - -.icon-sleigh:before { - content: "\f7cc"; -} - -.icon-sliders-h:before { - content: "\f1de"; -} - -.icon-slideshare:before { - content: "\f1e7"; -} - -.icon-smile:before { - content: "\f118"; -} - -.icon-smile-beam:before { - content: "\f5b8"; -} - -.icon-smile-wink:before { - content: "\f4da"; -} - -.icon-smog:before { - content: "\f75f"; -} - -.icon-smoking:before { - content: "\f48d"; -} - -.icon-smoking-ban:before { - content: "\f54d"; -} - -.icon-sms:before { - content: "\f7cd"; -} - -.icon-snapchat:before { - content: "\f2ab"; -} - -.icon-snapchat-ghost:before { - content: "\f2ac"; -} - -.icon-snapchat-square:before { - content: "\f2ad"; -} - -.icon-snowboarding:before { - content: "\f7ce"; -} - -.icon-snowflake:before { - content: "\f2dc"; -} - -.icon-snowman:before { - content: "\f7d0"; -} - -.icon-snowplow:before { - content: "\f7d2"; -} - -.icon-soap:before { - content: "\e06e"; -} - -.icon-socks:before { - content: "\f696"; -} - -.icon-solar-panel:before { - content: "\f5ba"; -} - -.icon-sort:before { - content: "\f0dc"; -} - -.icon-sort-alpha-down:before { - content: "\f15d"; -} - -.icon-sort-alpha-down-alt:before { - content: "\f881"; -} - -.icon-sort-alpha-up:before { - content: "\f15e"; -} - -.icon-sort-alpha-up-alt:before { - content: "\f882"; -} - -.icon-sort-amount-down:before { - content: "\f160"; -} - -.icon-sort-amount-down-alt:before { - content: "\f884"; -} - -.icon-sort-amount-up:before { - content: "\f161"; -} - -.icon-sort-amount-up-alt:before { - content: "\f885"; -} - -.icon-sort-down:before { - content: "\f0dd"; -} - -.icon-sort-numeric-down:before { - content: "\f162"; -} - -.icon-sort-numeric-down-alt:before { - content: "\f886"; -} - -.icon-sort-numeric-up:before { - content: "\f163"; -} - -.icon-sort-numeric-up-alt:before { - content: "\f887"; -} - -.icon-sort-up:before { - content: "\f0de"; -} - -.icon-soundcloud:before { - content: "\f1be"; -} - -.icon-sourcetree:before { - content: "\f7d3"; -} - -.icon-spa:before { - content: "\f5bb"; -} - -.icon-space-shuttle:before { - content: "\f197"; -} - -.icon-speakap:before { - content: "\f3f3"; -} - -.icon-speaker-deck:before { - content: "\f83c"; -} - -.icon-spell-check:before { - content: "\f891"; -} - -.icon-spider:before { - content: "\f717"; -} - -.icon-spinner:before { - content: "\f110"; -} - -.icon-splotch:before { - content: "\f5bc"; -} - -.icon-spotify:before { - content: "\f1bc"; -} - -.icon-spray-can:before { - content: "\f5bd"; -} - -.icon-square:before { - content: "\f0c8"; -} - -.icon-square-full:before { - content: "\f45c"; -} - -.icon-square-root-alt:before { - content: "\f698"; -} - -.icon-squarespace:before { - content: "\f5be"; -} - -.icon-stack-exchange:before { - content: "\f18d"; -} - -.icon-stack-overflow:before { - content: "\f16c"; -} - -.icon-stackpath:before { - content: "\f842"; -} - -.icon-stamp:before { - content: "\f5bf"; -} - -.icon-star:before { - content: "\f005"; -} - -.icon-star-and-crescent:before { - content: "\f699"; -} - -.icon-star-half:before { - content: "\f089"; -} - -.icon-star-half-alt:before { - content: "\f5c0"; -} - -.icon-star-of-david:before { - content: "\f69a"; -} - -.icon-star-of-life:before { - content: "\f621"; -} - -.icon-staylinked:before { - content: "\f3f5"; -} - -.icon-steam:before { - content: "\f1b6"; -} - -.icon-steam-square:before { - content: "\f1b7"; -} - -.icon-steam-symbol:before { - content: "\f3f6"; -} - -.icon-step-backward:before { - content: "\f048"; -} - -.icon-step-forward:before { - content: "\f051"; -} - -.icon-stethoscope:before { - content: "\f0f1"; -} - -.icon-sticker-mule:before { - content: "\f3f7"; -} - -.icon-sticky-note:before { - content: "\f249"; -} - -.icon-stop:before { - content: "\f04d"; -} - -.icon-stop-circle:before { - content: "\f28d"; -} - -.icon-stopwatch:before { - content: "\f2f2"; -} - -.icon-stopwatch-20:before { - content: "\e06f"; -} - -.icon-store:before { - content: "\f54e"; -} - -.icon-store-alt:before { - content: "\f54f"; -} - -.icon-store-alt-slash:before { - content: "\e070"; -} - -.icon-store-slash:before { - content: "\e071"; -} - -.icon-strava:before { - content: "\f428"; -} - -.icon-stream:before { - content: "\f550"; -} - -.icon-street-view:before { - content: "\f21d"; -} - -.icon-strikethrough:before { - content: "\f0cc"; -} - -.icon-stripe:before { - content: "\f429"; -} - -.icon-stripe-s:before { - content: "\f42a"; -} - -.icon-stroopwafel:before { - content: "\f551"; -} - -.icon-studiovinari:before { - content: "\f3f8"; -} - -.icon-stumbleupon:before { - content: "\f1a4"; -} - -.icon-stumbleupon-circle:before { - content: "\f1a3"; -} - -.icon-subscript:before { - content: "\f12c"; -} - -.icon-subway:before { - content: "\f239"; -} - -.icon-suitcase:before { - content: "\f0f2"; -} - -.icon-suitcase-rolling:before { - content: "\f5c1"; -} - -.icon-sun:before { - content: "\f185"; -} - -.icon-superpowers:before { - content: "\f2dd"; -} - -.icon-superscript:before { - content: "\f12b"; -} - -.icon-supple:before { - content: "\f3f9"; -} - -.icon-surprise:before { - content: "\f5c2"; -} - -.icon-suse:before { - content: "\f7d6"; -} - -.icon-swatchbook:before { - content: "\f5c3"; -} - -.icon-swift:before { - content: "\f8e1"; -} - -.icon-swimmer:before { - content: "\f5c4"; -} - -.icon-swimming-pool:before { - content: "\f5c5"; -} - -.icon-symfony:before { - content: "\f83d"; -} - -.icon-synagogue:before { - content: "\f69b"; -} - -.icon-sync:before { - content: "\f021"; -} - -.icon-sync-alt:before { - content: "\f2f1"; -} - -.icon-syringe:before { - content: "\f48e"; -} - -.icon-table:before { - content: "\f0ce"; -} - -.icon-table-tennis:before { - content: "\f45d"; -} - -.icon-tablet:before { - content: "\f10a"; -} - -.icon-tablet-alt:before { - content: "\f3fa"; -} - -.icon-tablets:before { - content: "\f490"; -} - -.icon-tachometer-alt:before { - content: "\f3fd"; -} - -.icon-tag:before { - content: "\f02b"; -} - -.icon-tags:before { - content: "\f02c"; -} - -.icon-tape:before { - content: "\f4db"; -} - -.icon-tasks:before { - content: "\f0ae"; -} - -.icon-taxi:before { - content: "\f1ba"; -} - -.icon-teamspeak:before { - content: "\f4f9"; -} - -.icon-teeth:before { - content: "\f62e"; -} - -.icon-teeth-open:before { - content: "\f62f"; -} - -.icon-telegram:before { - content: "\f2c6"; -} - -.icon-telegram-plane:before { - content: "\f3fe"; -} - -.icon-temperature-high:before { - content: "\f769"; -} - -.icon-temperature-low:before { - content: "\f76b"; -} - -.icon-tencent-weibo:before { - content: "\f1d5"; -} - -.icon-tenge:before { - content: "\f7d7"; -} - -.icon-terminal:before { - content: "\f120"; -} - -.icon-text-height:before { - content: "\f034"; -} - -.icon-text-width:before { - content: "\f035"; -} - -.icon-th:before { - content: "\f00a"; -} - -.icon-th-large:before { - content: "\f009"; -} - -.icon-th-list:before { - content: "\f00b"; -} - -.icon-the-red-yeti:before { - content: "\f69d"; -} - -.icon-theater-masks:before { - content: "\f630"; -} - -.icon-themeco:before { - content: "\f5c6"; -} - -.icon-themeisle:before { - content: "\f2b2"; -} - -.icon-thermometer:before { - content: "\f491"; -} - -.icon-thermometer-empty:before { - content: "\f2cb"; -} - -.icon-thermometer-full:before { - content: "\f2c7"; -} - -.icon-thermometer-half:before { - content: "\f2c9"; -} - -.icon-thermometer-quarter:before { - content: "\f2ca"; -} - -.icon-thermometer-three-quarters:before { - content: "\f2c8"; -} - -.icon-think-peaks:before { - content: "\f731"; -} - -.icon-thumbs-down:before { - content: "\f165"; -} - -.icon-thumbs-up:before { - content: "\f164"; -} - -.icon-thumbtack:before { - content: "\f08d"; -} - -.icon-ticket-alt:before { - content: "\f3ff"; -} - -.icon-tiktok:before { - content: "\e07b"; -} - -.icon-times:before { - content: "\f00d"; -} - -.icon-times-circle:before { - content: "\f057"; -} - -.icon-tint:before { - content: "\f043"; -} - -.icon-tint-slash:before { - content: "\f5c7"; -} - -.icon-tired:before { - content: "\f5c8"; -} - -.icon-toggle-off:before { - content: "\f204"; -} - -.icon-toggle-on:before { - content: "\f205"; -} - -.icon-toilet:before { - content: "\f7d8"; -} - -.icon-toilet-paper:before { - content: "\f71e"; -} - -.icon-toilet-paper-slash:before { - content: "\e072"; -} - -.icon-toolbox:before { - content: "\f552"; -} - -.icon-tools:before { - content: "\f7d9"; -} - -.icon-tooth:before { - content: "\f5c9"; -} - -.icon-torah:before { - content: "\f6a0"; -} - -.icon-torii-gate:before { - content: "\f6a1"; -} - -.icon-tractor:before { - content: "\f722"; -} - -.icon-trade-federation:before { - content: "\f513"; -} - -.icon-trademark:before { - content: "\f25c"; -} - -.icon-traffic-light:before { - content: "\f637"; -} - -.icon-trailer:before { - content: "\e041"; -} - -.icon-train:before { - content: "\f238"; -} - -.icon-tram:before { - content: "\f7da"; -} - -.icon-transgender:before { - content: "\f224"; -} - -.icon-transgender-alt:before { - content: "\f225"; -} - -.icon-trash:before { - content: "\f1f8"; -} - -.icon-trash-alt:before { - content: "\f2ed"; -} - -.icon-trash-restore:before { - content: "\f829"; -} - -.icon-trash-restore-alt:before { - content: "\f82a"; -} - -.icon-tree:before { - content: "\f1bb"; -} - -.icon-trello:before { - content: "\f181"; -} - -.icon-trophy:before { - content: "\f091"; -} - -.icon-truck:before { - content: "\f0d1"; -} - -.icon-truck-loading:before { - content: "\f4de"; -} - -.icon-truck-monster:before { - content: "\f63b"; -} - -.icon-truck-moving:before { - content: "\f4df"; -} - -.icon-truck-pickup:before { - content: "\f63c"; -} - -.icon-tshirt:before { - content: "\f553"; -} - -.icon-tty:before { - content: "\f1e4"; -} - -.icon-tumblr:before { - content: "\f173"; -} - -.icon-tumblr-square:before { - content: "\f174"; -} - -.icon-tv:before { - content: "\f26c"; -} - -.icon-twitch:before { - content: "\f1e8"; -} - -.icon-twitter:before { - content: "\f099"; -} - -.icon-twitter-square:before { - content: "\f081"; -} - -.icon-typo3:before { - content: "\f42b"; -} - -.icon-uber:before { - content: "\f402"; -} - -.icon-ubuntu:before { - content: "\f7df"; -} - -.icon-uikit:before { - content: "\f403"; -} - -.icon-umbraco:before { - content: "\f8e8"; -} - -.icon-umbrella:before { - content: "\f0e9"; -} - -.icon-umbrella-beach:before { - content: "\f5ca"; -} - -.icon-uncharted:before { - content: "\e084"; -} - -.icon-underline:before { - content: "\f0cd"; -} - -.icon-undo:before { - content: "\f0e2"; -} - -.icon-undo-alt:before { - content: "\f2ea"; -} - -.icon-uniregistry:before { - content: "\f404"; -} - -.icon-unity:before { - content: "\e049"; -} - -.icon-universal-access:before { - content: "\f29a"; -} - -.icon-university:before { - content: "\f19c"; -} - -.icon-unlink:before { - content: "\f127"; -} - -.icon-unlock:before { - content: "\f09c"; -} - -.icon-unlock-alt:before { - content: "\f13e"; -} - -.icon-unsplash:before { - content: "\e07c"; -} - -.icon-untappd:before { - content: "\f405"; -} - -.icon-upload:before { - content: "\f093"; -} - -.icon-ups:before { - content: "\f7e0"; -} - -.icon-usb:before { - content: "\f287"; -} - -.icon-user:before { - content: "\f007"; -} - -.icon-user-alt:before { - content: "\f406"; -} - -.icon-user-alt-slash:before { - content: "\f4fa"; -} - -.icon-user-astronaut:before { - content: "\f4fb"; -} - -.icon-user-check:before { - content: "\f4fc"; -} - -.icon-user-circle:before { - content: "\f2bd"; -} - -.icon-user-clock:before { - content: "\f4fd"; -} - -.icon-user-cog:before { - content: "\f4fe"; -} - -.icon-user-edit:before { - content: "\f4ff"; -} - -.icon-user-friends:before { - content: "\f500"; -} - -.icon-user-graduate:before { - content: "\f501"; -} - -.icon-user-injured:before { - content: "\f728"; -} - -.icon-user-lock:before { - content: "\f502"; -} - -.icon-user-md:before { - content: "\f0f0"; -} - -.icon-user-minus:before { - content: "\f503"; -} - -.icon-user-ninja:before { - content: "\f504"; -} - -.icon-user-nurse:before { - content: "\f82f"; -} - -.icon-user-plus:before { - content: "\f234"; -} - -.icon-user-secret:before { - content: "\f21b"; -} - -.icon-user-shield:before { - content: "\f505"; -} - -.icon-user-slash:before { - content: "\f506"; -} - -.icon-user-tag:before { - content: "\f507"; -} - -.icon-user-tie:before { - content: "\f508"; -} - -.icon-user-times:before { - content: "\f235"; -} - -.icon-users:before { - content: "\f0c0"; -} - -.icon-users-cog:before { - content: "\f509"; -} - -.icon-users-slash:before { - content: "\e073"; -} - -.icon-usps:before { - content: "\f7e1"; -} - -.icon-ussunnah:before { - content: "\f407"; -} - -.icon-utensil-spoon:before { - content: "\f2e5"; -} - -.icon-utensils:before { - content: "\f2e7"; -} - -.icon-vaadin:before { - content: "\f408"; -} - -.icon-vector-square:before { - content: "\f5cb"; -} - -.icon-venus:before { - content: "\f221"; -} - -.icon-venus-double:before { - content: "\f226"; -} - -.icon-venus-mars:before { - content: "\f228"; -} - -.icon-vest:before { - content: "\e085"; -} - -.icon-vest-patches:before { - content: "\e086"; -} - -.icon-viacoin:before { - content: "\f237"; -} - -.icon-viadeo:before { - content: "\f2a9"; -} - -.icon-viadeo-square:before { - content: "\f2aa"; -} - -.icon-vial:before { - content: "\f492"; -} - -.icon-vials:before { - content: "\f493"; -} - -.icon-viber:before { - content: "\f409"; -} - -.icon-video:before { - content: "\f03d"; -} - -.icon-video-slash:before { - content: "\f4e2"; -} - -.icon-vihara:before { - content: "\f6a7"; -} - -.icon-vimeo:before { - content: "\f40a"; -} - -.icon-vimeo-square:before { - content: "\f194"; -} - -.icon-vimeo-v:before { - content: "\f27d"; -} - -.icon-vine:before { - content: "\f1ca"; -} - -.icon-virus:before { - content: "\e074"; -} - -.icon-virus-slash:before { - content: "\e075"; -} - -.icon-viruses:before { - content: "\e076"; -} - -.icon-vk:before { - content: "\f189"; -} - -.icon-vnv:before { - content: "\f40b"; -} - -.icon-voicemail:before { - content: "\f897"; -} - -.icon-volleyball-ball:before { - content: "\f45f"; -} - -.icon-volume-down:before { - content: "\f027"; -} - -.icon-volume-mute:before { - content: "\f6a9"; -} - -.icon-volume-off:before { - content: "\f026"; -} - -.icon-volume-up:before { - content: "\f028"; -} - -.icon-vote-yea:before { - content: "\f772"; -} - -.icon-vr-cardboard:before { - content: "\f729"; -} - -.icon-vuejs:before { - content: "\f41f"; -} - -.icon-walking:before { - content: "\f554"; -} - -.icon-wallet:before { - content: "\f555"; -} - -.icon-warehouse:before { - content: "\f494"; -} - -.icon-watchman-monitoring:before { - content: "\e087"; -} - -.icon-water:before { - content: "\f773"; -} - -.icon-wave-square:before { - content: "\f83e"; -} - -.icon-waze:before { - content: "\f83f"; -} - -.icon-weebly:before { - content: "\f5cc"; -} - -.icon-weibo:before { - content: "\f18a"; -} - -.icon-weight:before { - content: "\f496"; -} - -.icon-weight-hanging:before { - content: "\f5cd"; -} - -.icon-weixin:before { - content: "\f1d7"; -} - -.icon-whatsapp:before { - content: "\f232"; -} - -.icon-whatsapp-square:before { - content: "\f40c"; -} - -.icon-wheelchair:before { - content: "\f193"; -} - -.icon-whmcs:before { - content: "\f40d"; -} - -.icon-wifi:before { - content: "\f1eb"; -} - -.icon-wikipedia-w:before { - content: "\f266"; -} - -.icon-wind:before { - content: "\f72e"; -} - -.icon-window-close:before { - content: "\f410"; -} - -.icon-window-maximize:before { - content: "\f2d0"; -} - -.icon-window-minimize:before { - content: "\f2d1"; -} - -.icon-window-restore:before { - content: "\f2d2"; -} - -.icon-windows:before { - content: "\f17a"; -} - -.icon-wine-bottle:before { - content: "\f72f"; -} - -.icon-wine-glass:before { - content: "\f4e3"; -} - -.icon-wine-glass-alt:before { - content: "\f5ce"; -} - -.icon-wix:before { - content: "\f5cf"; -} - -.icon-wizards-of-the-coast:before { - content: "\f730"; -} - -.icon-wodu:before { - content: "\e088"; -} - -.icon-wolf-pack-battalion:before { - content: "\f514"; -} - -.icon-won-sign:before { - content: "\f159"; -} - -.icon-wordpress:before { - content: "\f19a"; -} - -.icon-wordpress-simple:before { - content: "\f411"; -} - -.icon-wpbeginner:before { - content: "\f297"; -} - -.icon-wpexplorer:before { - content: "\f2de"; -} - -.icon-wpforms:before { - content: "\f298"; -} - -.icon-wpressr:before { - content: "\f3e4"; -} - -.icon-wrench:before { - content: "\f0ad"; -} - -.icon-x-ray:before { - content: "\f497"; -} - -.icon-xbox:before { - content: "\f412"; -} - -.icon-xing:before { - content: "\f168"; -} - -.icon-xing-square:before { - content: "\f169"; -} - -.icon-y-combinator:before { - content: "\f23b"; -} - -.icon-yahoo:before { - content: "\f19e"; -} - -.icon-yammer:before { - content: "\f840"; -} - -.icon-yandex:before { - content: "\f413"; -} - -.icon-yandex-international:before { - content: "\f414"; -} - -.icon-yarn:before { - content: "\f7e3"; -} - -.icon-yelp:before { - content: "\f1e9"; -} - -.icon-yen-sign:before { - content: "\f157"; -} - -.icon-yin-yang:before { - content: "\f6ad"; -} - -.icon-yoast:before { - content: "\f2b1"; -} - -.icon-youtube:before { - content: "\f167"; -} - -.icon-youtube-square:before { - content: "\f431"; -} - -.icon-zhihu:before { - content: "\f63f"; -} - -.sr-only { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} - -.sr-only-focusable:active, .sr-only-focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: "Font Awesome 5 Free"; - font-style: normal; - font-weight: 900; - font-display: block; - src: url("../fonts/fa-solid-900.eot"); - src: url("../fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-solid-900.woff2") format("woff2"), url("../fonts/fa-solid-900.woff") format("woff"), url("../fonts/fa-solid-900.ttf") format("truetype"), url("../fonts/fa-solid-900.svg#fontawesome") format("svg"); -} -.fa, -.fas { - font-family: "Font Awesome 5 Free"; - font-weight: 900; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: "Font Awesome 5 Free"; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../fonts/fa-regular-400.eot"); - src: url("../fonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-regular-400.woff2") format("woff2"), url("../fonts/fa-regular-400.woff") format("woff"), url("../fonts/fa-regular-400.ttf") format("truetype"), url("../fonts/fa-regular-400.svg#fontawesome") format("svg"); -} -.far { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -/*! - * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -@font-face { - font-family: "Font Awesome 5 Brands"; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../fonts/fa-brands-400.eot"); - src: url("../fonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../fonts/fa-brands-400.woff2") format("woff2"), url("../fonts/fa-brands-400.woff") format("woff"), url("../fonts/fa-brands-400.ttf") format("truetype"), url("../fonts/fa-brands-400.svg#fontawesome") format("svg"); -} -.fab { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-glass:before { - content: "\f000"; -} - -.icon.icon-meetup { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-star-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-star-o:before { - content: "\f005"; -} - -.icon.icon-remove:before { - content: "\f00d"; -} - -.icon.icon-close:before { - content: "\f00d"; -} - -.icon.icon-gear:before { - content: "\f013"; -} - -.icon.icon-trash-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-trash-o:before { - content: "\f2ed"; -} - -.icon.icon-file-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-o:before { - content: "\f15b"; -} - -.icon.icon-clock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-clock-o:before { - content: "\f017"; -} - -.icon.icon-arrow-circle-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-arrow-circle-o-down:before { - content: "\f358"; -} - -.icon.icon-arrow-circle-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-arrow-circle-o-up:before { - content: "\f35b"; -} - -.icon.icon-play-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-play-circle-o:before { - content: "\f144"; -} - -.icon.icon-repeat:before { - content: "\f01e"; -} - -.icon.icon-rotate-right:before { - content: "\f01e"; -} - -.icon.icon-refresh:before { - content: "\f021"; -} - -.icon.icon-list-alt { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-dedent:before { - content: "\f03b"; -} - -.icon.icon-video-camera:before { - content: "\f03d"; -} - -.icon.icon-picture-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-picture-o:before { - content: "\f03e"; -} - -.icon.icon-photo { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-photo:before { - content: "\f03e"; -} - -.icon.icon-image { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-image:before { - content: "\f03e"; -} - -.icon.icon-pencil:before { - content: "\f303"; -} - -.icon.icon-map-marker:before { - content: "\f3c5"; -} - -.icon.icon-pencil-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-pencil-square-o:before { - content: "\f044"; -} - -.icon.icon-share-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-share-square-o:before { - content: "\f14d"; -} - -.icon.icon-check-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-check-square-o:before { - content: "\f14a"; -} - -.icon.icon-arrows:before { - content: "\f0b2"; -} - -.icon.icon-times-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-times-circle-o:before { - content: "\f057"; -} - -.icon.icon-check-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-check-circle-o:before { - content: "\f058"; -} - -.icon.icon-mail-forward:before { - content: "\f064"; -} - -.icon.icon-expand:before { - content: "\f424"; -} - -.icon.icon-compress:before { - content: "\f422"; -} - -.icon.icon-eye { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-eye-slash { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-warning:before { - content: "\f071"; -} - -.icon.icon-calendar:before { - content: "\f073"; -} - -.icon.icon-arrows-v:before { - content: "\f338"; -} - -.icon.icon-arrows-h:before { - content: "\f337"; -} - -.icon.icon-bar-chart { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-bar-chart:before { - content: "\f080"; -} - -.icon.icon-bar-chart-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-bar-chart-o:before { - content: "\f080"; -} - -.icon.icon-twitter-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-facebook-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gears:before { - content: "\f085"; -} - -.icon.icon-thumbs-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-thumbs-o-up:before { - content: "\f164"; -} - -.icon.icon-thumbs-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-thumbs-o-down:before { - content: "\f165"; -} - -.icon.icon-heart-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-heart-o:before { - content: "\f004"; -} - -.icon.icon-sign-out:before { - content: "\f2f5"; -} - -.icon.icon-linkedin-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-linkedin-square:before { - content: "\f08c"; -} - -.icon.icon-thumb-tack:before { - content: "\f08d"; -} - -.icon.icon-external-link:before { - content: "\f35d"; -} - -.icon.icon-sign-in:before { - content: "\f2f6"; -} - -.icon.icon-github-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-lemon-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-lemon-o:before { - content: "\f094"; -} - -.icon.icon-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-square-o:before { - content: "\f0c8"; -} - -.icon.icon-bookmark-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-bookmark-o:before { - content: "\f02e"; -} - -.icon.icon-twitter { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-facebook { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-facebook:before { - content: "\f39e"; -} - -.icon.icon-facebook-f { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-facebook-f:before { - content: "\f39e"; -} - -.icon.icon-github { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-credit-card { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-feed:before { - content: "\f09e"; -} - -.icon.icon-hdd-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hdd-o:before { - content: "\f0a0"; -} - -.icon.icon-hand-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-o-right:before { - content: "\f0a4"; -} - -.icon.icon-hand-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-o-left:before { - content: "\f0a5"; -} - -.icon.icon-hand-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-o-up:before { - content: "\f0a6"; -} - -.icon.icon-hand-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-o-down:before { - content: "\f0a7"; -} - -.icon.icon-arrows-alt:before { - content: "\f31e"; -} - -.icon.icon-group:before { - content: "\f0c0"; -} - -.icon.icon-chain:before { - content: "\f0c1"; -} - -.icon.icon-scissors:before { - content: "\f0c4"; -} - -.icon.icon-files-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-files-o:before { - content: "\f0c5"; -} - -.icon.icon-floppy-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-floppy-o:before { - content: "\f0c7"; -} - -.icon.icon-navicon:before { - content: "\f0c9"; -} - -.icon.icon-reorder:before { - content: "\f0c9"; -} - -.icon.icon-pinterest { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-pinterest-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-plus-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-plus { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-plus:before { - content: "\f0d5"; -} - -.icon.icon-money { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-money:before { - content: "\f3d1"; -} - -.icon.icon-unsorted:before { - content: "\f0dc"; -} - -.icon.icon-sort-desc:before { - content: "\f0dd"; -} - -.icon.icon-sort-asc:before { - content: "\f0de"; -} - -.icon.icon-linkedin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-linkedin:before { - content: "\f0e1"; -} - -.icon.icon-rotate-left:before { - content: "\f0e2"; -} - -.icon.icon-legal:before { - content: "\f0e3"; -} - -.icon.icon-tachometer:before { - content: "\f3fd"; -} - -.icon.icon-dashboard:before { - content: "\f3fd"; -} - -.icon.icon-comment-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-comment-o:before { - content: "\f075"; -} - -.icon.icon-comments-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-comments-o:before { - content: "\f086"; -} - -.icon.icon-flash:before { - content: "\f0e7"; -} - -.icon.icon-clipboard { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-paste { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-paste:before { - content: "\f328"; -} - -.icon.icon-lightbulb-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-lightbulb-o:before { - content: "\f0eb"; -} - -.icon.icon-exchange:before { - content: "\f362"; -} - -.icon.icon-cloud-download:before { - content: "\f381"; -} - -.icon.icon-cloud-upload:before { - content: "\f382"; -} - -.icon.icon-bell-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-bell-o:before { - content: "\f0f3"; -} - -.icon.icon-cutlery:before { - content: "\f2e7"; -} - -.icon.icon-file-text-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-text-o:before { - content: "\f15c"; -} - -.icon.icon-building-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-building-o:before { - content: "\f1ad"; -} - -.icon.icon-hospital-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hospital-o:before { - content: "\f0f8"; -} - -.icon.icon-tablet:before { - content: "\f3fa"; -} - -.icon.icon-mobile:before { - content: "\f3cd"; -} - -.icon.icon-mobile-phone:before { - content: "\f3cd"; -} - -.icon.icon-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-circle-o:before { - content: "\f111"; -} - -.icon.icon-mail-reply:before { - content: "\f3e5"; -} - -.icon.icon-github-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-folder-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-folder-o:before { - content: "\f07b"; -} - -.icon.icon-folder-open-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-folder-open-o:before { - content: "\f07c"; -} - -.icon.icon-smile-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-smile-o:before { - content: "\f118"; -} - -.icon.icon-frown-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-frown-o:before { - content: "\f119"; -} - -.icon.icon-meh-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-meh-o:before { - content: "\f11a"; -} - -.icon.icon-keyboard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-keyboard-o:before { - content: "\f11c"; -} - -.icon.icon-flag-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-flag-o:before { - content: "\f024"; -} - -.icon.icon-mail-reply-all:before { - content: "\f122"; -} - -.icon.icon-star-half-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-star-half-o:before { - content: "\f089"; -} - -.icon.icon-star-half-empty { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-star-half-empty:before { - content: "\f089"; -} - -.icon.icon-star-half-full { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-star-half-full:before { - content: "\f089"; -} - -.icon.icon-code-fork:before { - content: "\f126"; -} - -.icon.icon-chain-broken:before { - content: "\f127"; -} - -.icon.icon-shield:before { - content: "\f3ed"; -} - -.icon.icon-calendar-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-calendar-o:before { - content: "\f133"; -} - -.icon.icon-maxcdn { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-html5 { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-css3 { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ticket:before { - content: "\f3ff"; -} - -.icon.icon-minus-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-minus-square-o:before { - content: "\f146"; -} - -.icon.icon-level-up:before { - content: "\f3bf"; -} - -.icon.icon-level-down:before { - content: "\f3be"; -} - -.icon.icon-pencil-square:before { - content: "\f14b"; -} - -.icon.icon-external-link-square:before { - content: "\f360"; -} - -.icon.icon-compass { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-caret-square-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-caret-square-o-down:before { - content: "\f150"; -} - -.icon.icon-toggle-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-toggle-down:before { - content: "\f150"; -} - -.icon.icon-caret-square-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-caret-square-o-up:before { - content: "\f151"; -} - -.icon.icon-toggle-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-toggle-up:before { - content: "\f151"; -} - -.icon.icon-caret-square-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-caret-square-o-right:before { - content: "\f152"; -} - -.icon.icon-toggle-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-toggle-right:before { - content: "\f152"; -} - -.icon.icon-eur:before { - content: "\f153"; -} - -.icon.icon-euro:before { - content: "\f153"; -} - -.icon.icon-gbp:before { - content: "\f154"; -} - -.icon.icon-usd:before { - content: "\f155"; -} - -.icon.icon-dollar:before { - content: "\f155"; -} - -.icon.icon-inr:before { - content: "\f156"; -} - -.icon.icon-rupee:before { - content: "\f156"; -} - -.icon.icon-jpy:before { - content: "\f157"; -} - -.icon.icon-cny:before { - content: "\f157"; -} - -.icon.icon-rmb:before { - content: "\f157"; -} - -.icon.icon-yen:before { - content: "\f157"; -} - -.icon.icon-rub:before { - content: "\f158"; -} - -.icon.icon-ruble:before { - content: "\f158"; -} - -.icon.icon-rouble:before { - content: "\f158"; -} - -.icon.icon-krw:before { - content: "\f159"; -} - -.icon.icon-won:before { - content: "\f159"; -} - -.icon.icon-btc { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bitcoin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bitcoin:before { - content: "\f15a"; -} - -.icon.icon-file-text:before { - content: "\f15c"; -} - -.icon.icon-sort-alpha-asc:before { - content: "\f15d"; -} - -.icon.icon-sort-alpha-desc:before { - content: "\f881"; -} - -.icon.icon-sort-amount-asc:before { - content: "\f160"; -} - -.icon.icon-sort-amount-desc:before { - content: "\f884"; -} - -.icon.icon-sort-numeric-asc:before { - content: "\f162"; -} - -.icon.icon-sort-numeric-desc:before { - content: "\f886"; -} - -.icon.icon-youtube-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-youtube { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-xing { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-xing-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-youtube-play { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-youtube-play:before { - content: "\f167"; -} - -.icon.icon-dropbox { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-stack-overflow { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-instagram { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-flickr { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-adn { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bitbucket { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bitbucket-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bitbucket-square:before { - content: "\f171"; -} - -.icon.icon-tumblr { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-tumblr-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-long-arrow-down:before { - content: "\f309"; -} - -.icon.icon-long-arrow-up:before { - content: "\f30c"; -} - -.icon.icon-long-arrow-left:before { - content: "\f30a"; -} - -.icon.icon-long-arrow-right:before { - content: "\f30b"; -} - -.icon.icon-apple { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-windows { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-android { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-linux { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-dribbble { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-skype { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-foursquare { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-trello { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gratipay { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gittip { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gittip:before { - content: "\f184"; -} - -.icon.icon-sun-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-sun-o:before { - content: "\f185"; -} - -.icon.icon-moon-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-moon-o:before { - content: "\f186"; -} - -.icon.icon-vk { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-weibo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-renren { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-pagelines { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-stack-exchange { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-arrow-circle-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-arrow-circle-o-right:before { - content: "\f35a"; -} - -.icon.icon-arrow-circle-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-arrow-circle-o-left:before { - content: "\f359"; -} - -.icon.icon-caret-square-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-caret-square-o-left:before { - content: "\f191"; -} - -.icon.icon-toggle-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-toggle-left:before { - content: "\f191"; -} - -.icon.icon-dot-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-dot-circle-o:before { - content: "\f192"; -} - -.icon.icon-vimeo-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-try:before { - content: "\f195"; -} - -.icon.icon-turkish-lira:before { - content: "\f195"; -} - -.icon.icon-plus-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-plus-square-o:before { - content: "\f0fe"; -} - -.icon.icon-slack { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wordpress { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-openid { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-institution:before { - content: "\f19c"; -} - -.icon.icon-bank:before { - content: "\f19c"; -} - -.icon.icon-mortar-board:before { - content: "\f19d"; -} - -.icon.icon-yahoo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-reddit { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-reddit-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-stumbleupon-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-stumbleupon { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-delicious { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-digg { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-pied-piper-pp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-pied-piper-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-drupal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-joomla { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-spoon:before { - content: "\f2e5"; -} - -.icon.icon-behance { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-behance-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-steam { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-steam-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-automobile:before { - content: "\f1b9"; -} - -.icon.icon-envelope-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-envelope-o:before { - content: "\f0e0"; -} - -.icon.icon-spotify { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-deviantart { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-soundcloud { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-file-pdf-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-pdf-o:before { - content: "\f1c1"; -} - -.icon.icon-file-word-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-word-o:before { - content: "\f1c2"; -} - -.icon.icon-file-excel-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-excel-o:before { - content: "\f1c3"; -} - -.icon.icon-file-powerpoint-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-powerpoint-o:before { - content: "\f1c4"; -} - -.icon.icon-file-image-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-image-o:before { - content: "\f1c5"; -} - -.icon.icon-file-photo-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-photo-o:before { - content: "\f1c5"; -} - -.icon.icon-file-picture-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-picture-o:before { - content: "\f1c5"; -} - -.icon.icon-file-archive-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-archive-o:before { - content: "\f1c6"; -} - -.icon.icon-file-zip-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-zip-o:before { - content: "\f1c6"; -} - -.icon.icon-file-audio-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-audio-o:before { - content: "\f1c7"; -} - -.icon.icon-file-sound-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-sound-o:before { - content: "\f1c7"; -} - -.icon.icon-file-video-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-video-o:before { - content: "\f1c8"; -} - -.icon.icon-file-movie-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-movie-o:before { - content: "\f1c8"; -} - -.icon.icon-file-code-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-file-code-o:before { - content: "\f1c9"; -} - -.icon.icon-vine { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-codepen { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-jsfiddle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-life-ring { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-life-bouy { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-life-bouy:before { - content: "\f1cd"; -} - -.icon.icon-life-buoy { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-life-buoy:before { - content: "\f1cd"; -} - -.icon.icon-life-saver { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-life-saver:before { - content: "\f1cd"; -} - -.icon.icon-support { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-support:before { - content: "\f1cd"; -} - -.icon.icon-circle-o-notch:before { - content: "\f1ce"; -} - -.icon.icon-rebel { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ra { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ra:before { - content: "\f1d0"; -} - -.icon.icon-resistance { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-resistance:before { - content: "\f1d0"; -} - -.icon.icon-empire { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ge { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ge:before { - content: "\f1d1"; -} - -.icon.icon-git-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-git { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-hacker-news { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-y-combinator-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-y-combinator-square:before { - content: "\f1d4"; -} - -.icon.icon-yc-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-yc-square:before { - content: "\f1d4"; -} - -.icon.icon-tencent-weibo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-qq { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-weixin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wechat { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wechat:before { - content: "\f1d7"; -} - -.icon.icon-send:before { - content: "\f1d8"; -} - -.icon.icon-paper-plane-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-paper-plane-o:before { - content: "\f1d8"; -} - -.icon.icon-send-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-send-o:before { - content: "\f1d8"; -} - -.icon.icon-circle-thin { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-circle-thin:before { - content: "\f111"; -} - -.icon.icon-header:before { - content: "\f1dc"; -} - -.icon.icon-sliders:before { - content: "\f1de"; -} - -.icon.icon-futbol-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-futbol-o:before { - content: "\f1e3"; -} - -.icon.icon-soccer-ball-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-soccer-ball-o:before { - content: "\f1e3"; -} - -.icon.icon-slideshare { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-twitch { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-yelp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-newspaper-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-newspaper-o:before { - content: "\f1ea"; -} - -.icon.icon-paypal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-wallet { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-visa { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-mastercard { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-discover { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-amex { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-paypal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-stripe { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bell-slash-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-bell-slash-o:before { - content: "\f1f6"; -} - -.icon.icon-trash:before { - content: "\f2ed"; -} - -.icon.icon-copyright { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-eyedropper:before { - content: "\f1fb"; -} - -.icon.icon-area-chart:before { - content: "\f1fe"; -} - -.icon.icon-pie-chart:before { - content: "\f200"; -} - -.icon.icon-line-chart:before { - content: "\f201"; -} - -.icon.icon-lastfm { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-lastfm-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ioxhost { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-angellist { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-cc:before { - content: "\f20a"; -} - -.icon.icon-ils:before { - content: "\f20b"; -} - -.icon.icon-shekel:before { - content: "\f20b"; -} - -.icon.icon-sheqel:before { - content: "\f20b"; -} - -.icon.icon-meanpath { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-meanpath:before { - content: "\f2b4"; -} - -.icon.icon-buysellads { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-connectdevelop { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-dashcube { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-forumbee { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-leanpub { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-sellsy { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-shirtsinbulk { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-simplybuilt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-skyatlas { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-diamond { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-diamond:before { - content: "\f3a5"; -} - -.icon.icon-intersex:before { - content: "\f224"; -} - -.icon.icon-facebook-official { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-facebook-official:before { - content: "\f09a"; -} - -.icon.icon-pinterest-p { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-whatsapp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-hotel:before { - content: "\f236"; -} - -.icon.icon-viacoin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-medium { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-y-combinator { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-yc { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-yc:before { - content: "\f23b"; -} - -.icon.icon-optin-monster { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-opencart { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-expeditedssl { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-battery-4:before { - content: "\f240"; -} - -.icon.icon-battery:before { - content: "\f240"; -} - -.icon.icon-battery-3:before { - content: "\f241"; -} - -.icon.icon-battery-2:before { - content: "\f242"; -} - -.icon.icon-battery-1:before { - content: "\f243"; -} - -.icon.icon-battery-0:before { - content: "\f244"; -} - -.icon.icon-object-group { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-object-ungroup { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-sticky-note-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-sticky-note-o:before { - content: "\f249"; -} - -.icon.icon-cc-jcb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cc-diners-club { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-clone { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hourglass-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hourglass-o:before { - content: "\f254"; -} - -.icon.icon-hourglass-1:before { - content: "\f251"; -} - -.icon.icon-hourglass-2:before { - content: "\f252"; -} - -.icon.icon-hourglass-3:before { - content: "\f253"; -} - -.icon.icon-hand-rock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-rock-o:before { - content: "\f255"; -} - -.icon.icon-hand-grab-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-grab-o:before { - content: "\f255"; -} - -.icon.icon-hand-paper-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-paper-o:before { - content: "\f256"; -} - -.icon.icon-hand-stop-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-stop-o:before { - content: "\f256"; -} - -.icon.icon-hand-scissors-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-scissors-o:before { - content: "\f257"; -} - -.icon.icon-hand-lizard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-lizard-o:before { - content: "\f258"; -} - -.icon.icon-hand-spock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-spock-o:before { - content: "\f259"; -} - -.icon.icon-hand-pointer-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-pointer-o:before { - content: "\f25a"; -} - -.icon.icon-hand-peace-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-hand-peace-o:before { - content: "\f25b"; -} - -.icon.icon-registered { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-creative-commons { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gg { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gg-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-tripadvisor { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-odnoklassniki { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-odnoklassniki-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-get-pocket { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wikipedia-w { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-safari { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-chrome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-firefox { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-opera { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-internet-explorer { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-television:before { - content: "\f26c"; -} - -.icon.icon-contao { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-500px { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-amazon { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-calendar-plus-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-calendar-plus-o:before { - content: "\f271"; -} - -.icon.icon-calendar-minus-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-calendar-minus-o:before { - content: "\f272"; -} - -.icon.icon-calendar-times-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-calendar-times-o:before { - content: "\f273"; -} - -.icon.icon-calendar-check-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-calendar-check-o:before { - content: "\f274"; -} - -.icon.icon-map-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-map-o:before { - content: "\f279"; -} - -.icon.icon-commenting:before { - content: "\f4ad"; -} - -.icon.icon-commenting-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-commenting-o:before { - content: "\f4ad"; -} - -.icon.icon-houzz { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-vimeo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-vimeo:before { - content: "\f27d"; -} - -.icon.icon-black-tie { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-fonticons { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-reddit-alien { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-edge { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-credit-card-alt:before { - content: "\f09d"; -} - -.icon.icon-codiepie { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-modx { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-fort-awesome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-usb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-product-hunt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-mixcloud { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-scribd { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-pause-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-pause-circle-o:before { - content: "\f28b"; -} - -.icon.icon-stop-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-stop-circle-o:before { - content: "\f28d"; -} - -.icon.icon-bluetooth { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-bluetooth-b { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-gitlab { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wpbeginner { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wpforms { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-envira { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wheelchair-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wheelchair-alt:before { - content: "\f368"; -} - -.icon.icon-question-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-question-circle-o:before { - content: "\f059"; -} - -.icon.icon-volume-control-phone:before { - content: "\f2a0"; -} - -.icon.icon-asl-interpreting:before { - content: "\f2a3"; -} - -.icon.icon-deafness:before { - content: "\f2a4"; -} - -.icon.icon-hard-of-hearing:before { - content: "\f2a4"; -} - -.icon.icon-glide { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-glide-g { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-signing:before { - content: "\f2a7"; -} - -.icon.icon-viadeo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-viadeo-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-snapchat { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-snapchat-ghost { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-snapchat-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-pied-piper { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-first-order { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-yoast { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-themeisle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-plus-official { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-plus-official:before { - content: "\f2b3"; -} - -.icon.icon-google-plus-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-google-plus-circle:before { - content: "\f2b3"; -} - -.icon.icon-font-awesome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-fa { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-fa:before { - content: "\f2b4"; -} - -.icon.icon-handshake-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-handshake-o:before { - content: "\f2b5"; -} - -.icon.icon-envelope-open-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-envelope-open-o:before { - content: "\f2b6"; -} - -.icon.icon-linode { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-address-book-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-address-book-o:before { - content: "\f2b9"; -} - -.icon.icon-vcard:before { - content: "\f2bb"; -} - -.icon.icon-address-card-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-address-card-o:before { - content: "\f2bb"; -} - -.icon.icon-vcard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-vcard-o:before { - content: "\f2bb"; -} - -.icon.icon-user-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-user-circle-o:before { - content: "\f2bd"; -} - -.icon.icon-user-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-user-o:before { - content: "\f007"; -} - -.icon.icon-id-badge { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-drivers-license:before { - content: "\f2c2"; -} - -.icon.icon-id-card-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-id-card-o:before { - content: "\f2c2"; -} - -.icon.icon-drivers-license-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-drivers-license-o:before { - content: "\f2c2"; -} - -.icon.icon-quora { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-free-code-camp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-telegram { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-thermometer-4:before { - content: "\f2c7"; -} - -.icon.icon-thermometer:before { - content: "\f2c7"; -} - -.icon.icon-thermometer-3:before { - content: "\f2c8"; -} - -.icon.icon-thermometer-2:before { - content: "\f2c9"; -} - -.icon.icon-thermometer-1:before { - content: "\f2ca"; -} - -.icon.icon-thermometer-0:before { - content: "\f2cb"; -} - -.icon.icon-bathtub:before { - content: "\f2cd"; -} - -.icon.icon-s15:before { - content: "\f2cd"; -} - -.icon.icon-window-maximize { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-window-restore { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-times-rectangle:before { - content: "\f410"; -} - -.icon.icon-window-close-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-window-close-o:before { - content: "\f410"; -} - -.icon.icon-times-rectangle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-times-rectangle-o:before { - content: "\f410"; -} - -.icon.icon-bandcamp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-grav { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-etsy { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-imdb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-ravelry { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-eercast { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-eercast:before { - content: "\f2da"; -} - -.icon.icon-snowflake-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} - -.icon.icon-snowflake-o:before { - content: "\f2dc"; -} - -.icon.icon-superpowers { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-wpexplorer { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} - -.icon.icon-cab:before { - content: "\f1ba"; -} - -#modx-navbar #modx-topnav { - margin-left: auto; - margin-right: auto; - max-width: 1200px; -} -#modx-navbar #modx-topnav::after { - clear: both; - content: ""; - display: block; -} - -.home-panel ol li:hover button:before, .modx-header-breadcrumbs ul li:after, .modx-status-msg:after, .icon, .ext-mb-icon:before, .modx-browser-detail-thumb.preview:before, .modx-browser-pathbbar .x-toolbar-left .x-toolbar-left-row td.x-toolbar-cell:before, #modx-leftbar-header a:after, .locked-resource:before, .x-tree-node-expanded .parent-resource:before, -.x-tree-node-expanded .icon-folder:before, .parent-resource:before, -.icon-folder:before, .tree-symlink:before, .tree-weblink:before, .tree-static-resource:before, .tree-resource:before, .tree-context:before, .icon-lock, .icon-css:before, -.icon-scss:before, -.icon-less:before, -.icon-styl:before, .icon-js:before, -.icon-json:before, -.icon-coffeescript:before, .icon-html:before, -.icon-htm:before, -.icon-xml:before, .icon-pdf:before, .icon-ppt:before, -.icon-pptx:before, .icon-csv:before, -.icon-xls:before, -.icon-xlsx:before, .icon-doc:before, -.icon-docx:before, .icon-php:before, -.icon-cfm:before, -.icon-rb:before, -.icon-as:before, -.icon-java:before, -.icon-jar:before, .icon-access:before, -.icon-htaccess:before, .icon-avi:before, -.icon-mpg:before, -.icon-mpeg:before, -.icon-mov:before, -.icon-mp4:before, -.icon-m4v:before, -.icon-3gp:before, -.icon-flv:before, -.icon-fla:before, -.icon-swf:before, -.icon-wmv:before, .icon-aac:before, -.icon-mp3:before, -.icon-ogg:before, -.icon-wma:before, -.icon-m4a:before, -.icon-flac:before, -.icon-wav:before, -.icon-aif:before, -.icon-aiff:before, .icon-txt:before, -.icon-log:before, .icon-bat:before, -.icon-scr:before, -.icon-sh:before, .icon-jpg:before, -.icon-jpeg:before, -.icon-gif:before, -.icon-png:before, -.icon-bmp:before, -.icon-tiff:before, -.icon-svg:before, .icon-bk:before, -.icon-bak:before, -.icon-backup:before, .icon-zip:before, -.icon-tar:before, -.icon-tgz:before, -.icon-gz:before, -.icon-bz2:before, -.icon-rar:before, -.icon-7z:before, -.icon-dmg:before, -.icon-iso:before, .icon-db:before, -.icon-sql:before, .icon-cal:before, -.icon-ical:before, -.icon-ics:before, -.icon-vcs:before, .icon-rss:before, .x-tree-arrows .x-tree-elbow-plus:before, -.x-tree-arrows .x-tree-elbow-minus:before, -.x-tree-arrows .x-tree-elbow-end-plus:before, -.x-tree-arrows .x-tree-elbow-end-minus:before, .modx-manager-search-results .loading-indicator:before, #modx-footer .modx-subnav li.sub:after, .x-tab-scroller-left:before, -.x-tab-scroller-right:before, .x-date-right a:before, -.x-date-left a:before, -.x-date-mp-ybtn a.x-date-mp-prev:before, -.x-date-mp-ybtn a.x-date-mp-next:before, .x-form-invalid-msg:before, .x-superboxselect .x-superboxselect-btns .x-superboxselect-btn-clear:before, .x-superboxselect ul li.x-superboxselect-item .x-superboxselect-item-close:before, .x-form-check-wrap .x-form-cb-label:before, -.x-form-check-wrap .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-fieldset-header-text:before, .x-form-field-wrap .x-form-trigger:before, .desc-under .copy-this:hover::after, .desc-under .example-list ul li::before, .x-form-item label.x-form-item-label .modx-tv-reset::before, -.x-form-item label.x-form-item-label .modx-field-utils::before, .tree-new-category > em > button:before, .tree-new-plugin > em > button:before, .tree-new-snippet > em > button:before, .tree-new-chunk > em > button:before, .tree-new-tv > em > button:before, .tree-new-template > em > button:before, .tree-trash > em > button:before, .tree-new-static-resource > em > button:before, .tree-new-symlink > em > button:before, .tree-new-weblink > em > button:before, .tree-new-resource > em > button:before, .x-btn-icon.icon-file_manager button:before, .x-btn-icon.icon-file_upload button:before, .x-btn-icon.icon-page_white button:before, .x-btn-icon.icon-folder button:before, .actions button .x-btn-split:before, -.inline-button .x-btn-split:before, -.x-superboxselect-item .x-btn-split:before, -.x-form-trigger .x-btn-split:before, -.x-date-mp-ok .x-btn-split:before, -.x-date-mp-cancel .x-btn-split:before, .x-btn .x-btn-split:before, -.actions button .x-btn-arrow:before, -.inline-button .x-btn-arrow:before, -.x-superboxselect-item .x-btn-arrow:before, -.x-form-trigger .x-btn-arrow:before, -.x-date-mp-ok .x-btn-arrow:before, -.x-date-mp-cancel .x-btn-arrow:before, -.x-btn .x-btn-arrow:before, .x-tool:after, .x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title:before, .x-grid-group-hd div.x-grid-group-title:before, .x-grid3-check-col-on:before, .x-grid3-check-col:before, .x-grid3-row-checker:before, -.x-grid3-hd-checker:not(.x-grid3-hd-inner):before, .x-grid3-row-expanded .x-grid3-row-expander:before, .x-grid3-row-collapsed .x-grid3-row-expander:before, .x-grid3-hd-btn:before, .x-tbar-page-first:before, .x-tbar-loading:before, .x-tbar-page-prev:before, .x-tbar-page-next:before, .x-tbar-page-last:before, .crumb_wrapper .crumbs li.first:before, .x-btn-icon.refresh button:before, .x-btn-icon.arrow_down button:before, .x-btn-icon.arrow_up button:before { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - font-family: "Font Awesome 5 Free", "Font Awesome 5 Brands"; - font-weight: 900; -} - -.x-tbar-page-first:before, .x-tbar-loading:before, .x-tbar-page-prev:before, .x-tbar-page-next:before, .x-tbar-page-last:before, .crumb_wrapper .crumbs li.first:before, .x-btn-icon.refresh button:before, .x-btn-icon.arrow_down button:before, .x-btn-icon.arrow_up button:before { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - line-height: 100%; - width: 100%; - height: 100%; - font-size: 14px; - color: inherit; - text-align: center; -} - -#modx-tv-tabs .lt-ie8 { - *zoom: 1; -} -#modx-tv-tabs:before, #modx-tv-tabs:after { - content: " "; - /* 1 */ - display: table; - /* 2 */ -} -#modx-tv-tabs:after { - clear: both; -} - -@-moz-document url-prefix() {} -/* Instead of writing the same code for every nav bar */ -.x-splitbar-proxy { - background-color: #aaa; -} - -.x-color-palette a { - border-color: #FFF; -} - -.x-color-palette a:hover, -.x-color-palette a.x-color-palette-sel { - background-color: #ebebeb; - border-color: #b4b4b4; -} - -.x-color-palette em { - border-color: #aca899; -} - -.loading-indicator { - background-image: url("../images/modx-theme/grid/loading.gif"); - font-size: 11px; -} - -.x-spotlight { - background-color: #CCCCCC; -} - -.ext-ie7 .x-plain-body { - position: relative; -} - -.x-statusbar .x-status-busy { - background-image: url("../images/modx-theme/grid/loading.gif"); -} - -.x-statusbar .x-status-text-panel { - border-color: #DFDFDF #FFF #FFF #DFDFDF; -} - -.x-resizable-handle-southeast { - bottom: 1px; - right: 1px; -} - -.x-resizable-over .x-resizable-handle-east, -.x-resizable-pinned .x-resizable-handle-east, -.x-resizable-over .x-resizable-handle-west, -.x-resizable-pinned .x-resizable-handle-west { - background-image: url("../images/modx-theme/sizer/e-handle.gif"); -} - -.x-resizable-over .x-resizable-handle-south, -.x-resizable-pinned .x-resizable-handle-south, -.x-resizable-over .x-resizable-handle-north, -.x-resizable-pinned .x-resizable-handle-north { - background-image: url("../images/modx-theme/sizer/s-handle.gif"); -} - -.x-resizable-over .x-resizable-handle-north, -.x-resizable-pinned .x-resizable-handle-north { - background-image: url("../images/modx-theme/sizer/s-handle.gif"); -} - -.x-resizable-over .x-resizable-handle-southeast, -.x-resizable-pinned .x-resizable-handle-southeast { - background-image: url("../images/modx-theme/sizer/se-handle.gif"); -} - -.x-resizable-over .x-resizable-handle-northwest, -.x-resizable-pinned .x-resizable-handle-northwest { - background-image: url("../images/modx-theme/sizer/nw-handle.gif"); -} - -.x-resizable-over .x-resizable-handle-northeast, -.x-resizable-pinned .x-resizable-handle-northeast { - background-image: url("../images/modx-theme/sizer/ne-handle.gif"); -} - -.x-resizable-over .x-resizable-handle-southwest, -.x-resizable-pinned .x-resizable-handle-southwest { - background-image: url("../images/modx-theme/sizer/sw-handle.gif"); -} - -.x-resizable-proxy { - border-color: #575757; -} - -.x-resizable-overlay { - background-color: #FFF; -} - -.x-grid3 { - background-color: transparent; - background-image: none; - border: 1px solid #E4E9EE; - border-radius: 3px; - overflow: hidden; - padding: 0; -} - -.x-grid-panel .x-panel-mc .x-panel-body { - border: 0 none; -} - -.x-grid3-hd-row td, -.x-grid3-row td, -.x-grid3-summary-row td { - font: normal 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-grid3-row td, -.x-grid3-summary-row td { - border-left: 1px solid transparent; - padding-left: 0; -} - -.x-grid3-hd-row td { - text-align: initial; - border-left: 1px solid #FFF; - border-right: none; -} - -.x-grid3-hd-row td.x-grid3-cell-first, -.x-grid3-row td.x-grid3-cell-first, -.x-grid3-row td.x-grid3-summary-first { - border-left: 0 none; -} - -.x-grid3-hd-row td.x-grid3-cell-last, -.x-grid3-row td.x-grid3-cell-last, -.x-grid3-row td.x-grid3-summary-last { - border-right: 0 none; -} - -.x-grid-row-loading { - background-color: #FFF; - background-image: url("../images/modx-theme/shared/loading-balls.gif"); -} - -.x-grid3-row { - border-color: #FFF #FFF #EFEFEF; -} - -.x-grid3-row-expanded .x-grid3-row-body { - color: #888888; - margin: 0 2px 0 -20px; - padding: 0 25px 15px; - word-wrap: break-word; -} - -.x-grid3-row-expanded .x-grid3-row-body .desc { - word-wrap: break-word; -} - -.x-grid3-row-alt { - background-color: #F5F6F9; -} - -.x-panel-body-noheader .x-grid3-row { - border-color: transparent; -} - -.x-panel-body-noheader .x-grid3-row-alt { - border-bottom: 1px solid #EAEAEA; - border-top: 1px solid #EAEAEA; -} - -.x-panel-body-noheader .x-grid3-row-alt .x-grid3-row-table { - border-top: 1px solid transparent; -} - -.x-grid3-row-over { - background-color: #E0E8EF; - background-image: none; - border-bottom: 1px solid #D1D9DF; -} - -.x-grid3-resize-proxy { - background-color: #777; -} - -.x-grid3-resize-marker { - background-color: #777; -} - -.x-grid3-header { - background: #FFF; - border-bottom: 1px solid #E4E9EE !important; - padding: 0; -} - -.x-panel-body-noheader .x-grid3-header { - border: none; -} - -.x-grid3-header-offset { - padding-left: 0; -} - -.x-grid3-header .x-grid3-hd-row td { - color: dimgray; - font-weight: bold; - text-align: initial; -} - -.x-grid3-header-pop { - border-left-color: #DFDFDF; -} - -.x-grid3-header-pop-inner { - background-image: url("../images/modx-theme/grid/hd-pop.gif"); - border-left-color: #EEEEEE; -} - -td.x-grid3-hd-over, -td.sort-desc, -td.sort-asc, -td.x-grid3-hd-menu-open { - border-left-color: #FFF; - background: #FFF; -} - -td.x-grid3-hd-over .x-grid3-hd-inner, -td.sort-desc .x-grid3-hd-inner, -td.sort-asc .x-grid3-hd-inner, -td.x-grid3-hd-menu-open .x-grid3-hd-inner { - color: #696969; -} - -.sort-asc .x-grid3-sort-icon { - background-image: url("../images/modx-theme/grid/sort_asc.gif"); -} - -.sort-desc .x-grid3-sort-icon { - background-image: url("../images/modx-theme/grid/sort_desc.gif"); -} - -.x-panel-body-noheader .x-grid3-body { - background-color: #FFF; -} - -.x-grid3-cell-text, -.x-grid3-hd-text { - color: #515151; -} - -.x-grid3-split { - background-image: url("../images/modx-theme/grid/grid-split.gif"); -} - -.x-grid3-hd-text { - color: #464646; -} - -.x-dd-drag-proxy .x-grid3-hd-inner { - background-color: #f2f2f2; - background-image: url("../images/modx-theme/grid/grid3-hrow-over.gif"); - border-color: #c8c8c8; -} - -.col-move-top { - background-image: url("../images/modx-theme/grid/col-move-top.gif"); -} - -.col-move-bottom { - background-image: url("../images/modx-theme/grid/col-move-bottom.gif"); -} - -.x-grid3-row-selected { - background-color: #F0F0F0; - background-image: none; - border-bottom: 1px solid #E4E4E4 !important; - border-top: 1px solid #E4E4E4 !important; - color: #565550; -} - -.x-grid3-row-last, -.x-grid3-row-last .x-grid3-row-selected { - border-bottom-color: transparent !important; -} - -.x-grid3-cell-selected { - background-color: #E0EAEF !important; - color: #515151; -} - -.x-grid3-cell-selected span { - color: #515151 !important; -} - -.x-grid3-cell-selected .x-grid3-cell-text { - color: #515151; -} - -.x-grid3-locked td.x-grid3-row-marker, -.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker { - background-color: #d7d9df !important; - background-image: url("../images/modx-theme/grid/grid-hrow.gif") !important; - border-right-color: #9c9c9c !important; - border-top-color: #FFF; - color: #515151; -} - -.x-grid3-locked td.x-grid3-row-marker div, -.x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div { - color: #464646 !important; -} - -.x-grid3-dirty-cell { - background-image: url("../images/modx-theme/grid/dirty.gif"); -} - -.x-grid3-topbar, -.x-grid3-bottombar { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-grid3-bottombar .x-toolbar { - border-top-color: #bcbcbc; -} - -.x-props-grid .x-grid3-td-name .x-grid3-cell-inner { - background-image: url("../images/modx-theme/grid/grid3-special-col-bg.gif") !important; - color: #515151 !important; -} - -.x-grid3-hd-inner { - font-weight: bold; - padding: 10px; -} - -.ext-ie .x-grid3-hd-inner { - width: auto; -} - -.x-grid3-cell-inner, -.x-grid3-hd-inner { - padding: 10px; -} - -.x-props-grid .x-grid3-body .x-grid3-td-name { - background-color: #FFF !important; - border-right-color: #EEEEEE; -} - -.xg-hmenu-sort-asc .x-menu-item-icon { - background-image: url("../images/modx-theme/grid/hmenu-asc.gif"); -} - -.xg-hmenu-sort-desc .x-menu-item-icon { - background-image: url("../images/modx-theme/grid/hmenu-desc.gif"); -} - -.xg-hmenu-lock .x-menu-item-icon { - background-image: url("../images/modx-theme/grid/hmenu-lock.gif"); -} - -.xg-hmenu-unlock .x-menu-item-icon { - background-image: url("../images/modx-theme/grid/hmenu-unlock.gif"); -} - -.x-grid3-hd-btn { - background-color: #FFF; -} - -.x-grid3-hd-btn:before { - content: "\f0d7"; - font-weight: 900; - font-style: normal; - color: #77899F; - font-size: 14px; - text-align: center; - position: absolute; - top: 14px; - left: 0; - right: 0; -} - -.x-grid3-hd-btn:hover { - background-color: #FFF; -} - -.x-grid3-body .x-grid3-td-expander { - background-image: none; - text-align: right; -} - -.x-grid3-row-collapsed .x-grid3-row-expander { - height: 27px; - margin-top: 10px; -} - -.x-grid3-row-collapsed .x-grid3-row-expander:before { - content: "\f0fe"; - font-weight: 400; - font-size: 14px; - color: #53595F; -} - -.x-grid3-row-expanded .x-grid3-row-expander { - height: 27px; - margin-top: 10px; -} - -.x-grid3-row-expanded .x-grid3-row-expander:before { - content: "\f146"; - font-weight: 400; - font-size: 14px; - color: #53595F; -} - -.x-grid3-body .x-grid3-td-checker { - background-image: none; - padding: 10px 0 0; -} - -.x-grid3-row-checker, -.x-grid3-hd-checker:not(.x-grid3-hd-inner) { - cursor: pointer; -} -.x-grid3-row-checker:before, -.x-grid3-hd-checker:not(.x-grid3-hd-inner):before { - content: "\f0c8"; - font-weight: 400; - font-size: 14px; - display: inline-block; - padding: 3px 5px; - color: #53595F; -} -.x-grid3-row-selected .x-grid3-row-checker:before, .x-grid3-hd-checker-on .x-grid3-row-checker:before, -.x-grid3-row-selected .x-grid3-hd-checker:not(.x-grid3-hd-inner):before, -.x-grid3-hd-checker-on .x-grid3-hd-checker:not(.x-grid3-hd-inner):before { - content: "\f14a"; - font-weight: 400; -} - -.x-grid3-body .x-grid3-td-numberer { - background-color: #E5E5E5; - border-bottom: 1px solid #DADADA; - border-right: 1px solid #DADADA !important; -} - -.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner { - color: #444444; - padding-left: 10px; - padding-top: 10px !important; -} - -.x-grid3-body .x-grid3-td-row-icon { - background-image: url("../images/modx-theme/grid/grid3-special-col-bg.gif"); -} - -.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer, -.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker, -.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander { - background-image: none; -} - -.x-grid3-check-col { - cursor: pointer; - margin-top: 10px; -} -.x-grid3-check-col:before { - content: "\f0c8"; - font-weight: 400; - font-size: 14px; - display: block; - padding: 3px 5px; - color: #53595F; - text-align: left; - width: 14px; - margin: 0 auto; -} - -.x-grid3-check-col-on { - cursor: pointer; - margin-top: 10px; -} -.x-grid3-check-col-on:before { - content: "\f14a"; - font-weight: 400; - font-size: 14px; - display: block; - padding: 3px 5px; - color: #53595F; - text-align: left; - width: 14px; - margin: 0 auto; -} - -.x-grid-group, -.x-grid-group-body, -.x-grid-group-hd { - zoom: 1; -} - -.x-grid-group-hd { - border-bottom-color: #53595F; -} - -.x-grid-group-hd div.x-grid-group-title { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - color: #53595F; - font-size: 12px; - font-weight: bold; - padding: 10px 0; -} - -.x-grid-group-hd div.x-grid-group-title:before { - content: "\f146"; - font-weight: 400; - font-size: 14px; - font-style: normal; - padding: 0 5px; -} - -.x-grid-group-collapsed .x-grid-group-hd div.x-grid-group-title:before { - content: "\f0fe"; - font-weight: 400; - font-style: normal; - padding: 0 5px; -} - -.x-group-by-icon { - background-image: url("../images/modx-theme/grid/group-by.gif"); -} - -.x-cols-icon { - background-image: url("../images/modx-theme/grid/columns.gif"); -} - -.x-show-groups-icon { - background-image: url("../images/modx-theme/grid/group-by.gif"); -} - -.x-grid-empty { - color: #515151; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - text-align: center; -} - -.x-grid-with-col-lines .x-grid3-row td.x-grid3-cell { - border-right-color: #ededed; -} - -.x-grid-with-col-lines .x-grid3-row { - border-left: 0 none; - border-top: 0 none; -} - -.x-grid-with-col-lines .x-grid3-row-selected { - border-top-color: #E4E4E4; -} - -.x-dd-drag-ghost { - background-color: #FFF; - border-color: #ddd #bbb #bbb #DFDFDF; - color: #515151; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-dd-drop-nodrop .x-dd-drop-icon { - background-image: url("../images/modx-theme/dd/drop-no.gif"); -} - -.x-dd-drop-ok .x-dd-drop-icon { - background-image: url("../images/modx-theme/dd/drop-yes.gif"); -} - -.x-dd-drop-ok-add .x-dd-drop-icon { - background-image: url("../images/modx-theme/dd/drop-add.gif"); -} - -.x-view-selector { - background-color: #d8d8d8; - border-color: #8d8d8d; -} - -.x-tip { - background: #575757; - border-radius: 3px; - padding: 5px; - width: auto !important; - /* override ExtJS inline width */ - max-width: 400px; - min-width: 200px; -} - -.x-tip .x-tip-close { - background-image: url("../images/modx-theme/qtip/close.gif"); -} - -.x-tip .x-tip-tc, -.x-tip .x-tip-tl, -.x-tip .x-tip-tr, -.x-tip .x-tip-bc, -.x-tip .x-tip-bl, -.x-tip .x-tip-br, -.x-tip .x-tip-ml, -.x-tip .x-tip-mr { - background-image: none; -} - -.x-tip .x-tip-mc { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-tip .x-tip-ml { - background-color: transparent; -} - -.x-tip .x-tip-header-text { - color: #F0F0F0; - font: normal 13px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-tip .x-tip-body { - color: #f0f0f0; - font: normal 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - width: auto !important; - /* override ExtJS inline width */ -} - -.x-tip img { - display: block; - width: 100%; - max-width: 100%; - height: auto; - background-color: #CCCCCC; - background-image: url("../images/modx-theme/transparency-pattern.png"); -} - -.x-form-invalid-tip .x-tip-tc, -.x-form-invalid-tip .x-tip-tl, -.x-form-invalid-tip .x-tip-tr, -.x-form-invalid-tip .x-tip-bc, -.x-form-invalid-tip .x-tip-bl, -.x-form-invalid-tip .x-tip-br, -.x-form-invalid-tip .x-tip-ml, -.x-form-invalid-tip .x-tip-mr { - background-image: url("../images/modx-theme/form/error-tip-corners.gif"); -} - -.x-form-invalid-tip .x-tip-body { - background-image: url("../images/modx-theme/form/exclamation.gif"); -} - -.x-tip-anchor { - background-image: url("../images/modx-theme/qtip/tip-anchor-sprite.gif"); -} - -.x-menu { - background-color: #FFF; - border: 1px solid #E4E4E4; - border-radius: 3px; - /* TODO: replace with $borderRadius when merged */ - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15); - /* TODO: replace with $boxShadow when merged */ -} - -.x-menu-list { - padding: 0; -} -.x-menu-list li { - border: 0; - margin: 0; - padding: 0; - /* override top and bottom margin for the calendar / datepicker */ -} -.x-menu-list li:first-child { - margin-top: 3px; -} -.x-menu-list li:last-child { - margin-bottom: 3px; -} -.x-menu-list li.x-menu-date-item { - margin: 0; -} -.x-menu-list li a.x-menu-item { - color: #515151; - font-size: 13px; - padding: 3px 21px 3px 27px; -} -.x-menu-list li a.x-menu-item:hover { - color: #515151; -} -.x-menu-list li.x-menu-item-active { - background-color: #F0F0F0; -} -.x-menu-list li.x-menu-item-active a { - color: #515151; -} - -.x-menu-floating { - border-color: #C7C7C7; -} -html[dir=rtl] .x-menu-floating { - left: unset !important; - right: 0; -} - -.x-menu-nosep { - background-image: none; -} - -.x-menu-list-item { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-menu-item-arrow { - background-image: url("../images/modx-theme/menu/menu-parent.gif"); -} - -.x-menu-sep { - background-color: #E4E4E4; - border-bottom: none; - margin: 2px 0; -} - -.x-menu-item-active a.x-menu-item { - border: 0 none; - margin: 0; -} - -.x-menu-check-item .x-menu-item-icon { - background-image: url("../images/modx-theme/menu/unchecked.gif"); -} - -.x-menu-item-checked .x-menu-item-icon { - background-image: url("../images/modx-theme/menu/checked.gif"); -} - -.x-menu-item-checked .x-menu-group-item .x-menu-item-icon { - background-image: url("../images/modx-theme/menu/group-checked.gif"); -} - -.x-menu-group-item .x-menu-item-icon { - background-image: none; -} - -.x-menu-plain { - background-color: #FFF !important; -} - -.x-cycle-menu .x-menu-item-checked { - background-color: #DFDFDF; - border-color: #b9b9b9 !important; -} - -.x-menu-scroller-top { - background-image: url("../images/modx-theme/layout/mini-top.gif"); -} - -.x-menu-scroller-bottom { - background-image: url("../images/modx-theme/layout/mini-bottom.gif"); -} - -.x-box-tl, -.x-box-ml { - background-color: #FAFAFA; - background-image: none; - color: #393939; - font: normal 13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; -} - -.x-box-mc p { - font-weight: normal; - margin-bottom: 5px; -} - -.x-box-tl { - background-color: rgba(250, 250, 250, 0.8); - border-left: 1px solid #DEDEDE; - border-right: 1px solid #DEDEDE; - border-top: 1px solid #DEDEDE; -} - -.x-box-ml { - background-color: rgba(250, 250, 250, 0.8); - border-left: 1px solid #DEDEDE; - border-right: 1px solid #DEDEDE; -} - -.x-box-bl { - background-color: rgba(230, 230, 230, 0.8); - border-bottom: 1px solid #DEDEDE; - border-left: 1px solid #DEDEDE; - border-right: 1px solid #DEDEDE; -} - -.x-box-mc h3 { - font-size: 14px; - font-weight: bold; -} - -.x-box-mr, -.x-box-bl, -.x-box-bc, -.x-box-br, -.x-box-blue .x-box-bl, -.x-box-blue .x-box-br, -.x-box-blue .x-box-tl, -.x-box-blue .x-box-tr { - background-image: none; -} - -.x-box-blue .x-box-bc, -.x-box-blue .x-box-mc, -.x-box-blue .x-box-tc { - background-image: url("../images/modx-theme/box/tb-gray.gif"); -} - -.x-box-blue .x-box-mc { - background-color: #d8d8d8; -} - -.x-box-blue .x-box-mc h3 { - color: #363636; -} - -.x-box-blue .x-box-ml { - background-image: url("../images/modx-theme/box/l-gray.gif"); -} - -.x-box-blue .x-box-mr { - background-image: url("../images/modx-theme/box/r-gray.gif"); -} - -#x-debug-browser .x-tree .x-tree-node a span { - color: #333333; - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 11px; -} - -#x-debug-browser .x-tree a i { - color: #CF1124; - font-style: normal; -} - -#x-debug-browser .x-tree a em { - color: #999; -} - -#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span { - background-color: #d8d8d8; -} - -.x-panel-bwrap { - overflow: visible; -} - -.x-panel-body { - border: 0; - border-radius: 3px; - overflow: visible; -} -#modx-panel-packages-browser .x-panel-body { - border-radius: 0; - /* prevent rounded borders on the two panels most popular / newest additions */ -} - -.x-grid-panel .x-panel-body { - background-color: #F5F5F5; - border-bottom: 1px solid #E4E4E4; - border-top: 1px solid #FAFAFA; - border: 0 none; -} - -.x-grid-panel .x-panel-body-noheader { - background-color: transparent; - border: 0 none; - padding: 0 !important; -} - -.x-panel-tl .x-panel-header { - color: #6A6A6A; - font: normal 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; -} - -.x-panel-tl .x-panel-icon { - background-position: 0 8px; -} - -.x-panel-tc { - background-image: none; -} - -.x-panel-tl, -.x-panel-tr, -.x-panel-bl, -.x-panel-br { - background-image: none; - border-bottom-color: #DFDFDF; -} - -.x-panel-bc { - background-image: none; -} - -.x-panel-tc { - background-color: #F5F5F5; -} - -.x-panel-tl { - border-color: #E3E3E3 #E3E3E3; - border-style: solid solid none; - border-width: 1px 1px 0; -} - -.x-panel-tl .x-panel-header { - border-bottom: 1px solid #E4E4E4; - padding: 10px 0; -} - -.x-panel-bc .x-panel-footer { - padding-bottom: 0; -} - -.x-panel-btns { - background-color: transparent; - padding: 15px 0 1px 0; - /* override extjs default theme rule, padding bottom 1px to not cut off buttons box-shadow */ -} -.x-panel-btns td.x-toolbar-cell { - padding: 0; - /* override extjs default theme rule */ -} - -.x-panel-mc { - background-color: #F5F5F5; - border-bottom: 1px solid #DFDFDF; - border-top: 1px solid #FAFAFA; - padding: 10px 5px; -} - -.x-panel-tl, -.x-panel-ml, -.x-panel-bl { - background-color: #F5F5F5; - padding-left: 8px; -} - -.x-panel-ml, -.x-panel-mr { - background-image: none; -} - -.x-panel-bl { - border-color: #E3E3E3 #E3E3E3; - border-style: none solid solid; - border-width: 0 1px 1px; - padding-bottom: 8px; -} - -.x-panel-ml { - border-left: 1px solid #E3E3E3; - border-right: 1px solid #E3E3E3; -} - -.x-panel-mr { - padding-right: 8px; -} - -.x-panel-tr, -.x-panel-mr, -.x-panel-br { - background-color: #f7f7f7; -} - -.x-tool { - background: none; - border-radius: 50%; - color: #515151; - font-size: 14px; - margin: 0 3px 0 0; - position: relative; - transition: all 0.3s; - width: 18px; - height: 18px; -} -.x-tool:after { - box-sizing: border-box; - padding-top: 2px; - position: absolute; - top: 0; - left: 0; - text-align: center; - vertical-align: middle; - width: 18px; - height: 18px; -} -.x-tool:hover { - color: #FFF; - background: #234368; -} -.x-tool.x-tool-toggle:after { - content: "\f077"; - padding-top: 2px; -} -.x-tool.x-tool-toggle-over:after, .x-tool.x-tool-toggle:hover:after { - content: "\f077"; -} -.x-panel-collapsed .x-tool.x-tool-toggle:after { - content: "\f078"; - padding-top: 3px; -} -.x-panel-collapsed .x-tool.x-tool-toggle-over:after, .x-panel-collapsed .x-tool.x-tool-toggle:hover:after { - content: "\f078"; - padding-top: 3px; -} -.x-tool.x-tool-close:after { - content: "\f00d"; -} -.x-tool.x-tool-minimize:after { - content: "\f066"; -} -.x-tool.x-tool-maximize:after { - content: "\f065"; -} -.x-tool.x-tool-restore:after { - content: "\f066"; -} -.x-tool.x-tool-gear:after { - content: "\f013"; -} -.x-tool.x-tool-pin:after { - content: "\f111"; -} -.x-tool.x-tool-pin-over:after, .x-tool.x-tool-pin:hover:after { - content: "\f192"; -} -.x-tool.x-tool-unpin:after { - content: "\f192"; -} -.x-tool.x-tool-unpin-over:after, .x-tool.x-tool-unpin:hover:after { - content: "\f111"; -} -.x-tool.x-tool-right:after { - content: "\f054"; - padding-left: 1px; -} -.x-tool.x-tool-left:after { - content: "\f053"; - padding-right: 2px; -} -.x-tool.x-tool-up:after { - content: "\f077"; - padding-top: 1px; -} -.x-tool.x-tool-down:after { - content: "\f078"; - padding-top: 1px; -} -.x-tool.x-tool-minus:after { - content: "\f068"; -} -.x-tool.x-tool-plus:after { - content: "\f067"; -} - -.x-panel-dd-spacer { - border-color: #DFDFDF; -} - -.x-panel-fbar td, -.x-panel-fbar span, -.x-panel-fbar input, -.x-panel-fbar div, -.x-panel-fbar select, -.x-panel-fbar label { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-panel-header { - border-radius: 3px 3px 0 0; - border: 1px solid #c0c0c0; - font-size: 14px; - font-weight: bold; - margin-top: 0; - padding: 10px 10px 8px; -} - -.x-portal-space { - border-bottom: 1px solid #afafaf; - padding: 0; -} - -.x-column-inner { - overflow: visible; - /* prevent second col with fields to have excessive margin on the right */ - /* distance to the right for all following columns, this makes the first one 15px wider than the rest*/ - /* but allows for more than 2 columns layouts */ -} -.x-column-inner > .x-column { - margin-right: 0; - overflow: visible; -} -.x-column-inner > .x-column:not(.x-hide-display) ~ .x-column { - margin-right: 0; - margin-left: 15px; -} - -.x-panel-nofooter .x-panel-bc { - background-image: none; - height: 0; -} - -.x-panel-ghost { - background-color: #dbdbdb; -} - -.x-panel-ghost ul { - border-color: #d0d0d0; -} - -.x-panel-dd-spacer { - border-color: #d0d0d0; -} - -.x-dlg-mask { - background-color: #CCCCCC; -} - -.x-html-editor-wrap { - background-color: #FFF; - border-color: #bcbcbc; -} - -.x-panel-noborder .x-panel-header-noborder { - border-bottom-color: transparent; -} - -.x-border-layout-ct { - background-color: #FAFAFA; -} - -.x-accordion-hd { - background-image: url("../images/modx-theme/panel/light-hd.gif"); - color: #222; - font-weight: normal; -} - -.x-layout-collapsed { - background-color: #E4E4E4; - border-color: #DFDFDF; - width: 7px !important; -} - -.x-layout-collapsed-over { - background-color: #e6e6e6; -} - -.x-layout-split-west .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-left.gif"); -} - -.x-layout-split-east .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-right.gif"); -} - -.x-layout-split-north .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-top.gif"); -} - -.x-layout-split-south .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-bottom.gif"); -} - -.x-layout-cmini-west .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-right.gif"); -} - -.x-layout-cmini-east .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-left.gif"); -} - -.x-layout-cmini-north .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-bottom.gif"); -} - -.x-layout-cmini-south .x-layout-mini { - background-image: url("../images/modx-theme/layout/mini-top.gif"); -} - -.x-list-header { - background-color: #f9f9f9; - background-image: url("../images/modx-theme/grid/grid3-hrow.gif"); -} - -.x-list-header-inner div em { - border-left-color: #DFDFDF; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-list-body dt em { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-list-over { - background-color: #EEEEEE; -} - -.x-list-selected { - background-color: #e7e7e7; -} - -.x-list-resizer { - border-left-color: #555; - border-right-color: #555; -} - -.x-list-header-inner em.sort-asc, -.x-list-header-inner em.sort-desc { - background-image: url("../images/modx-theme/grid/sort-hd.gif"); - border-color: #DFDFDF; -} - -.x-slider-horz, -.x-slider-horz .x-slider-end, -.x-slider-horz .x-slider-inner { - background-image: url("../images/modx-theme/slider/slider-bg.png"); -} - -.x-slider-horz .x-slider-thumb { - background-image: url("../images/modx-theme/slider/slider-thumb.png"); -} - -.x-slider-vert, -.x-slider-vert .x-slider-end, -.x-slider-vert .x-slider-inner { - background-image: url("../images/modx-theme/slider/slider-v-bg.png"); -} - -.x-slider-vert .x-slider-thumb { - background-image: url("../images/modx-theme/slider/slider-v-thumb.png"); -} - -/* portal */ -.x-portal .x-panel-tl .x-panel-header { - background: none; - font-size: 14px; - padding: 8px 0 8px 0; -} - -.x-portal .x-tool { - margin-top: 0; -} - -.x-portal .x-panel-body { - font-weight: normal; - margin-bottom: 5px; - padding: 0; - text-transform: none; -} - -.x-portal-space { - margin-bottom: 5px; -} - -/* grid checker */ -.x-grid3-body .x-grid3-td-checker { - background-image: none !important; -} - -/* combo tpl stuff */ -.modx-combo-desc { - color: #515151; - font-size: 0.9em; - font-style: italic; -} - -.modx-combo-title { - font-weight: bold; -} - -/* draggable grids */ -.modx-grid-draggable .x-grid3-row { - cursor: move; -} - -/* On deprecated logs controller, allow group title to expand normally which is inexplicably hardcoded in the extjs files */ -#modx-grid-deprecated-log .x-grid-group-hd div { - height: auto; -} - -/* having to do some real janky stuff to work with ExtJS markup */ -.x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-btn, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-btn, .actions button.primary-button, -.primary-button.inline-button, -.primary-button.x-superboxselect-item, -.primary-button.x-form-trigger, -.primary-button.x-date-mp-ok, -.primary-button.x-date-mp-cancel, .primary-button.x-btn { - transition: background-color 0.2s ease-out; - background: #6CB24A; - box-shadow: none; - color: #FFF; -} -.x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-btn-focus.x-btn:not(.x-btn-over), .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-btn-focus.x-btn:not(.x-btn-over), .actions button.x-btn-focus.primary-button:not(.x-btn-over), -.x-btn-focus.primary-button.inline-button:not(.x-btn-over), -.x-btn-focus.primary-button.x-superboxselect-item:not(.x-btn-over), -.x-btn-focus.primary-button.x-form-trigger:not(.x-btn-over), -.x-btn-focus.primary-button.x-date-mp-ok:not(.x-btn-over), -.x-btn-focus.primary-button.x-date-mp-cancel:not(.x-btn-over), .x-btn-focus.primary-button.x-btn:not(.x-btn-over) { - background: #6CB24A; - color: #FFF; -} -.x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-btn-over.x-btn, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-btn-over.x-btn, .actions button.x-btn-over.primary-button, -.x-btn-over.primary-button.inline-button, -.x-btn-over.primary-button.x-superboxselect-item, -.x-btn-over.primary-button.x-form-trigger, -.x-btn-over.primary-button.x-date-mp-ok, -.x-btn-over.primary-button.x-date-mp-cancel, .x-btn-over.primary-button.x-btn, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-btn:hover, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-btn:hover, .actions button.primary-button:hover, -.primary-button.inline-button:hover, -.primary-button.x-superboxselect-item:hover, -.primary-button.x-form-trigger:hover, -.primary-button.x-date-mp-ok:hover, -.primary-button.x-date-mp-cancel:hover, .primary-button.x-btn:hover { - background: #528738; - box-shadow: none; - color: #FFF; -} -.x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-btn-click.x-btn, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-btn-click.x-btn, .actions button.x-btn-click.primary-button, -.x-btn-click.primary-button.inline-button, -.x-btn-click.primary-button.x-superboxselect-item, -.x-btn-click.primary-button.x-form-trigger, -.x-btn-click.primary-button.x-date-mp-ok, -.x-btn-click.primary-button.x-date-mp-cancel, .x-btn-click.primary-button.x-btn, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-btn:active, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-btn:active, .actions button.primary-button:active, -.primary-button.inline-button:active, -.primary-button.x-superboxselect-item:active, -.primary-button.x-form-trigger:active, -.primary-button.x-date-mp-ok:active, -.primary-button.x-date-mp-cancel:active, .primary-button.x-btn:active { - background: #385c26; - box-shadow: none; - color: #FFF; -} -.x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(1) .x-item-disabled.x-btn, .x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell:nth-child(2) .x-item-disabled.x-btn, .actions button.x-item-disabled.primary-button, -.x-item-disabled.primary-button.inline-button, -.x-item-disabled.primary-button.x-superboxselect-item, -.x-item-disabled.primary-button.x-form-trigger, -.x-item-disabled.primary-button.x-date-mp-ok, -.x-item-disabled.primary-button.x-date-mp-cancel, .x-item-disabled.primary-button.x-btn { - background: #6CB24A; - box-shadow: none; - color: #FFF; - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ -} - -.actions button, -.inline-button, -.x-superboxselect-item, -.x-form-trigger, -.x-date-picker .x-btn, -.x-date-mp-ok, -.x-date-mp-cancel, .x-btn { - background-color: #FFF; - background-repeat: no-repeat; - /* prevent any background-images from repeating, extras compatibility */ - border: 0; - border-radius: 3px; - box-shadow: 0 0 0 1px #E4E4E4; - color: #515151; - cursor: pointer; - display: inline-block; - *display: inline; - line-height: 1; - padding: 10px 15px 10px 15px; - position: relative; - text-decoration: none; - transition: background-color 0.2s ease-out; - zoom: 1; - /* .x-btn buttons are wrapped in an em tag */ -} -.ext-webkit .actions button em, .actions .ext-webkit button em, -.ext-webkit .inline-button em, -.ext-webkit .x-superboxselect-item em, -.ext-webkit .x-form-trigger em, -.ext-webkit .x-date-mp-ok em, -.ext-webkit .x-date-mp-cancel em, .ext-webkit .x-btn em { - font-size: 0; - /* prevent strange excessive height, creates too much height in firefox^^ */ -} -.actions button button, -.inline-button button, -.x-superboxselect-item button, -.x-form-trigger button, -.x-date-picker .x-btn button, -.x-date-mp-ok button, -.x-date-mp-cancel button, .x-btn button { - background-repeat: no-repeat; - /* prevent any background-images from repeating, mainly for extra compatibility */ - color: inherit; - cursor: pointer; - font-size: 13px; - font-style: normal; - /* override default italic from the parent em tag */ - line-height: 1; - height: 16px; - min-width: 100%; - padding: 0; - /* override extjs default theme styles */ -} -.ext-ie8 .actions button button, .actions .ext-ie8 button button, -.ext-ie8 .inline-button button, -.ext-ie8 .x-superboxselect-item button, -.ext-ie8 .x-form-trigger button, -.ext-ie8 .x-date-mp-ok button, -.ext-ie8 .x-date-mp-cancel button, .ext-ie8 .x-btn button { - padding-top: 0; - /* fix IE < 9 (overriding extjs default style) */ -} -.actions button .x-btn-split, -.inline-button .x-btn-split, -.x-superboxselect-item .x-btn-split, -.x-form-trigger .x-btn-split, -.x-date-picker .x-btn .x-btn-split, -.x-date-mp-ok .x-btn-split, -.x-date-mp-cancel .x-btn-split, .x-btn .x-btn-split, -.actions button .x-btn-arrow, -.inline-button .x-btn-arrow, -.x-superboxselect-item .x-btn-arrow, -.x-form-trigger .x-btn-arrow, -.x-date-picker .x-btn .x-btn-arrow, -.x-date-mp-ok .x-btn-arrow, -.x-date-mp-cancel .x-btn-arrow, -.x-btn .x-btn-arrow { - display: block; - padding-right: 20px; - position: relative; -} -.actions button .x-btn-split:before, -.inline-button .x-btn-split:before, -.x-superboxselect-item .x-btn-split:before, -.x-form-trigger .x-btn-split:before, -.x-date-mp-ok .x-btn-split:before, -.x-date-mp-cancel .x-btn-split:before, .x-btn .x-btn-split:before, -.actions button .x-btn-arrow:before, -.inline-button .x-btn-arrow:before, -.x-superboxselect-item .x-btn-arrow:before, -.x-form-trigger .x-btn-arrow:before, -.x-date-mp-ok .x-btn-arrow:before, -.x-date-mp-cancel .x-btn-arrow:before, -.x-btn .x-btn-arrow:before { - color: inherit; - content: "\f0d7"; - font-size: 14px; - margin-top: 0; - position: absolute; - top: 50%; - right: 0; - /* vertically center the arrow */ -} -.actions button .x-btn-split button, -.inline-button .x-btn-split button, -.x-superboxselect-item .x-btn-split button, -.x-form-trigger .x-btn-split button, -.x-date-mp-ok .x-btn-split button, -.x-date-mp-cancel .x-btn-split button, .x-btn .x-btn-split button, -.actions button .x-btn-arrow button, -.inline-button .x-btn-arrow button, -.x-superboxselect-item .x-btn-arrow button, -.x-form-trigger .x-btn-arrow button, -.x-date-mp-ok .x-btn-arrow button, -.x-date-mp-cancel .x-btn-arrow button, -.x-btn .x-btn-arrow button { - border-right-color: inherit; - border-right-style: solid; - border-right-width: 1px; - padding-right: 10px; -} -.actions button.x-btn-focus:not(.x-btn-over), -.x-btn-focus.inline-button:not(.x-btn-over), -.x-btn-focus.x-superboxselect-item:not(.x-btn-over), -.x-btn-focus.x-form-trigger:not(.x-btn-over), -.x-btn-focus.x-date-mp-ok:not(.x-btn-over), -.x-btn-focus.x-date-mp-cancel:not(.x-btn-over), .x-btn-focus.x-btn:not(.x-btn-over) { - background: #FFF; - color: #515151; -} -.actions button.x-btn-over, -.x-btn-over.inline-button, -.x-btn-over.x-superboxselect-item, -.x-btn-over.x-form-trigger, -.x-btn-over.x-date-mp-ok, -.x-btn-over.x-date-mp-cancel, .x-btn-over.x-btn, .actions button:hover, -.inline-button:hover, -.x-superboxselect-item:hover, -.x-form-trigger:hover, -.x-date-mp-ok:hover, -.x-date-mp-cancel:hover, .x-btn:hover { - background-color: #E4E4E4; - box-shadow: #DCDCDC; - color: #515151; -} -.actions button.x-btn-click, -.x-btn-click.inline-button, -.x-btn-click.x-superboxselect-item, -.x-btn-click.x-form-trigger, -.x-btn-click.x-date-mp-ok, -.x-btn-click.x-date-mp-cancel, .x-btn-click.x-btn, .actions button:active, -.inline-button:active, -.x-superboxselect-item:active, -.x-form-trigger:active, -.x-date-mp-ok:active, -.x-date-mp-cancel:active, .x-btn:active { - background-color: #E4E4E4; - box-shadow: #DCDCDC; - color: #515151; -} -.actions button.x-btn-menu-active .x-btn-split:before, -.x-btn-menu-active.inline-button .x-btn-split:before, -.x-btn-menu-active.x-superboxselect-item .x-btn-split:before, -.x-btn-menu-active.x-form-trigger .x-btn-split:before, -.x-btn-menu-active.x-date-mp-ok .x-btn-split:before, -.x-btn-menu-active.x-date-mp-cancel .x-btn-split:before, .x-btn-menu-active.x-btn .x-btn-split:before { - content: "\f0d8"; -} -.actions button.x-item-disabled, -.x-item-disabled.inline-button, -.x-item-disabled.x-superboxselect-item, -.x-item-disabled.x-form-trigger, -.x-item-disabled.x-date-mp-ok, -.x-item-disabled.x-date-mp-cancel, .x-item-disabled.x-btn { - background-color: #FFF; - color: #1e1e1e; - box-shadow: 0 0 0 1px #E4E4E4; - opacity: 0.6; - /* extjs default theme is also 0.6 */ - filter: alpha(opacity=60); - /* for IE <= 8 */ -} -button { - margin: 2px; - /* default in chrome, apply it to everybody */ -} - -/* btn style */ -.x-panel-btns .x-btn { - margin: 0 0 0 7px; -} - -/* Action buttons */ -.actions { - bottom: 8px; - margin: 0; - overflow: visible; - position: absolute; -} -.actions li { - float: left; - line-height: 0.7; - margin-right: 2px; -} - -.actions button, -.inline-button, -.x-superboxselect-item, -.x-form-trigger, -.x-date-picker .x-btn, -.x-date-mp-ok, -.x-date-mp-cancel { - box-shadow: 0 0 0 1px #DCDCDC; - box-sizing: content-box; - /* override browser default of border-box */ - padding: 5px; -} -.actions button:hover, .actions button:focus, -.inline-button:hover, -.inline-button:focus, -.x-superboxselect-item:hover, -.x-superboxselect-item:focus, -.x-form-trigger:hover, -.x-form-trigger:focus, -.x-date-picker .x-btn:hover, -.x-date-picker .x-btn:focus, -.x-date-mp-ok:hover, -.x-date-mp-ok:focus, -.x-date-mp-cancel:hover, -.x-date-mp-cancel:focus { - box-shadow: #999999; -} -.actions button:active, -.inline-button:active, -.x-superboxselect-item:active, -.x-form-trigger:active, -.x-date-picker .x-btn:active, -.x-date-mp-ok:active, -.x-date-mp-cancel:active { - box-shadow: #999999; -} -.actions button.yellow, -.inline-button.yellow, -.x-superboxselect-item.yellow, -.x-form-trigger.yellow, -.x-date-picker .x-btn.yellow, -.x-date-mp-ok.yellow, -.x-date-mp-cancel.yellow { - background: #FCE588; - box-shadow: 0 0 0 1px #FCE588; - color: #515151 !important; -} -.actions button.yellow:hover, .actions button.yellow:focus, -.inline-button.yellow:hover, -.inline-button.yellow:focus, -.x-superboxselect-item.yellow:hover, -.x-superboxselect-item.yellow:focus, -.x-form-trigger.yellow:hover, -.x-form-trigger.yellow:focus, -.x-date-picker .x-btn.yellow:hover, -.x-date-picker .x-btn.yellow:focus, -.x-date-mp-ok.yellow:hover, -.x-date-mp-ok.yellow:focus, -.x-date-mp-cancel.yellow:hover, -.x-date-mp-cancel.yellow:focus { - background: #fbe06f; - box-shadow: 0 0 0 1px #fbe06f; -} -.actions button.yellow:active, -.inline-button.yellow:active, -.x-superboxselect-item.yellow:active, -.x-form-trigger.yellow:active, -.x-date-picker .x-btn.yellow:active, -.x-date-mp-ok.yellow:active, -.x-date-mp-cancel.yellow:active { - background: #fbda56; - box-shadow: 0 0 0 1px #fbda56; -} -.actions button.orange, -.inline-button.orange, -.x-superboxselect-item.orange, -.x-form-trigger.orange, -.x-date-picker .x-btn.orange, -.x-date-mp-ok.orange, -.x-date-mp-cancel.orange { - background: #F0B429; - box-shadow: 0 0 0 1px #F0B429; - color: #FFF !important; -} -.actions button.orange:hover, .actions button.orange:focus, -.inline-button.orange:hover, -.inline-button.orange:focus, -.x-superboxselect-item.orange:hover, -.x-superboxselect-item.orange:focus, -.x-form-trigger.orange:hover, -.x-form-trigger.orange:focus, -.x-date-picker .x-btn.orange:hover, -.x-date-picker .x-btn.orange:focus, -.x-date-mp-ok.orange:hover, -.x-date-mp-ok.orange:focus, -.x-date-mp-cancel.orange:hover, -.x-date-mp-cancel.orange:focus { - background: #eeac11; - box-shadow: 0 0 0 1px #eeac11; -} -.actions button.orange:active, -.inline-button.orange:active, -.x-superboxselect-item.orange:active, -.x-form-trigger.orange:active, -.x-date-picker .x-btn.orange:active, -.x-date-mp-ok.orange:active, -.x-date-mp-cancel.orange:active { - background: #d79b0f; - box-shadow: 0 0 0 1px #d79b0f; -} -.actions button.red, -.inline-button.red, -.x-superboxselect-item.red, -.x-form-trigger.red, -.x-date-picker .x-btn.red, -.x-date-mp-ok.red, -.x-date-mp-cancel.red { - background: #CF1124; - box-shadow: 0 0 0 1px #CF1124; - color: #FFF !important; -} -.actions button.red:hover, .actions button.red:focus, -.inline-button.red:hover, -.inline-button.red:focus, -.x-superboxselect-item.red:hover, -.x-superboxselect-item.red:focus, -.x-form-trigger.red:hover, -.x-form-trigger.red:focus, -.x-date-picker .x-btn.red:hover, -.x-date-picker .x-btn.red:focus, -.x-date-mp-ok.red:hover, -.x-date-mp-ok.red:focus, -.x-date-mp-cancel.red:hover, -.x-date-mp-cancel.red:focus { - background: #c11022; - box-shadow: 0 0 0 1px #c11022; -} -.actions button.red:active, -.inline-button.red:active, -.x-superboxselect-item.red:active, -.x-form-trigger.red:active, -.x-date-picker .x-btn.red:active, -.x-date-mp-ok.red:active, -.x-date-mp-cancel.red:active { - background: #b30f1f; - box-shadow: 0 0 0 1px #b30f1f; -} -.actions button.green, -.inline-button.green, -.x-superboxselect-item.green, -.x-form-trigger.green, -.x-date-picker .x-btn.green, -.x-date-mp-ok.green, -.x-date-mp-cancel.green { - background: #6CB24A; - box-shadow: 0 0 0 1px #6CB24A; - color: #FFF !important; - /* override !important of .green class */ -} -.actions button.green:hover, .actions button.green:focus, -.inline-button.green:hover, -.inline-button.green:focus, -.x-superboxselect-item.green:hover, -.x-superboxselect-item.green:focus, -.x-form-trigger.green:hover, -.x-form-trigger.green:focus, -.x-date-picker .x-btn.green:hover, -.x-date-picker .x-btn.green:focus, -.x-date-mp-ok.green:hover, -.x-date-mp-ok.green:focus, -.x-date-mp-cancel.green:hover, -.x-date-mp-cancel.green:focus { - background: #61a043; - box-shadow: 0 0 0 1px #61a043; -} -.actions button.green:active, -.inline-button.green:active, -.x-superboxselect-item.green:active, -.x-form-trigger.green:active, -.x-date-picker .x-btn.green:active, -.x-date-mp-ok.green:active, -.x-date-mp-cancel.green:active { - background: #568e3b; - box-shadow: 0 0 0 1px #568e3b; -} -.actions button.blue, -.inline-button.blue, -.x-superboxselect-item.blue, -.x-form-trigger.blue, -.x-date-picker .x-btn.blue, -.x-date-mp-ok.blue, -.x-date-mp-cancel.blue { - background: #4A90E2; - box-shadow: 0 0 0 1px #4A90E2; - color: #FFF !important; - /* override !important of .green class */ -} -.actions button.blue:hover, .actions button.blue:focus, -.inline-button.blue:hover, -.inline-button.blue:focus, -.x-superboxselect-item.blue:hover, -.x-superboxselect-item.blue:focus, -.x-form-trigger.blue:hover, -.x-form-trigger.blue:focus, -.x-date-picker .x-btn.blue:hover, -.x-date-picker .x-btn.blue:focus, -.x-date-mp-ok.blue:hover, -.x-date-mp-ok.blue:focus, -.x-date-mp-cancel.blue:hover, -.x-date-mp-cancel.blue:focus { - background: #3483de; - box-shadow: 0 0 0 1px #3483de; -} -.actions button.blue:active, -.inline-button.blue:active, -.x-superboxselect-item.blue:active, -.x-form-trigger.blue:active, -.x-date-picker .x-btn.blue:active, -.x-date-mp-ok.blue:active, -.x-date-mp-cancel.blue:active { - background: #2275d7; - box-shadow: 0 0 0 1px #2275d7; -} - -/* Toolbar combo/text styled just like the buttons */ -.x-toolbar .x-form-field-trigger-wrap { - background: #FFF; - border: 0; - border-radius: 3px; - box-shadow: 0 0 0 1px #E4E4E4; - cursor: pointer; - line-height: 1; -} -.x-toolbar .x-form-field-trigger-wrap .x-form-text { - background: #FFF; - border: 0; - margin: 0 !important; -} -.x-toolbar .x-form-field-trigger-wrap .x-form-trigger:before { - margin-top: 0; -} -.x-toolbar .x-form-field-trigger-wrap.x-trigger-wrap-focus { - box-shadow: 0 0 0 1px #999999; -} -html[dir=rtl] .x-toolbar-left table { - float: right; -} -.x-toolbar .x-toolbar-left-row .x-btn, -.x-toolbar .x-toolbar-left-row .x-form-text, -.x-toolbar .x-toolbar-left-row .x-form-field-trigger-wrap { - margin: 0 3px; -} -.x-toolbar .x-toolbar-left-row td .x-btn { - display: block; -} -.x-toolbar .x-toolbar-left-row .x-form-filter { - border-radius: 3px 0 0 3px; - z-index: 1; - /* prevent clear filter button from overlapping the textfield */ -} -.x-toolbar .x-toolbar-left-row .x-form-filter:not(.x-form-empty-field) { - border-color: #000; -} -.x-toolbar .x-toolbar-left-row .x-form-filter.x-form-focus { - border-color: #999999; -} -.x-toolbar .x-toolbar-left-row .x-form-filter-clear { - border-radius: 0 3px 3px 0; - margin-right: 0; -} -.x-toolbar .x-toolbar-right-row .x-btn, -.x-toolbar .x-toolbar-right-row .x-form-text, -.x-toolbar .x-toolbar-right-row .x-form-field-trigger-wrap { - margin: 0 3px; -} -.x-toolbar .x-toolbar-right-row td .x-btn { - display: block; -} -.x-toolbar .x-toolbar-right-row .x-form-filter { - border-radius: 3px 0 0 3px; - z-index: 1; - /* prevent clear filter button from overlapping the textfield */ -} -.x-toolbar .x-toolbar-right-row .x-form-filter:not(.x-form-empty-field) { - border-color: #000; -} -.x-toolbar .x-toolbar-right-row .x-form-filter.x-form-focus { - border-color: #999999; -} -.x-toolbar .x-toolbar-right-row .x-form-filter-clear { - border-radius: 0 3px 3px 0; - margin-left: 0; -} -.x-toolbar .x-form-text { - padding: 8px 13px; - border-radius: 3px; - font-size: 13px !important; -} -.x-toolbar.x-small-editor .x-form-text { - padding-top: 8px; - /* overrides ext standard theme rule which isn't overridden by padding rule above */ -} -.x-toolbar .xtb-sep { - /* use margin on the elements itself as the separators are not inserted consistently */ - /* separators are removed, but we leave this rule for safety */ - margin: 0; - width: 0; -} -.x-tree .x-toolbar .x-btn { - padding: 7px; -} -.x-tree .x-toolbar .x-btn-icon { - box-shadow: none; - padding: 7px; -} -.x-tree .x-toolbar .x-btn-icon.x-btn-over { - background: none; - box-shadow: none; - color: #234368; -} -.x-tree .x-toolbar .x-btn-icon.x-btn-click { - background: none; - box-shadow: none; - color: #1b3451; -} -.x-tree .x-toolbar .x-btn-icon:before { - content: none; -} -.x-tree .x-toolbar .x-toolbar-left-row .x-form-field-wrap, -.x-tree .x-toolbar .x-toolbar-right-row .x-form-field-wrap { - margin-right: 6px; - margin-left: 6px !important; - /* we need !important to override the rules above */ -} - -/* action buttons bar, declare after general toolbar styles to make use of the cascade */ -#modx-action-buttons { - position: fixed; - top: 0; - right: 0; - left: auto; - background: #F1F1F1; - padding: 0.5rem 1rem; - border: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - border-radius: 3px; - z-index: 12; - /* prevent panel collapse arrows + toggles from overlapping */ -} -#modx-action-buttons .x-toolbar-cell { - padding: 0.25rem; -} -#modx-action-buttons .x-btn { - margin: 0; -} -#modx-action-buttons #modx-abtn-menu .x-btn-split { - padding: 0; -} -#modx-action-buttons #modx-abtn-menu .x-btn-split:before { - display: none; -} -#modx-action-buttons #modx-abtn-menu .x-btn-split .x-btn-text { - padding: 0; - border: none; -} -#modx-action-buttons .x-toolbar-left { - width: auto !important; - zoom: 1; -} -@media screen and (max-width: 960px) { - #modx-action-buttons { - background: transparent; - padding: 0 15px; - position: relative; - top: auto; - left: auto; - right: auto; - bottom: auto; - max-width: 100%; - border-radius: 0; - } - #modx-action-buttons table table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) { - display: block; - } - #modx-action-buttons table table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody { - display: block; - } - #modx-action-buttons table table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr { - margin-left: auto; - margin-right: auto; - max-width: 1200px; - display: flex; - flex-wrap: wrap; - } - #modx-action-buttons table table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr::after { - clear: both; - content: ""; - display: block; - } - #modx-action-buttons table table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr td { - display: inline-block; - float: left; - padding: 0 !important; - margin-bottom: 1em; - flex-grow: 1; - } - #modx-action-buttons table table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr td .x-btn { - margin-left: 3px; - margin-right: 3px; - } - #modx-panel-welcome #modx-action-buttons { - display: none; - } - #modx-action-buttons .x-toolbar-cell { - width: auto; - margin: 5px; - } -} - -@media screen and (max-width: 960px) { - .tab-panel-wrapper .x-panel-tbar table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) { - display: block; - } - .tab-panel-wrapper .x-panel-tbar table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody { - display: block; - } - .tab-panel-wrapper .x-panel-tbar table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr { - margin-left: auto; - margin-right: auto; - max-width: 1200px; - display: flex; - flex-wrap: wrap; - } - .tab-panel-wrapper .x-panel-tbar table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr::after { - clear: both; - content: ""; - display: block; - } - .tab-panel-wrapper .x-panel-tbar table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr td { - display: inline-block; - float: left; - padding: 0 !important; - margin-bottom: 1em; - flex-grow: 1; - } - .tab-panel-wrapper .x-panel-tbar table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr td .x-btn { - margin-left: 3px; - margin-right: 3px; - } - .tab-panel-wrapper .x-panel-tbar .x-toolbar-left input, -.tab-panel-wrapper .x-panel-tbar .x-toolbar-right input { - height: auto !important; - width: 100%; - box-sizing: border-box; - margin-left: 0; - } -} - -@media screen and (max-width: 960px) { - html.ext-strict body #modx-container .x-small-editor .x-form-text { - height: auto !important; - } -} - -@media screen and (max-width: 960px) { - #modx-grid-element-properties table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) { - display: block; - } - #modx-grid-element-properties table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody { - display: block; - } - #modx-grid-element-properties table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr { - margin-left: auto; - margin-right: auto; - max-width: 1200px; - display: flex; - flex-wrap: wrap; - } - #modx-grid-element-properties table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr::after { - clear: both; - content: ""; - display: block; - } - #modx-grid-element-properties table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr td { - display: inline-block; - float: left; - padding: 0 !important; - margin-bottom: 1em; - flex-grow: 1; - } - #modx-grid-element-properties table:not(#modx-tree-panel-usergroup table, #modx-grid-lexicon table, #modx-panel-property-sets) tbody tr td .x-btn { - margin-left: 3px; - margin-right: 3px; - } - #modx-grid-element-properties .x-toolbar-left { - margin-bottom: 0; - } - #modx-grid-element-properties .x-toolbar-cell > * { - width: 100% !important; - box-sizing: border-box; - margin-left: auto; - margin-right: auto; - } -} - -.x-btn-icon button { - font-size: 18px; - height: 18px; - width: 18px; - position: relative; -} - -.x-btn-icon.arrow_up button { - background: none !important; - /* #shame */ - position: relative; -} -.x-btn-icon.arrow_up button:before { - content: "\f3bf"; - top: 1px; - bottom: auto; -} -.x-btn-icon.arrow_down button { - background: none !important; - /* #shame */ - position: relative; -} -.x-btn-icon.arrow_down button:before { - content: "\f3be"; - top: 1px; - bottom: auto; -} -.x-btn-icon.refresh button { - background: none !important; - /* #shame */ - position: relative; -} -.x-btn-icon.refresh button:before { - content: "\f021"; - top: 1px; - bottom: auto; -} -.x-btn-icon.icon-folder button:before { - content: "\f07b"; -} -.x-btn-icon.icon-page_white button:before { - content: "\f15c"; -} -.x-btn-icon.icon-file_upload button:before { - content: "\f35b"; -} -.x-btn-icon.icon-file_manager button:before { - content: "\f14d"; -} - -.x-btn-text-icon button { - padding-left: 20px !important; -} - -.x-html-editor-tb .x-btn { - background-color: transparent; - background-image: none; - border: 0 none; - box-shadow: none; - margin: 0; -} - -.x-html-editor-tb .x-btn-over { - border: 0 none; -} - -.x-btn-group { - border-radius: 3px; - border: 1px solid #DBE0E4; - margin-right: 2px; - padding: 0; -} - -.x-btn-group .x-btn { - background-color: transparent; - background-image: none; - border: 1px solid transparent; - box-shadow: transparent 0 0 1px; -} - -.x-btn-group .x-btn button { - color: #868B8F; - height: auto !important; -} - -.x-btn-group .x-btn-over { - background: #DFDFDF; - background: #F0F0F0; - border: 1px solid #DBE0E4; -} - -.x-btn-group .x-btn-over button { - color: #5b7a98; -} - -.x-btn-group .x-btn-click { - background-color: #FFF; - background-image: none; - box-shadow: 0 0 3px #AAAAAA inset; - margin: 0 2px 0 0; -} - -.x-btn-group-bwrap { - padding: 1px 0 0; -} - -.x-btn-group-header { - background-color: #DBE0E4; - color: #73797f; - text-shadow: 0 1px 0 #FAFAFA; -} - -.x-btn-group-tl, -.x-btn-group-tr { - background-image: none; - padding: 0; -} - -.x-btn-group-tc, -.x-btn-group-bc, -.x-btn-group-bl, -.x-btn-group-br { - background-image: none; -} - -.x-btn-group-ml { - background-image: none; - padding-left: 1px; -} - -.x-btn-group-mr { - background-image: none; - padding-right: 1px; -} - -.x-btn em.x-btn-arrow-bottom { - background-image: url("../images/modx-theme/button/s-arrow-b-noline.gif"); -} - -.x-btn em.x-btn-split-bottom { - background-image: url("../images/modx-theme/button/s-arrow-b.gif"); -} - -.x-btn-over em.x-btn-split-bottom, -.x-btn-click em.x-btn-split-bottom, -.x-btn-menu-active em.x-btn-split-bottom, -.x-btn-pressed em.x-btn-split-bottom { - background-image: url("../images/modx-theme/button/s-arrow-bo.gif"); -} - -.x-btn-group-notitle .x-btn-group-tc { - background-image: url("../images/modx-theme/button/group-tb.gif"); -} - -/* basic tree toolbar styles */ -#modx-leftbar .x-toolbar-ct .x-btn { - margin: 0 3px; - padding: 0; - width: 25px; - height: 30px; - border: none; - box-shadow: none; - color: #515151; - background: #F1F1F1; - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ - display: inline-block; - position: relative; -} -#modx-leftbar .x-toolbar-ct .x-btn > em > button { - /*color: $buttonColor;*/ - font-size: 18px; - text-shadow: none; - overflow: visible; - position: absolute; - height: 24px; - top: 4px; - left: 2px; -} -#modx-leftbar .x-toolbar-ct .x-btn.x-btn-over, #modx-leftbar .x-toolbar-ct .x-btn:hover, #modx-leftbar .x-toolbar-ct .x-btn.x-btn-focus, #modx-leftbar .x-toolbar-ct .x-btn:focus, #modx-leftbar .x-toolbar-ct .x-btn.x-btn-click, #modx-leftbar .x-toolbar-ct .x-btn:active { - background: none; - box-shadow: none; - color: #234368; -} -#modx-leftbar .x-toolbar-ct .x-btn.x-btn-over button, #modx-leftbar .x-toolbar-ct .x-btn:hover button, #modx-leftbar .x-toolbar-ct .x-btn.x-btn-focus button, #modx-leftbar .x-toolbar-ct .x-btn:focus button, #modx-leftbar .x-toolbar-ct .x-btn.x-btn-click button, #modx-leftbar .x-toolbar-ct .x-btn:active button { - color: inherit; -} -#modx-leftbar .x-toolbar-ct .x-btn span { - vertical-align: middle; -} -#modx-leftbar .x-toolbar-ct .x-toolbar-right .x-btn { - /* the resource trash button in the tree */ -} -#modx-leftbar .x-toolbar-ct .x-toolbar-right .x-btn > em > button { - /* not sure why the trash needs a different color when active? */ - font-size: 20px; - /* trash icon is a bit smaller than the others at 18px */ -} -#modx-leftbar .x-toolbar-ct .x-toolbar-right .x-btn#emptifier .x-item-disabled { - color: #919191 !important; - /* !important prevents hover / active styles */ - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ -} -#modx-leftbar .x-toolbar-ct .x-toolbar-right .x-btn#emptifier .x-item-disabled button { - color: inherit; -} - -/* resource tree toolbar icons */ -.tree-new-resource > em > button:before { - content: "\f15b"; -} - -.tree-new-weblink > em > button:before { - content: "\f0c1"; -} - -.tree-new-symlink > em > button:before { - content: "\f0c5"; - font-weight: 400; -} - -.tree-new-static-resource > em > button:before { - content: "\f15c"; - font-weight: 400; -} - -.tree-trash > em > button:before { - content: "\f2ed"; - font-weight: 400; -} - -/* alignment overrides */ -#modx-leftbar .x-toolbar-ct .x-btn .tree-new-symlink > em > button { - top: 4px; - left: 2px; -} - -#modx-leftbar .x-toolbar-ct .x-btn .tree-new-weblink > em > button { - left: 2px; -} - -/* element tree toolbar */ -.tree-new-template > em > button:before { - content: "\f0db"; -} - -.tree-new-tv > em > button:before { - content: "\f022"; - font-weight: 400; -} - -.tree-new-chunk > em > button:before { - content: "\f009"; - font-weight: 900; -} - -.tree-new-snippet > em > button:before { - content: "\f121"; -} - -.tree-new-plugin > em > button:before { - content: "\f085"; -} - -.tree-new-category > em > button:before { - content: "\f07b"; -} - -textarea { - overflow: auto; -} - -textarea.x-form-field, -.x-form-textarea { - display: block; - /* make the field description (below) stick to the bottom correctly */ - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - padding: 5px; - /* override standard extjs theme */ -} - -/* use default manager font for TV textareas to have unified look across TVs */ -.modx-tv .x-form-textarea:not(div) { - font-family: inherit; -} - -/* general class that can be applied to any form field that should display code font */ -.modx-code-content { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -textarea[name=description], -textarea[name=introtext], -.modx-text-content { - font: normal 13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-form-text, -textarea.x-form-field, -.x-form-textarea { - max-width: 100%; - background-color: #FFF; - background-image: none; - border-radius: 3px; - border: 1px solid #E4E4E4; - position: relative; - transition: border-color 0.25s; -} - -.x-viewport .x-trigger-wrap-focus, -.x-viewport input.x-form-focus, -.x-viewport textarea.x-form-focus, -.x-viewport .x-form-textarea .x-form-focus { - border-color: #999999; -} - -.x-viewport .x-trigger-wrap-open { - border-radius: 3px 3px 0 0; -} - -.x-form-invalid, -textarea.x-form-invalid { - border-color: #CF1124 !important; -} - -/* fix oversize of buttons in FF */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/* special rule for the TVs additional input/output properties form to have padding on top */ -#modx-input-props, -#modx-widget-props { - padding: 15px 0 0 0; -} - -/* the wrapper structure for form inputs */ -.x-form-item { - display: block; - margin: 0; - outline: 0 none; - /* prevent firefox from creating ugly dotted outlines */ - position: relative; - /* boundary for absolutely positioned elements */ - /* general styles for form labels, paddings for various form layouts are handled below */ - /* label.x-form-item-label */ - /* is outside of the label */ - /* Tag TVs tag list below */ - /* a few styles for the old original type multi select TV */ - /* style the labels and form items in the various form layouts */ - /* .x-form-label-left needs to come first, so .x-form-label-top rules can override, as some forms are strangely nested */ - /* .x-form-element */ - /* prevent columns used inside form elements to have too much spacing, some custom TV types need this */ - /* prevent nested elements with class .container having a lot of margin, some custom TV types need this */ -} -.x-form-item label.x-form-item-label { - color: #515151; - font-size: 13px; - font-weight: bold; - position: relative; - /* boundary for absolutely positioned elements */ -} -.x-form-item label.x-form-item-label .modx-tv-label-title { - display: inline-block; -} -.x-form-item label.x-form-item-label .modx-tv-label-description { - display: inline-block; - font-style: italic; - font-weight: normal; -} -.x-form-item label.x-form-item-label .modx-tv-reset, -.x-form-item label.x-form-item-label .modx-field-utils { - cursor: pointer; - display: inline-block; - position: relative; - opacity: 0; - filter: alpha(opacity=0); - /* for IE <= 8 */ - padding: 0 0 0 3px; - top: 0; - right: 0; - transition: all 0.25s; - width: 16px; - height: 16px; -} -.x-form-item label.x-form-item-label .modx-tv-reset::before, -.x-form-item label.x-form-item-label .modx-field-utils::before { - box-sizing: border-box; - color: #a8a8a8; - content: "\f2ea"; - /* better match IMO for the action being taken */ - font-size: 14px; - position: relative; - bottom: 2px; - left: 0; - text-align: center; - vertical-align: middle; - width: 16px; - height: 16px; -} -.x-form-item label.x-form-item-label .modx-tv-reset.modx-field-reset::before, -.x-form-item label.x-form-item-label .modx-field-utils.modx-field-reset::before { - content: "\f2ea"; -} -.x-form-item label.x-form-item-label .modx-tv-reset.modx-field-reset:hover::before, -.x-form-item label.x-form-item-label .modx-field-utils.modx-field-reset:hover::before { - color: #6CB24A; -} -.x-form-item label.x-form-item-label .modx-tv-reset.modx-field-clear::before, -.x-form-item label.x-form-item-label .modx-field-utils.modx-field-clear::before { - content: "\f12d"; - font-size: 15px; - margin-bottom: 4px; -} -.x-form-item label.x-form-item-label .modx-tv-reset.modx-field-clear:hover::before, -.x-form-item label.x-form-item-label .modx-field-utils.modx-field-clear:hover::before { - color: #CF1124; -} -.x-form-item label.x-form-item-label .modx-tv-reset:hover:before, -.x-form-item label.x-form-item-label .modx-field-utils:hover:before { - color: #6CB24A; -} -.x-form-item label.x-form-item-label .modx-tv-reset:active:before, -.x-form-item label.x-form-item-label .modx-field-utils:active:before { - color: #1b3451; -} -.x-form-item label.x-form-item-label:hover .modx-tv-reset, .x-form-item label.x-form-item-label:hover .modx-field-utils { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} -.x-form-item.modx-tv { - padding: 0 0 0 0 !important; -} -.x-form-item .modx-tv-inherited { - color: #515151; - display: inline-block; - font-size: 10px; - font-style: italic; - position: absolute; - top: 19px; - right: 0; - /* absolute position to avoid layout issues with long descriptions */ -} -.x-form-item .modx-tv-image-preview { - margin-top: 7px; -} -.x-form-item .modx-tv-image-preview img { - display: block; -} -.x-form-item .modx-tag-list { - list-style: none; - margin: 0; - overflow: auto; - padding: 0; -} -.x-form-item .modx-tag-list .modx-tag-opt { - background-color: #E4E4E4; - border-radius: 0 3px 3px 0; - cursor: pointer; - display: inline-block; - margin: 4px 5px 0 10px; - padding: 1px 5px; - position: relative; -} -.x-form-item .modx-tag-list .modx-tag-opt:before { - border-style: solid; - border-width: 10px 10px 10px 0; - border-color: transparent #E4E4E4 transparent transparent; - content: ""; - position: absolute; - top: 0; - left: -10px; - transform: rotate(360deg); - /* for better anti-aliasing in webkit browsers */ - width: 0; - height: 0; -} -.x-form-item .modx-tag-list .modx-tag-opt:after { - background-color: #FFF; - border-radius: 50%; - /* make a circle */ - content: ""; - position: absolute; - top: 8px; - left: -4px; - width: 4px; - height: 4px; -} -.x-form-item .modx-tag-list .modx-tag-opt.modx-tag-checked, .x-form-item .modx-tag-list .modx-tag-opt:hover { - background-color: #234368; - color: #FFFFFF; - text-decoration: none; -} -.x-form-item .modx-tag-list .modx-tag-opt.modx-tag-checked:before, .x-form-item .modx-tag-list .modx-tag-opt:hover:before { - border-color: transparent #234368 transparent transparent; -} -.x-form-item .modx-tag-list .modx-tag-opt.modx-tag-checked:hover, .x-form-item .modx-tag-list .modx-tag-opt:hover:hover { - background-color: #1b3451; -} -.x-form-item .modx-tag-list .modx-tag-opt.modx-tag-checked:hover:before, .x-form-item .modx-tag-list .modx-tag-opt:hover:hover:before { - border-color: transparent #1b3451 transparent transparent; -} -.x-form-item .modx-tv-legacy-select { - border: 1px solid #E4E4E4; - border-radius: 3px; - padding: 5px; - transition: all 0.25s; - /* does not work in webkit but it's here anyways if some browsers support it */ -} -.x-form-item .modx-tv-legacy-select:focus { - border: 1px solid #1b3451; -} -.x-form-item .modx-tv-legacy-select option[selected] { - background-color: #E4E4E4; -} -.x-form-label-left .x-form-item { - /* targets .x-form-item */ - padding: 15px 0 0 0; - padding-bottom: 0; - /* override extjs default theme styles */ -} -.x-form-label-left .x-form-item:first-of-type { - /* do not add the top padding to the first .x-form-item in this type of form layout */ - padding: 0; -} -.x-form-label-left .x-form-item label.x-form-item-label { - display: inline-block; - /* override extjs default theme styles */ - margin: 0; - /* override extjs default theme styles */ - padding: 7px 0 7px 0; -} -.x-form-label-top .x-form-item { - /* targets .x-form-item */ - padding: 0; - /* override the .x-form-label-left rule */ - padding-bottom: 0; - /* override extjs default theme styles */ -} -.x-form-label-top .x-form-item label.x-form-item-label { - display: inline-block; - /* override extjs default theme styles */ - margin: 15px 0 4px 0; - padding: 0; -} -.x-window .x-form-item .x-form-item-label { - padding: 10px 0 4px 0; - /* move the form fields a bit tighter together inside windows */ -} -.x-form-item.x-hide-label { - padding-top: 10px !important; - /* make this override common rules */ -} -#modx-resource-content .x-form-item.x-hide-label { - padding-top: 0 !important; - /* make this override the rule above */ -} -.x-form-item.x-hide-label label.x-form-item-label { - display: none; - /* override !important rule from above */ -} -.x-form-item.disabled label { - color: #a8a8a8; -} -.x-form-item .x-form-element { - padding: 0; - font: normal 13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} -.x-form-item .x-column-inner > .x-column ~ .x-column { - margin-left: 5px; -} -.x-form-item .x-column-inner > .x-column .x-form-field-wrap { - width: auto !important; - /* make sure the wrap is always full width of parent, fixes some custom TVs */ -} -.x-form-item .container { - margin: 0; -} -.x-form-item .x-btn { - padding: 7px 10px 7px 10px; -} - -/* .x-form-item */ -.desc-under { - color: #999999; - display: block; - font-size: 12px; - font-style: italic; - margin: 0.4em 0 0 0; -} -.desc-under.toggle-slider-above { - margin: 0.3em 0; - padding-left: 3.9em; -} -.desc-under .warning { - color: #CF1124; - overflow: hidden; - padding: 0; -} -.desc-under .example-list ul { - margin: 0.4em 0; -} -.desc-under .example-list ul li { - position: relative; - margin-bottom: 0.25em; - padding-left: 1.25em; -} -.desc-under .example-list ul li::before { - position: absolute; - left: 0.2em; - top: 0; - content: "\f101"; - color: #adadad; -} -.desc-under .example-input, -.desc-under .copy-this { - padding: 0 0.3em; - border-radius: 2px; - transition: width 1s; -} -.desc-under .example-input { - color: #6e935d; - background-color: #f6faf5; -} -.desc-under .example-input:hover { - background-color: #eff6ec; - color: #578c3d; - cursor: pointer; -} -.desc-under .copy-this { - color: #5e8bbf; - background-color: #f1f6fc; -} -.desc-under .copy-this:hover { - background-color: #e7f1fb; - color: #1b5ca8; - cursor: pointer; -} -.desc-under .copy-this:hover::after { - content: "\f0c5"; - color: #6892c4; - display: inherit; - margin-left: 0.5em; -} -.desc-under .copy-this:hover:active { - color: #515151; -} -.desc-under .copy-this:hover:active::after { - color: #515151; -} -.desc-under .feedback { - margin-left: 0.75em; - color: #1b5ca8; - font-style: normal; -} -.desc-under .feedback.item-copied { - opacity: 1; - transition: opacity 1.5s; -} -.desc-under a { - text-decoration: none; - border-bottom: 1px dotted #999999; - color: #999999; -} -.desc-under a:hover { - color: #515151; -} -.desc-under .deemphasize { - font-style: normal; -} - -.fs-toggle { - padding-top: 1em; - margin-top: 2em; - margin-bottom: 0.5em; - border-top: 1px dashed #E4E4E4; -} - -.x-fieldset { - border: 1px solid #E4E4E4; - border-radius: 3px !important; - /* !important ensures the border radius, also when the fieldset has a class that sets it to 0 */ - margin: 15px 0 0 0; - overflow: visible; - /* allow the legend to be displayed correctly */ - padding: 0; - /* override extjs default styles */ - position: relative; - /* for toggled fieldsets */ -} -.x-fieldset .x-fieldset-header { - /* legend */ - color: #515151; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; - margin: 0 0 0 10px; - padding: 0 5px 0 3px; - position: relative; -} -.x-fieldset .x-fieldset-header .x-fieldset-header-text { - line-height: 18px; - /* prevent collapse button cut off */ -} -.x-fieldset .x-fieldset-bwrap .x-fieldset-body { - overflow-x: hidden !important; - /* prevent unnecessary horizontal scrollbars */ - padding: 0 10px 10px 10px; -} -.x-fieldset.form-row-wrapper .x-fieldset-bwrap .x-fieldset-body { - padding: 0 15px 15px 15px; -} -.x-fieldset#tv-input-opts-fs, .x-fieldset#tv-output-opts-fs { - border: 0; - margin: 0; -} -.x-fieldset#tv-input-opts-fs .x-fieldset-bwrap .x-fieldset-body, .x-fieldset#tv-output-opts-fs .x-fieldset-bwrap .x-fieldset-body { - padding: 0; -} -.x-fieldset#tv-input-opts-fs .x-fieldset .x-fieldset-bwrap .x-fieldset-body, .x-fieldset#tv-output-opts-fs .x-fieldset .x-fieldset-bwrap .x-fieldset-body { - padding: 0 15px 15px 15px; -} - -.x-form-field { - font: inherit; - /* composite fields that are used by some extras */ -} -.x-form-field.x-form-composite { - margin-bottom: 0 !important; - /* not sure if this applies to all buttons inside composite fields, could only find Image+ TV using this */ -} -.x-form-field.x-form-composite .x-btn { - top: 1px !important; - /* override inline style */ -} - -/* the different input fields */ -.x-static-text-field { - color: inherit; - font-size: inherit; -} -.x-static-text-field.x-form-focus { - border-color: #E4E4E4 !important; -} - -.x-form-text { - /*box-sizing: border-box;*/ - /* we cannot use this because extjs calculates widths with the old box-model */ - line-height: 20px; - min-height: 20px; - /* + 5px + 5px padding = 30px */ - padding: 5px; -} - -.x-form-field-wrap { - max-width: 100%; - background: #FFF; - border: 1px solid #E4E4E4; - border-radius: 3px; - /*box-shadow: $shadowBorderField;*/ - /* xtype: fileuploadfield styles, mainly used for import windows */ -} -.x-form-field-wrap .x-form-text:not(.x-form-invalid) { - border: 0; -} -.x-form-field-wrap .x-form-trigger { - border: 0; - border-radius: 0 3px 3px 0; - /* override button styles border-radius */ - box-shadow: none; - /* override button styles box-shadow */ - padding: 0; - /* override button styles padding */ - width: 30px; - height: 100% !important; - /* height 100% to enable vertical centering, !important to override default extjs theme styles */ - position: absolute; - top: 0; - right: 0; - /* for xtype datefield */ - /* for xtype timefield, doesn't add the class somehow...but it's here anyways */ - /* to make it work the property ,triggerClass: 'x-form-time-trigger' has to be specified for xtype: 'timefield' */ -} -.x-form-field-wrap .x-form-trigger:before { - box-sizing: border-box; - content: "\f078"; - font-size: 14px; - margin-top: -7px; - /* half of the height to center vertically with top 50% */ - opacity: 0.8; - filter: alpha(opacity=60); - /* for IE <= 8 */ - position: absolute; - top: 50%; - right: 0; - text-align: center; - width: 30px; - transition: opacity 0.25s; -} -.x-form-field-wrap .x-form-trigger.x-form-trigger-over, .x-form-field-wrap .x-form-trigger:hover { - box-shadow: #999999; -} -.x-form-field-wrap .x-form-trigger.x-form-trigger-over:before, .x-form-field-wrap .x-form-trigger:hover:before { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} -.x-form-field-wrap .x-form-trigger.x-form-trigger-click, .x-form-field-wrap .x-form-trigger:active { - box-shadow: 0 0 0 1px #8a8a8a; -} -.x-form-field-wrap .x-form-trigger.x-form-trigger-click:before, .x-form-field-wrap .x-form-trigger:active:before { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} -.x-form-field-wrap .x-form-trigger.x-form-date-trigger:before { - content: "\f133"; - font-weight: 400; -} -.x-form-field-wrap .x-form-trigger.x-form-time-trigger:before { - content: "\f017"; - font-weight: 400; -} -.x-form-field-wrap .x-form-trigger.x-form-file-trigger:before { - content: "\f15b"; - font-weight: 400; -} -.x-form-field-wrap .x-form-trigger.x-form-image-trigger:before { - content: "\f1c5"; - font-weight: 400; -} -.x-form-field-wrap .x-form-trigger.x-form-code-trigger:before { - content: "\f1c9"; - font-weight: 400; -} -.x-form-field-wrap.x-datetime-wrap { - background: none; - border: 0; -} -.x-form-field-wrap.x-datetime-wrap .ux-datetime-date .x-form-trigger:before { - content: "\f133"; -} -.x-form-field-wrap.x-datetime-wrap .ux-datetime-time .x-form-trigger:before { - content: "\f017"; -} -.x-form-field-wrap.x-form-fileupload-wrap { - overflow: visible; - /* allows the upload button to cover the border of the wrap on hover */ - position: relative; -} -.x-form-field-wrap.x-form-fileupload-wrap .x-form-file { - position: absolute; - top: 0; - right: 0; - min-height: 20px; - opacity: 0; - filter: alpha(opacity=0); - /* for IE <= 8 */ - padding: 5px; - z-index: 2; -} -.x-form-field-wrap.x-form-fileupload-wrap .x-form-file-btn { - border-radius: 0 3px 3px 0; - padding: 7px; - /* override default button padding */ - position: absolute; - top: 0; - right: 0; - z-index: 1; - /* needs to stay below the transparent file input field */ - line-height: 0; - box-shadow: none; - border-left: solid 1px #E4E4E4; -} -.x-form-field-wrap.x-form-fileupload-wrap .x-form-file-text { - position: relative; - z-index: 3; - /* needs to stay above the transparent file input field */ -} - -#x-form-el-modx-user-photo .x-form-file-trigger:before { - content: "\f1c5"; -} - -#x-form-el-modx-tv-locked { - margin-top: 1em; -} - -/* .x-form-field-wrap */ -/* both, radio groups and checkbox groups are wrapped in a x-form-check-wrap */ -.x-form-check-wrap, -.x-fieldset-checkbox-toggle legend { - height: auto !important; - line-height: 18px; - /* this is also default in the extjs default theme */ - /* checkbox & radio button replacement */ -} -.x-form-label-left .x-form-check-wrap, -.x-form-label-left .x-fieldset-checkbox-toggle legend { - padding: 7px 0 7px 0; -} -.x-form-label-top .x-form-check-wrap, -.x-form-label-top .x-fieldset-checkbox-toggle legend { - padding: 0; -} -.x-form-check-wrap .x-form-cb-label, -.x-form-check-wrap .x-fieldset-header-text, -.x-fieldset-checkbox-toggle legend .x-form-cb-label, -.x-fieldset-checkbox-toggle legend .x-fieldset-header-text { - color: #515151; - cursor: pointer; - display: inline-block; - /* make line-height apply */ - font-weight: normal; - margin: 0; - padding-left: 1.9em; - position: relative; - top: 0; - /* override extjs default style */ -} -.ext-ie8 .x-form-check-wrap .x-form-cb-label, -.ext-ie8 .x-form-check-wrap .x-fieldset-header-text, -.ext-ie8 .x-fieldset-checkbox-toggle legend .x-form-cb-label, -.ext-ie8 .x-fieldset-checkbox-toggle legend .x-fieldset-header-text { - padding-left: 3px; -} -.ext-ie8 .x-form-check-wrap .x-form-cb-label:before, -.ext-ie8 .x-form-check-wrap .x-fieldset-header-text:before, -.ext-ie8 .x-fieldset-checkbox-toggle legend .x-form-cb-label:before, -.ext-ie8 .x-fieldset-checkbox-toggle legend .x-fieldset-header-text:before { - content: ""; -} -.x-form-check-wrap .x-form-cb-label:before, -.x-form-check-wrap .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-fieldset-header-text:before { - box-sizing: border-box; - content: ""; - font-size: 18px; - padding-right: 3px; - position: absolute; - top: 0; - left: 0; - text-align: center; - vertical-align: middle; - width: 18px; - height: 18px; -} -.x-form-check-wrap .x-form-cb-label:hover:before, .x-form-check-wrap .x-form-cb-label:focus:before, -.x-form-check-wrap .x-fieldset-header-text:hover:before, -.x-form-check-wrap .x-fieldset-header-text:focus:before, -.x-fieldset-checkbox-toggle legend .x-form-cb-label:hover:before, -.x-fieldset-checkbox-toggle legend .x-form-cb-label:focus:before, -.x-fieldset-checkbox-toggle legend .x-fieldset-header-text:hover:before, -.x-fieldset-checkbox-toggle legend .x-fieldset-header-text:focus:before { - color: #234368; -} -.x-form-check-wrap .x-form-cb-label:active:before, -.x-form-check-wrap .x-fieldset-header-text:active:before, -.x-fieldset-checkbox-toggle legend .x-form-cb-label:active:before, -.x-fieldset-checkbox-toggle legend .x-fieldset-header-text:active:before { - color: #1b3451; -} -.x-form-check-wrap .x-form-checkbox, -.x-form-check-wrap input[type=checkbox], -.x-form-check-wrap .x-form-radio, -.x-fieldset-checkbox-toggle legend .x-form-checkbox, -.x-fieldset-checkbox-toggle legend input[type=checkbox], -.x-fieldset-checkbox-toggle legend .x-form-radio { - /*display: none;*/ - cursor: pointer; - opacity: 0; - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; - z-index: 1; -} -.ext-ie8 .x-form-check-wrap .x-form-checkbox, -.ext-ie8 .x-form-check-wrap input[type=checkbox], -.ext-ie8 .x-form-check-wrap .x-form-radio, -.ext-ie8 .x-fieldset-checkbox-toggle legend .x-form-checkbox, -.ext-ie8 .x-fieldset-checkbox-toggle legend input[type=checkbox], -.ext-ie8 .x-fieldset-checkbox-toggle legend .x-form-radio { - /*display: inline-block; /* fallback for IE8 */ - position: relative; - top: auto; - left: auto; - width: 13px; - height: 13px; -} -.x-form-check-wrap .x-form-checkbox:hover + .x-form-cb-label:before, .x-form-check-wrap .x-form-checkbox:hover + .x-fieldset-header-text:before, .x-form-check-wrap .x-form-checkbox:focus + .x-form-cb-label:before, .x-form-check-wrap .x-form-checkbox:focus + .x-fieldset-header-text:before, -.x-form-check-wrap input[type=checkbox]:hover + .x-form-cb-label:before, -.x-form-check-wrap input[type=checkbox]:hover + .x-fieldset-header-text:before, -.x-form-check-wrap input[type=checkbox]:focus + .x-form-cb-label:before, -.x-form-check-wrap input[type=checkbox]:focus + .x-fieldset-header-text:before, -.x-form-check-wrap .x-form-radio:hover + .x-form-cb-label:before, -.x-form-check-wrap .x-form-radio:hover + .x-fieldset-header-text:before, -.x-form-check-wrap .x-form-radio:focus + .x-form-cb-label:before, -.x-form-check-wrap .x-form-radio:focus + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:hover + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:hover + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:focus + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:focus + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:hover + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:hover + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:focus + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:focus + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:hover + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:hover + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:focus + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:focus + .x-fieldset-header-text:before { - color: #234368; -} -.x-form-check-wrap .x-form-checkbox:active + .x-form-cb-label:before, .x-form-check-wrap .x-form-checkbox:active + .x-fieldset-header-text:before, -.x-form-check-wrap input[type=checkbox]:active + .x-form-cb-label:before, -.x-form-check-wrap input[type=checkbox]:active + .x-fieldset-header-text:before, -.x-form-check-wrap .x-form-radio:active + .x-form-cb-label:before, -.x-form-check-wrap .x-form-radio:active + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:active + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:active + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:active + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:active + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:active + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:active + .x-fieldset-header-text:before { - color: #1b3451; -} -.x-form-check-wrap .x-form-checkbox + .x-form-cb-label:before, -.x-form-check-wrap input[type=checkbox] + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox] + .x-fieldset-header-text:before { - content: "\f0c8"; - font-weight: 400; -} -.x-form-check-wrap .x-form-checkbox:checked + .x-form-cb-label:before, -.x-form-check-wrap input[type=checkbox]:checked + .x-fieldset-header-text:before, -.x-fieldset-checkbox-toggle legend .x-form-checkbox:checked + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend input[type=checkbox]:checked + .x-fieldset-header-text:before { - content: "\f14a"; - font-weight: 400; -} -.x-form-check-wrap .x-form-radio + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-radio + .x-form-cb-label:before { - content: "\f111"; - font-weight: 400; -} -.x-form-check-wrap .x-form-radio:checked + .x-form-cb-label:before, -.x-fieldset-checkbox-toggle legend .x-form-radio:checked + .x-form-cb-label:before { - content: "\f192"; - font-weight: 400; -} - -/* .x-form-check-wrap */ -/* Special checboxes for resources and tv configs */ -#modx-resource-tabs .x-form-check-wrap [type=checkbox], -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox], -#modx-resource-tabs .x-fieldset legend [type=checkbox], -#modx-tv-tabs .x-form-check-wrap [type=checkbox], -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox], -#modx-tv-tabs .x-fieldset legend [type=checkbox] { - position: absolute; - left: -9999px; -} -html[dir=rtl] #modx-resource-tabs .x-form-check-wrap [type=checkbox], -html[dir=rtl] #modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox], -html[dir=rtl] #modx-resource-tabs .x-fieldset legend [type=checkbox], -html[dir=rtl] #modx-tv-tabs .x-form-check-wrap [type=checkbox], -html[dir=rtl] #modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox], -html[dir=rtl] #modx-tv-tabs .x-fieldset legend [type=checkbox] { - right: -9999px; - left: unset; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label, #modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text { - position: relative; - padding-left: 3.6em; - padding-top: 0.2em; - margin-left: 0; - cursor: pointer; - box-sizing: border-box; - line-height: 1; - /* fixes vertical alignment with slider control */ -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:before, #modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:after, #modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:before, #modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:after, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:after, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:after, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:after, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:after, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:after, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:after, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:after, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:after, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:after, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:after { - content: ""; - position: absolute; - transition: all 0.2s ease; - font-size: inherit; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:before, #modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:before { - left: 0; - top: 0; - width: 3em; - height: 1.6em; - background: #E4E4E4; - border-radius: 1.2em; - z-index: 10; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:after, #modx-resource-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:after, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:after, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:after, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:after, -#modx-resource-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:after, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-form-cb-label:after, -#modx-tv-tabs .x-form-check-wrap [type=checkbox] + .x-fieldset-header-text:after, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-form-cb-label:after, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox] + .x-fieldset-header-text:after, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-form-cb-label:after, -#modx-tv-tabs .x-fieldset legend [type=checkbox] + .x-fieldset-header-text:after { - left: 0.1em; - top: 0.8em; - margin-top: -0.65em; - height: 1.3em; - width: 1.3em; - border-radius: 50%; - background-color: #FFF; - z-index: 11; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox]:checked + .x-form-cb-label:after, #modx-resource-tabs .x-form-check-wrap [type=checkbox]:checked + .x-fieldset-header-text:after, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-form-cb-label:after, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-fieldset-header-text:after, -#modx-resource-tabs .x-fieldset legend [type=checkbox]:checked + .x-form-cb-label:after, -#modx-resource-tabs .x-fieldset legend [type=checkbox]:checked + .x-fieldset-header-text:after, -#modx-tv-tabs .x-form-check-wrap [type=checkbox]:checked + .x-form-cb-label:after, -#modx-tv-tabs .x-form-check-wrap [type=checkbox]:checked + .x-fieldset-header-text:after, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-form-cb-label:after, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-fieldset-header-text:after, -#modx-tv-tabs .x-fieldset legend [type=checkbox]:checked + .x-form-cb-label:after, -#modx-tv-tabs .x-fieldset legend [type=checkbox]:checked + .x-fieldset-header-text:after { - left: 1.6em; - top: 0.8em; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox]:checked + .x-form-cb-label:before, #modx-resource-tabs .x-form-check-wrap [type=checkbox]:checked + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox]:checked + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox]:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox]:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox]:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox]:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox]:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox]:checked + .x-fieldset-header-text:before { - background-color: #6CB24A; - border-color: #6CB24A; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox].danger:checked + .x-form-cb-label:before, #modx-resource-tabs .x-form-check-wrap [type=checkbox].danger:checked + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].danger:checked + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].danger:checked + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox].danger:checked + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox].danger:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox].danger:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox].danger:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].danger:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].danger:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox].danger:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox].danger:checked + .x-fieldset-header-text:before { - background-color: #CF1124; - border-color: #CF1124; -} -#modx-resource-tabs .x-form-check-wrap [type=checkbox].warning:checked + .x-form-cb-label:before, #modx-resource-tabs .x-form-check-wrap [type=checkbox].warning:checked + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].warning:checked + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].warning:checked + .x-fieldset-header-text:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox].warning:checked + .x-form-cb-label:before, -#modx-resource-tabs .x-fieldset legend [type=checkbox].warning:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox].warning:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-form-check-wrap [type=checkbox].warning:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].warning:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset-checkbox-toggle legend [type=checkbox].warning:checked + .x-fieldset-header-text:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox].warning:checked + .x-form-cb-label:before, -#modx-tv-tabs .x-fieldset legend [type=checkbox].warning:checked + .x-fieldset-header-text:before { - background-color: #F0B429; - border-color: #F0B429; -} - -.x-form-check-group, -.x-form-radio-group { - /*overflow: visible; /* do not cut off the bottom of the input elements */ - overflow: hidden; - /* visible causes horizontal scrollbars in vertical tabs */ - padding-bottom: 0.5em; - /* prevent bottom-most sliders from being clipped */ - /* applies to new xcheckboxgroup custom checkbox group */ -} -.x-form-check-group .x-column, -.x-form-radio-group .x-column { - /* we need this to have access to the first child */ -} -.x-form-check-group .x-column .x-form-item:first-child, -.x-form-radio-group .x-column .x-form-item:first-child { - padding: 4px 0 0 0; -} -.x-form-check-group.aggregated-group, -.x-form-radio-group.aggregated-group { - padding-left: 1em; - padding-right: 1em; -} - -/* superboxselect / multi-select field */ -.x-superboxselect { - height: auto !important; - /* override the extjs default theme style of 18px */ - margin: 0; - outline: 0; - padding: 0 5px 5px 5px; - /* special padding because selected items need margin-top */ - position: relative; - white-space: normal; - /* make selected options wrap */ - width: auto !important; - /* prevents the right border to be cut off */ - /* these buttons got the .x-form-trigger class assigned */ -} -.ext-strict .x-toolbar .x-small-editor .x-superboxselect { - height: auto !important; - /* override the extjs default theme style high specifiy + !important rule, wtf... */ -} -.x-superboxselect ul { - cursor: text; - min-height: 20px; - overflow: visible; - /* prevent item box-shadow from being cut off */ - padding-right: 61px; - /* 2 * 30px for each .x-form-trigger + 1px border */ - white-space: normal; - /* make selected options wrap */ - width: auto !important; - /* override extjs width calculation */ -} -.x-toolbar .x-superboxselect ul { - margin: -5px 0 0 -5px; - /* fix for superbox selects in toolbars */ -} -.x-superboxselect ul li { - margin: 5px 5px 0 0; - padding: 0; -} -.x-superboxselect ul li.x-superboxselect-item { - cursor: default; - /* don't make the selected options appear like full buttons */ - font-size: 12px; - padding: 4px 18px 4px 4px !important; - /* can somehow not override the extended rules */ - position: relative; - /* focus styles need to be defined as the item is an li element which normally doesn't get :focus */ -} -.x-superboxselect ul li.x-superboxselect-item.x-superboxselect-item-focus { - background-color: #234368; - box-shadow: 0 0 0 1px #234368; - color: #FFF; -} -.x-superboxselect ul li.x-superboxselect-item .x-superboxselect-item-close { - border: 0; - color: inherit; - cursor: pointer; - display: inline-block; - /*font-size: 1px;*/ - outline: 0; - /* fix firefox dotted outlines */ - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ - padding: 0; - position: absolute; - top: 0; - right: 0; - transition: opacity 0.25s; - width: 16px; - height: 100%; -} -.x-superboxselect ul li.x-superboxselect-item .x-superboxselect-item-close:before { - box-sizing: border-box; - content: "\f00d"; - color: inherit; - font-size: 14px; - margin-top: -7px; - /* half of the height to center vertically with top 50% */ - position: absolute; - top: 50%; - right: 0; - text-align: center; - vertical-align: middle; - width: 16px; -} -.x-superboxselect ul li.x-superboxselect-item .x-superboxselect-item-close:hover, .x-superboxselect ul li.x-superboxselect-item .x-superboxselect-item-close:focus { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} -.x-superboxselect ul li.x-superboxselect-input { - display: inline-block; -} -.x-superboxselect ul li.x-superboxselect-input input { - background: none; - border: 0; - line-height: 20px; - outline: 0; -} -.x-superboxselect.x-superboxselect-stacked li { - box-sizing: border-box; - margin: 5px 0 0 0; - width: 100%; -} -.x-superboxselect .x-superboxselect-btns { - overflow: visible; - position: absolute; - top: 0; - right: 0; - width: 61px; - height: 100%; - /* 61px account for the border of the clear button */ -} -.x-superboxselect .x-superboxselect-btns .x-superboxselect-btn-expand { - border-radius: 0; - right: 31px; - /* account for the border of the clear button */ -} -.x-superboxselect .x-superboxselect-btns .x-superboxselect-btn-clear { - border-left: 1px solid #E4E4E4; - /* we need to style that separator border individually */ -} -.x-superboxselect .x-superboxselect-btns .x-superboxselect-btn-clear:before { - content: "\f00d"; -} -.x-superboxselect .x-superboxselect-btns .x-superboxselect-btn-clear:hover { - border-left: 1px solid #234368; -} -.x-superboxselect .x-superboxselect-btns .x-superboxselect-btn-clear:active { - border-left: 1px solid #1b3451; -} - -.inline-form { - border: 0 none; - padding: 15px 15px 0; -} -.inline-form label { - color: #777777; - display: block; - font-weight: bold; - margin-bottom: 2px; -} -.inline-form input[type=text], -.inline-form textarea { - background-color: #FFF; - background-image: none; - border-radius: 3px; - border: 1px solid #CCCCCC; - position: relative; - width: 97%; -} -.inline-form input[type=text] { - font-size: 13px; - height: 20px !important; - padding: 5px; -} - -/* cannot find this class anywhere, leaving it for savety, but most likely broken when it appears */ -.modx-tv-description { - color: #515151; - font-size: 10px; - line-height: 1.2; - margin-top: 2px !important; -} - -/* TODO: is it used? -> exside: yes, but it ha a class of .modx-tv-reset */ -.modx-tv-reload-btn { - float: right; - position: absolute; - right: 19px; - z-index: 10; -} - -.modx-tv-reload-btn div { - z-index: 10; -} - -.modx-tv-th label { - cursor: pointer; -} - -.modx-tv-th .tv-description { - color: #515151; - font-size: 11px; - font-weight: normal; -} - -.x-editor .x-form-check-wrap { - background-color: #FFF; -} - -.x-grid-editor { - z-index: 9002 !important; -} -.x-grid-editor .x-form-field-wrap { - background: #f6f2f7 url("../images/modx-theme/form/combo-bck.png") repeat-x scroll 0 100%; -} -.x-grid-editor .x-form-field-wrap input { - background-color: transparent !important; -} -.x-grid-editor .x-form-field-wrap img { - background-color: #FFF; - background-image: url("../images/modx-theme/form/trigger.png"); -} - -.x-form-grow-sizer { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.x-form-invalid-msg { - color: #CF1124; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - margin-top: 2px; - position: relative; - min-width: 95%; -} -.x-form-invalid-msg:before { - content: "\f071"; - /* : "\f071" */ - position: absolute; - top: 3px; - left: 3px; - color: inherit; -} - -.x-form-empty-field { - color: #515151; -} - -.x-grid3 .x-small-editor .x-form-text, -.x-grid3 .x-small-editor .x-form-field-wrap { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - margin-top: 7px; - padding: 2px 5px 2px 5px; -} -.x-grid3 .x-small-editor .x-form-text .x-form-text, -.x-grid3 .x-small-editor .x-form-field-wrap .x-form-text { - margin: 0; - padding: 0; -} -.x-grid3 .x-small-editor .x-form-field-wrap { - overflow: hidden; -} - -/* the following styles have to be outside of their component blocks as they are inserted at the end of the DOM */ -.x-combo-list { - border: 0; - /* set the border on .x-combo-list-inner */ - border-radius: 0 0 3px 3px; - overflow: visible; - /* prevent the left/right borders of .x-combo-list-inner to be cut off */ - /* the pagination toolbar inside a combobox has 2 buttons left, text, pagenumberfield, text, 2 buttons */ - /* this information is important to understand the following code with uses sibling selectors for IE8 compat */ - /* the small resize handle bottom right */ -} -.x-combo-list .x-combo-list-inner { - background-color: #FFF; - border: 1px solid #999999; - /* apply the border here as we move this element 1px left to be in line with the combobox border */ - border-radius: 0 0 3px 3px; - margin-left: -1px; - /* we cannot use this on the .x-combo-list element as it's used for position calculation */ - width: 100% !important; - /* override extjs calculated inline dimensions and stretch to container */ -} -.x-combo-list .x-combo-list-item { - padding: 6px 8px; - color: #515151; - min-height: 18.2px; - border: 0 !important; - border-bottom: 1px solid #E4E4E4 !important; -} -.x-combo-list .x-combo-list-item:last-child { - border-bottom: 0; -} -.x-combo-list .x-combo-list-item.x-combo-selected { - color: #1b3451; - background-color: #E4E4E4; - border: 0 !important; - border-bottom: 1px solid #E4E4E4 !important; -} -.x-combo-list .x-combo-list-item.x-combo-list-item-grouped { - padding: 6px 14px; -} -.x-combo-list .x-combo-list-item .x-combo-list-title { - display: block; - font-weight: bold; - margin: 0 0 5px; -} -.x-combo-list .x-combo-list-group { - padding: 6px 8px; - color: #515151; - font-weight: bold; - border-bottom: 1px solid #E4E4E4; -} -.x-combo-list .x-toolbar { - border: 0; - border-radius: 0 0 3px 3px; - box-shadow: 0 0 0 1px #234368; - margin-top: -1px; - position: relative; - /* the first button << */ - /* the first text cell, "Page" */ - /* the second text cell, "of X" */ - /* the last regular button >>, yes, I know it's ugly but tell that Microsoft and say thanks for IE8 =) */ - /* the refresh button */ -} -.x-combo-list .x-toolbar .x-toolbar-ct { - padding: 5px 0 15px 0; -} -.x-combo-list .x-toolbar .x-toolbar-left table { - margin: 0 auto; - /* center the buttons regardless of listWidth */ -} -.x-combo-list .x-toolbar .x-toolbar-cell { - display: inline-block; - /* make table cells act as block elements^^, dont look at me... =) */ - /* nested to override normal toolbar rules */ -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-btn, -.x-combo-list .x-toolbar .x-toolbar-cell .x-form-text { - background: transparent; - box-shadow: none; - font-size: 10px; - line-height: 16px; - margin-right: 2px; - min-height: 16px; - padding: 2px; -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-btn { - padding: 1px; - transition: color 0.25s; -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-btn.x-btn-over, .x-combo-list .x-toolbar .x-toolbar-cell .x-btn:hover, .x-combo-list .x-toolbar .x-toolbar-cell .x-btn:focus { - color: #234368; -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-btn.x-btn-click, .x-combo-list .x-toolbar .x-toolbar-cell .x-btn:active { - color: #1b3451; -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-btn.x-item-disabled { - color: #515151; - opacity: 0.4; -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-btn button:before { - line-height: 20px; - top: 0; - left: 0; - right: 0; -} -.x-combo-list .x-toolbar .x-toolbar-cell .x-form-text { - background: #FBFBFB; - width: 23px; -} -.x-combo-list .x-toolbar .xtb-text { - font-size: 10px; - line-height: 1; - margin: 0 auto; - padding: 0; - text-align: center; -} -.x-combo-list .x-toolbar .x-toolbar-cell:first-child .x-btn { - margin-left: 1px; -} -.x-combo-list .x-toolbar .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell .xtb-text { - display: none; - position: absolute; - top: 2px; - right: 0; - left: 0; -} -.x-combo-list .x-toolbar .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell .xtb-text { - display: inline-block; - position: absolute; - top: auto; - right: 0; - bottom: 4px; - left: 0; -} -.x-combo-list .x-toolbar .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell + .x-toolbar-cell .x-btn { - margin-right: 0; -} -.x-combo-list .x-toolbar .x-toolbar-cell:last-child { - opacity: 0; - transition: opacity 0.25s; -} -.x-combo-list .x-toolbar .x-toolbar-cell:last-child .x-btn { - font-size: 12px; - line-height: 1; - margin: 0; - opacity: 0.4; - padding: 0; - position: absolute; - bottom: 2px; - right: 1px; -} -.x-combo-list .x-toolbar .x-toolbar-cell:last-child .x-btn:hover { - opacity: 1; -} -.x-combo-list .x-toolbar .x-toolbar-cell:last-child .x-btn button { - width: 16px; - height: 16px; -} -.x-combo-list .x-toolbar .x-toolbar-cell:last-child .x-btn button:before { - font-size: 12px; -} -.x-combo-list .x-toolbar:hover .x-toolbar-cell:last-child { - opacity: 1; -} -.x-combo-list .x-resizable-handle-southeast { - bottom: 1px; - right: 3px; -} - -.x-combo-list-hd { - background-image: url("../images/modx-theme/layout/panel-title-light-bg.gif"); - border-bottom-color: #bcbcbc; - color: #464646; -} - -.x-combo-list-small { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -/* The date TV calendar styles */ -.x-date-picker, -.x-date-mp { - background-color: #FBFBFB; -} -.x-date-picker .x-btn, -.x-date-picker .x-date-mp-ok, -.x-date-picker .x-date-mp-cancel, -.x-date-mp .x-btn, -.x-date-mp .x-date-mp-ok, -.x-date-mp .x-date-mp-cancel { - border: 0; - padding: 5px 10px 5px 10px; - margin: 0 0 0 7px; -} -.x-date-picker .x-btn:first-child, -.x-date-picker .x-date-mp-ok:first-child, -.x-date-picker .x-date-mp-cancel:first-child, -.x-date-mp .x-btn:first-child, -.x-date-mp .x-date-mp-ok:first-child, -.x-date-mp .x-date-mp-cancel:first-child { - margin: 0; -} -.x-date-picker .x-btn button, -.x-date-picker .x-date-mp-ok button, -.x-date-picker .x-date-mp-cancel button, -.x-date-mp .x-btn button, -.x-date-mp .x-date-mp-ok button, -.x-date-mp .x-date-mp-cancel button { - font-size: 11px; - font-style: normal; - margin: 0; -} -.x-date-picker .x-date-mp-ok, -.x-date-picker .x-date-mp-cancel, -.x-date-mp .x-date-mp-ok, -.x-date-mp .x-date-mp-cancel { - height: 16px; -} - -.x-date-middle { - padding: 5px 3px 5px 3px; -} - -.x-date-right a, -.x-date-left a, -.x-date-mp-ybtn a.x-date-mp-prev, -.x-date-mp-ybtn a.x-date-mp-next { - display: inline-block; - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ - margin: 0 auto; - position: relative; - transition: opacity 0.25s; -} -.x-date-right a:before, -.x-date-left a:before, -.x-date-mp-ybtn a.x-date-mp-prev:before, -.x-date-mp-ybtn a.x-date-mp-next:before { - box-sizing: border-box; - color: #234368; - content: ""; - font-size: 18px; - position: absolute; - top: 0; - left: 0; - text-align: center; - vertical-align: middle; - width: 18px; - height: 18px; -} -.x-date-right a:hover, -.x-date-left a:hover, -.x-date-mp-ybtn a.x-date-mp-prev:hover, -.x-date-mp-ybtn a.x-date-mp-next:hover { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} - -.x-date-right a:before, -.x-date-mp-ybtn a.x-date-mp-next:before { - content: "\f0da"; - left: auto; - right: 0; -} - -.x-date-left a:before, -.x-date-mp-ybtn a.x-date-mp-prev:before { - content: "\f0d9"; -} - -.x-date-inner { - margin: 0 auto; -} - -.x-date-inner th { - border-bottom-color: #E4E4E4; - color: #515151; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; -} - -.x-date-inner td, -.x-date-mp td { - background-color: #FFF; - border: 0; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - padding: 1px; -} - -.x-date-inner a, -td.x-date-mp-month a, -td.x-date-mp-year a { - border-radius: 3px; - color: #999999; - font: inherit; - font-weight: bold; -} - -td.x-date-mp-month a, -td.x-date-mp-year a { - margin: 0 3px 0 3px; -} - -.x-date-inner a:hover, -.x-date-inner .x-date-prevday a:hover, -.x-date-inner .x-date-nextday a:hover, -.x-date-inner .x-date-disabled a:hover, -td.x-date-mp-month a:hover, -td.x-date-mp-year a:hover { - background-color: #DCDCDC; - color: #515151; -} - -.x-date-inner .x-date-disabled a { - background-color: #E4E4E4; - color: #999999; -} - -.x-date-inner .x-date-active { - color: black; -} - -.x-date-inner .x-date-today a { - border-color: #234368; -} - -.x-date-inner span { - font-style: normal; - /* prevent italic font style because of em */ -} - -.x-date-inner .x-date-active span, -.x-date-inner .x-date-selected span { - font-weight: bold; -} - -.x-date-inner .x-date-selected a, -td.x-date-mp-sel a { - background-color: #234368; - /*background-image: none;*/ - border-color: #FFF; - color: #FFFFFF; -} - -.x-date-inner .x-date-prevday a, -.x-date-inner .x-date-nextday a { - color: #DCDCDC; -} - -.x-date-bottom, -.x-date-mp-btns { - border-top: 1px solid #E4E4E4; - padding: 5px; -} -.x-date-bottom td, -.x-date-mp-btns td { - background-color: transparent; - border-top: 1px solid #E4E4E4; -} - -td.x-date-mp-sep { - border-right: 1px solid #E4E4E4; -} - -.x-date-mmenu { - background-color: #EEEEEE !important; -} - -.x-date-mmenu .x-menu-item { - color: black; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.radio-version .x-form-check-wrap .x-form-cb-label { - display: block; -} -.radio-version .x-form-check-wrap .x-form-cb-label .changelog { - float: right; -} - -.x-form-template-picker .x-form-template-picker-search { - padding: 0 !important; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-radio-group { - height: 194px; - border-radius: 3px; - background-color: #FFF; - border: 1px solid #E4E4E4; - overflow: auto; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item, -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category { - border-bottom: 1px solid #E4E4E4; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item:last-child, -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category:last-child { - border-bottom: 0; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item .x-form-check-wrap .x-form-cb-label, -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category .x-form-check-wrap .x-form-cb-label { - display: block; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item .x-form-check-wrap .x-form-cb-label:before, -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category .x-form-check-wrap .x-form-cb-label:before { - display: none; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item .x-form-check-wrap .x-form-radio:checked + .x-form-cb-label, -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category .x-form-check-wrap .x-form-radio:checked + .x-form-cb-label { - color: #1b3451; - background-color: #E4E4E4; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item .x-form-check-wrap:not(.x-item-disabled) .x-form-cb-label:hover, -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category .x-form-check-wrap:not(.x-item-disabled) .x-form-cb-label:hover { - color: #1b3451; - background-color: #E4E4E4; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item { - padding: 0 !important; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-item .x-form-cb-label { - padding: 10px 14px; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category { - padding: 0 !important; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category .x-form-cb-label { - padding: 10px 8px; - font-weight: bold !important; -} -.x-form-template-picker .x-form-template-picker-templates .x-form-template-picker-category .x-item-disabled { - opacity: 1; - -moz-opacity: 1; - filter: alpha(opacity=100); -} - -.x-form-template-preview { - height: 236px; - border-radius: 3px; - background-color: #FFF; - border: 1px solid #E4E4E4; - background: url("../images/tp-no-preview.png") no-repeat center center; - overflow: hidden; -} -.x-form-template-preview .x-panel-bwrap, -.x-form-template-preview .x-panel-body { - position: relative; - height: 100%; -} -.x-form-template-preview .x-form-template-preview-image { - height: 100%; - object-fit: cover; -} -.x-form-template-preview .x-form-template-preview-desc { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 10px 20px; - color: #fff; - background-color: rgba(0, 0, 0, 0.8); -} - -/* needs to come after the button styles! */ -/* tvs panel */ -#modx-tv-tabs { - width: 100%; -} - -/* top area around the tab strip */ -.x-tab-panel-noborder { - border: 1px solid #E2E3DE; - margin: 20px 0 20px; - overflow: visible; - /* background behind a button bar */ -} -.x-tab-panel-noborder .x-tab-panel-body-noborder { - background-color: #FFF; - border-radius: 3px; -} - -/* main tabs */ -.x-tab-panel-header, -.x-tab-panel-footer { - border: 0; - position: relative; -} - -.x-tab-panel-header ul.x-tab-strip { - background-color: transparent !important; - /* override !important extjs default theme style */ - border: 0; - /* prevent overflowing border, add to .x-tab-strip-wrap if necessary */ - margin: 0; - /* was -1px */ - /*width: auto; /* this prevents tabs from triggering the scroll functionality */ - position: relative; - top: 1px; -} - -.x-tab-panel-header-plain .x-tab-strip-spacer, -.x-tab-panel-footer-plain .x-tab-strip-spacer { - /*background-color: $white*/ - border: none; - height: 0; -} - -.x-tab-panel { - /* take care of nested tab panels as seen in MIGX */ -} -.x-tab-panel .x-tab-panel { - padding-top: 18px; - /* 15px + 3px for the active tab box-shadow on top */ -} -.x-tab-panel .x-tab-panel.vertical-tabs-panel { - padding-top: 0; - /* do not add that padding to vertical tabs panels */ -} -.x-tab-panel .x-tab-panel .x-tab-strip-wrap .x-tab-strip { - background-color: #FBFBFB !important; - /* override !important rule defined by extjs default theme */ -} - -.x-tab-panel-header, -.x-tab-strip { - padding-left: 0; - /* was 1px */ -} - -.x-tab-panel-bwrap { - border-radius: 3px; - overflow: visible; - /* prevent cut off box-shadow */ - /* no box-shadows on nested tab panels, MIGX for example */ -} -.x-tab-panel-bwrap .x-tab-panel-bwrap { - box-shadow: none; -} - -ul.x-tab-strip li { - background-color: transparent; - color: #53595F; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - cursor: pointer; - font: 14px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - line-height: 2.2; - margin-left: 0; - padding: 0 12px; - position: relative; - z-index: 5; -} -html[dir=rtl] ul.x-tab-strip li { - float: right; -} -ul.x-tab-strip li:hover { - background-color: #E4E4E4; - color: black; -} -ul.x-tab-strip li.x-tab-strip-active { - color: #234368; - background-color: #FFF; - cursor: default; -} -.vertical-tabs-header ul.x-tab-strip li.x-tab-strip-active { - border-radius: 0; -} -ul.x-tab-strip li.x-tab-strip-active:hover { - background-color: #FFF; -} -ul.x-tab-strip li.x-tab-edge { - height: 0; - visibility: hidden; - /* display none makes the tab scroll buttons appear somehow */ -} - -.x-tab-strip-wrap, -.x-tab-panel-header, -.x-tab-panel { - overflow: visible; - border: none; -} - -.x-tab-strip-wrap { - overflow: hidden; - padding: 2px 0 0; - margin: 0; -} - -.x-tab-strip-closable { - padding-right: 15px !important; -} - -.x-tab-strip .x-tab-strip-closable a.x-tab-strip-close { - right: 2px; - background-image: url("../images/modx-theme/tabs/tab-close.gif"); -} - -ul.x-tab-strip-top li:first-child { - margin-left: 0; -} - -ul.x-tab-strip-bottom { - background-color: #F4F4F4; - border-top-color: #DFDFDF; -} -ul.x-tab-strip-bottom .x-tab-right { - background-image: url("../images/modx-theme/tabs/tab-btm-inactive-right-bg.gif"); -} -ul.x-tab-strip-bottom .x-tab-right .x-tab-right { - background-image: url("../images/modx-theme/tabs/tab-btm-right-bg.gif"); -} -ul.x-tab-strip-bottom .x-tab-right .x-tab-left { - background-image: url("../images/modx-theme/tabs/tab-btm-left-bg.gif"); -} -ul.x-tab-strip-bottom .x-tab-left { - background-image: url("../images/modx-theme/tabs/tab-btm-inactive-left-bg.gif"); -} - -.x-tab-panel-body { - background-color: #FFF; - border: 0; - overflow: visible; -} - -.x-tab-scroller-left, -.x-tab-scroller-right { - border: 0; -} -.x-tab-scroller-left:before, -.x-tab-scroller-right:before { - box-sizing: border-box; - color: #515151; - content: ""; - font-size: 28px; - margin-top: -20px; - /* half of the height to center vertically with top 50% */ - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ - position: absolute; - top: 50%; - right: 0; - text-align: center; - width: 18px; - transition: opacity 0.25s; -} -.x-tab-scroller-left-over:before, -.x-tab-scroller-right-over:before { - color: #234368; -} -.x-tab-scroller-left-disabled, -.x-tab-scroller-right-disabled { - cursor: default; -} -.x-tab-scroller-left-disabled:before, -.x-tab-scroller-right-disabled:before { - color: #515151; - opacity: 0.4; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} - -.x-tab-scroller-left:before { - content: "\f0d9"; -} - -.x-tab-scroller-right:before { - content: "\f0da"; -} - -.x-tab-panel-bbar .x-toolbar, -.x-tab-panel-tbar .x-toolbar { - border-color: #DFDFDF; -} - -.x-tab-panel-body-noborder .x-panel-body-noheader:first-child { - border-top: 0 none; -} - -.x-tab-panel-bbar-noborder .x-toolbar { - border-top-color: transparent; -} - -.x-tab-panel-tbar-noborder .x-toolbar { - border-bottom-color: transparent; -} - -/* vertical tabs */ -.vertical-tabs-panel { - background-color: #FFF; - margin: 0; - /* remove top and bottom margin */ - overflow: hidden; - /* dirty hack to make vertical tabs container stretch to bottom */ - /* this is the area where the TV form fields are displayed */ -} -.vertical-tabs-panel.wrapped { - border: 1px solid #E4E4E4; -} -.vertical-tabs-panel .vertical-tabs-header { - background: #FFF !important; - /* ovverride extjs default theme */ - border-right: 1px solid #E4E4E4 !important; - /* ovverride extjs default theme */ - float: left; - margin-bottom: -10000px; - /* dirty hack to make vertical tabs container stretch to bottom */ - padding-bottom: 10000px !important; - /* dirty hack to make vertical tabs container stretch to bottom */ - width: 168px !important; - /* aligns the vertical tabs with the TVs tab left edge, will not work that nicely with non-english langs */ - /* the "categories" text */ -} -@media screen and (max-width: 960px) { - .vertical-tabs-panel .vertical-tabs-header { - width: 80px !important; - } -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap { - background-color: transparent; - /* as vertical tab panels are nested ones too, do not apply the background color for nested tab panels */ - display: inline-block; - line-height: 0; - margin: 0; - /* neutralize the horizontal tab scroller fix */ - padding: 0; - /* neutralize the horizontal tab scroller fix */ - width: auto !important; - /* Overrides extjs inline width */ -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip { - border: 0; - /* overrides extjs default theme */ - display: inline-block; - top: 0; - /* overrides extjs default theme style of 1px */ - width: auto; -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li { - border-right: 1px solid #E4E4E4; - border-bottom: 1px solid #E4E4E4; - color: #515151; - float: none; - line-height: 1; - margin: 0; - /* override default extjs theme value of 2px */ - overflow: hidden; - padding: 10px 15px 10px 15px; - transition: background-color 0.25s, color 0.25s; -} -@media screen and (max-width: 960px) { - .vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li { - font-size: 12px; - padding: 8px; - } -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li:hover { - background: #FFF; -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li.x-tab-strip-active { - background: #FFF; - border-color: #234368; - border-right-color: #FFF; - box-shadow: none; - /* removes the active tab strip on top */ - color: #234368; - width: 168px; - /* make the active li 1px more wide to cover the containers right border, this makes the right border on inactive tabs necessary as the whole tab-strip wrap gets wider */ -} -@media screen and (max-width: 960px) { - .vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li.x-tab-strip-active { - width: 80px !important; - } -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li.x-tab-edge { - height: 0; - visibility: hidden; - /* display none makes the tab scroll buttons appear somehow */ -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li.x-tab-edge .x-tab-strip-text { - display: none; - /* prevent 4px high space at the end of the tab strip */ -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li .x-tab-strip-text { - line-height: 1.4; - padding: 2px 0 2px 0; - word-break: break-all; - white-space: pre-wrap; -} -.vertical-tabs-panel .vertical-tabs-header h4 { - background: #FFF; - /*border-right: 1px solid $borderColor;*/ - border-bottom: 1px solid #E4E4E4; - color: #53595F; - font-size: 16px; - padding: 15px 0 15px 15px; -} -.vertical-tabs-panel .vertical-tabs-header .x-tab-strip-spacer { - display: none; - /* added by extjs */ -} -.vertical-tabs-panel .x-tab-panel-bwrap { - box-shadow: none; -} -.vertical-tabs-panel .x-tab-panel-bwrap .x-tab-panel-body { - border-top: 0; - width: auto !important; - /* Overrides extjs inline width */ -} -.vertical-tabs-panel .x-tab-panel-bwrap .vertical-tabs-body { - border: 0; - /* do not add the top border for nested tabs panels */ - padding: 15px 20px 15px 15px; - /* 20px account for too wide form fields (no border-box) */ -} - -.tvs-wrapper.below-content { - border-radius: 3px; - margin: 1rem; -} -.tvs-wrapper.below-content .vertical-tabs-panel { - border-radius: 3px; -} -@media screen and (max-width: 960px) { - .tvs-wrapper.below-content { - margin: 0; - } -} - -.window-vtabs .x-panel-mr { - padding-right: 0; -} -.window-vtabs .vertical-tabs-panel { - width: 100% !important; - margin: 0; -} - -#modx-split-wrapper .x-border-layout-ct { - background: transparent; -} - -#modx-leftbar-tabs-xcollapsed { - display: none !important; -} - -#modx-leftbar { - background-color: #FFF; - z-index: 0; - min-width: 288px; -} -@media screen and (min-width: 961px) { - #modx-leftbar { - max-width: 50%; - } -} -#modx-leftbar .x-toolbar { - padding: 0 !important; - border: 0; -} - -#modx-header { - background: #234368; - max-width: 70px; - position: absolute; - z-index: 2; - height: 100%; -} - -#modx-navbar { - font-weight: bold; - font: normal 13px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - height: 100%; - z-index: 20; - display: flex; - flex-direction: column; - padding: 0 5px; -} -#modx-navbar .icon { - color: #FFF; - font-size: 20px; - line-height: 20px; - vertical-align: middle; -} -#modx-navbar li, -#modx-navbar a { - background: transparent; - margin: 0; - padding: 0; - position: relative; - width: 100%; - text-align: center; -} -#modx-navbar a { - cursor: pointer; - color: #FFF; - display: block; - line-height: 12px; - font-size: 10px; - text-decoration: none; -} -#modx-navbar a .description { - font-size: 9px; - opacity: 0.7; -} -#modx-navbar a .icon, #modx-navbar a .label, #modx-navbar a .description { - width: 100%; - display: block; -} -#modx-navbar li a:hover { - opacity: 0.7; -} -#modx-navbar #modx-user-menu a .label, #modx-navbar #modx-user-menu a .description, #modx-navbar #modx-user-menu a #user-username { - display: none; -} -#modx-navbar #modx-manager-search-icon a, -#modx-navbar #modx-leftbar-trigger a, -#modx-navbar #modx-user-menu a { - padding: 12px 0; -} -#modx-navbar #modx-topnav { - list-style: none; - margin: 0; - padding: 0; -} -#modx-navbar #modx-topnav .top:not(#modx-manager-search-icon) { - border-top: 1px solid rgba(255, 255, 255, 0.1); -} -#modx-navbar #modx-topnav > li:not(#modx-home-dashboard):not(#modx-manager-search-icon):not(#modx-leftbar-trigger) > a { - display: block; - position: relative; - padding: 12px 0; -} -#modx-navbar #modx-user-menu { - margin-top: auto; -} -#modx-navbar #modx-user-menu #user-avatar img { - border-radius: 20px; - height: 40px; - width: 40px; - display: block; - margin: auto; -} -#modx-navbar #modx-user-menu #limenu-user a { - display: flex; - flex-direction: column; - justify-content: center; -} -#modx-navbar #modx-home-dashboard { - border-radius: 3px; - width: 40px; - height: 40px; - line-height: 40px; - padding: 10px; -} -#modx-navbar #modx-site-info { - font-size: 10px; -} -#modx-navbar #modx-site-info .site_name { - color: #FFF; -} -#modx-navbar #modx-site-info .full_appname { - color: #FFF; -} -#modx-navbar #modx-site-info > .info-item { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -#modx-leftbar-trigger { - transition: all 0.2s ease; -} -#modx-leftbar-trigger .icon:before { - content: "\f060"; -} -#modx-leftbar-trigger.collapsed .icon:before { - content: "\f061" !important; -} - -#modx-footer .modx-subnav { - border: 1px solid rgba(255, 255, 255, 0.1); - box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.2); - border-radius: 3px; - background: #FFF; - display: block; - box-sizing: border-box; - list-style: none; - position: absolute; - z-index: 10000; - opacity: 0; - visibility: hidden; - transition: all 0.15s ease; -} -#modx-footer .modx-subnav li { - display: block; - border-radius: 3px; - background: #FFF; - margin: 0; - padding: 0; - position: relative; -} -#modx-footer .modx-subnav li:not(:first-child) { - border-top: 1px solid #E4E4E4; -} -#modx-footer .modx-subnav li:hover:after { - border-right-color: #E4E4E4; -} -#modx-footer .modx-subnav li.sub:after { - position: absolute; - color: #999999; - content: "\f0da"; - font-size: 14px; - margin-top: 0; - top: 50%; - transform: translateY(-50%); - right: 10px; -} -#modx-footer .modx-subnav li a { - border-radius: 3px; - background-color: #FFF; - color: #515151; - font-weight: bold; - line-height: 1.5; - margin: 0; - padding: 8px 15px; - text-shadow: none; - width: 270px; - display: block; - text-decoration: none; - cursor: pointer; -} -#modx-footer .modx-subnav li a .icon { - display: inline-block; - font-size: 18px; - opacity: 0.07; - padding-left: 5px; -} -#modx-footer .modx-subnav li a span { - color: #999999; - display: block; - float: none; - font-size: 12px; - font-weight: normal; - line-height: 1.3; - margin-top: 6px; - width: 100%; -} -#modx-footer .modx-subnav li a:hover { - background: #E4E4E4; - border-top-color: #E4E4E4; - border-bottom-color: #E4E4E4; - color: #53595F; -} -#modx-footer .modx-subnav li a:hover .description { - color: #707070; -} -#modx-footer .modx-subnav li:hover ul ul, #modx-footer .modx-subnav ul li:hover ul ul, #modx-footer .modx-subnav ul ul li:hover ul ul { - display: none; -} -#modx-footer .modx-subnav li:hover ul, #modx-footer .modx-subnav ul li:hover ul, #modx-footer .modx-subnav ul ul li:hover ul, #modx-footer .modx-subnav ul ul ul li:hover ul { - display: block; -} -#modx-footer .modx-subnav.active { - opacity: 1; - visibility: visible; -} -#modx-footer .modx-subnav .modx-subsubnav { - border: 1px solid rgba(255, 255, 255, 0.1); - box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.2); - border-radius: 3px; - background: #FFF; - display: none; - list-style: none; - position: absolute; - left: 295px; - bottom: 0; - z-index: 24; -} -#modx-footer .modx-subnav-arrow { - right: 100%; - border: 12px solid transparent; - border-right-color: #FFF; - content: " "; - position: absolute; - pointer-events: none; - margin-top: -6px; -} -#modx-footer #language .modx-subsubnav { - max-height: 86vh; - overflow-y: auto; -} - -@media screen and (max-width: 960px) { - #modx-header { - position: relative; - min-width: 100%; - height: auto !important; - } - - #modx-navbar { - flex-direction: row; - flex-wrap: wrap; - } - #modx-navbar #modx-headnav { - order: 1; - width: 50%; - } - #modx-navbar #modx-headnav a { - line-height: initial !important; - } - #modx-navbar #modx-headnav img { - max-width: 35px; - } - #modx-navbar #modx-topnav { - width: 100%; - order: 0; - } - #modx-navbar #modx-user-menu { - flex-direction: row-reverse; - flex-wrap: nowrap; - width: 50%; - order: 2; - margin-top: 0; - } - #modx-navbar > ul { - display: flex; - flex-wrap: wrap; - align-items: center; - justify-content: center; - } - #modx-navbar > ul > li { - flex-basis: 50px; - } - #modx-navbar #modx-site-info { - display: none; - } - #modx-navbar #modx-home-dashboard { - margin: 0; - padding: 5px; - } - - #modx-leftbar-trigger .icon { - padding: 3px 4px; - } - #modx-leftbar-trigger .icon:before { - content: "\f062"; - } - #modx-leftbar-trigger.collapsed .icon:before { - content: "\f063" !important; - } - - #modx-footer .modx-subnav { - min-width: 300px; - top: 60px !important; - } - #modx-footer .modx-subnav .description { - display: none; - } - #modx-footer .modx-subnav li { - border-radius: 0; - } - #modx-footer .modx-subnav li.sub:after { - display: none; - } - #modx-footer .modx-subnav li a { - width: auto; - white-space: nowrap; - } - #modx-footer .modx-subnav .modx-subsubnav { - position: initial; - left: auto; - box-shadow: none; - display: block; - max-height: initial !important; - overflow-y: initial !important; - } - #modx-footer .modx-subnav .modx-subsubnav li > a { - margin-left: 1rem; - } - #modx-footer .modx-subnav-arrow { - display: none; - } - #modx-footer .modx-subnav-wrapper { - max-height: 400px; - overflow-y: auto; - } -} -@media (max-height: 520px) { - #modx-footer .modx-subnav .description { - display: none; - } -} -/* MODX MANAGER SEARCH */ -#modx-manager-search { - padding: 10px 10px 5px; - height: 38px; - min-width: 100px; - background: #FFF; - border-radius: 3px 3px 0 0; -} -#modx-manager-search .x-form-text { - background: none; -} - -#modx-manager-search .x-form-field-wrap { - background-image: none; - color: #565353; - font-size: 12px; - outline: none !important; -} -#modx-manager-search .x-form-field-wrap .x-form-text { - color: #515151; - letter-spacing: 0; - text-shadow: none; - font-weight: normal; -} -#modx-manager-search .x-form-field-wrap .x-form-empty-field { - color: #6a747a; -} -#modx-manager-search .x-form-field-wrap .x-form-trigger { - display: none; -} - -/* this is an .x-combo-list element with special styles */ -.modx-manager-search-results { - background: #E4E4E4; - border-radius: 0 0 3px 3px; - border: 1px solid #E4E4E4; - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.2); - position: relative; - width: 402px !important; - height: auto !important; - box-sizing: border-box; - /* we need the parent selector to override default combobox styles */ -} -.modx-manager-search-results .loading-indicator { - background: none; - color: #515151; - font-size: 14px; - margin: 10px 0; - text-align: center; -} -.modx-manager-search-results .loading-indicator:before { - content: "\f110"; - margin-right: 5px; -} -.modx-manager-search-results .x-combo-list-inner { - background: #FFF; - border: 0; - margin: 0; - overflow: auto; - width: 100% !important; -} -@media screen and (max-width: 960px) { - .modx-manager-search-results .x-combo-list-inner { - height: auto !important; - line-height: 4em; - } - .modx-manager-search-results .x-combo-list-inner .section > * { - padding-top: 0.5em; - padding-bottom: 0.5em; - } -} -.modx-manager-search-results .section { - border-left: 1px solid #ededed; - font-size: 12px; - line-height: 12px; - margin-left: 100px; - position: relative; - width: auto; - /* change to 100% to enable scrollable overflow */ -} -.modx-manager-search-results h3, -.modx-manager-search-results .x-combo-list-item { - color: #515151; - line-height: 18px; - margin: 0; - padding: 4px 6px; -} -.modx-manager-search-results h3 { - color: #53595F; - font-size: 11px; - line-height: 11px; - font-weight: normal; - left: -108px; - position: absolute; - text-align: right; - top: 0; - width: 95px; -} -.modx-manager-search-results a { - cursor: pointer; - display: inline-block; - padding-left: 20px; - position: relative; - color: inherit; - text-decoration: none; -} -.modx-manager-search-results i { - color: #234368; - left: 0; - position: absolute; - top: 4px; -} -.modx-manager-search-results em { - font-style: normal; - opacity: 0.7; -} -.modx-manager-search-results .x-combo-list-item { - overflow: visible; - white-space: normal; - /* allow wrapping for longer entries */ -} -.modx-manager-search-results .x-combo-list-item a { - display: block; -} -.modx-manager-search-results .x-combo-list-item.x-combo-selected, .modx-manager-search-results .x-combo-list-item:hover { - border: 0; - background-color: #E4E4E4; - margin-left: 0; - z-index: 10; -} -.modx-manager-search-results .x-combo-list-item.x-combo-selected h3, .modx-manager-search-results .x-combo-list-item:hover h3 { - left: 0; -} -.modx-manager-search-results .x-combo-list-item.x-combo-selected p, .modx-manager-search-results .x-combo-list-item:hover p { - border-left-color: transparent; -} -.modx-manager-search-results .x-combo-list-item.x-combo-selected a, .modx-manager-search-results .x-combo-list-item:hover a { - color: #515151; -} -.modx-manager-search-results .icon-user { - background-image: none !important; -} - -/* Breadcrumbs */ -.breadcrumbs .panel-desc { - margin-top: 0; -} - -.crumb_wrapper { - background: #FBFBFB; - border-bottom: 1px solid #E4E4E4; - border-top: 1px solid #E4E4E4; - margin-top: 15px; -} -.crumb_wrapper .crumbs { - height: 34px; - overflow: hidden; - /* hide the overflow from the oversized arrows */ -} -.crumb_wrapper .crumbs li { - color: #53595F; - float: left; - font-size: 12px; - font-weight: normal; - line-height: 12px; - padding: 0 0 0 20px; - position: relative; - z-index: 1; -} -.crumb_wrapper .crumbs li.first { - padding: 0; - /* neutralize the normal li padding and give it to the inner element */ - /* the home breadcrumb with the house icon */ -} -.crumb_wrapper .crumbs li.first:before { - content: "\f015"; - display: inline-block; - font-size: 20px; - line-height: 34px; - position: absolute; - top: 0; - left: 0; - text-align: center; - text-indent: 0; - z-index: 2; - /* put the icon above the triangle :after element */ -} -#packages-breadcrumbs .crumb_wrapper .crumbs li.first:before { - content: "\f1b2"; -} -.crumb_wrapper .crumbs li.first:hover:before { - color: #FFFFFF; -} -.crumb_wrapper .crumbs li.first:hover { - background-color: #515151; -} -.crumb_wrapper .crumbs li.first .root { - background-color: transparent; - box-sizing: content-box; - /* buttons have border-box and spans content-box, we normalize here */ - display: inline-block; - line-height: 12px; - margin: 0; - /* neutralize the normal li margin */ - padding: 12px; - text-indent: -999em; - width: 35px; - z-index: 3; - /* do not display the cover element here */ -} -.crumb_wrapper .crumbs li.first .root:before { - display: none; -} -.crumb_wrapper .crumbs li.first .root:hover { - background-color: transparent; -} -.crumb_wrapper .crumbs li:hover button, -.crumb_wrapper .crumbs li:hover span, -.crumb_wrapper .crumbs li:hover span:after { - background-color: #515151; - color: #FFFFFF; -} -.crumb_wrapper .crumbs li:hover span:after, -.crumb_wrapper .crumbs li:hover button:after { - border: 1px solid #FBFBFB; - border-left-color: #515151; - border-bottom-color: #515151; -} -.crumb_wrapper .crumbs li:hover span:before, -.crumb_wrapper .crumbs li:hover button:before { - background-color: #515151; -} -.crumb_wrapper .crumbs li:hover + li span:before, -.crumb_wrapper .crumbs li:hover + li button:before { - border-left-color: #515151; -} -.crumb_wrapper .crumbs li button { - background-color: transparent; - border: 0; - color: #53595F; - cursor: pointer; - font: normal 12px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; - line-height: 1; - text-decoration: none; -} -.crumb_wrapper .crumbs li span { - background-color: #FBFBFB; -} -.crumb_wrapper .crumbs li button, -.crumb_wrapper .crumbs li span { - display: inline-block; - margin: 0 0 0 1px; - padding: 11px 13px 11px 15px; - position: relative; - /* to position the pseudo elements */ - /* the cover element, makes up the 2 triangle shapes at the left of each crumb */ - /* the triangle shape and line to the right of each crumb */ -} -.crumb_wrapper .crumbs li button:before, -.crumb_wrapper .crumbs li span:before { - background-color: transparent; - content: ""; - display: inline-block; - width: 0; - height: 0; - border-top: 50px solid rgba(0, 0, 0, 0); - /* no transparent, breaks anti-aliasing in FF */ - border-bottom: 50px solid rgba(0, 0, 0, 0); - /* no transparent, breaks anti-aliasing in FF */ - border-left: 30px solid #FBFBFB; - padding-right: 3px; - position: absolute; - top: 50%; - left: -33px; - margin-top: -50px; - transform: scale(0.99999); - /* fix blurry edges in FF */ - z-index: -1; -} -.crumb_wrapper .crumbs li button:after, -.crumb_wrapper .crumbs li span:after { - background-color: #FBFBFB; - border: 1px solid #DCDCDC; - border-left: 0; - border-bottom: 0; - border-radius: 3px; - content: ""; - display: inline-block; - width: 34px; - height: 34px; - /* + 2px border = 36px */ - position: absolute; - top: 0; - right: -22px; - transform: scaleX(0.6) rotate(45deg); - z-index: -1; -} - -.x-toolbar { - background-color: #F7F7F7; - background-image: none; - border-color: #DFDFDF; -} -.x-toolbar .xtb-text, -.x-toolbar .x-toolbar-cell label { - margin: 0 5px 0 7px; - padding: 0; -} -.x-toolbar .x-item-disabled { - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ -} -.x-toolbar td.x-toolbar-cell:first-of-type .xtb-text { - margin-left: 0; -} - -.x-toolbar td, -.x-toolbar span, -.x-toolbar input, -.x-toolbar div, -.x-toolbar select, -.x-toolbar label { - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - line-height: 0; -} - -.x-toolbar .x-btn-group-header { - line-height: 1; -} - -.x-toolbar em.x-btn-split-bottom { - background-image: url("../images/modx-theme/button/s-arrow-b-noline.gif"); -} - -.x-toolbar .x-btn-over em.x-btn-split-bottom, -.x-toolbar .x-btn-click em.x-btn-split-bottom, -.x-toolbar .x-btn-menu-active em.x-btn-split-bottom, -.x-toolbar .x-btn-pressed em.x-btn-split-bottom { - background-image: url("../images/modx-theme/button/s-arrow-bo.gif"); -} - -.ext-ie .x-toolbar-cell .x-form-field-wrap { - height: 30px; -} - -.x-tbar-page-first { - background-image: url("../images/modx-theme/grid/page-first.png") !important; -} - -.x-tbar-loading { - background-image: url("../images/modx-theme/grid/refresh.png") !important; -} - -.x-tbar-page-last { - background: none !important; - position: relative; -} -.x-tbar-page-last:before { - content: "\f04e"; - top: 1px; - left: 1px; - right: auto; -} - -.x-tbar-page-next { - background: none !important; - position: relative; -} -.x-tbar-page-next:before { - content: "\f0da"; - font-size: 18px; - line-height: 110%; - left: 1px; - right: auto; -} - -.x-tbar-page-prev { - background: none !important; - position: relative; -} -.x-tbar-page-prev:before { - content: "\f0d9"; - font-size: 18px; - line-height: 110%; - left: auto; - right: 1px; -} - -.x-tbar-loading { - background: none !important; - position: relative; -} -.x-tbar-loading:before { - content: "\f01e"; - top: 1px; - bottom: auto; -} - -.x-tbar-page-first { - background: none !important; - position: relative; -} -.x-tbar-page-first:before { - content: "\f04a"; - top: 1px; - left: auto; - right: 1px; -} - -.x-paging-info { - color: #444444; -} - -.x-toolbar-more-icon { - background-image: url("../images/modx-theme/toolbar/more.gif") !important; -} - -/* bottom toolbars like pagination */ -.x-panel-bbar { - padding-top: 10px; -} -.modx-browser-rte-buttons .x-panel-bbar { - /* style it like a window footer */ - background-color: #FFF; - border-top: 1px solid #FFF; - padding: 5px; -} -.modx-browser-rte-buttons .x-panel-bbar .x-toolbar-layout-ct { - width: auto !important; - /* override extjs calculated width */ -} -.x-panel-bbar .x-toolbar { - background-color: transparent; - border: 0 none; - overflow: hidden; - padding: 2px 0; - /* override extjs default theme style of 2px 2px */ -} -.x-panel-bbar .x-toolbar .x-form-text { - padding: 5px 10px; -} -.x-panel-bbar .x-toolbar .x-form-text.x-tbar-page-number, .x-panel-bbar .x-toolbar .x-form-text.x-tbar-page-size { - width: 32px; -} -.x-panel-bbar .x-toolbar .x-form-text.x-tbar-page-number { - margin-right: 3px; -} -.x-panel-bbar .x-toolbar .x-btn { - margin-right: 10px; - padding: 8px 13px; -} -.modx-browser-rte .x-panel-bbar .x-toolbar .x-btn { - margin-right: 0; - padding: 10px 15px 10px 15px; -} -.x-panel-bbar .x-toolbar .xtb-text { - margin: 0 3px 0 0; -} - -/* top toolbars */ -.x-panel-tbar { - overflow: visible; - /* prevent cut off box-shadows in FF */ - padding-bottom: 2px; -} -.x-panel-tbar .x-toolbar { - /*background-color: #F5F5F5;*/ - border: 0; - padding: 5px 0; - overflow: visible; - /* prevent cut off box-shadows in FF */ -} - -.x-panel-mc .x-panel-tbar .x-toolbar { - background-image: none; - border: 0; - padding: 15px 0 7px 0; -} - -.x-panel-tbar-noheader .x-toolbar { - background-color: transparent; - background-image: none; - border: 0; - padding: 5px 0; -} - -.x-toolbar td, -.x-toolbar span, -.x-toolbar input, -.x-toolbar div, -.x-toolbar select, -.x-toolbar label { - border-radius: 3px; -} - -.x-html-editor-tb .x-btn-text { - background-image: url("../images/modx-theme/editor/tb-sprite.gif"); -} - -.x-panel-noborder .x-panel-tbar-noborder .x-toolbar { - background-color: transparent; - border-bottom-color: transparent; -} - -.x-panel-noborder .x-panel-bbar-noborder .x-toolbar { - border-top-color: transparent; -} - -#modx-leftbar { - /* the main container + bg behind the tabs */ - /* the toolbars just below the tabs */ - /* root box containing a context or category */ - /* just the actual nodes */ -} -#modx-leftbar .x-tab-panel-noborder { - margin: 0 8px; -} -#modx-leftbar .x-tab-panel-bwrap { - border-radius: 0 0 3px 3px; - position: relative; - z-index: 1; -} -#modx-leftbar .x-tab-panel-bwrap .x-tab-panel-body-noborder { - border-radius: 0 0 3px 3px; - background: #F1F1F1; -} -@media screen and (max-width: 960px) { - #modx-leftbar #modx-leftbar-tabpanel { - width: auto !important; - margin: 0 auto; - padding: 0.5em; - } -} -@media screen and (max-width: 960px) { - #modx-leftbar { - position: relative !important; - top: auto !important; - left: auto !important; - width: 100% !important; - height: auto !important; - box-shadow: none; - margin: 0 auto 10px auto; - } - #modx-leftbar #modx-leftbar-header { - display: none; - } -} -@media screen and (max-width: 960px) { - #modx-leftbar .x-plain-body { - width: 100% !important; - height: auto !important; - } -} -#modx-leftbar .x-panel-tbar { - padding: 0; -} -#modx-leftbar .x-toolbar { - padding: 4px 5px 2px 0; -} -#modx-leftbar .x-tree-root-ct { - padding: 6px; -} -#modx-leftbar .x-tree .x-panel-body { - background: #FFF; - border-radius: 0; -} - -#modx-tree-usergroup .x-toolbar-left-row { - display: flex; - flex-wrap: wrap; -} - -#modx-resource-tree-tbar .x-toolbar-left .x-btn .tree-new-resource, -#modx-tree-element .x-toolbar-left .x-btn .tree-new-template { - margin-left: 16px; -} - -#modx-split-wrapper .x-layout-split, -#modx-split-wrapper #modx-leftbar-tabs-xcollapsed { - margin-left: -70px; -} - -.x-layout-split { - overflow: visible; - width: 8px; - z-index: 2; -} -.x-layout-split:hover { - background: #999999; -} - -/* style for the collapsed tree expander */ -#modx-leftbar-tabs-xcollapsed .x-layout-mini { - left: 0; -} -#modx-leftbar-tabs-xcollapsed .x-layout-mini:after { - border-right: 0; - border-left: 5px solid #515151; -} -@media screen and (max-width: 960px) { - #modx-leftbar-tabs-xcollapsed .x-layout-mini:after { - border: none; - } -} -#modx-leftbar-tabs-xcollapsed .x-layout-mini:hover:after { - border-left-color: #234368; -} - -.modx-tree { - padding: 0; -} -#modx-file-tree .modx-tree:first-child { - padding-top: 4px; -} - -/* icons */ -.x-tree-arrows .x-tree-elbow-plus, -.x-tree-arrows .x-tree-elbow-minus, -.x-tree-arrows .x-tree-elbow-end-plus, -.x-tree-arrows .x-tree-elbow-end-minus { - background: none; -} -.x-tree-arrows .x-tree-elbow-plus:hover, -.x-tree-arrows .x-tree-elbow-minus:hover, -.x-tree-arrows .x-tree-elbow-end-plus:hover, -.x-tree-arrows .x-tree-elbow-end-minus:hover { - background: #d9d9d9; - border-radius: 50%; -} - -.x-tree-arrows .x-tree-elbow-plus:before, -.x-tree-arrows .x-tree-elbow-minus:before, -.x-tree-arrows .x-tree-elbow-end-plus:before, -.x-tree-arrows .x-tree-elbow-end-minus:before { - background: transparent 0 0; - display: inline-block; - width: 10px; - padding-left: 4px; - padding-right: 4px; - text-align: center; - margin: 0; -} - -.x-tree-arrows .x-tree-elbow-plus:before, -.x-tree-arrows .x-tree-elbow-minus:before, -.x-tree-arrows .x-tree-elbow-end-plus:before, -.x-tree-arrows .x-tree-elbow-end-minus:before { - content: "\f0da"; -} - -.x-tree-arrows .x-tree-elbow-minus:before, -.x-tree-arrows .x-tree-elbow-end-minus:before { - content: "\f0d7"; -} - -/* tree states */ -.x-tree-node-el { - color: #515151; - font: normal 14px/2.25 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - padding: 0 8px; - /* For legacy icons */ - background-repeat: no-repeat; - background-position: 5px; -} -.x-tree-node-el.is_folder { - background: transparent; -} -.x-tree-node-el .x-btn { - -moz-box-shadow: none; - box-shadow: none; -} -.x-tree-node-el .icon { - display: inline-block; - width: 1em; - font-size: 1.15em; - line-height: 0.75em; - vertical-align: -15%; -} -.x-tree-node-el a span { - padding-left: 7px; -} -.x-tree-node-el a span span { - padding-left: 0; -} - -/* tweak icons for FA 5.2.0 */ -.x-tree-node-el .icon-refresh, -.x-tree-node-el .icon-plus-circle { - font-size: 1em; - vertical-align: 0; -} - -.unpublished, -.unpublished a span { - color: #b3b3b3 !important; - font-style: normal; -} -.unpublished i.icon, -.unpublished i.icon-large, -.unpublished a span i.icon, -.unpublished a span i.icon-large { - color: #b3b3b3 !important; - font-style: normal; -} - -.hidemenu, -.hidemenu a span { - color: #999999; - font-style: italic; -} -.hidemenu i.icon, -.hidemenu i.icon-large, -.hidemenu a span i.icon, -.hidemenu a span i.icon-large { - color: #999999; - font-style: normal; -} - -.deleted { - color: rgba(175, 90, 98, 0.5) !important; -} -.deleted i.icon, -.deleted i.icon-large { - color: rgba(175, 90, 98, 0.5) !important; - font-style: normal; -} -.deleted a span { - color: rgba(175, 90, 98, 0.5) !important; - text-decoration: line-through; - /* deleted files should inherit the text style from published/unpublished and - not overwrite it */ -} - -.element-node-disabled a span { - color: #aaaaaa; -} - -.x-tree-node { - position: relative; - background: #FFF; - color: #999999; -} -.x-tree-node .x-tree-node-disabled a span, -.x-tree-node .x-tree-node-disabled i.icon, -.x-tree-node .element-node-disabled a span, -.x-tree-node .element-node-disabled i.icon { - color: #aaaaaa; -} - -.element-node-locked a span { - font-style: inherit; -} - -.modx-tree-node-tool-ct { - position: absolute; - top: 0; - right: 6px; - bottom: 0; - line-height: 1.8; -} -html[dir=rtl] .modx-tree-node-tool-ct { - left: 6px; - right: unset; -} -.modx-tree-node-tool-ct .x-btn:hover, .modx-tree-node-tool-ct .x-btn:focus { - color: #6CB24A !important; -} -#modx-gr-tree-resource .modx-tree-node-tool-ct, #modx-ih-resource-tree .modx-tree-node-tool-ct { - display: none; -} - -/* Direct create buttons for a tree node */ -.x-tree-node-el .modx-tree-node-btn-create { - position: absolute; - top: 0; - right: 6px; - bottom: 0; - line-height: 34px; - opacity: 0; - transition: opacity 0.4s ease-in; -} -html[dir=rtl] .x-tree-node-el .modx-tree-node-btn-create { - left: 6px; - right: unset; -} -.x-tree-node-el .modx-tree-node-btn-create .x-btn { - color: #515151; - opacity: 0.4; - transition: opacity 0.2s ease-in-out, color 0.2s ease-in-out; -} -.x-tree-node-el .modx-tree-node-btn-create .x-btn:hover, .x-tree-node-el .modx-tree-node-btn-create .x-btn:focus { - opacity: 1; - color: #6CB24A; -} -#modx-gr-tree-resource .x-tree-node-el .modx-tree-node-btn-create, #modx-ih-resource-tree .x-tree-node-el .modx-tree-node-btn-create { - display: none; -} -.x-tree-node-el:hover .modx-tree-node-btn-create, .x-tree-node-el:focus .modx-tree-node-btn-create { - opacity: 1; -} - -.x-tree-root-ct { - border-radius: 0; - overflow: hidden; - padding: 0 !important; -} - -.tree-pseudoroot-node.x-tree-node-el { - background-color: #F1F1F1; - font: 500 14px/3 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - position: relative; - padding: 0 5px; -} -.tree-pseudoroot-node.x-tree-node-el a span { - color: #53595F; -} -.tree-pseudoroot-node.x-tree-node-el > .icon { - color: #53595F; -} -.tree-pseudoroot-node.x-tree-node-el .modx-tree-node-tool-ct { - line-height: 3; - opacity: 0.5; - filter: alpha(opacity=50); - /* for IE <= 8 */ -} -.tree-pseudoroot-node.x-tree-node-el .modx-tree-node-tool-ct .x-btn { - margin-left: 2px; -} -.tree-pseudoroot-node.x-tree-node-el.x-tree-node-collapsed { - border-bottom: 1px solid #E4E4E4; -} -.tree-pseudoroot-node.x-tree-node-el.x-tree-node-expanded, .tree-pseudoroot-node.x-tree-node-el.x-tree-node-expanded span, .tree-pseudoroot-node.x-tree-node-el.x-tree-node-expanded > .icon { - color: #53595F; -} -.tree-pseudoroot-node.x-tree-node-el.x-tree-node-over { - background-color: #E4E4E4; - color: #53595F; -} -.tree-pseudoroot-node.x-tree-node-el + .x-tree-node-ct, -.tree-pseudoroot-node.x-tree-node-el + div > .x-tree-node-ct { - background: #FBFBFB; - overflow-x: auto; -} -.tree-pseudoroot-node.x-tree-node-el + .x-tree-node-ct:empty, -.tree-pseudoroot-node.x-tree-node-el + div > .x-tree-node-ct:empty { - padding: 0; -} -.tree-pseudoroot-node.x-tree-node-el:hover .modx-tree-node-tool-ct { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ -} -.tree-pseudoroot-node.x-tree-node-el:hover .modx-tree-node-tool-ct .x-btn { - color: inherit; -} - -.x-tree-elbow, -.x-tree-elbow-end { - display: inline-block; -} - -/* miscellaneous tree styles */ -.x-tree-node-el .x-tree-node-icon { - display: inline-block; -} - -.x-tree-node-loading .x-tree-node-icon { - background-image: url("../images/modx-theme/tree/loading.gif") !important; -} - -.x-tree-node-loading a span { - color: #444444; - font-style: italic; -} - -.ext-ie .x-tree-node-el input { - height: 15px; - width: 15px; -} - -/* accordion header row icons */ -#modx-leftbar .icon, -.x-tree-node .icon { - background: none; - border: 0; - display: inline-block; - margin: 0; - padding: 3px; - text-align: center; - opacity: 0.8; - filter: alpha(opacity=80); - /* for IE <= 8 */ -} -#modx-leftbar .icon.icon-folder:before, #modx-leftbar .icon.icon-columns:before, #modx-leftbar .icon.icon-th-large:before, #modx-leftbar .icon.icon-code:before, #modx-leftbar .icon.icon-cogs:before, -.x-tree-node .icon.icon-folder:before, -.x-tree-node .icon.icon-columns:before, -.x-tree-node .icon.icon-th-large:before, -.x-tree-node .icon.icon-code:before, -.x-tree-node .icon.icon-cogs:before { - font-weight: 900; -} -#modx-leftbar .icon i, -.x-tree-node .icon i { - font-style: normal; -} -#modx-leftbar .icon button, -.x-tree-node .icon button { - display: none; -} - -.x-tree-node-ct .x-tree-node .icon { - position: relative; - top: -1px; - left: -1px; -} - -/* drag and drop styles */ -.x-tree-node a, -.x-dd-drag-ghost a, -.x-tree-node a span, -.x-dd-drag-ghost a span { - color: #515151; -} - -.x-tree-node div.x-tree-drag-insert-below { - border-bottom: 2px solid #a8c3e2 !important; -} - -.x-tree-node div.x-tree-drag-insert-above { - border-top: 2px solid #a8c3e2 !important; -} - -.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a { - border-bottom: 2px solid #a8c3e2 !important; -} - -.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a { - border-top: 2px solid #a8c3e2 !important; -} - -.x-tree-node .x-tree-drag-append a span { - background-color: #E4E4E4; - border-color: #E4E4E4; -} - -.x-tree-node .x-tree-node-over { - background-color: #E4E4E4; -} - -.x-tree-node .x-tree-selected { - background-color: #D6E7F8; -} - -.x-tree-node .x-tree-expanded { - color: #234368; - background-color: #E4E4E4; -} -.x-tree-node .x-tree-expanded a { - color: #234368; -} -.x-tree-node .x-tree-expanded a span { - color: #234368; -} - -.x-tree-drop-ok-append .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-add.gif"); -} - -.x-tree-drop-ok-above .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-over.gif"); -} - -.x-tree-drop-ok-below .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-under.gif"); -} - -.x-tree-drop-ok-between .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-between.gif"); -} - -/* legacy icons */ -.icon-rss:before { - content: "\f09e"; -} - -.icon-cal:before, -.icon-ical:before, -.icon-ics:before, -.icon-vcs:before { - content: "\f133"; -} - -.icon-db:before, -.icon-sql:before { - content: "\f1c0"; -} - -.icon-zip:before, -.icon-tar:before, -.icon-tgz:before, -.icon-gz:before, -.icon-bz2:before, -.icon-rar:before, -.icon-7z:before, -.icon-dmg:before, -.icon-iso:before { - content: "\f1c6"; -} - -.icon-bk:before, -.icon-bak:before, -.icon-backup:before { - content: "\f1da"; -} - -.icon-jpg:before, -.icon-jpeg:before, -.icon-gif:before, -.icon-png:before, -.icon-bmp:before, -.icon-tiff:before, -.icon-svg:before { - content: "\f1c5"; -} - -.icon-bat:before, -.icon-scr:before, -.icon-sh:before { - content: "\f120"; -} - -.icon-txt:before, -.icon-log:before { - content: "\f15c"; -} - -.icon-aac:before, -.icon-mp3:before, -.icon-ogg:before, -.icon-wma:before, -.icon-m4a:before, -.icon-flac:before, -.icon-wav:before, -.icon-aif:before, -.icon-aiff:before { - content: "\f1c7"; -} - -.icon-avi:before, -.icon-mpg:before, -.icon-mpeg:before, -.icon-mov:before, -.icon-mp4:before, -.icon-m4v:before, -.icon-3gp:before, -.icon-flv:before, -.icon-fla:before, -.icon-swf:before, -.icon-wmv:before { - content: "\f1c8"; -} - -.icon-access:before, -.icon-htaccess:before { - content: "\f023"; -} - -.icon-php:before, -.icon-cfm:before, -.icon-rb:before, -.icon-as:before, -.icon-java:before, -.icon-jar:before { - content: "\f1c9"; -} - -.icon-doc:before, -.icon-docx:before { - content: "\f1c2"; -} - -.icon-csv:before, -.icon-xls:before, -.icon-xlsx:before { - content: "\f1c3"; -} - -.icon-ppt:before, -.icon-pptx:before { - content: "\f1c4"; -} - -.icon-pdf:before { - content: "\f1c1"; -} - -.icon-html:before, -.icon-htm:before, -.icon-xml:before { - content: "\f1c9"; -} - -.icon-js:before, -.icon-json:before, -.icon-coffeescript:before { - content: "\f1c9"; -} - -.icon-css:before, -.icon-scss:before, -.icon-less:before, -.icon-styl:before { - content: "\f1c9"; -} - -.icon-action { - background-image: url("../images/restyle/icons/application_osx_terminal.png") !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-action.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-action:before { - content: " "; -} - -.icon-namespace { - background-image: url("../images/restyle/icons/computer.png") !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-namespace.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-namespace:before { - content: " "; -} - -.icon-list-new { - background-image: url("../images/restyle/icons/layout_add.png") !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-list-new.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-list-new:before { - content: " "; -} - -.icon-mark-active { - background-image: url("../images/restyle/icons/layout_edit.png") !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-mark-active.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-mark-active:before { - content: " "; -} - -.icon-mark-complete { - background-image: url("../images/restyle/icons/layout_header.png") !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-mark-complete.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-mark-complete:before { - content: " "; -} - -.icon-package { - background-image: url("../images/restyle/icons/package.png") !important; - padding-right: 5px !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-package.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-package:before { - content: " "; -} - -.icon-locked { - background-image: url("../images/restyle/icons/lock_edit.png") !important; - background-repeat: no-repeat !important; - background-position: center !important; - min-width: 16px; - min-height: 16px; - vertical-align: middle; -} -.icon-locked.x-tree-node-el { - background-position: 5px 5px !important; -} -.icon-locked:before { - content: " "; -} - -.icon-lock { - content: "\f023"; -} - -#modx-resource-tree-panel .x-accordion-hd { - background-position: 0 0; -} - -#modx-element-tree-panel .x-accordion-hd { - background-position: 0 -32px; -} - -#modx-file-tree-panel .x-accordion-hd { - background-position: 0 -64px; -} - -#modx-static-page-settings .x-accordion-hd { - background-position: 0 -96px; -} - -/* -.x-tree .x-panel-body { - background-color:$white - border:1px solid #E4E4E4; -}*/ -.x-tree-node-el .x-tree-node-icon { - display: inline-block; -} - -.x-tree-node-loading .x-tree-node-icon { - background-image: url("../images/modx-theme/tree/loading.gif") !important; -} - -.x-tree-node-loading a span { - color: #444444; - font-style: italic; -} - -/* icons for the various tree elements */ -.tree-context:before { - content: "\f0ac"; -} - -.tree-resource:before { - content: "\f15b"; -} - -.tree-static-resource:before { - content: "\f15c"; -} - -.tree-weblink:before { - content: "\f0c1"; -} - -.tree-symlink:before { - content: "\f0c5"; -} - -.parent-resource:before, -.icon-folder:before { - content: "\f07b"; -} - -.x-tree-node-expanded .parent-resource:before, -.x-tree-node-expanded .icon-folder:before { - content: "\f07c"; -} - -.locked-resource:before { - content: "\f023" !important; -} - -.ext-ie .x-tree-node-el input { - height: 15px; - width: 15px; -} - -.x-tree-root-ct { - border-radius: 0; - overflow: hidden; - padding: 0 !important; -} - -.x-tree-root-node { - margin: 0; -} - -.x-tree-node { - color: #515151; -} - -.x-tree-node a, -.x-dd-drag-ghost a { - color: #515151; -} - -.x-tree-node a span, -.x-dd-drag-ghost a span { - color: #515151; -} - -.x-tree-node .x-tree-node-disabled a span { - color: #d1d1d1; -} - -.x-tree-node div.x-tree-drag-insert-below { - border-bottom-color: #686868; -} - -.x-tree-node div.x-tree-drag-insert-above { - border-top-color: #686868; -} - -.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a { - border-bottom-color: #686868; -} - -.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a { - border-top-color: #686868; -} - -.x-tree-node .x-tree-drag-append a span { - background-color: #DFDFDF; - border-color: #E4E4E4; -} - -.x-tree-drop-ok-append .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-add.gif"); -} - -.x-tree-drop-ok-above .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-over.gif"); -} - -.x-tree-drop-ok-below .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-under.gif"); -} - -.x-tree-drop-ok-between .x-dd-drop-icon { - background-image: url("../images/modx-theme/tree/drop-between.gif"); -} - -#modx-leftbar-header { - height: 57px; - display: flex; - align-items: center; - justify-content: left; - padding: 0.67rem 1rem; - box-sizing: border-box; - color: #53595F; -} -#modx-leftbar-header img { - max-width: 33%; - max-height: 100%; -} -#modx-leftbar-header a { - color: #53595F; - text-decoration: none; - font: normal 25px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-size: 16px; -} -#modx-leftbar-header a:hover, #modx-leftbar-header a:focus { - color: #234368; -} -#modx-leftbar-header a:after { - content: "\f06e"; - padding: 5px; - font-size: 14px; - opacity: 0.5; -} -#modx-leftbar-header img + a { - padding-left: 0.67rem; -} - -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip-wrap { - margin: 0; - padding: 0; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip { - display: flex; - width: 100%; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip li { - margin-left: 0; - float: none; - flex-grow: 1; - text-align: center; - box-sizing: border-box; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip li#modx-leftbar-tabpanel__modx-trash-link { - border-right: none; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip li:hover { - color: #234368; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip li.x-tab-strip-active { - background: #F1F1F1; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip li.x-tab-strip-active:after { - box-shadow: none; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip li.x-tab-strip-active:before { - background: transparent; -} -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip .x-clear, -#modx-leftbar-tabpanel .x-tab-panel-header .x-tab-strip .x-tab-edge { - display: none; -} - -#modx-leftbar-tabpanel__modx-trash-link .icon { - opacity: 0.5; -} -#modx-leftbar-tabpanel__modx-trash-link .icon:hover { - color: #CF1124; -} -#modx-leftbar-tabpanel__modx-trash-link.active .icon { - opacity: 1; -} - -.modx-browser-rte { - background: #FFF; -} - -.modx-browser-tree { - background: #FFF; - border-radius: 3px; -} -.x-window .modx-browser-tree, .modx-browser-rte .modx-browser-tree { - border-right: 1px solid #E4E4E4; - border-radius: 0; - box-shadow: none; -} - -.modx-browser-view-ct { - background: #FFF; - border-radius: 3px; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} -.x-window .modx-browser-view-ct, .modx-browser-rte .modx-browser-view-ct { - border-radius: 0; - box-shadow: none; -} - -.modx-browser-thumb-wrap { - float: left; - margin: 5px; - overflow: hidden; - cursor: pointer; - user-select: none; - text-align: center; -} -.modx-browser-thumb-wrap.x-view-over .modx-browser-placeholder { - color: #515151; -} -.modx-browser-thumb-wrap.x-view-over .modx-browser-thumb { - border: 1px dotted #515151; -} -.modx-browser-thumb-wrap.x-view-selected .modx-browser-placeholder { - color: #234368; -} -.modx-browser-thumb-wrap.x-view-selected .modx-browser-thumb { - border: 1px solid #234368; -} - -.modx-browser-thumb { - background: #FFF; - border: 1px solid #E4E4E4; - height: 100px; - line-height: 100px; - padding: 5px; - width: 100px; -} -.modx-browser-thumb img { - max-width: 100%; - vertical-align: middle; - background-color: #CCCCCC; - background-image: url("../images/modx-theme/transparency-pattern.png"); -} - -.modx-browser-placeholder { - font-size: 14px; - color: #DCDCDC; -} -.details .modx-browser-placeholder { - font-weight: bold; - display: flex; - align-items: center; - justify-content: center; - height: 100px; - width: 100%; - font-size: 24px; - overflow: hidden; -} - -.modx-browser-list-item { - padding: 0 5px 0 5px; -} -.modx-browser-list-item > span { - background-position: center left !important; - border-bottom: 1px solid #E4E4E4; - clear: both; - display: block; - min-height: 16px; - padding: 5px 0 5px 20px; - position: relative; -} -.modx-browser-list-item > span:before { - font-size: 14px; - position: absolute; - left: 2px; -} -.modx-browser-list-item > span span { - display: inline-block; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} -.modx-browser-list-item > span span.file-size { - float: right; - width: 13%; -} -.modx-browser-list-item > span span.image-size { - float: right; - width: 13%; -} -.modx-browser-list-item.x-view-over > span { - background: #FBFBFB; -} -.modx-browser-list-item.x-view-selected > span { - background: #FBFBFB; - color: #234368; -} - -.modx-browser-view-ct .loading-indicator { - background-position: left; - background-repeat: no-repeat; - font-size: 11px; - margin: 10px; - padding-left: 20px; -} - -.modx-browser-pathbbar { - /* yeah, don't blame me that the toolbar is a table */ -} -.modx-browser-pathbbar table, -.modx-browser-pathbbar tbody, -.modx-browser-pathbbar tr, -.modx-browser-pathbbar td { - display: block; -} -.modx-browser-pathbbar .x-toolbar-left .x-toolbar-left-row { - /* we need 4 classes to override the !important height of extjs default theme */ -} -.modx-browser-pathbbar .x-toolbar-left .x-toolbar-left-row td.x-toolbar-cell { - position: relative; -} -.modx-browser-pathbbar .x-toolbar-left .x-toolbar-left-row td.x-toolbar-cell:before { - content: "\f328"; - font-size: 14px; - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ - position: absolute; - top: 50%; - left: 0; - text-align: center; - width: 30px; -} -.modx-browser-pathbbar .x-toolbar-left .x-toolbar-left-row .modx-browser-filepath { - background: transparent; - box-sizing: border-box; - border-radius: 0; - border: 0; - border-top: 1px solid #E4E4E4; - margin: 0 !important; - padding-left: 30px; - /* for the icon */ - width: 100%; - height: 32px !important; -} - -.modx-browser-details-ct { - background: #FFF; - border-radius: 3px; -} -.x-window .modx-browser-details-ct, .modx-browser-rte .modx-browser-details-ct { - border-left: 1px solid #E4E4E4; - border-radius: 0; - box-shadow: none; -} - -.modx-browser-detail-thumb { - color: black; - cursor: default; - padding: 5px; - position: relative; -} -.modx-browser-detail-thumb.preview { - cursor: pointer; -} -.modx-browser-detail-thumb.preview:before { - content: "\f002"; - font-size: 56px; - margin-top: -28px; - /* half of the height to center vertically with top 50% */ - opacity: 0; - filter: alpha(opacity=0); - /* for IE <= 8 */ - position: absolute; - top: 50%; - left: 0; - text-align: center; - width: 100%; - text-shadow: 0 0 10px rgba(0, 0, 0, 0.2); - transition: opacity 0.25s; -} -.modx-browser-detail-thumb.preview:hover:before { - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ -} -.modx-browser-detail-thumb img { - display: block; - margin: 0 auto; - width: 100%; - max-width: 100%; - height: auto; - background-color: #CCCCCC; - background-image: url("../images/modx-theme/transparency-pattern.png"); -} - -.modx-browser-details-info { - border-top: 1px solid #E4E4E4; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - padding: 15px; - text-align: left; -} -.modx-browser-details-info b { - color: #53595F; - display: block; - margin-bottom: 2px; -} -.modx-browser-details-info span { - display: block; - margin-bottom: 10px; -} - -.modx-browser-fullview { - text-align: center; -} -.modx-browser-fullview img { - display: block; - margin: 0 auto; - width: 100%; - max-width: 100%; - height: auto; - background-color: #CCCCCC; - background-image: url("../images/modx-theme/transparency-pattern.png"); -} - -@media screen and (max-width: 960px) { - .modx-browser { - top: 15px !important; - max-height: 100% !important; - overflow-y: scroll; - } - - .modx-browser-panel { - width: 100% !important; - min-height: 700px; - margin: 15px 0 !important; - background-color: #FFF !important; - } - - .modx-browser-tree, .modx-browser-view-ct { - width: 35% !important; - max-width: 35% !important; - padding: 0 5px; - display: inline-block !important; - position: relative !important; - float: left; - left: 0 !important; - } - - .modx-browser-details-ct { - width: 20% !important; - max-width: 20% !important; - padding: 0 5px; - display: inline-block !important; - position: relative !important; - float: left; - left: 0 !important; - } - - .modx-browser-tree *, .modx-browser-view-ct *, .modx-browser-details-ct * { - font-size: 12px !important; - } - - .modx-browser-tree input, .modx-browser-view-ct input, .modx-browser-details-ct input { - padding: 5px !important; - } - - .modx-browser-tree .x-toolbar-ct tbody tr td { - display: table-cell; - } - - .modx-browser .x-panel-tbar-noheader, .modx-browser .x-toolbar, .modx-browser-view-ct .x-panel-tbar-noheader, .modx-browser-view-ct .x-panel-tbar, .modx-browser-view-ct .x-panel-tbar .x-toolbar, .modx-browser-view-ct .x-panel-body { - width: 100% !important; - } - - .modx-browser-view-ct .x-panel-tbar .x-toolbar-cell label { - line-height: 2.2; - } - - .modx-browser-thumb-wrap { - width: 24%; - margin: 5px; - padding: 5px; - } - - .modx-browser-thumb { - max-width: 100%; - height: 25px; - line-height: 25px; - overflow: hidden; - padding: 0; - } - - .modx-browser-thumb img { - max-width: 100%; - } - - .modx-browser-placeholder { - height: 50px; - } - - .modx-browser-details-info { - padding: 5px; - } -} -.x-window { - box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.2); - border-radius: 3px; - opacity: 0; - filter: alpha(opacity=0); - /* for IE <= 8 */ - overflow: visible; - /* prevent box-shadow from tabs and panel being cut off */ - -webkit-backface-visibility: hidden; - /* prevent flickering during animation */ - transition: opacity 0.25s ease-in-out, transform 0.25s ease-in-out; - transform: scale(1) translate3d(0, 0, 0); - /* the following 3 classes are responsible for the CSS3 window animations */ - /* Make sure MODx.msg windows are displayed in IE8 */ - /* the window header bar */ - /* styles for a collapsed window */ - /* the window content wrapper */ - /* .x-panel-bwrap */ - /* the window tab strip if available */ - /* the window form / content container */ - /* The window bottom container */ - /* the console window */ - /* message dialog windows */ -} -.x-window.anim-ready { - transform: scale(0.7) translate3d(0, 0, 0); -} -.x-window.zoom-in { - opacity: 1; - filter: alpha(opacity=100); - /* for IE <= 8 */ - transform: scale(1) translate3d(0, 0, 0); -} -.x-window.zoom-out { - transform: scale(1.3) translate3d(0, 0, 0); - opacity: 0; - filter: alpha(opacity=0); - /* for IE <= 8 */ -} -.ext-ie8 .x-window.x-window-dlg { - filter: alpha(opacity=100); - /* for IE <= 8 */ -} -.x-window .x-window-tl, -.x-window .x-window-tr { - padding: 0; -} -.x-window .x-window-tc { - z-index: 1; -} -.x-window .x-window-tc .x-window-header { - background-color: #F4F4F4; - border-bottom: 1px solid #F4F4F4; - border-radius: 3px 3px 0 0; - color: #515151; - font: normal 13px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; - padding: 8px; - text-align: center; -} -.x-window .x-window-tc .x-window-header-text { - padding-left: 24px; -} -.x-window.x-panel-collapsed .x-window-tl { - border-bottom: 1px solid #DCDCDC; -} -.x-window.x-panel-collapsed .x-window-header { - border-radius: 3px; -} -.x-window .x-window-bwrap { - overflow: visible; - /* prevent box-shadow from tabs and panel being cut off */ - /* the window main container */ -} -.x-window .x-window-bwrap .x-window-ml, -.x-window .x-window-bwrap .x-window-mr { - padding: 0; -} -.x-window .x-window-bwrap .x-window-mc { - border: 0; - padding: 0; -} -.x-window .x-window-bwrap .x-window-mc .x-panel-ml, -.x-window .x-window-bwrap .x-window-mc .x-panel-mr, -.x-window .x-window-bwrap .x-window-mc .x-panel-mc, -.x-window .x-window-bwrap .x-window-mc .x-panel-tl, -.x-window .x-window-bwrap .x-window-mc .x-panel-bl { - background: transparent; - border: 0; - padding: 0; -} -.x-window .x-window-body { - background-color: #FFF !important; - /* override extjs default theme transparent !important style from .x-window-plain */ - border: 0; - /* override extjs default theme border for .x-window-plain */ - overflow-y: auto; - padding: 15px; -} -.x-window.modx-window .x-window-body { - padding-top: 0; -} -.x-window.modx-window.modx-console .x-window-body, .x-window.modx-window.modx-alert .x-window-body, .x-window.modx-window.modx-confirm .x-window-body, .x-window.modx-window .x-window-with-tabs .x-window-body { - padding-top: 15px; -} -.x-window.modx-window .x-window-tc .x-window-header-text { - padding-left: 64px; -} -.x-window .x-panel-bwrap { - background: #FFF; - padding: 0; - /* inner panel body wraps */ -} -.x-window .x-panel-bwrap .x-panel-bwrap { - background: transparent; - box-shadow: none; - overflow: visible; - padding: 0; -} -.x-window .x-window-with-tabs .x-window-body { - background-color: #FBFBFB !important; - /* override !important rule from above */ - overflow: visible; - /* prevent box-shadow from tabs and panel being cut off */ -} -.x-window .x-window-with-tabs .x-panel-bwrap { - background: transparent; - box-shadow: none; - overflow: visible; - padding: 0; -} -.x-window form.x-panel-body:first-of-type { - overflow: visible !important; - /* prevent box-shadow from tabs and panel being cut off */ -} -.x-window .modx-tabs .x-tab-panel-header .x-tab-strip-wrap { - padding-top: 3px; - /* account for the 3px boxshadow for active tabs */ -} -.x-window .modx-tabs .x-tab-panel-header .x-tab-strip-wrap .x-tab-strip { - border: 0; - /* override extjs default theme of 1px solid white */ -} -.x-window .x-tab-panel-bwrap { - background: #FFF; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15); - padding: 10px; -} -.x-window .x-tab-panel-bwrap .x-tab-panel-body { - overflow-y: auto; - /* tabs stay, content scrolls, but only show when necessary */ -} -.x-window .x-tab-panel-bwrap .x-tab-panel-body .modx-panel .x-panel-bwrap { - padding: 0; -} -.x-window .x-window-bl, -.x-window .x-window-br { - padding: 0; -} -.x-window .x-window-bc .x-window-footer { - background-color: #FFF; - border-top: 1px solid #FFF; - border-radius: 0 0 3px 3px; - box-sizing: border-box; - /* don't count padding in width: 100%; */ - padding: 5px 15px 15px; - /* make sure the padding also stays when maximized */ - width: 100% !important; - /* override fixed width set by extjs */ -} -.x-window.x-window-maximized { - margin: 0; -} -.x-window.x-window-maximized .x-window-tc { - padding: 0; -} -.x-window.x-window-maximized .x-window-mc { - padding: 0; -} -.x-window.modx-console .modx-console-text { - background-color: #FFF; - border: none; - font: 12px SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - height: auto !important; - /* override extjs default theme */ -} -.x-window.modx-console .debug { - color: #515151; -} -.x-window.modx-console .success { - color: #6CB24A; -} -.x-window.modx-console .warn { - color: #4A90E2; -} -.x-window.modx-console .error { - color: #CF1124; -} -.x-window.x-window-plain .x-toolbar-left-row .x-toolbar-cell { - /* - Note that because the MessageBox class in Extjs 3 is a singleton, - it can not be extended or overriden and is very limited in its - configuration options. Thus the fragile method here of selecting - the button by dom position. Ext always outputs all 4 buttons into - the markup and just hides ones not in use for a particular window type. - For the time-being, the primary button will always be the - first ("ok") or second ("yes", typically our save button) index. - */ -} -/* .x-window */ -/* the progress bar (ex. saving a resource), usually in a window too */ -.x-progress-wrap { - width: 100% !important; - border: 1px solid #6CB24A; -} -.x-progress-wrap .x-progress-inner { - background-color: #fdfefd; -} -.x-progress-wrap .x-progress-bar { - background-color: #6CB24A; - border: 0; -} -.x-progress-wrap .x-progress-text { - color: #FFFFFF; - font-size: 11px; - font-weight: bold; -} -.x-progress-wrap .x-progress-text-back { - color: #515151; -} - -/* the window modal mask, but also the mask that covers a grid when reloading for example */ -.ext-el-mask { - background-color: #FFF; - opacity: 0; - filter: alpha(opacity=0); - /* for IE <= 8 */ - transition: opacity 0.25s; - /*z-index: 10;*/ - /* this is handeled by extjs and set to 9000 on show */ -} -.ext-el-mask.fade-in { - opacity: 0.5; - filter: alpha(opacity=50); - /* for IE <= 8 */ -} -.x-masked .ext-el-mask { - opacity: 0.5; - filter: alpha(opacity=50); - /* for IE <= 8 */ - z-index: 9; - /* extjs standard is 100, 10 prevents overlapping the topnav dropdowns */ -} - -.ext-mb-icon { - display: inline-block; - float: left; - position: relative; - width: 40px !important; - /* override extjs default theme style */ -} -.ext-mb-icon:before { - color: #4A90E2; - content: ""; - font-size: 32px; - position: absolute; - top: 50%; - transform: translateY(-50%); - /* center vertically with top 50% */ - right: 0; - text-align: left; - width: 100%; -} -.ext-mb-icon.ext-mb-info:before { - color: #4A90E2; - content: "\f05a"; -} -.ext-mb-icon.ext-mb-question:before { - color: #4A90E2; - content: "\f059"; -} -.ext-mb-icon.ext-mb-warning:before { - color: #F0B429; - content: "\f071"; -} -.ext-mb-icon.ext-mb-error:before { - color: #CF1124; - content: "\f057"; -} - -.ext-mb-content { - display: block; - margin-left: 0 !important; -} - -/* this is the little box showing if a grid is locked, refreshing etc. */ -.ext-el-mask-msg { - background-color: #FFF; - border: 1px solid #DCDCDC; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15); - border-radius: 3px; - padding: 5px; - z-index: 10; - /* the mask has 9, prevents overlapping the topnav dropdowns */ -} - -.ext-el-mask-msg div { - background-color: transparent; - border: 0; - color: #515151; - cursor: default; - /* no need to show a wait cursor here */ - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -.ext-el-mask-msg .modx-lockmask div { - color: #CF1124; -} - -/* the loading indicator when refreshing a grid or component */ -.x-mask-loading div { - background-image: url("../images/modx-theme/grid/loading.gif"); -} - -/* dashboard stuff */ -.dashboard { - display: flex; - flex-flow: row wrap; - margin: -0.5rem 0 0 -1rem !important; - padding: 0 15px; -} -.dashboard .dashboard-button { - padding: 5px 20px; - border-radius: 3px; - border: 1px solid transparent; - background: #FFF; - text-decoration: none; - display: inline-block; -} -.dashboard .dashboard-button-green { - background: #6CB24A; - color: #FFF; - border-color: #6CB24A; -} -.dashboard .dashboard-button[disabled] { - background-color: #E4E4E4; -} -.dashboard .dashboard-button:not([disabled]):hover { - border-color: #E4E4E4; -} -.dashboard .dashboard-block { - margin: 1rem 0 0 1rem; -} -.dashboard .dashboard-block:not(.headless) { - background-color: #FFF; - border-radius: 3px; -} -.dashboard .dashboard-block.headless .body { - padding: 0; - overflow: visible; - max-height: 100%; -} -.dashboard .dashboard-block.quarter { - width: calc(25% - 1rem); -} -.dashboard .dashboard-block.one-third { - width: calc(33.33332% - 1rem); -} -.dashboard .dashboard-block.half { - width: calc(50% - 1rem); -} -.dashboard .dashboard-block.two-thirds { - width: calc(66.66668% - 1rem); -} -.dashboard .dashboard-block.three-quarters { - width: calc(75% - 1rem); -} -.dashboard .dashboard-block.full { - width: calc(100% - 1rem); -} -.dashboard .dashboard-block.double { - width: calc(100% - 1rem); - min-height: 250px; - margin-top: 2rem; -} -.dashboard .dashboard-block.double .body { - max-height: 100%; - height: 100%; -} -.dashboard .dashboard-block.double .dashboard-buttons { - height: 100%; -} -.dashboard .dashboard-block.double .dashboard-button { - align-items: center; -} -.dashboard .dashboard-block h4 { - color: #515151; - font-size: 13px; - padding-bottom: 2px; -} -.dashboard .dashboard-block em { - font-style: italic; -} -.dashboard .dashboard-block strong { - font-weight: bold; -} -.dashboard .dashboard-block ul { - list-style: circle outside; - padding: 0 0 0 15px; -} -.dashboard .dashboard-block img { - max-width: 100%; -} -.dashboard .dashboard-block .draggable { - cursor: move; -} -.dashboard .dashboard-block .action-buttons { - margin-left: auto; - margin-right: 10px; -} -.dashboard .dashboard-block .action-buttons button { - border: none; - cursor: pointer; - opacity: 0; - background: transparent; -} -.dashboard .dashboard-block .action-buttons button.hidden { - display: none; -} -.dashboard .dashboard-block .body { - color: #444444; - font-size: 12px; - height: auto; - max-height: 300px; - overflow: auto; - padding: 10px; - position: relative; -} -.dashboard .dashboard-block .body .action-buttons { - position: absolute; - top: 20px; - right: -5px; -} -.dashboard .dashboard-block .title-wrapper { - border-bottom: 1px solid #F0F0F0; - display: flex; - flex-wrap: nowrap; - align-items: center; -} -.dashboard .dashboard-block .title-wrapper .title { - border-radius: 3px; - background: #FFF; - color: #515151; - font-size: 12px; - font-weight: bold; - margin: 0; - padding: 15px 10px; - zoom: 1; - flex-grow: 1; -} -.dashboard .dashboard-block .actions button { - width: 10px; - height: 10px; -} -.dashboard .dashboard-block:hover .action-buttons button { - opacity: 1; -} -.dashboard ul.configcheck { - list-style-type: none; - padding: 0; -} -.dashboard ul.configcheck li { - margin-bottom: 0.5em; - margin-top: 0.5em; - padding: 1em 1.618em; - background-color: #FBFBFB; -} -.dashboard ul.configcheck li h5 { - color: #CF1124; -} -.dashboard ul.configcheck li p { - color: #515151; -} -.dashboard .news_article { - overflow: hidden; - border-bottom: 1px solid #DFDFDF; - padding: 15px 0; -} -.dashboard .news_article h2 { - font-size: 18px; -} -.dashboard .news_article h2 a { - text-decoration: none; -} -.dashboard .news_article h2 { - font-size: 18px; -} -.dashboard .news_article .date_stamp { - float: right; - font-size: 12px; - font-style: italic; -} -.dashboard .configcheck a, .dashboard .news_article a { - text-decoration: underline; -} -.dashboard .configcheck a:hover, .dashboard .news_article a:hover { - text-decoration: none; -} -.dashboard .table-wrapper { - width: 100%; - overflow: auto; -} -.dashboard table { - width: 100%; - border: 1px solid #ddd; - border-radius: 5px; -} -.dashboard table th { - font-weight: bold; - text-align: initial; - padding: 10px; - border-bottom: 2px solid #F0F0F0; -} -.dashboard table td { - padding: 10px; - border-bottom: 1px solid #F0F0F0; - white-space: nowrap; - vertical-align: center; -} -.dashboard table td .unpublished { - font-style: italic; - color: #999999; -} -.dashboard table td .deleted { - color: rgba(175, 90, 98, 0.5) !important; - text-decoration: line-through; -} -.dashboard table tr:last-child td { - border: none; -} -.dashboard table tr:last-child td tr:last-child td { - border: none; -} -.dashboard table tr:last-child td tr:last-child td:first-child { - border-bottom-left-radius: 10px; -} -.dashboard table tr:last-child td tr:last-child td:last-child { - border-bottom-right-radius: 10px; -} -.dashboard .widget-footer { - padding-top: 10px; - border-top: 1px solid #F0F0F0; -} -.dashboard .widget-footer a { - display: block; - padding-bottom: 5px; - padding-top: 5px; - font-size: 14px; - text-decoration: none; - text-align: center; -} -.dashboard .widget-actions a { - display: inline-block; - padding: 3px 5px; - border: 1px solid #E4E4E4; - border-radius: 3px; - margin-left: 5px; - text-decoration: none; -} -.dashboard .widget-actions a:first-child { - margin-left: 0; -} -.dashboard .widget-actions a:hover { - background: #F0F0F0; -} -.dashboard .widget-actions a .icon { - width: 12px; - height: 12px; - text-align: center; - display: inline-block; -} -.dashboard .no-results { - padding: 10px; - text-align: center; - color: #999999; -} -.dashboard .user-with-avatar { - display: flex; - align-items: center; -} -.dashboard .user-with-avatar .user-avatar { - margin: 0 10px; -} -.dashboard .user-with-avatar .user-avatar img { - width: 35px; - border-radius: 50%; -} -.dashboard .user-with-avatar .user-name { - color: #234368; - font-weight: 500; -} -.dashboard .user-with-avatar .user-group { - color: #999999; -} -.dashboard .resource .title { - color: #234368; - font-weight: 500; -} -.dashboard .occurred-date { - color: #234368; - font-weight: 500; -} -.dashboard .occurred-time { - color: #999999; -} - -#modx-news-feed-container img { - max-width: 100%; -} - -.dashboard-buttons { - display: flex; - flex-wrap: wrap; - justify-content: center; - width: calc(100% + 1rem); - margin: -1rem 0 0 -1rem; -} -.dashboard-buttons .dashboard-button { - display: flex; - align-items: center; - background-color: #FFF; - border-radius: 3px; - margin: 1rem 0 0 1rem; - padding: 20px; - text-decoration: none; - color: #53595F; - flex: 1; -} -.dashboard-buttons .dashboard-button:hover { - color: black; -} -.dashboard-buttons .dashboard-button:hover .icon { - opacity: 0.7; -} -.dashboard-buttons .dashboard-button-icon { - border-radius: 20px; - border: 1px solid #6CB24A; - background: rgba(108, 178, 74, 0.2); - padding: 10px; - text-align: center; -} -.dashboard-buttons .dashboard-button-icon .icon { - font-weight: bold; - display: block; - color: #6CB24A; - font-size: 16px; - width: 16px; - height: 16px; - text-align: center; -} -.dashboard-buttons .dashboard-button-wrapper { - padding: 0 10px; -} -.dashboard-buttons .dashboard-button-title { - font-weight: bold; -} - -::-webkit-scrollbar, -::-webkit-scrollbar-thumb { - width: 1rem; - height: 1rem; - border: 0.25rem solid transparent; - border-radius: 0.5rem; - background-color: transparent; -} - -::-webkit-scrollbar-thumb { - box-shadow: inset 0 0 0 1rem rgba(85, 108, 136, 0.1); -} - -::-webkit-scrollbar-thumb:hover { - box-shadow: inset 0 0 0 1rem rgba(85, 108, 136, 0.2); -} - -::-webkit-resizer, -::-webkit-scrollbar-corner { - background-color: transparent; -} - -.updates-widget .updates-title { - font-weight: 500; - color: #234368; -} -.updates-widget .updates-updateable { - display: inline-block; - background: #4A90E2; - color: #FFF; - border-radius: 20px; - padding: 2px 8px; - font-weight: bold; -} -.updates-widget .updates-ok, -.updates-widget .updates-available { - padding: 3px 8px; - color: #FFF; - border-radius: 3px; - text-transform: uppercase; - font-size: 10px; -} -.updates-widget .updates-ok { - background: #6CB24A; -} -.updates-widget .updates-available { - background: #CF1124; -} - -#modx-panel-system-info .x-form-label-left .x-form-item { - padding: 0 5px; -} -#modx-panel-system-info .x-form-label-left .x-form-item:nth-child(2n) { - background: #F0F0F0; -} -#modx-panel-system-info .x-form-label-left .x-form-item .x-form-display-field { - padding: 7px 0; -} - -@media screen and (max-width: 960px) { - .dashboard-buttons .dashboard-button { - flex-wrap: wrap; - flex-direction: column; - text-align: center; - align-items: center; - } - .dashboard-buttons .dashboard-button-wrapper { - margin-left: 0; - margin-top: 5px; - } -} -@media screen and (max-width: 960px) { - .dashboard .dashboard-block.quarter, .dashboard .dashboard-block.one-third, .dashboard .dashboard-block.half, .dashboard .dashboard-block.two-thirds { - width: calc(100% - 1rem); - } - - .dashboard-buttons { - flex-wrap: wrap; - } - .dashboard-buttons .dashboard-button { - padding: 10px; - } - .dashboard-buttons .dashboard-button-wrapper { - display: none; - } -} -.nobg .x-panel-body { - background: transparent; - padding-right: 1.5em; -} - -/* Thanks to Christian Seel for these! http://chsmedien.com/blog/2013/02/customize-your-modx-dashboard */ -#managerbuttons { - margin-bottom: 1em; - overflow: hidden; - width: 100%; -} - -#managerbuttons ul:before, -#managerbuttons ul:after { - content: " "; - display: table; -} - -#managerbuttons ul:after { - clear: both; -} - -#managerbuttons ul { - /* clearfix */ - *zoom: 1; - margin: 0; - width: 100%; -} - -#managerbuttons ul li { - display: table; - float: left; - margin: 0; - padding: 0 1%; - position: relative; - width: 20%; - box-sizing: border-box; -} -#managerbuttons ul li:first-child { - padding-left: 0%; -} -#managerbuttons ul li:last-child { - padding-right: 0%; -} - -#managerbuttons ul li a { - background-color: #FFF; - border-radius: 3px; - border: 1px solid #E4E4E4; - box-shadow: 0 1px 0 #E4E4E4; - color: #53595F; - display: table-cell; - /* MODX 2.x.x Manager Button Styles */ - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-weight: bold; - padding: 12px; - position: relative; - text-align: center; - text-decoration: none; - vertical-align: middle; -} - -#managerbuttons ul li a span { - display: block; - line-height: 1.4; -} - -#managerbuttons ul li a span.headline { - font-size: 12px; -} - -#managerbuttons ul li a span.subline { - font-weight: normal; -} - -#managerbuttons ul li a span.icon { - display: block; - margin: 0 auto; - padding: 0 0 10px; - width: auto; -} - -#managerbuttons ul li a:hover span.icon { - color: #234368; -} - -#helpBanner, -#contactus { - box-sizing: border-box; - background: #FFF; - border: 1px solid #E4E4E4; - box-shadow: 0 1px 0 #E4E4E4; - margin: 0.75em 0 1.75em; - padding: 18px; - width: 100%; -} -#helpBanner h3, -#contactus h3 { - margin: 0 0 1em; -} - -#helpBanner { - margin-top: 1.5em; - min-height: 112px; - background-image: url("../images/modx-logo-color.svg"), none; - background-repeat: no-repeat; - background-attachment: none; - background-position: 97% center; - background-size: 200px; -} -#helpBanner #helpLogo { - float: right; - height: 76px; - margin-right: 1em; - width: 200px; -} - -#contactus { - box-sizing: border-box; - float: left; - width: 60%; -} -#contactus form { - display: inline; -} -#contactus input[type=email] { - box-sizing: border-box; - font-size: 1.1em; - margin-right: 4px; - padding: 0.4em; - width: 70%; -} -#contactus input[type=submit] { - border: 0; - cursor: pointer; - font-size: 1.1em; - padding: 6px 10px; -} -#contactus p { - color: #132539; - margin: 1em 0; -} -#contactus form + p { - margin: 2em 0 0; -} - -#contactus a { - color: black; - text-decoration: none; -} -#contactus a:hover { - text-decoration: underline; -} -#contactus a:hover i { - text-decoration: none; -} -#contactus a i { - margin: 0 15px -6px 0; -} - -#mcsignup input.x-btn { - padding: 10px 15px; -} - -.icon.icon-2x { - width: 22px; - text-align: center; - vertical-align: text-bottom; -} - -#aboutMODX { - box-sizing: border-box; - background: #F0F0F0; - float: left; - margin: 1em 0 0 2%; - min-height: 300px; - padding: 1em; - width: 38%; -} -#aboutMODX p { - line-height: 1.6; - margin: 0 0 1em; -} -#aboutMODX a { - color: #234368; - margin: -2px -4px; - padding: 2px 4px; -} -#aboutMODX a:hover { - background-color: #234368; - color: #FFF; - text-decoration: none; -} - -.trashrow { - background-color: #CCCCCC !important; -} - -.x-btn-purge-all { - color: #CF1124; -} -.x-btn-purge-all:hover { - background: #CF1124; - box-shadow: 0 0 0 1px #CF1124; - color: #FFF; -} - -.x-btn-restore-all { - color: #6CB24A; -} -.x-btn-restore-all:hover { - background: #6CB24A; - box-shadow: 0 0 0 1px #6CB24A; - color: #FFF; -} - -#changelog-tab p { - margin-bottom: 0.3rem; -} -#changelog-tab h1 { - color: #595959; -} -#changelog-tab h2 { - margin-top: 1rem; - font-weight: 700; -} -#changelog-tab ul { - margin-bottom: 1rem; -} - -#modx-package-browser-details-main p { - margin-bottom: 0.3rem; - color: #595959; -} -#modx-package-browser-details-main h1, -#modx-package-browser-details-main h2, -#modx-package-browser-details-main h3, -#modx-package-browser-details-main h4, -#modx-package-browser-details-main h5, -#modx-package-browser-details-main h6 { - font-weight: 700; - color: #595959; -} -#modx-package-browser-details-main h1 { - font-size: 1.2em; -} -#modx-package-browser-details-main h2 { - font-size: 1.15em; -} -#modx-package-browser-details-main h3 { - font-size: 1.1em; -} -#modx-package-browser-details-main h4 { - font-size: 1.05em; -} -#modx-package-browser-details-main h5 { - font-size: 1em; -} -#modx-package-browser-details-main h6 { - font-size: 0.95em; -} - -#modx-package-browser-details-aside h4 { - text-align: center; -} -#modx-package-browser-details-aside ul li { - margin-bottom: 0.5em; -} - -body { - color: black; - font: normal 13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - -webkit-font-smoothing: antialiased; -} -body a { - color: #234368; -} -body a:hover { - color: #162a42; -} - -/* TODO: conver font heirarchy into a vertical rhythm formula */ -h2, -h3 { - color: #515151; - font: normal 25px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - margin: 0 0 8px -1px; - /* align main titles with treetabs and left panel edge */ -} - -h3 { - font: 550 15px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -hr { - background-color: #E4E4E4; - border: 0; - color: #E4E4E4; - height: 1px; - margin: 20px 0; -} - -.aleft { - text-align: left; -} - -.aright { - text-align: right; -} - -.right { - float: right; -} - -.left { - float: left; -} - -.clear { - clear: left; -} - -.bold { - font-weight: bold; -} - -.installed { - color: #515151; -} - -.not-installed { - color: #999999; - font-style: italic; -} - -.yellow { - color: #FCE588 !important; -} - -.orange { - color: #F0B429 !important; -} - -.red, -.error { - color: #CF1124 !important; -} - -.green { - color: #6CB24A !important; -} - -.blue { - color: #4A90E2 !important; -} - -.primary { - color: #6CB24A !important; -} - -.centered { - text-align: center; -} - -.wait { - background: transparent url("../images/style/wait.gif") no-repeat scroll center 55px; - color: #53595F; - font-size: 15px; - font-weight: bold; - padding: 20px 10px 60px; -} - -.padding { - background-color: #FFF; - padding: 11px; -} - -.dashed { - border-bottom: 1px #90b1b9 dashed; -} - -.x-form-text, -textarea.x-form-field { - border-color: #E4E4E4; -} - -/* panel setups */ -#modx-leftbar, -#modx-content { - transition: left 0.2s ease; - position: absolute; -} - -#modx-leftbar-tabpanel { - transition: all 0.6s ease; -} - -#modx-content { - width: calc(100% - 370px); - right: 0; - left: 370px; - /* give #modx-content an initial left value to prevent the panel from jumping around */ -} - -.modx-form p { - padding-bottom: 10px; -} - -.x-layout-mini { - left: 2px; -} - -#modx-resource-content .x-panel-header { - margin: 0; - padding: 15px; -} -#modx-resource-content .x-panel-bwrap { - border: 0; -} -#modx-resource-content .modx-tv .modx-tv-label { - width: auto; - float: none; - clear: none; - padding: 15px 0 4px; - position: static; -} - -#modx-content-above .x-panel-bwrap, -#modx-content-below .x-panel-bwrap { - border: 0; -} - -.x-tab-panel-header { - box-sizing: border-box; -} -.x-tab-panel-header .x-tab-strip li { - box-sizing: border-box; -} - -@media screen and (max-width: 960px) { - .x-viewport { - overflow-y: auto; - } -} -@media screen and (max-width: 960px) { - .x-viewport body { - height: auto; - } -} - -#modx-container { - height: 100%; - width: 100%; - background: #F1F1F1; -} -@media screen and (max-width: 960px) { - #modx-container { - height: auto; - } -} - -@media screen and (max-width: 1140px) { - #modx-resource-main-left, -#modx-resource-main-right, -#modx-page-settings-left, -#modx-page-settings-right { - box-sizing: border-box; - width: 100% !important; - margin: 0 auto 15px; - } - #modx-resource-main-left .x-panel-body, -#modx-resource-main-right .x-panel-body, -#modx-page-settings-left .x-panel-body, -#modx-page-settings-right .x-panel-body { - height: auto !important; - max-height: 100% !important; - width: auto !important; - max-width: 100% !important; - } -} - -@media screen and (max-width: 960px) { - #modx-template-form .main-wrapper, -#modx-chunk-form .main-wrapper, -#modx-tv-tabs .main-wrapper, -#modx-snippet-form .main-wrapper, -#modx-panel-plugin .main-wrapper { - width: 100% !important; - padding: 0; - } - #modx-template-form .main-wrapper > .x-panel-bwrap, -#modx-chunk-form .main-wrapper > .x-panel-bwrap, -#modx-tv-tabs .main-wrapper > .x-panel-bwrap, -#modx-snippet-form .main-wrapper > .x-panel-bwrap, -#modx-panel-plugin .main-wrapper > .x-panel-bwrap { - padding: 1em; - } -} - -@media screen and (max-width: 960px) { - #modx-resource-main-right { - margin: 15px auto 0; - } -} - -@media screen and (max-width: 960px) { - .x-toolbar-ct { - display: block; - } - .x-toolbar-ct tbody { - display: block; - } - .x-toolbar-ct tbody tr { - display: block; - } - .x-toolbar-ct tbody tr td { - display: block; - width: 100%; - } - .x-toolbar-ct tbody tr td table { - width: 100%; - } - .x-toolbar-ct tbody tr td table .x-form-field-wrap { - width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - } - .x-toolbar-ct tbody tr td table .x-btn, -.x-toolbar-ct tbody tr td table .x-form-text { - width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - box-sizing: border-box; - } - - .x-column { - width: 100% !important; - margin-left: 0 !important; - margin-right: 0 !important; - float: none; - } -} -@media screen and (max-width: 960px) { - #modx-tree-panel-usergroup .main-wrapper { - width: 100% !important; - max-width: 100%; - position: relative; - display: inline-block; - float: left; - } -} - -@media screen and (max-width: 960px) { - .x-window { - width: auto !important; - max-width: 100% !important; - left: 0.5em !important; - right: 0.5em !important; - } - .x-window .x-window-body { - width: 100% !important; - height: auto !important; - box-sizing: border-box !important; - } - .x-window .x-form-field-wrap { - width: auto !important; - } - .x-window input { - width: 100% !important; - box-sizing: border-box; - height: auto !important; - } -} - -#modx-template-form .main-wrapper input { - max-width: 100% !important; -} - -@media screen and (max-width: 960px) { - .x-column-inner > .x-column ~ .x-column { - margin-left: 0; - } -} - -@media screen and (max-width: 960px) { - .x-form-item label.x-form-item-label[for=modx-import-base-path], -.x-form-item label.x-form-item-label[for=modx-import-resource-class], -.x-form-item label.x-form-item-label[for=modx-import-element], -.x-form-item label.x-form-item-label[for=modx-import-parent], -.x-form-item label.x-form-item-label[for=modx-import-allowed-extensions], -#modx-import-base-path { - width: auto !important; - float: none; - } -} - -#modx-import-base-path, -#modx-import-resource-class, -#modx-import-allowed-extensions, -#modx-import-element { - height: auto; - width: 100% !important; - box-sizing: border-box; -} - -@media screen and (max-width: 960px) { - #x-form-el-modx-import-base-path, -#x-form-el-modx-import-resource-class, -#x-form-el-modx-import-allowed-extensions, -#x-form-el-modx-import-element { - width: 100% !important; - padding-left: 0 !important; - } -} - -.x-panel.drag-n-drop { - z-index: 0; -} -.x-panel.drag-n-drop:before { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - display: block; - content: " "; - background: transparent url("../images/restyle/dragndrop.svg") no-repeat center; - background-size: 50% 50%; - opacity: 0.1; - z-index: -5; -} -.x-panel.drag-n-drop > .x-panel-bwrap { - background: transparent; -} -.x-panel.drag-over .x-form-field { - background: transparent; -} -.x-panel.drag-over:after { - content: ""; - top: 0; - right: 0; - bottom: 0; - left: 0; - position: absolute; - display: block; - opacity: 0.1; - background: #6CB24A; - border: 5px solid #6CB24A; -} - -#modx-panel-packages.drag-n-drop:before { - background: transparent url("../images/restyle/dragndrop.svg") no-repeat top; - background-size: 50% 30%; - z-index: 0; -} - -.x-panel-header { - background: none; - border: none; - font-size: 16px; - margin: 0 0 0 0; - padding: 0 0 10px 0; -} -#modx-resource-tabs .x-panel-header { - display: flex; - color: #515151; - margin-bottom: 5px; - border-bottom: 1px solid #E4E4E4; -} -#modx-resource-tabs .x-panel-header .x-panel-header-text { - order: 0; - font-size: 14px; - flex: 1; -} -#modx-resource-tabs .x-panel-header .x-tool.x-tool-toggle { - order: 1; - margin-left: auto; -} -#modx-resource-main-left .x-panel-header { - border-bottom: 0; - right: 15px; - position: absolute; - z-index: 9; -} -#modx-resource-main-left .x-panel-header .x-panel-header-text { - display: none; -} -#modx-resource-main-left .x-panel-collapsed .x-panel-header, #modx-resource-main-left .x-panel-animated .x-panel-header { - position: relative; - padding-top: 15px !important; - width: 100%; - right: 0; -} -#modx-resource-main-left .x-panel-collapsed .x-panel-header .x-panel-header-text, #modx-resource-main-left .x-panel-animated .x-panel-header .x-panel-header-text { - display: block; -} - -#modx-resource-tabs .x-panel-collapsed .x-panel-header { - margin-bottom: 0; - padding: 0; - border-color: transparent; -} - -/* grids */ -.modx-protected-row .x-grid3-cell-inner { - font-style: italic; - color: #234368; -} - -.x-small-editor .x-form-field { - font-size: 12px !important; -} - -.x-small-editor .x-form-num-field { - text-align: left; -} - -.grid-row-inactive { - color: #999 !important; -} - -.x-grid-link { - color: #234368; - text-decoration: none; - border-bottom: 1px dotted #749fd0; -} -.x-grid-link:hover { - color: black; - border-bottom-color: #336299; -} -.x-grid-link.simulated-link { - cursor: pointer; -} - -.x-editable-column { - cursor: default; -} -.x-editable-column:not(.editor-disabled) { - cursor: pointer; -} -.x-editable-column:not(.editor-disabled):hover, .x-editable-column:not(.editor-disabled):focus { - color: #234368; -} -.x-editable-column:not(.editor-disabled):hover > div::after, .x-editable-column:not(.editor-disabled):focus > div::after { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - font-family: "Font Awesome 5 Free", "Font Awesome 5 Brands"; - font-weight: 900; - content: "\f304"; - margin: 0 0.5em; - color: #234368; -} - -.x-grid-buttons { - text-align: center; -} - -.x-grid-buttons li { - cursor: pointer; - display: inline-block; - font-size: 1.1em; - line-height: 0.7; - margin-right: 10px; -} - -.x-grid-buttons li:last-child { - margin-right: 0; -} - -/* panel stylings */ -.modx-page-header, -.modx-page-header div { - background-color: transparent !important; -} -#modx-panel-welcome .modx-page-header, #modx-panel-trash .modx-page-header, -#modx-panel-welcome .modx-page-header div, -#modx-panel-trash .modx-page-header div { - margin: 1rem !important; -} - -@media screen and (min-width: 961px) { - #modx-content > .x-panel-bwrap > .x-panel-body .modx-page-header { - margin-top: 1.25rem; - box-sizing: border-box; - } - html[dir=rtl] #modx-content > .x-panel-bwrap > .x-panel-body .modx-page-header { - margin-top: 4rem; - } - #modx-content > .x-panel-bwrap > .x-panel-body .modx-page-header + div { - margin: 1rem; - } - - #modx-content > .x-panel-bwrap > .x-panel-body > .x-panel { - margin: 0; - } - #modx-content > .x-panel-bwrap > .x-panel-body > .x-panel .modx-header-breadcrumbs { - margin-top: 1.25rem; - font-weight: bold; - box-sizing: border-box; - padding: 0 15px; - font-size: 18px; - } - html[dir=rtl] #modx-content > .x-panel-bwrap > .x-panel-body > .x-panel .modx-header-breadcrumbs { - margin-top: 4rem; - } - #modx-content > .x-panel-bwrap > .x-panel-body > .x-panel .modx-header-breadcrumbs + div { - margin: 1rem; - } - #modx-content > .x-panel-bwrap > .x-panel-body > .x-panel .modx-header-breadcrumbs { - width: 100% !important; - } -} -#modx-content form.x-panel-body { - background-color: transparent !important; -} - -/* Error container */ -@media screen and (max-width: 960px) { - #modx-content { - position: relative; - width: auto !important; - top: auto !important; - left: auto !important; - } -} -#modx-content .modx_error { - width: 95%; - margin: 26px 0 0 15px; -} -#modx-content .modx_error h2 { - margin: 0 0 14px 0; -} -#modx-content .modx_error .error_container { - padding: 10px; - border: 2px solid #CF1124; - background: #f99; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} -#modx-content .modx_error .error_container ul { - list-style: none; - margin-top: 6px; - margin-left: 0; -} -#modx-content .modx_error .error_container ul li { - margin-bottom: 6px; -} -#modx-content .modx_error .error_container ul li:last-child { - margin-bottom: 0; -} -#modx-content .modx_error .error_container.multiple p:first-child { - font-size: 1.4em; - font-weight: bold; -} -@media screen and (max-width: 960px) { - #modx-content .x-panel-body { - height: auto !important; - max-height: 100% !important; - width: auto !important; - max-width: 100% !important; - } -} - -/* TODO: remove it */ -#modx-mainpanel { - height: 100%; - position: relative; -} - -/* portlets */ -.x-portal .x-panel-dd-spacer { - margin-bottom: 10px; -} - -.x-portlet { - margin-bottom: 10px; -} - -.x-portlet .x-panel-ml { - padding-left: 2px; -} - -.x-portlet .x-panel-mr { - padding-right: 2px; -} - -.x-portlet .x-panel-bl { - padding-left: 2px; -} - -.x-portlet .x-panel-br { - padding-right: 2px; -} - -.x-portlet .x-panel-body { - background: #FFF; -} - -.x-portlet .x-panel-mc { - padding-top: 2px; -} - -.x-portlet .x-panel-bc .x-panel-footer { - padding-bottom: 2px; -} - -.x-portlet .x-panel-nofooter .x-panel-bc { - height: 2px; -} - -.x-portal-space h2 { - border-bottom: 1px solid #d4d4d4; - margin: 0 0 8px; - padding: 0 0 2px; -} - -/* column tree */ -.x-column-tree .x-panel-header { - border-bottom-width: 0; - padding: 3px 0 0 0; -} - -.x-column-tree .x-panel-header .x-panel-header-text { - margin-left: 3px; -} - -.x-column-tree .x-tree-node { - zoom: 1; -} - -.x-column-tree .x-tree-node-el { - zoom: 1; -} - -.x-column-tree .x-tree-selected { - background: #d9e8fb; -} - -.x-column-tree .x-tree-node a { - line-height: 18px; - vertical-align: middle; -} - -.x-column-tree .x-tree-node .x-tree-selected a span { - background: transparent; - color: #515151; -} - -.x-tree-col { - float: left; - overflow: hidden; - padding: 0 1px; - zoom: 1; -} - -.x-tree-col-text, -.x-tree-hd-text { - color: #515151; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - overflow: hidden; - padding: 3px 3px 3px 5px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.x-tree-headers { - cursor: default; - margin-top: 3px; - zoom: 1; -} - -.x-tree-hd { - border-left: 1px solid #EEEEEE; - border-right: 1px solid #d0d0d0; - float: left; - overflow: hidden; -} - -/* rowactions */ -.x-grid3-row.disable-selection .x-grid3-row-checker, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker { - position: relative; -} -.x-grid3-row.disable-selection .x-grid3-row-checker::before, .x-grid3-row.disable-selection .x-grid3-row-checker::after, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::before, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::after { - color: #aaaaaa; -} -.x-grid3-row.disable-selection .x-grid3-row-checker::before, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::before { - content: "\f0c8"; -} -.x-grid3-row.disable-selection .x-grid3-row-checker::after, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker::after { - content: "\f715"; - font-size: 6px; - position: absolute; - left: 50%; - top: 50%; - margin-left: 2px; - margin-top: 1px; - transform: translate(-50%, -50%) rotate(98deg); - font-weight: 600; - font-family: "Font Awesome 5 Free"; -} -.x-grid3-row.disable-selection .x-grid3-row-checker:hover, .x-grid3-row.disable-selection.x-grid3-row-selected .x-grid3-row-checker:hover { - cursor: default; -} - -.ux-row-action-cell .x-grid3-cell-inner { - padding: 1px 0 0 0; -} - -.ext-ie .ux-row-action-item { - width: 16px; -} - -.ext-ie .ux-row-action-text { - width: auto; -} - -.ux-row-action-item span { - background: transparent url("../images/style/go-next.png") no-repeat scroll 1px 4px; - display: inline !important; - line-height: 24px; - margin: 0 5px; - padding: 5px 5px 5px 22px; - vertical-align: middle; -} - -.icon-uninstall span { - background: url("../images/style/delete.png") no-repeat scroll 1px 4px transparent; -} - -.package-details span { - background: url("../images/style/info.png") no-repeat scroll 1px 4px transparent; -} - -.package-download span { - background: url("../images/style/download.png") no-repeat scroll 1px 4px transparent; -} - -.package-installed span { - background: url("../images/style/accept.png") no-repeat scroll 1px 4px transparent; -} - -.ext-ie .ux-row-action-item span { - width: auto; -} - -.x-grid-group-hd div { - height: 16px; - position: relative; -} - -.ux-grow-action-item { - background-position: 0 50% !important; - background-repeat: no-repeat; - cursor: pointer; - float: left; - margin: 0; - min-width: 16px; - padding: 0 !important; -} - -.ext-ie .ux-grow-action-item { - width: 16px; -} - -.ux-action-right { - float: right; - margin: 0 3px 0 2px; - padding: 0 !important; -} - -.ux-grow-action-text { - background: transparent none !important; - float: left; - margin: 0 !important; - padding: 0 !important; -} - -.ux-row-action-item:hover { - background: #DFDFDF; - background: -moz-linear-gradient(center bottom, #DFDFDF 0%, #FFF 100%) repeat scroll 0 0 transparent; - background: -ms-linear-gradient(center bottom, #DFDFDF 0%, #FFF 100%); - background: -o-linear-gradient(center bottom, #DFDFDF 0%, #FFF 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FFF), color-stop(100%, #DFDFDF)); - background: -webkit-linear-gradient(center bottom, #DFDFDF 0%, #FFF 100%); - background: linear-gradient(center bottom, #DFDFDF 0%, #FFF 100%); - border: 1px solid #9caf78; - color: #636f4c !important; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=$white, endColorstr=$alto, GradientType=0); -} - -.ux-row-action-item:active { - background-color: #FFF; - background-image: none; - border-color: #cfcfcf #c0c0c0 #aaaaaa; - box-shadow: 0 0 3px #aaaaaa inset; - margin: 2px 1px 0; -} - -.ux-row-action-item:active span { - text-shadow: none; -} - -.ux-row-action-item { - background: -moz-linear-gradient(center bottom, gainsboro 0%, #fcfcfc 100%) repeat scroll 0 0 transparent; - background: -ms-linear-gradient(center bottom, gainsboro 0%, #fcfcfc 100%); - background: -o-linear-gradient(center bottom, gainsboro 0%, #fcfcfc 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fcfcfc), color-stop(100%, gainsboro)); - background: -webkit-linear-gradient(center bottom, gainsboro 0%, #fcfcfc 100%); - background: linear-gradient(center bottom, gainsboro 0%, #fcfcfc 100%); - background: url("/manager/templates/default/images/modx-theme/form/button-bg.png") repeat-x scroll 0 bottom gainsboro; - border-collapse: separate; - border-color: #cacaca #c0c0c0 #aaa; - border-radius: 3px; - border-style: solid; - border-width: 1px; - box-shadow: rgba(0, 0, 0, 0.2) 0 0 1px; - color: #444444; - cursor: pointer; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcfcfc, endColorstr=#dcdcdc, GradientType=0); - float: left; - font-weight: bold; - margin: 2px 1px 0; - overflow: hidden; - padding: 3px; - position: relative; - text-shadow: 0 1px 0 #FAFAFA; -} - -/* checkbox tree */ -.x-tree-checkbox { - background: url(../../../assets/ext3/resources/images/default/form/checkbox.gif) no-repeat 0 0; - height: 13px; - margin: 0 1px; - vertical-align: middle; - width: 13px; -} - -.x-tree-checkbox-over .x-tree-checkbox { - background-position: -13px 0; -} - -.x-tree-checkbox-down .x-tree-checkbox { - background-position: -26px 0; -} - -.x-tree-node-disabled .x-tree-checkbox { - background-position: -39px 0; -} - -.x-tree-node-checked { - background-position: 0 -13px; -} - -.x-tree-checkbox-over .x-tree-node-checked { - background-position: -13px -13px; -} - -.x-tree-checkbox-down .x-tree-node-checked { - background-position: -26px -13px; -} - -.x-tree-node-disabled .x-tree-node-checked { - background-position: -39px -13px; -} - -.x-tree-node-grayed { - background-position: 0 -26px; -} - -.x-tree-checkbox-over .x-tree-node-grayed { - background-position: -13px -26px; -} - -.x-tree-checkbox-down .x-tree-node-grayed { - background-position: -26px -26px; -} - -.x-tree-node-disabled .x-tree-node-grayed { - background-position: -39px -26px; -} - -.x-tree-branch-unchecked .x-tree-checkbox, -.x-tree-branch-unchecked .x-tree-node-checked, -.x-tree-branch-unchecked .x-tree-node-grayed { - background-position: 0 0; -} - -.x-tree-branch-unchecked .x-tree-checkbox-over .x-tree-checkbox, -.x-tree-branch-unchecked .x-tree-checkbox-over .x-tree-node-checked, -.x-tree-branch-unchecked .x-tree-checkbox-over .x-tree-node-grayed { - background-position: -13px 0; -} - -.x-tree-branch-unchecked .x-tree-checkbox-down .x-tree-checkbox, -.x-tree-branch-unchecked .x-tree-checkbox-down .x-tree-node-checked, -.x-tree-branch-unchecked .x-tree-checkbox-down .x-tree-node-grayed { - background-position: -26px 0; -} - -.x-tree-branch-unchecked .x-tree-node-disabled .x-tree-checkbox, -.x-tree-branch-unchecked .x-tree-node-disabled .x-tree-node-checked, -.x-tree-branch-unchecked .x-tree-node-disabled .x-tree-node-grayed { - background-position: -39px 0; -} - -.x-tree-branch-checked .x-tree-checkbox, -.x-tree-branch-checked .x-tree-node-checked, -.x-tree-branch-checked .x-tree-node-grayed { - background-position: 0 -13px; -} - -.x-tree-branch-checked .x-tree-checkbox-over .x-tree-checkbox, -.x-tree-branch-checked .x-tree-checkbox-over .x-tree-node-checked, -.x-tree-branch-checked .x-tree-checkbox-over .x-tree-node-grayed { - background-position: -13px -13px; -} - -.x-tree-branch-checked .x-tree-checkbox-down .x-tree-checkbox, -.x-tree-branch-checked .x-tree-checkbox-down .x-tree-node-checked, -.x-tree-branch-checked .x-tree-checkbox-down .x-tree-node-grayed { - background-position: -26px -13px; -} - -.x-tree-branch-checked .x-tree-node-disabled .x-tree-checkbox, -.x-tree-branch-checked .x-tree-node-disabled .x-tree-node-checked, -.x-tree-branch-checked .x-tree-node-disabled .x-tree-node-grayed { - background-position: -39px -13px; -} - -/* switchbutton */ -.x-rbtn button { - -moz-outline: 0 none; - background-color: transparent; - background-position: center; - background-repeat: no-repeat; - border: 0 none; - cursor: pointer; - font-size: 1px; - height: 16px; - line-height: 1px; - margin: 0; - outline: 0 none; - padding: 0; - width: 24px; -} - -.x-rbtn { - table-layout: fixed; -} - -.x-rbtn td { - background-image: url("../images/restyle/icons/rbtn.gif"); - background-repeat: no-repeat; - border: 0 none; - height: 21px; - padding: 0; - vertical-align: middle; - width: 24px; -} - -.x-rbtn td.x-rbtn-first { - background-position: 0 0; -} - -.x-rbtn td.x-rbtn-item { - background-position: 0 -42px; -} - -.x-rbtn td.x-rbtn-last { - background-position: right -21px; -} - -.x-rbtn td.x-rbtn-first-active { - background-position: 0 -63px; -} - -.x-rbtn td.x-rbtn-item-active { - background-position: 0 -105px; -} - -.x-rbtn td.x-rbtn-last-active { - background-position: right -84px; -} - -/* filetree */ -/*.icon-ob{background-image:url(../../../assets/modext/util/filetree/img/icons/ob_16.png)!important}.icon-graph{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/chart_curve.png)!important}.icon-chart{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/chart_bar.png)!important}.icon-prefs{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application_form.png)!important}.icon-ok{background-image:url(../../../assets/modext/util/filetree/img/icons/ok16.png)!important}.icon-view-tile{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application_view_tile.png)!important}.icon-check,.icon-check-off{background-image:url(../ext/resources/images/default/menu/unchecked.gif)!important}.icon-check-on{background-image:url(../ext/resources/images/default/menu/checked.gif)!important}.icon-stat-data{background-image:url(../../../assets/modext/util/filetree/img/icons/kate_16.png)!important}.icon-rename{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/textfield_rename.png)!important}.icon-add-col{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/page_white_add.png)!important}.icon-del-col{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/page_white_delete.png)!important}.icon-save-table{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/table_save.png)!important}.icon-add-tab{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/tab_add.png)!important}.icon-del-tab{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/tab_delete.png)!important}.icon-go-tab{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/tab_go.png)!important}.icon-add-table{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/table_add.png)!important}.icon-del-table{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/table_delete.png)!important}.icon-admin{background-image:url(../../../assets/modext/util/filetree/img/icons/adv_settings_16.png)!important}.icon-grid{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/grid.png)!important}.icon-key{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/key.png)!important}.icon-key2{background-image:url(../../../assets/modext/util/filetree/img/icons/key_16.png)!important}.icon-expand-all{background-image:url(../../../assets/modext/util/filetree/img/icons/expand-all.gif)!important}.icon-collapse-all{background-image:url(../../../assets/modext/util/filetree/img/icons/collapse-all.gif)!important}.icon-tree-orgboard{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/chart_organisation.png)!important}.icon-tree-area{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/post_title.png)!important}.icon-tree-post{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/page_white.png)!important}.icon-plus{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/add.png)!important}.icon-minus{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/delete.png)!important}.icon-house{background-image:url(../../../assets/modext/util/filetree/img/icons/house_16.png)!important}.icon-user{background-image:url(../../../assets/modext/util/filetree/img/icons/user2_16.png)!important}.icon-trash-empty{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/bin_empty.png)!important}.icon-trash-closed{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/bin_closed.png)!important}.icon-disk{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/disk.png)!important}.icon-disk-bullet{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/bullet_disk.png)!important}.icon-undo{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/arrow_undo.png)!important}.icon-loading{background-image:url(../ext/resources/images/default/grid/grid-loading.gif)!important}.icon-db-refresh{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/database_refresh.png)!important}.icon-magnifier{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/magnifier.png)!important}.icon-wrench{background-image:url(../../../assets/modext/util/filetree/img/icons/wrench_16.png)!important}.icon-wrench-orange{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/wrench_orange.png)!important}.icon-star{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/star.png)!important}.icon-lock-go{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/lock_go.png)!important}.icon-group-add{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/group_add.png)!important}.icon-group-del{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/group_delete.png)!important}.icon-stat-portal{background-image:url(../../../assets/modext/util/filetree/img/icons/stat_portal_16.png)!important}.icon-stat-list{background-image:url(../../../assets/modext/util/filetree/img/icons/stat_list_16.png)!important}.icon-cancel{background-image:url(../../../assets/modext/util/filetree/img/icons/cancel16.png)!important}.icon-cross{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/cross.png)!important}.icon-defaults{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/arrow_rotate_clockwise.png)!important}.icon-load{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/database_go.png)!important}.icon-working{background-image:url(../ext/resources/images/default/grid/wait.gif)!important}.icon-upload{background-image:url(../../../assets/modext/util/filetree/img/icons/up.png)!important}.icon-folder-add{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/folder_add.png)!important}.icon-open{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application_go.png)!important}.icon-open-self{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application.png)!important}.icon-open-popup{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application_double.png)!important}.icon-open-blank{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application_cascade.png)!important}.icon-open-download{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/application_put.png)!important}.icon-refresh{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/arrow_refresh.png)!important}.icon-pencil{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/pencil.png)!important}.icon-stop{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/control_stop.png)!important}.icon-email{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/email.png)!important}.icon-email-compose{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/email_edit.png)!important}.icon-coins{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/coins.png)!important}.icon-clock{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/clock.png)!important}.icon-zoom{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/zoom.png)!important}.icon-print{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/printer.png)!important}.icon-folder-component{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/folder_brick.png)!important}.icon-extension{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/brick.png)!important}.icon-function{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/flag_yellow.png)!important}.icon-bulb{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/lightbulb.png)!important}.icon-bulb-off{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/lightbulb_off.png)!important}.icon-copy{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/page_white_copy.png)!important}.icon-db-gear,.icon-reconfigure{background-image:url(../../../assets/modext/util/filetree/img/silk/icons/database_gear.png)!important} -*/ -.ux-up-item { - background-color: #f0f0f0; - background-image: url(../../../assets/modext/util/filetree/img/white_bg.png); - background-repeat: no-repeat; - cursor: default; - height: 17px; - line-height: 17px; - margin-bottom: 1px; - position: relative; -} - -.ux-up-icon-file { - float: left; - height: 16px; - margin-right: 4px; - vertical-align: -3px; - width: 16px; -} - -.ux-up-indicator { - background-color: #ff0; - height: 17px; - opacity: 0.4; - filter: alpha(opacity=40); - /* for IE <= 8 */ - position: absolute; - width: 40px; - /*filter: alpha(opacity=40);*/ -} - -.ux-up-icon-state { - cursor: pointer; - float: right; - margin-right: 2px; - width: 16px; - z-index: -1; -} - -.ux-up-icon-queued { - background-image: url(../../../assets/modext/util/filetree/img/silk/icons/page_white_get.png); -} - -.ux-up-icon-uploading { - background-image: url(../../../../ext2/resources/images/default/grid/wait.gif); -} - -.ux-up-icon-done { - background-image: url(../../../assets/modext/util/filetree/img/silk/icons/accept.png); -} - -.ux-up-icon-failed { - background-image: url(../../../assets/modext/util/filetree/img/silk/icons/error.png); -} - -.ux-up-icon-stopped { - background-image: url(../../../assets/modext/util/filetree/img/silk/icons/stop.png); -} - -.ux-up-text { - float: left; -} - -.ux-ftm-nodename { - color: #515151; - cursor: default !important; - font-weight: 700; -} - -.ux-icon-combo-icon { - background-position: 0 50%; - background-repeat: no-repeat; - height: 14px; - width: 18px; -} - -.ux-icon-combo-input { - padding-left: 25px; -} - -.x-form-field-wrap .ux-icon-combo-icon { - left: 5px; - top: 3px; -} - -.ux-icon-combo-item { - background-position: 3px 50% !important; - background-repeat: no-repeat !important; - padding-left: 24px !important; -} - -/* status messages */ -.modx-status-msg { - background: #6CB24A; - border-radius: 3px; - box-sizing: border-box; - bottom: 20px; - color: #FFF; - max-width: 360px; - padding: 15px 15px 15px 65px; - position: fixed; - right: 15px; - width: 25%; - z-index: 20000; -} -@media screen and (max-width: 960px) { - .modx-status-msg { - max-width: 100%; - } -} -.modx-status-msg:before { - position: relative; -} -.modx-status-msg:after { - background: #FFF; - border-radius: 50%; - color: #6CB24A; - content: "\f00c"; - display: inline-block; - font-size: 16px; - height: 38px; - left: 15px; - line-height: 36px; - margin-right: 13px; - position: absolute; - text-align: center; - top: 15px; - vertical-align: middle; - width: 38px; -} -.modx-status-msg h3, -.modx-status-msg span { - font-size: 14px; -} -.modx-status-msg h3 { - color: #FFF; - margin: 0; -} - -.modx-status-msg .has-position-center-center { - bottom: auto; - left: 0; - margin-left: auto; - margin-right: auto; - right: 0; - top: 50%; - transform: translateY(-50%); -} - -.modx-status-msg .has-position-center-top { - bottom: auto; - left: 0; - margin-left: auto; - margin-right: auto; - right: 0; - top: 15px; -} - -.modx-status-msg .has-position-right-top { - bottom: auto; - left: auto; - right: 15px; - top: 15px; -} - -/* status messages mobile view */ -@media screen and (max-width: 960px) { - .modx-status-msg, -.modx-status-msg .has-position-center-center, -.modx-status-msg .has-position-center-top, -.modx-status-msg .has-position-right-top { - border-radius: 0; - top: auto; - bottom: 0; - left: 0; - right: 0; - width: 100%; - } -} - -iframe[classname=x-hidden] { - visibility: hidden; -} - -html[dir=rtl] .x-hiden, -html[dir=rtl] .x-hide-offsets { - right: -9999px; - left: unset; -} - -/* file upload, is this the old legacy (single file) uploader? */ -.ext-ux-uploaddialog-addbtn { - background: url("../images/restyle/fileup/file-add.gif") no-repeat left center !important; -} - -.ext-ux-uploaddialog-removebtn { - background: url("../images/restyle/fileup/file-remove.gif") no-repeat left center !important; -} - -.ext-ux-uploaddialog-resetbtn { - background: url("../images/restyle/fileup/reset.gif") no-repeat left center !important; -} - -.ext-ux-uploaddialog-uploadstartbtn { - background: url("../images/restyle/fileup/upload-start.gif") no-repeat left center !important; -} - -.ext-ux-uploaddialog-uploadstopbtn { - background: url("../images/restyle/fileup/upload-stop.gif") no-repeat left center !important; -} - -.ext-ux-uploaddialog-indicator-stoped { - background: url("../images/restyle/fileup/done.gif") no-repeat center center; - height: 16px; - width: 16px; -} - -.ext-ux-uploaddialog-indicator-processing { - background: url("../images/restyle/fileup/loading.gif") no-repeat center center; - height: 16px; - width: 16px; -} - -.ext-ux-uploaddialog-state { - background-position: center center; - background-repeat: no-repeat; - text-align: center; -} - -.ext-ux-uploaddialog-state-0 { - background-image: url("../images/restyle/fileup/uncheck.gif"); -} - -.ext-ux-uploaddialog-state-1 { - background-image: url("../images/restyle/fileup/check.gif"); -} - -.ext-ux-uploaddialog-state-2 { - background-image: url("../images/restyle/fileup/failed.gif"); -} - -.ext-ux-uploaddialog-state-3 { - background-image: url("../images/restyle/fileup/file-uploading.gif"); -} - -/* tree grid */ -.tq-treegrid .tq-treegrid-col { - border: none; -} - -.tq-treegrid .tq-treegrid-icons { - float: left; -} - -.tq-treegrid .x-tree-node-el { - line-height: 13px; - padding: 1px 3px 1px 5px; -} - -.tq-treegrid .tq-treegrid-static .x-tree-ec-icon { - display: none; -} - -.tq-treegrid .tq-treegrid-static .x-tree-node-el { - cursor: default; -} - -/* other */ -.modx-tree-load-msg { - color: black; - font-size: 0.9em; - line-height: 1; - padding: 3px; - white-space: pre-line; -} - -#modx-grid-policy-permissions .x-grid3-cell-inner, -#modx-grid-policy-permissions .x-grid3-hd-inner, -#modx-grid-template-permissions .x-grid3-cell-inner, -#modx-grid-template-permissions .x-grid3-hd-inner { - white-space: normal; -} - -/* MODExt common classes */ -.container { - margin: 20px 15px 20px; -} - -/* prevent cut off box shadows */ -.container, -.x-plain-bwrap, -.x-plain-body { - overflow: visible; -} - -/* box-shadow for most panels + custom class to set explicitly */ -.shadowbox, -.x-form-label-left { - border-radius: 3px; - /* prevent box-shadow in nested panels */ -} -.shadowbox .x-form-label-left, .x-tab-panel-bwrap .shadowbox, -.x-form-label-left .x-form-label-left, -.x-tab-panel-bwrap .x-form-label-left { - border-radius: 0; - box-shadow: none; -} -.x-window .shadowbox, -.x-window .x-form-label-left { - border-radius: 0; - box-shadow: none; -} - -/* Panel description text */ -.panel-desc { - border-bottom: 1px solid #F0F0F0; - border-radius: 0; - color: #53595F; - line-height: 1.5; - padding: 15px !important; -} -.x-window .panel-desc { - margin-top: 0; - margin-bottom: 15px; -} -.panel-desc .x-panel-bwrap { - background-color: transparent !important; -} - -.with-title .panel-desc { - margin: 0; -} - -.panel-desc p { - padding: 0; -} - -/* All the other wrapped element (forms need to be wrapped in a panel isolated from the other components) */ -.main-wrapper { - background-color: #FFF; - padding: 15px 15px 15px 15px; -} - -.with-title .main-wrapper { - padding: 0 15px 10px 15px; -} - -.left-col { - padding-right: 15px; -} - -.right-col { - padding-left: 15px; -} - -/* Old Header */ -.modx-page-header { - order: 1; - font: normal 20px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - color: #53595F; - margin: 0; - padding: 0 15px; -} -@media screen and (max-width: 960px) { - .modx-page-header { - width: 100%; - text-align: center; - font-size: 2em; - } -} - -/* New Header */ -.modx-header-breadcrumbs .breadcrumbs { - display: flex; - flex-wrap: wrap; - align-items: baseline; -} -.modx-header-breadcrumbs .breadcrumbs h2 { - order: 1; - font: normal 20px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - color: #53595F; - margin: 0 !important; - padding-left: 0; -} -@media screen and (max-width: 960px) { - .modx-header-breadcrumbs .breadcrumbs h2 { - width: 100%; - text-align: center; - font-size: 2em; - } -} -.modx-header-breadcrumbs ul { - order: 0; - display: flex; - flex-wrap: wrap; - align-items: center; -} -.modx-header-breadcrumbs ul li { - font: normal 18px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - color: #53595F; -} -.modx-header-breadcrumbs ul li a { - font: normal 18px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - text-decoration: none; -} -.modx-header-breadcrumbs ul li a.menu_hidden { - font-style: italic; -} -.modx-header-breadcrumbs ul li a.menu_hidden:hover { - color: #162a42; -} -.modx-header-breadcrumbs ul li a.not_published { - color: #b3b3b3 !important; -} -.modx-header-breadcrumbs ul li a.not_published:hover { - color: #162a42; -} -.modx-header-breadcrumbs ul li a.deleted { - color: rgba(175, 90, 98, 0.5) !important; - text-decoration: line-through; -} -.modx-header-breadcrumbs ul li a.deleted:hover { - color: #162a42; -} -.modx-header-breadcrumbs ul li:after { - content: "\f054"; - padding: 0 10px; - color: #999999; - font-size: 12px; -} - -#modx-abtn-delete { - color: #CF1124; -} - -#modx-abtn-undelete { - color: #6CB24A; -} - -#modx-abtn-help { - color: #234368; -} - -#modx-resource-tabs .x-tab-panel-bwrap { - box-shadow: none; -} -#modx-resource-tabs .x-tab-panel-bwrap, -#modx-resource-tabs .x-tab-panel-body { - overflow: visible !important; -} - -#modx-resource-settings { - background: #F1F1F1; -} -#modx-resource-settings #modx-resource-main-left { - padding: 15px; - background: #FFF; - border-top-right-radius: 3px; - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; - position: relative; -} -#modx-resource-settings .x-panel-collapsed { - min-height: 18px; -} -#modx-resource-settings #modx-resource-main-right .modx-resource-panel { - padding: 15px; - background: #FFF; - border-radius: 3px; -} -#modx-resource-settings #modx-resource-main-right .modx-resource-panel:not(:last-child) { - margin-bottom: 15px; -} -#modx-resource-settings .main-wrapper { - padding: 0; - background: transparent; -} -#modx-resource-settings .x-datetime-wrap table { - width: 100%; -} -#modx-resource-settings .x-datetime-wrap table td { - width: 50% !important; - max-width: 50% !important; -} -#modx-resource-settings .x-datetime-wrap table td input { - width: calc(100% - 30px); -} -#modx-resource-settings .x-datetime-wrap table td:first-child { - padding-right: 5px !important; -} -#modx-resource-settings .x-datetime-wrap table td:last-child { - padding-left: 5px !important; -} -#modx-resource-settings .x-datetime-wrap table .x-form-field-trigger-wrap { - width: 100% !important; -} - -.tvs-wrapper { - padding: 0; -} - -#modx-resource-tvs-div { - border-top-width: 0; - visibility: hidden; - /* prevent flash of unstyled tv from elements on page load */ -} - -.modx-permissions-list { - color: #777; - font-size: 12px; -} - -.modx-permissions-list-textarea { - background-color: transparent !important; - border: 0 !important; -} - -/* for selectability in ext grids */ -.x-selectable, -.x-selectable * { - -khtml-user-select: all !important; - user-select: text !important; -} - -.x-selectable.simulated-link * { - color: #234368; - text-decoration: none; - border-bottom: 1px dotted #749fd0; -} -.x-selectable.simulated-link *:hover { - color: black; - border-bottom-color: #336299; -} - -/* Lightbox */ -#ux-lightbox { - left: 0; - line-height: 0; - position: absolute; - text-align: center; - width: 100%; - z-index: 15000; -} - -#ux-lightbox img { - height: auto; - width: auto; -} - -#ux-lightbox a img { - border: medium none; -} - -#ux-lightbox-outerImageContainer { - background-color: #FFF; - height: 250px; - margin: 0 auto; - position: relative; - width: 250px; -} - -#ux-lightbox-imageContainer { - padding: 10px; -} - -#ux-lightbox-loading { - background: url("../images/style/loading.gif") no-repeat scroll center 15% transparent; - height: 25%; - left: 0; - line-height: 0; - position: absolute; - text-align: center; - top: 40%; - width: 100%; -} - -#ux-lightbox-hoverNav { - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 100%; - z-index: 10; -} - -#ux-lightbox-hoverNav a { - outline: medium none; -} - -#ux-lightbox-imageContainer > #ux-lightbox-hoverNav { - left: 0; -} - -#ux-lightbox-navPrev, -#ux-lightbox-navNext { - display: block; - height: 100%; - width: 49%; -} - -#ux-lightbox-navPrev { - float: left; - left: 0; -} - -#ux-lightbox-navPrev:hover, -#ux-lightbox-navPrev:visited:hover { - background: transparent url("images/lb-prev.png") no-repeat scroll left 33%; -} - -#ux-lightbox-navNext { - float: right; - right: 0; -} - -#ux-lightbox-navNext:hover, -#ux-lightbox-navNext:visited:hover { - background: transparent url("images/lb-next.png") no-repeat scroll right 33%; -} - -#ux-lightbox-outerDataContainer { - margin: 0 auto; - width: 100%; -} - -#ux-lightbox-dataContainer { - background-color: #FFF; - font: normal 11px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-size: 10px; - overflow: auto; -} - -#ux-lightbox-data { - color: #666; - padding: 0 10px; -} - -#ux-lightbox-data #ux-lightbox-details { - float: left; - text-align: left; - width: 80%; -} - -#ux-lightbox-data #ux-lightbox-caption { - font-weight: bold; -} - -#ux-lightbox-data #ux-lightbox-imageNumber { - clear: left; - display: block; - padding-bottom: 1em; -} - -#ux-lightbox-data #ux-lightbox-navClose { - background: transparent url("../images/style/close.png") no-repeat scroll 0 0; - float: right; - height: 16px; - outline: medium none; - padding-bottom: 0.7em; - width: 16px; -} - -#ux-lightbox-overlay, -#ux-lightbox-shim { - background-color: #515151; - border: 0 none; - height: 500px; - left: 0; - margin: 0; - padding: 0; - position: absolute; - top: 0; - width: 100%; - z-index: 14999; -} - -#ux-lightbox-shim { - background-color: transparent; - z-index: 89; -} - -/* Card Layout (ex. Package Manager) */ -.x-panel-body-noheader .x-grid3-row { - position: relative; -} - -.x-grid3-col-main { - padding: 10px 5px 35px; -} - -.x-grid3-cell-inner .x-grid3-col-main h3 { - color: #555555; - font: normal 13px/1.4 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; - font-size: 20px; - line-height: 1; - margin: 0 0 5px 0; -} - -.package-installed { - color: #515151; - opacity: 0.5; - filter: alpha(opacity=50); - /* for IE <= 8 */ -} - -#modx-grid-package .green { - text-align: center; -} - -#modx-grid-package .green a { - color: #CF1124 !important; -} - -#modx-grid-package .red { - color: #6CB24A !important; - text-align: center; -} - -.grid-with-buttons .x-grid3-row-expanded .x-grid3-row-body { - margin: -45px 2px 0 -20px; - padding: 18px 25px 40px; -} - -/* Package browser */ -.home-panel ol { - border-top: 1px solid #cacaca; -} - -.home-panel ol li { - border-bottom: 1px solid #e0e0e0; -} - -.home-panel ol li:first-child { - border-top-color: 0 none; -} - -.home-panel ol li:last-child { - border-bottom: 0 none; -} - -.home-panel ol li button { - background-color: transparent; - border: 0 none; - color: #53595F; - cursor: pointer; - display: block; - font-size: 15px; - font-weight: bold; - padding: 12px 20px 12px 6px; - position: relative; - text-decoration: none; -} - -.home-panel ol li:hover button { - color: #234368; -} -.home-panel ol li:hover button:before { - content: "\f002"; - font-size: 14px; - margin-top: -7px; - /* half of the height to center vertically with top 50% */ - opacity: 0.6; - filter: alpha(opacity=60); - /* for IE <= 8 */ - position: absolute; - top: 50%; - right: 0; - text-align: center; - width: 20px; - transition: opacity 0.25s; -} - -.home-panel ol li .highlighted { - color: #909090; - float: right; - font-size: 10px; - padding: 13px 10px 0; -} - -.home-panel ol li button .ct { - color: #aaa; - margin-right: 10px; -} - -.home-panel .one_half { - overflow: hidden; -} - -.home-panel .desc-wrapper { - margin-top: 38px; -} - -.home-panel .text-wrapper { - font-style: normal; - max-height: none; -} - -.home-panel .provider_name { - background-color: #9bb3bf; - line-height: 1.8; -} - -.home-panel .pnl_instructions { - margin: 20px 0; -} - -.home-panel .stats { - clear: both; - display: inline-block; - margin-top: 15px; -} - -.home-panel .stats p { - color: #777777; - font-size: 12px; - font-style: italic; - line-height: 1.5; -} - -.pbr-provider-box { - float: left; - margin-top: 10px; - width: 250px; -} - -.pbr-provider-home { - padding: 10px; -} - -.pbr-repository-view { - padding: 10px; -} - -.pbr-tag-view { - padding: 10px; -} - -.pbr-details-right { - float: right !important; - text-align: right !important; -} - -.pbr-thumb-downloaded { - opacity: 0.5; - filter: alpha(opacity=50); - /* for IE <= 8 */ -} - -.one_half { - float: left; - margin-right: 3%; - position: relative; - width: 48%; -} - -.last { - clear: right; - margin-right: 0 !important; -} - -.package-readme { - padding: 8px 11px 0; -} - -/* Template sidebar */ -#modx-package-browser-home { - margin-top: 5px; - min-height: 560px; -} - -/* Aside details are used in the thumbnail package provider view to show package info on the side */ -.empty-text-wrapper { - color: #888; - font-weight: bold; - line-height: 1.4; - padding: 12px; -} - -.aside-details { - background-color: transparent; - border: 1px solid #E4E4E4; - border-radius: 3px; - margin-right: 0; -} - -.aside-details .selected h5 { - color: #53595F; - font-size: 14px; - margin: 10px 0; -} - -.aside-details .selected img { - border-radius: 3px; - border: 1px solid #E4E4E4; - height: 80px; - width: 90px; -} - -.aside-details .item { - margin-bottom: 25px; -} - -.aside-details .item p, -.aside-details .item li { - color: #888; - line-height: 1.4; -} - -.aside-details .item a { - color: #53595F; - font-style: italic; -} - -.aside-details h4 { - color: #53595F; - font-size: 14px; - margin: 10px 0; - text-transform: uppercase; -} - -.aside-details .aside-details h4 { - font-size: 12px; - margin-top: 0; -} - -.aside-details .selected { - border-bottom: 1px solid #E4E4E4; - color: black; - padding: 15px; - text-align: center; -} - -.aside-details .description, -.aside-details .instructions { - background-color: #FBFBFB; - color: #53595F; - font-size: 12px; - line-height: 1.2; - padding: 15px; -} - -.aside-details .infos { - padding: 15px; - font-size: 12px; - line-height: 1.2; - color: #53595F; -} - -.aside-details .infos ul li { - font-size: 12px; -} - -.aside-details .infos ul li .infoname { - color: #999999; - font-weight: bold; - width: 50%; -} - -.aside-details .infos ul li .infovalue { - max-width: 50%; - padding: 0 8px; - word-wrap: break-word; -} - -.aside-details .infos ul li span { - display: inline-block; - padding: 0; -} - -/* The thumb-wrapper is used in package management for "templated" repositories, e.g. Front-end Templates */ -.thumb-wrapper { - background-color: #f5f5f5; - border-radius: 3px; - border: 1px solid #CCCCCC; - cursor: pointer; - float: left; - margin: 0 15px 15px 0; - overflow: hidden; - padding: 0 0 12px; - position: relative; - width: 250px; - box-sizing: border-box; -} -.thumb-wrapper * { - box-sizing: border-box; -} -.thumb-wrapper .thumb { - background-color: #FFF; - border-bottom: 1px solid #CCCCCC; - height: 170px; - margin: 0 auto; - width: 100%; - text-align: center; - position: relative; -} -.thumb-wrapper .thumb img { - max-height: 100%; - max-width: 100%; -} -.thumb-wrapper .thumb .no-preview { - color: #888; - display: inline-block; - font-size: 9px; - font-weight: bold; - padding: 31px 15px; - text-align: center; - text-transform: uppercase; -} -.thumb-wrapper span.downloaded, -.thumb-wrapper span.featured { - background-color: #6CB24A; - color: #FFF; - font-weight: bold; - padding: 5px 0; - position: absolute; - text-align: center; - text-shadow: none; - top: 68px; - width: 100%; -} -.thumb-wrapper span.featured { - background-color: #234368; - color: #FFFFFF; - top: initial; - bottom: 0; -} -.thumb-wrapper span { - display: block; - overflow: hidden; - text-align: left; - text-shadow: 0 1px 0 #FFF; - margin: 0; - text-overflow: ellipsis; - white-space: nowrap; -} -.thumb-wrapper .name { - color: #53595F; - font-size: 12px; - font-weight: bold; - float: left; - padding: 12px 8px 12px 12px; - width: 55%; -} -.thumb-wrapper .downloads { - color: #999; - font-size: 9px; - text-transform: uppercase; - float: right; - text-align: right; - padding: 8px 12px 8px 8px; - width: 45%; -} -.thumb-wrapper .thumb-description { - clear: both; - padding: 0 12px; - font-size: 12px; - overflow: hidden; - height: 50px; -} -.thumb-wrapper .thumb-footer { - color: #999; - font-size: 9px; - text-transform: uppercase; - padding: 8px 12px 0; - text-align: center; -} -.thumb-wrapper.selected { - background-color: #FFF; - padding: 0 0 12px; - border-color: #234368; -} -.thumb-wrapper.selected img { - border: 0 none; -} - -.pbr-thumb { - background: #DFDFDF; - height: 80px; - padding: 3px; - width: 100px; -} - -.pbr-thumb img { - height: 80px; - width: 100px; -} - -.x-grid3-hd-text-col, -.x-grid3-hd-meta-col, -.x-grid3-hd-info-col { - text-align: center; -} - -.x-grid3-col-text-col { - font-size: 11px; - text-align: center; -} - -.x-grid3-col-info-col, -.x-grid3-col-meta-col { - font-size: 11px; - font-weight: bold; - text-align: center; -} - -.x-grid3-col-meta-col { - color: #53595F; -} - -.x-grid3-col-info-col { - color: #6CB24A; -} - -.not-installed .x-grid3-col-info-col { - color: #CF1124; -} - -.inline-button { - -webkit-box-align: center; - display: inline; - margin: 0 auto; - padding: 8px; - text-align: center; -} - -.meta-wrapper { - color: #808080; - max-height: 400px; - overflow: auto; - padding: 15px; - word-wrap: break-word; -} -.meta-wrapper ul { - list-style: disc inside; - padding-left: 15px; -} -.meta-wrapper h1 { - font-size: 1.2em; -} -.meta-wrapper h2 { - font-size: 1.15em; -} -.meta-wrapper h3 { - font-size: 1.1em; -} -.meta-wrapper h4 { - font-size: 1.05em; -} -.meta-wrapper h5 { - font-size: 1em; -} -.meta-wrapper h6 { - font-size: 0.95em; -} - -.window-no-padding .x-panel-mc { - padding: 0 !important; -} -.window-no-padding .x-panel-ml { - padding: 0 !important; -} -.window-no-padding .x-panel-mr { - padding: 0 !important; -} -.window-no-padding .x-tab-panel-noborder { - margin: 0 !important; -} - -.upload-error { - color: #CF1124; -} - -.upload-success { - color: #6CB24A; -} - -.upload-status-text { - white-space: normal; -} - -.upload-thumb { - float: right; -} - -.auto-width { - width: auto !important; -} - -.auto-height { - height: auto !important; -} - -.x-datetime-inline-editor .x-datetime-wrap { - margin-top: 0 !important; -} \ No newline at end of file