From 53c40a94fa104d704edc8e0784446850c236956d Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 6 Oct 2014 16:01:33 +1300 Subject: [PATCH] API Enable re-authentication within the CMS if a user session is lost BUG Resolve issue with error redirection being ignored within CMS BUG Fix issue with invalid securityID being re-emitted on failure --- admin/css/ie7.css | 136 ++--- admin/css/ie8.css | 4 +- admin/css/screen.css | 479 +++++++++--------- admin/images/btn-icon-s5a3074ba2a.png | Bin 21980 -> 0 bytes admin/images/btn-icon-sf963a8adf3.png | Bin 0 -> 21889 bytes admin/images/menu-icons/16x16-s3f4c846209.png | Bin 0 -> 1637 bytes admin/images/menu-icons/16x16-sf5b94bb49b.png | Bin 1645 -> 0 bytes admin/images/menu-icons/24x24-s0dc15c36f9.png | Bin 0 -> 2394 bytes admin/images/menu-icons/24x24-s391afdd013.png | Bin 2391 -> 0 bytes admin/images/sprites-32x32-s10286f549b.png | Bin 18820 -> 0 bytes admin/images/sprites-32x32-s871d283813.png | Bin 0 -> 17208 bytes admin/images/sprites-64x64-s45180e3c4f.png | Bin 0 -> 3062 bytes admin/images/sprites-64x64-s88957ee578.png | Bin 3059 -> 0 bytes admin/javascript/CMSSecurity.js | 23 + admin/javascript/LeftAndMain.js | 133 ++++- admin/scss/_CMSSecurity.scss | 63 +++ admin/scss/screen.scss | 1 + admin/templates/CMSSecurity_login.ss | 17 + admin/templates/CMSSecurity_success.ss | 37 ++ admin/templates/LeftAndMain.ss | 4 +- docs/en/changelogs/3.1.7.md | 22 + docs/en/topics/authentication.md | 55 ++ docs/en/topics/environment-management.md | 4 +- docs/en/topics/index.md | 3 +- forms/Form.php | 20 +- lang/en.yml | 20 +- security/Authenticator.php | 27 +- security/CMSMemberLoginForm.php | 166 ++++++ security/CMSSecurity.php | 195 +++++++ security/LoginForm.php | 9 +- security/Member.php | 172 +++++-- security/MemberAuthenticator.php | 207 +++++--- security/MemberLoginForm.php | 5 +- security/Security.php | 320 +++++++----- tests/forms/FormTest.php | 17 +- tests/security/MemberAuthenticatorTest.php | 101 ++++ tests/security/SecurityDefaultAdminTest.php | 39 +- 37 files changed, 1670 insertions(+), 609 deletions(-) delete mode 100644 admin/images/btn-icon-s5a3074ba2a.png create mode 100644 admin/images/btn-icon-sf963a8adf3.png create mode 100644 admin/images/menu-icons/16x16-s3f4c846209.png delete mode 100644 admin/images/menu-icons/16x16-sf5b94bb49b.png create mode 100644 admin/images/menu-icons/24x24-s0dc15c36f9.png delete mode 100644 admin/images/menu-icons/24x24-s391afdd013.png delete mode 100644 admin/images/sprites-32x32-s10286f549b.png create mode 100644 admin/images/sprites-32x32-s871d283813.png create mode 100644 admin/images/sprites-64x64-s45180e3c4f.png delete mode 100644 admin/images/sprites-64x64-s88957ee578.png create mode 100644 admin/javascript/CMSSecurity.js create mode 100644 admin/scss/_CMSSecurity.scss create mode 100644 admin/templates/CMSSecurity_login.ss create mode 100644 admin/templates/CMSSecurity_success.ss create mode 100644 docs/en/topics/authentication.md create mode 100644 security/CMSMemberLoginForm.php create mode 100644 security/CMSSecurity.php diff --git a/admin/css/ie7.css b/admin/css/ie7.css index 0375b8db6..b9adeddb5 100644 --- a/admin/css/ie7.css +++ b/admin/css/ie7.css @@ -9,7 +9,7 @@ /** ----------------------------------------------- Application Logo (CMS Logo) Must be 24px x 24px ------------------------------------------------ */ .cms .ss-ui-button { background-color: #e6e6e6; } .cms .ss-ui-button.ui-state-hover { background-color: #f3f3f3; } -.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1f9433; } +.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1F9433; } .cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover { background-color: #23a93a; } .cms .ss-ui-button.ss-gridfield-button-filter { background: #55a4d2 url(../../images/icons/filter-icons.png) no-repeat -14px 4px; } @@ -20,7 +20,7 @@ .ss-gridfield-button-filter.ss-ui-button.hover-alike { background-color: #338DC1; background-position: -16px 6px; filter: none; } .ss-gridfield-button-reset.ss-ui-button { background: #e6e6e6 url(../images/filter-icons.png) no-repeat 8px 5px; filter: none; } -.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: red url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } +.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: #f00 url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } .ss-gridfield-button-reset.ss-ui-button.filtered:active { background: #e60000 url(../images/filter-icons.png) no-repeat 9px -16px; filter: none; } .cms table.ss-gridfield-table tr td { border-right: 1px solid #9a9a9a; } @@ -54,77 +54,77 @@ fieldset.switch-states .switch input.state-name { margin-left: -20px; } .cms-content-controls .preview-size-selector { display: none; } /** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-s5a3074ba2a.png') no-repeat; } +.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-image: url('../images/btn-icon-sf963a8adf3.png'); background-repeat: no-repeat; } -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -500px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -356px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -340px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -372px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -724px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -516px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -740px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -676px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -708px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -772px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -484px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -756px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -452px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -564px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -468px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -307px; } -.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -291px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -548px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -420px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -580px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -532px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -628px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -644px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -388px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -436px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -612px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -692px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -596px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -660px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -324px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -404px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } +.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 0; } +.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -16px; } +.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 -32px; } +.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -48px; } +.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -68px; } +.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -84px; } +.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -100px; } +.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -116px; } +.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -132px; } +.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -148px; } +.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -164px; } +.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -180px; } +.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -196px; } +.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -212px; } +.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -228px; } +.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -244px; } +.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -260px; } +.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -276px; } +.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -292px; } +.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -308px; } +.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -324px; } +.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -340px; } +.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -355px; } +.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -371px; } +.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -387px; } +.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -403px; } +.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -420px; } +.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -436px; } +.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -452px; } +.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -468px; } +.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -484px; } +.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -500px; } +.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -516px; } +.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -532px; } +.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -548px; } +.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -564px; } +.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -580px; } +.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -596px; } +.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -612px; } +.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -628px; } +.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -644px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -660px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -676px; } +.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -692px; } +.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -708px; } +.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -724px; } +.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -740px; } +.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -756px; } +.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -772px; } .icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s391afdd013.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -216px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } +.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s0dc15c36f9.png'); } +.icon.icon-24.icon-assetadmin { background-position: 0 -216px; } +.icon.icon-24.icon-cmsmain { background-position: 0 -192px; } +.icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } +.icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } -.icon.icon-24.icon-commentadmin { background-position: 0 -192px; } -.icon.icon-24.icon-help { background-position: 0 -96px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sf5b94bb49b.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } +.icon.icon-24.icon-reportadmin { background-position: 0 -240px; } +.icon.icon-24.icon-commentadmin { background-position: 0 0; } +.icon.icon-24.icon-help { background-position: 0 -144px; } +.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-s3f4c846209.png'); } +.icon.icon-16.icon-assetadmin { background-position: 0 -144px; } +.icon.icon-16.icon-cmsmain { background-position: 0 -128px; } .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } -.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } -.icon.icon-16.icon-commentadmin { background-position: 0 -144px; } -.icon.icon-16.icon-help { background-position: 0 -64px; } +.icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } +.icon.icon-16.icon-securityadmin { background-position: 0 -16px; } +.icon.icon-16.icon-reportadmin { background-position: 0 -160px; } +.icon.icon-16.icon-commentadmin { background-position: 0 0; } +.icon.icon-16.icon-help { background-position: 0 -96px; } html { overflow: hidden; } diff --git a/admin/css/ie8.css b/admin/css/ie8.css index 569c11ab2..33f8ea8df 100644 --- a/admin/css/ie8.css +++ b/admin/css/ie8.css @@ -9,7 +9,7 @@ /** ----------------------------------------------- Application Logo (CMS Logo) Must be 24px x 24px ------------------------------------------------ */ .cms .ss-ui-button { background-color: #e6e6e6; } .cms .ss-ui-button.ui-state-hover { background-color: #f3f3f3; } -.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1f9433; } +.cms .ss-ui-button.ss-ui-action-constructive { background-color: #1F9433; } .cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover { background-color: #23a93a; } .cms .ss-ui-button.ss-gridfield-button-filter { background: #55a4d2 url(../../images/icons/filter-icons.png) no-repeat -14px 4px; } @@ -20,7 +20,7 @@ .ss-gridfield-button-filter.ss-ui-button.hover-alike { background-color: #338DC1; background-position: -16px 6px; filter: none; } .ss-gridfield-button-reset.ss-ui-button { background: #e6e6e6 url(../images/filter-icons.png) no-repeat 8px 5px; filter: none; } -.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: red url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } +.ss-gridfield-button-reset.ss-ui-button.filtered:hover { background: #f00 url(../images/filter-icons.png) no-repeat 8px -17px; filter: none; } .ss-gridfield-button-reset.ss-ui-button.filtered:active { background: #e60000 url(../images/filter-icons.png) no-repeat 9px -16px; filter: none; } .cms table.ss-gridfield-table tr td { border-right: 1px solid #9a9a9a; } diff --git a/admin/css/screen.css b/admin/css/screen.css index 730381e30..36a20776c 100644 --- a/admin/css/screen.css +++ b/admin/css/screen.css @@ -15,7 +15,7 @@ q:before, q:after, blockquote:before, blockquote:after { content: ""; content: n a img { border: none; } -article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { display: block; } +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } /*$experimental-support-for-svg variable comes from imported compass/support file and enables svg gradients in IE9. @@ -37,81 +37,81 @@ Used in side panels and action tabs */ /** ----------------------------- Sprite images ----------------------------- */ /** Helper SCSS file for generating sprites for the interface. */ -.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background: url('../images/btn-icon-s5a3074ba2a.png') no-repeat; } +.btn-icon-sprite, .ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept, .ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled, .ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add, .ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia, .ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled, .ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage, .ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled, .ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left, .ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double, .ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back, .ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled, .ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow, .ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation, .ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus, .ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil, .ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus, .ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small, .ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain, .ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain, .ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle, .ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled, .ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross, .ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline, .ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled, .ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete, .ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight, .ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk, .ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil, .ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv, .ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload, .ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled, .ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print, .ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier, .ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle, .ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled, .ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation, .ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled, .ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud, .ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled, .ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil, .ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled, .ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition, .ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled, .ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview, .ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled, .ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings, .ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled, .ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish, .ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-image: url('../images/btn-icon-sf963a8adf3.png'); background-repeat: no-repeat; } -.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 -96px; } -.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -80px; } -.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 0; } -.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -208px; } -.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -32px; } -.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -144px; } -.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -500px; } -.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -356px; } -.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -340px; } -.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -372px; } -.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -16px; } -.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -724px; } -.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -516px; } -.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -740px; } -.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -676px; } -.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -708px; } -.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -772px; } -.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -484px; } -.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -756px; } -.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -452px; } -.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -564px; } -.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -276px; } -.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -128px; } -.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -192px; } -.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -468px; } -.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -307px; } -.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -291px; } -.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -548px; } -.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -48px; } -.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -420px; } -.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -580px; } -.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -260px; } -.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -532px; } -.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -628px; } -.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -644px; } -.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -388px; } -.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -436px; } -.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -612px; } -.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -692px; } -.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -228px; } -.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -596px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -244px; } -.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -660px; } -.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -64px; } -.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -160px; } -.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -324px; } -.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -404px; } -.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -112px; } -.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -176px; } +.ui-state-default .btn-icon-accept, .ui-widget-content .btn-icon-accept { background-position: 0 0; } +.ui-state-default .btn-icon-accept_disabled, .ui-widget-content .btn-icon-accept_disabled { background-position: 0 -16px; } +.ui-state-default .btn-icon-add, .ui-widget-content .btn-icon-add { background-position: 0 -32px; } +.ui-state-default .btn-icon-addMedia, .ui-widget-content .btn-icon-addMedia { background-position: 0 -48px; } +.ui-state-default .btn-icon-add_disabled, .ui-widget-content .btn-icon-add_disabled { background-position: 0 -68px; } +.ui-state-default .btn-icon-addpage, .ui-widget-content .btn-icon-addpage { background-position: 0 -84px; } +.ui-state-default .btn-icon-addpage_disabled, .ui-widget-content .btn-icon-addpage_disabled { background-position: 0 -100px; } +.ui-state-default .btn-icon-arrow-circle-135-left, .ui-widget-content .btn-icon-arrow-circle-135-left { background-position: 0 -116px; } +.ui-state-default .btn-icon-arrow-circle-double, .ui-widget-content .btn-icon-arrow-circle-double { background-position: 0 -132px; } +.ui-state-default .btn-icon-back, .ui-widget-content .btn-icon-back { background-position: 0 -148px; } +.ui-state-default .btn-icon-back_disabled, .ui-widget-content .btn-icon-back_disabled { background-position: 0 -164px; } +.ui-state-default .btn-icon-chain--arrow, .ui-widget-content .btn-icon-chain--arrow { background-position: 0 -180px; } +.ui-state-default .btn-icon-chain--exclamation, .ui-widget-content .btn-icon-chain--exclamation { background-position: 0 -196px; } +.ui-state-default .btn-icon-chain--minus, .ui-widget-content .btn-icon-chain--minus { background-position: 0 -212px; } +.ui-state-default .btn-icon-chain--pencil, .ui-widget-content .btn-icon-chain--pencil { background-position: 0 -228px; } +.ui-state-default .btn-icon-chain--plus, .ui-widget-content .btn-icon-chain--plus { background-position: 0 -244px; } +.ui-state-default .btn-icon-chain-small, .ui-widget-content .btn-icon-chain-small { background-position: 0 -260px; } +.ui-state-default .btn-icon-chain-unchain, .ui-widget-content .btn-icon-chain-unchain { background-position: 0 -276px; } +.ui-state-default .btn-icon-chain, .ui-widget-content .btn-icon-chain { background-position: 0 -292px; } +.ui-state-default .btn-icon-cross-circle, .ui-widget-content .btn-icon-cross-circle { background-position: 0 -308px; } +.ui-state-default .btn-icon-cross-circle_disabled, .ui-widget-content .btn-icon-cross-circle_disabled { background-position: 0 -324px; } +.ui-state-default .btn-icon-cross, .ui-widget-content .btn-icon-cross { background-position: 0 -340px; } +.ui-state-default .btn-icon-decline, .ui-widget-content .btn-icon-decline { background-position: 0 -355px; } +.ui-state-default .btn-icon-decline_disabled, .ui-widget-content .btn-icon-decline_disabled { background-position: 0 -371px; } +.ui-state-default .btn-icon-delete, .ui-widget-content .btn-icon-delete { background-position: 0 -387px; } +.ui-state-default .btn-icon-deleteLight, .ui-widget-content .btn-icon-deleteLight { background-position: 0 -403px; } +.ui-state-default .btn-icon-disk, .ui-widget-content .btn-icon-disk { background-position: 0 -420px; } +.ui-state-default .btn-icon-document--pencil, .ui-widget-content .btn-icon-document--pencil { background-position: 0 -436px; } +.ui-state-default .btn-icon-download-csv, .ui-widget-content .btn-icon-download-csv { background-position: 0 -452px; } +.ui-state-default .btn-icon-drive-upload, .ui-widget-content .btn-icon-drive-upload { background-position: 0 -468px; } +.ui-state-default .btn-icon-drive-upload_disabled, .ui-widget-content .btn-icon-drive-upload_disabled { background-position: 0 -484px; } +.ui-state-default .btn-icon-grid_print, .ui-widget-content .btn-icon-grid_print { background-position: 0 -500px; } +.ui-state-default .btn-icon-magnifier, .ui-widget-content .btn-icon-magnifier { background-position: 0 -516px; } +.ui-state-default .btn-icon-minus-circle, .ui-widget-content .btn-icon-minus-circle { background-position: 0 -532px; } +.ui-state-default .btn-icon-minus-circle_disabled, .ui-widget-content .btn-icon-minus-circle_disabled { background-position: 0 -548px; } +.ui-state-default .btn-icon-navigation, .ui-widget-content .btn-icon-navigation { background-position: 0 -564px; } +.ui-state-default .btn-icon-navigation_disabled, .ui-widget-content .btn-icon-navigation_disabled { background-position: 0 -580px; } +.ui-state-default .btn-icon-network-cloud, .ui-widget-content .btn-icon-network-cloud { background-position: 0 -596px; } +.ui-state-default .btn-icon-network-cloud_disabled, .ui-widget-content .btn-icon-network-cloud_disabled { background-position: 0 -612px; } +.ui-state-default .btn-icon-pencil, .ui-widget-content .btn-icon-pencil { background-position: 0 -628px; } +.ui-state-default .btn-icon-pencil_disabled, .ui-widget-content .btn-icon-pencil_disabled { background-position: 0 -644px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition, .ui-widget-content .btn-icon-plug-disconnect-prohibition { background-position: 0 -660px; } +.ui-state-default .btn-icon-plug-disconnect-prohibition_disabled, .ui-widget-content .btn-icon-plug-disconnect-prohibition_disabled { background-position: 0 -676px; } +.ui-state-default .btn-icon-preview, .ui-widget-content .btn-icon-preview { background-position: 0 -692px; } +.ui-state-default .btn-icon-preview_disabled, .ui-widget-content .btn-icon-preview_disabled { background-position: 0 -708px; } +.ui-state-default .btn-icon-settings, .ui-widget-content .btn-icon-settings { background-position: 0 -724px; } +.ui-state-default .btn-icon-settings_disabled, .ui-widget-content .btn-icon-settings_disabled { background-position: 0 -740px; } +.ui-state-default .btn-icon-unpublish, .ui-widget-content .btn-icon-unpublish { background-position: 0 -756px; } +.ui-state-default .btn-icon-unpublish_disabled, .ui-widget-content .btn-icon-unpublish_disabled { background-position: 0 -772px; } .icon { text-indent: -9999px; border: none; outline: none; } -.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s391afdd013.png'); } -.icon.icon-24.icon-assetadmin { background-position: 0 -120px; } -.icon.icon-24.icon-cmsmain { background-position: 0 -48px; } -.icon.icon-24.icon-cmspagescontroller { background-position: 0 -216px; } -.icon.icon-24.icon-cmssettingscontroller { background-position: 0 0; } +.icon.icon-24 { width: 24px; height: 24px; background: url('../images/menu-icons/24x24-s0dc15c36f9.png'); } +.icon.icon-24.icon-assetadmin { background-position: 0 -216px; } +.icon.icon-24.icon-cmsmain { background-position: 0 -192px; } +.icon.icon-24.icon-cmspagescontroller { background-position: 0 -168px; } +.icon.icon-24.icon-cmssettingscontroller { background-position: 0 -96px; } .icon.icon-24.icon-securityadmin { background-position: 0 -24px; } -.icon.icon-24.icon-reportadmin { background-position: 0 -72px; } -.icon.icon-24.icon-commentadmin { background-position: 0 -192px; } -.icon.icon-24.icon-help { background-position: 0 -96px; } -.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-sf5b94bb49b.png'); } -.icon.icon-16.icon-assetadmin { background-position: 0 -80px; } -.icon.icon-16.icon-cmsmain { background-position: 0 -16px; } +.icon.icon-24.icon-reportadmin { background-position: 0 -240px; } +.icon.icon-24.icon-commentadmin { background-position: 0 0; } +.icon.icon-24.icon-help { background-position: 0 -144px; } +.icon.icon-16 { width: 16px; height: 16px; background: url('../images/menu-icons/16x16-s3f4c846209.png'); } +.icon.icon-16.icon-assetadmin { background-position: 0 -144px; } +.icon.icon-16.icon-cmsmain { background-position: 0 -128px; } .icon.icon-16.icon-cmspagescontroller { background-position: 0 -112px; } -.icon.icon-16.icon-cmssettingscontroller { background-position: 0 0; } -.icon.icon-16.icon-securityadmin { background-position: 0 -48px; } -.icon.icon-16.icon-reportadmin { background-position: 0 -32px; } -.icon.icon-16.icon-commentadmin { background-position: 0 -144px; } -.icon.icon-16.icon-help { background-position: 0 -64px; } +.icon.icon-16.icon-cmssettingscontroller { background-position: 0 -64px; } +.icon.icon-16.icon-securityadmin { background-position: 0 -16px; } +.icon.icon-16.icon-reportadmin { background-position: 0 -160px; } +.icon.icon-16.icon-commentadmin { background-position: 0 0; } +.icon.icon-16.icon-help { background-position: 0 -96px; } /** ----------------------------- CMS Components ------------------------------ */ /** File: typography.scss Contains the basic typography related styles for the admin interface. */ -body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444444; } +body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; color: #444; } .cms h2, .cms h3, .cms h4, .cms h5 { font-weight: bold; margin: 16px 0 16px 0; line-height: 16px; } .cms h2 { font-size: 18px; line-height: 24px; } @@ -123,18 +123,18 @@ body, html { font-size: 12px; line-height: 16px; font-family: Arial, sans-serif; .cms code { font-family: 'Bitstream Vera Sans Mono','Courier', monospace; } /** This file defines CMS-specific customizations to the jQuery UI theme. Every rule should contain ONLY overwritten jQuery UI rules (with 'ui-' prefix). This file should be fairly short, as we're using our own custom jQuery UI theme already. TODO Add theme reference Use _style.scss to add more generic style information, and read the jQuery UI theming API: http://jqueryui.com/docs/Theming/API */ -.ui-widget-content, .ui-widget { color: #444444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } +.ui-widget-content, .ui-widget { color: #444; font-size: 12px; font-family: Arial, sans-serif; border: 0; } -.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -o-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; } +.ui-widget-header { background-color: #b0bec7; padding: 8px 8px 6px 8px; border-bottom: 2px solid #8399a7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RkZTNlNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dde3e7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#dde3e7, #92a5b2); background-image: -webkit-linear-gradient(#dde3e7, #92a5b2); background-image: linear-gradient(#dde3e7, #92a5b2); border-bottom: 3px solid #5c7382; padding: 8px; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-widget-header .ui-dialog-title { padding: 6px 10px; text-shadow: #ced7dc 1px 1px 0; } .ui-widget-header a.ui-dialog-titlebar-close { position: absolute; top: -8px; right: -15px; width: 30px; height: 30px; z-index: 100000; } .ui-widget-header a.ui-state-hover { border-color: transparent; background: transparent; } -.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s10286f549b.png') 0 -256px no-repeat; } -.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s10286f549b.png') 0 0 no-repeat; width: 30px; height: 30px; } +.ui-widget-header a.ui-state-hover .ui-icon-closethick { background: url('../images/sprites-32x32-s871d283813.png') 0 -356px no-repeat; } +.ui-widget-header .ui-icon-closethick { background: url('../images/sprites-32x32-s871d283813.png') 0 -396px no-repeat; width: 30px; height: 30px; } .ui-state-hover { cursor: pointer; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444444; font-size: 12px; font-family: Arial, sans-serif; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { color: #444; font-size: 12px; font-family: Arial, sans-serif; } .ui-accordion .ui-accordion-header { border-color: #c0c0c2; margin-bottom: 0; } .ui-accordion .ui-accordion-content { border: 1px solid #c0c0c2; border-top: none; } @@ -150,11 +150,11 @@ form.nostyle .middleColumn { margin-left: 0; } form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyle .TreeDropdownField { width: auto; max-width: auto; } .field { display: block; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -moz-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); -o-box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); box-shadow: 0 1px 0 rgba(245, 245, 245, 0.8); padding: 0 0 7px 0; margin: 8px 0; *zoom: 1; } -.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.field.noborder, .field:last-child { padding-bottom: 0; border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .field:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .field.nolabel .middleColumn { margin-left: 0; } .field.nolabel .description { margin-left: 0; } -.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444444; clear: none; } +.field.checkbox label.right { margin: 4px 0 0 0; display: inline; font-style: normal; color: #444; clear: none; } .field label.left { float: left; display: block; width: 176px; padding: 8px 8px 8px 0; line-height: 16px; font-weight: bold; text-shadow: 1px 1px 0 white; } .field label.right { cursor: pointer; clear: both; color: #777777; display: block; font-style: italic; margin: 4px 0 0 184px; } .field .middleColumn { margin-left: 184px; } @@ -162,12 +162,12 @@ form.nostyle input.text, form.nostyle textarea, form.nostyle select, form.nostyl .field .fieldgroup .fieldgroup-field.last { /* This is used on page/settings/visibility */ padding-bottom: 8px; /* replicates li item spacing */ } .field .description { clear: both; color: #777777; display: block; font-style: italic; line-height: 16px; margin: 4px 0 0 184px; } .field.checkbox .description, .field.ss-gridfield .description { margin-left: 0; } -.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } +.field input.text, .field textarea, .field select, .field .TreeDropdownField { margin-left: 10px; width: 100%; max-width: 512px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .field input.text.description, .field textarea.description, .field select.description, .field .TreeDropdownField.description { margin: 0; } .field input.text .description, .field textarea .description, .field select .description, .field .TreeDropdownField .description { max-width: 512px; } -.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -o-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } -.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: gray; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } -.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -o-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } +.field input.text, .field textarea, .field .TreeDropdownField { background: #fff; border: 1px solid #b3b3b3; padding: 7px 7px; line-height: 16px; margin: 0; outline: none; -moz-transition: 0.2s box-shadow ease-in; -webkit-transition: 0.2s box-shadow ease-in; -o-transition: 0.2s box-shadow ease-in; transition: 0.2s box-shadow ease-in; -moz-transition: 0.2s border ease-in; -webkit-transition: 0.2s border ease-in; -o-transition: 0.2s border ease-in; transition: 0.2s border ease-in; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VhZWFlYSIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(10%, #ffffff)); background-image: -moz-linear-gradient(#eaeaea, #ffffff 10%); background-image: -webkit-linear-gradient(#eaeaea, #ffffff 10%); background-image: linear-gradient(#eaeaea, #ffffff 10%); } +.field input.text:focus, .field textarea:focus, .field .TreeDropdownField:focus { border: 1px solid #9a9a9a; border-top-color: #808080; -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset; } +.field input[disabled], .field input.disabled, .field textarea[disabled], .field textarea.disabled, .field select[disabled], .field select.disabled { color: #777777; background: #efefef; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JjYmNiYyIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZWZlZmVmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNiY2JjYmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bcbcbc), color-stop(10%, #efefef), color-stop(90%, #ffffff), color-stop(100%, #bcbcbc)); background-image: -moz-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: -webkit-linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); background-image: linear-gradient(#bcbcbc, #efefef 10%, #ffffff 90%, #bcbcbc); border: 1px solid #b3b3b3; } .field#Action { box-shadow: none; } form.stacked .field label, .field.stacked label { display: block; float: none; padding-bottom: 10px; } @@ -189,20 +189,20 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .field .chzn-container { max-width: 416px; } .field .chzn-container .chzn-results li { font-size: 11px; line-height: 16px; padding: 4px 4px; } .field .chzn-container-active .chzn-single { border: 1px solid #9a9a9a; } -.field .chzn-container-single .chzn-single { height: 26px; line-height: 26px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -o-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } +.field .chzn-container-single .chzn-single { height: 26px; line-height: 26px; /* not relative, as then we'd had to redo most of chzn */ font-size: 12px; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmZWZlZiIvPjxzdG9wIG9mZnNldD0iMTAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI5MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlZmVmZWYiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #efefef), color-stop(10%, #ffffff), color-stop(90%, #ffffff), color-stop(100%, #efefef)); background-image: -moz-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: -webkit-linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); background-image: linear-gradient(#efefef, #ffffff 10%, #ffffff 90%, #efefef); } .field .chzn-container-single .chzn-single:hover, .field .chzn-container-single .chzn-single:focus, .field .chzn-container-single .chzn-single:active { text-decoration: none; } .field .chzn-container-single .chzn-single div { width: 24px; } .field .chzn-container-single .chzn-single div b { background-position: 4px 0px; } -.field .chzn-choices { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } +.field .chzn-choices { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } .field input.month, .field input.day, .field input.year { width: 56px; } .field input.time { width: 88px; } .field.remove-splitter { border-bottom: none; box-shadow: none; } /** ---------------------------------------------------- Buttons ---------------------------------------------------- */ -.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073c1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } +.cms .button-no-style button, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: none; border: none; color: #0073C1; display: block; font-weight: normal; margin: 0; outline: none; padding-left: 10px; padding-right: 10px; text-align: left; text-shadow: none; white-space: normal; } .cms .button-no-style button.ss-ui-action-destructive, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-action-destructive { color: #c22730; } .cms .button-no-style button span, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button span { padding-left: 0; padding-right: 0; } -.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } +.cms .button-no-style button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:hover, .cms .button-no-style button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:focus, .cms .button-no-style button:active, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; background: none; border: none; } .cms .button-no-style button.loading, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading { background: transparent url(../../images/network-save.gif) no-repeat 8px center; } .cms .button-no-style button.loading .ui-button-text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.loading .ui-button-text { padding-left: 20px; } .cms .Actions > *, .cms .cms-actions-row > * { display: block; float: left; margin-right: 8px; } @@ -212,17 +212,17 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .cms input.loading, .cms button.loading, .cms input.ui-state-default.loading, .cms .ui-widget-content input.ui-state-default.loading, .cms .ui-widget-header input.ui-state-default.loading { color: #525252; border-color: #d5d3d3; cursor: default; } .cms input.loading .ui-icon, .cms button.loading .ui-icon, .cms input.ui-state-default.loading .ui-icon, .cms .ui-widget-content input.ui-state-default.loading .ui-icon, .cms .ui-widget-header input.ui-state-default.loading .ui-icon { background: transparent url(../../images/network-save.gif) no-repeat 0 0; } .cms input.loading.ss-ui-action-constructive .ui-icon, .cms button.loading.ss-ui-action-constructive .ui-icon { background: transparent url(../../images/network-save-constructive.gif) no-repeat 0 0; } -.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -o-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } -.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } -.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -o-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -webkit-box-shadow: 0 0 5px #b3b3b3 inset; -moz-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } +.cms .ss-ui-button { margin-top: 0px; font-weight: bold; text-decoration: none; line-height: 16px; color: #393939; border: 1px solid #c0c0c2; border-bottom: 1px solid #a6a6a9; cursor: pointer; background-color: #e6e6e6; white-space: nowrap; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background: -moz-linear-gradient(#ffffff, #d9d9d9); background: -webkit-linear-gradient(#ffffff, #d9d9d9); background: linear-gradient(#ffffff, #d9d9d9); text-shadow: white 0 1px 1px; /* constructive */ /* destructive */ } +.cms .ss-ui-button.ui-state-hover, .cms .ss-ui-button:hover { text-decoration: none; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; } +.cms .ss-ui-button:active, .cms .ss-ui-button:focus, .cms .ss-ui-button.ui-state-active, .cms .ss-ui-button.ui-state-focus { border: 1px solid #b3b3b3; background-color: white; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #e6e6e6)); background: -moz-linear-gradient(#ffffff, #e6e6e6); background: -webkit-linear-gradient(#ffffff, #e6e6e6); background: linear-gradient(#ffffff, #e6e6e6); -moz-box-shadow: 0 0 5px #b3b3b3 inset; -webkit-box-shadow: 0 0 5px #b3b3b3 inset; box-shadow: 0 0 5px #b3b3b3 inset; } .cms .ss-ui-button.ss-ui-action-minor span { padding-left: 0; padding-right: 0; } -.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1f9433; border-bottom-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -webkit-linear-gradient(#93be42, #1f9433); background: -moz-linear-gradient(#93be42, #1f9433); background: -o-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } -.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1f9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -o-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } -.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } -.cms .ss-ui-button.ss-ui-action-destructive { color: red; background-color: #e6e6e6; } +.cms .ss-ui-button.ss-ui-action-constructive { text-shadow: none; font-weight: bold; color: white; border-color: #1F9433; border-bottom-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkzYmU0MiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFmOTQzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #93be42), color-stop(100%, #1f9433)); background: -moz-linear-gradient(#93be42, #1f9433); background: -webkit-linear-gradient(#93be42, #1f9433); background: linear-gradient(#93be42, #1f9433); text-shadow: #1c872f 0 -1px -1px; } +.cms .ss-ui-button.ss-ui-action-constructive.ui-state-hover, .cms .ss-ui-button.ss-ui-action-constructive:hover { border-color: #166a24; background-color: #1F9433; background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2E0Y2EzYSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzIzYTkzYSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #a4ca3a), color-stop(100%, #23a93a)); background: -moz-linear-gradient(#a4ca3a, #23a93a); background: -webkit-linear-gradient(#a4ca3a, #23a93a); background: linear-gradient(#a4ca3a, #23a93a); } +.cms .ss-ui-button.ss-ui-action-constructive:active, .cms .ss-ui-button.ss-ui-action-constructive:focus, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-active, .cms .ss-ui-button.ss-ui-action-constructive.ui-state-focus { background-color: #1d8c30; -moz-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); -webkit-box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); box-shadow: inset 0 1px 3px #17181a, 0 1px 0 rgba(255, 255, 255, 0.6); } +.cms .ss-ui-button.ss-ui-action-destructive { color: #f00; background-color: #e6e6e6; } .cms .ss-ui-button.ss-ui-button-small .ui-button-text { font-size: 10px; } .cms .ss-ui-button.ui-state-highlight { background-color: #e6e6e6; border: 1px solid #708284; } -.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-button.ss-ui-action-minor { background: none; border: 0; color: #393939; text-decoration: underline; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-button.ss-ui-action-minor:hover { text-decoration: none; color: #1f1f1f; } .cms .ss-ui-button.ss-ui-action-minor:focus, .cms .ss-ui-button.ss-ui-action-minor:active { text-decoration: none; color: #525252; } .cms .ss-ui-button.ss-ui-button-loading { opacity: 0.8; } @@ -241,10 +241,10 @@ form.small .field input.text, form.small .field textarea, form.small .field sele .ss-toggle { margin: 8px 0; } .ss-toggle .ui-accordion-header { font-weight: bold; font-size: 12px; } -.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0icmdiYSgyNDEsIDI0MiwgMjQyLCAwLjgpIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDIwMSwgMjA1LCAyMDYsIDAuOCkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -o-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } +.ss-toggle .ui-accordion-header.ui-state-default { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2YxZjJmMiIgc3RvcC1vcGFjaXR5PSIwLjgiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjOWNkY2UiIHN0b3Atb3BhY2l0eT0iMC44Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNncmFkKSIgLz48L3N2Zz4g'); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, rgba(241, 242, 242, 0.8)), color-stop(100%, rgba(201, 205, 206, 0.8))); background-image: -moz-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: -webkit-linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); background-image: linear-gradient(rgba(241, 242, 242, 0.8), rgba(201, 205, 206, 0.8)); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } .ss-toggle .ui-accordion-header .ui-accordion-header-icon { margin-top: -9px; } .ss-toggle .ui-accordion-content { padding: 8px 0 12px; } -.ss-toggle .ui-accordion-content .field { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } +.ss-toggle .ui-accordion-content .field { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; padding-left: 12px; padding-right: 12px; } .ss-toggle .ui-accordion-content .field:last-child { margin-bottom: 0; } .ss-toggle .ui-accordion-content .field .middleColumn { margin-left: 0; } .ss-toggle .ui-accordion-content .field label { float: none; margin-left: 0; } @@ -299,13 +299,13 @@ fieldset.switch-states { padding: 0 20px 0 0; margin-right: 5px; /* Note: with a little adjustment the switch can take more than 5 items, but a dropdown would probably be more appropriate */ } -fieldset.switch-states .switch { -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } +fieldset.switch-states .switch { -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.1); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -webkit-animation: bugfix infinite 1s; background: #dee0e3; display: block; height: 25px; margin-top: 3px; padding: 0 10px; position: relative; width: 100%; z-index: 5; } fieldset.switch-states .switch label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); color: #858585; color: rgba(31, 31, 31, 0.5); cursor: pointer; float: left; font-weight: bold; height: 100%; line-height: 25px; position: relative; z-index: 2; /* Make text unselectable in browsers that support that */ -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } fieldset.switch-states .switch label:hover { color: #6c6c6c; color: rgba(31, 31, 31, 0.7); } -fieldset.switch-states .switch label span { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } +fieldset.switch-states .switch label span { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; display: inline-block; padding: 0 10px; } fieldset.switch-states .switch input { opacity: 0; filter: alpha(opacity=0); visibility: none; position: absolute; } fieldset.switch-states .switch input:checked + label { -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; color: #fff; text-shadow: 0 -1px 0 #287099; } -fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -o-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } +fieldset.switch-states .switch .slide-button { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJiOWMzMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzY0YWIzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2b9c32), color-stop(100%, #64ab36)); background-image: -moz-linear-gradient(#2b9c32, #64ab36); background-image: -webkit-linear-gradient(#2b9c32, #64ab36); background-image: linear-gradient(#2b9c32, #64ab36); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; -moz-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); -webkit-box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.3), 0 1px 0px rgba(255, 255, 255, 0.2); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -moz-transition: all 0.3s ease-out 0s; -webkit-transition: all 0.3s ease-out 0s; -o-transition: all 0.3s ease-out 0s; transition: all 0.3s ease-out 0s; background-color: #2b9c32; display: block; height: 100%; left: 0; padding: 0; position: absolute; top: 0; z-index: 1; } fieldset.switch-states.size_1 label, fieldset.switch-states.size_1 .slide-button { width: 100%; } fieldset.switch-states.size_1 label span { padding-right: 0; } fieldset.switch-states.size_1 input:checked:nth-of-type(2) ~ .slide-button { left: 100%; } @@ -335,7 +335,6 @@ fieldset.switch-states.size_5 input:checked:nth-of-type(5) ~ .slide-button { lef @-webkit-keyframes bugfix { from { position: relative; } to { position: relative; } } - /** * This file defines most styles of the CMS: Colors, fonts, backgrounds, * alignments, dimensions. @@ -353,7 +352,7 @@ html, body { width: 100%; height: 100%; /* Removes RHS whitespace on iPad */ ove body.cms { overflow: hidden; } -.cms a { color: #0073c1; text-decoration: none; } +.cms a { color: #0073C1; text-decoration: none; } .cms a:hover, .cms a:focus { text-decoration: underline; } .cms body .ui-widget { font-family: Arial, sans-serif; font-size: 12px; } .cms strong { font-weight: bold; } @@ -362,12 +361,12 @@ body.cms { overflow: hidden; } .hide, .cms-helper-hide-actions .Actions { display: none; } /** -------------------------------------------- Panels Styles -------------------------------------------- */ -.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #eceff1; } +.cms-container { height: 100%; /*background: $tab-panel-texture-background;*/ background: #ECEFF1; } -.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } +.cms-preview, .cms-menu, .cms-content, .cms-content-header, .cms-content-tools, .cms-content-fields, .cms-edit-form, .cms-preview, .cms-preview iframe, .cms-preview-controls { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; } -.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #d4d6d8; } -.cms-content-header a { color: #0073c1; } +.cms-content-header { padding-left: 16px; z-index: 60; min-height: 40px; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; background-position: left bottom; background-color: #D4D6D8; } +.cms-content-header a { color: #0073C1; } .cms-content-header .backlink span.btn-icon-back { height: 16px; } .cms-content-header h2 { font-size: 14px; font-weight: bold; margin: 0; margin-bottom: 8px; } .cms-content-header h2 * { vertical-align: middle; } @@ -391,26 +390,26 @@ body.cms { overflow: hidden; } .ui-tabs .ui-tabs-nav { float: right; margin: 16px 0 -1px 0; padding: 0 12px 0 0; border-bottom: none; } .ui-tabs .ui-tabs-nav ~ .ui-tabs-panel { border-top: 1px solid #c0c0c2; clear: both; } .ui-tabs .ui-tabs-nav li { top: 0; float: left; border-bottom: 0 !important; } -.ui-tabs .ui-tabs-nav li a { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; float: none; font-weight: bold; color: #444444; line-height: 32px; padding: 0 16px 0; } +.ui-tabs .ui-tabs-nav li a { display: inline-block; vertical-align: middle; *vertical-align: auto; *zoom: 1; *display: inline; float: none; font-weight: bold; color: #444; line-height: 32px; padding: 0 16px 0; } .ui-tabs .ui-tabs-nav li:last-child { margin-right: 0; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; } .ui-tabs .ui-tabs-nav .ui-state-default { border: 1px solid #c0c0c2; background: #ced7dc; } .ui-tabs .ui-tabs-nav .ui-state-default a { color: #5e5e5e; text-shadow: #e6e6e6 0 1px 0; } .ui-tabs .ui-tabs-nav .ui-state-active { padding-bottom: 1px; border: 1px solid #c0c0c2; background-color: #e6eaed; } -.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444444; } -.ui-tabs .ui-tabs-nav.ui-state-active { border-color: gray; } +.ui-tabs .ui-tabs-nav .ui-state-active a { color: #444; } +.ui-tabs .ui-tabs-nav.ui-state-active { border-color: #808080; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon { text-indent: -9999em; } .ui-tabs .ui-tabs-nav li.cms-tabset-icon a { display: block; padding-left: 40px; padding-right: 0; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -504px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -354px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -454px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -304px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -154px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -204px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -254px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -54px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -404px no-repeat; } -.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s88957ee578.png') 0 -104px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -304px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -504px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -204px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -104px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -404px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.list.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -254px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.tree.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -454px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.gallery.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -154px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.edit.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -54px no-repeat; } +.ui-tabs .ui-tabs-nav li.cms-tabset-icon.search.ui-state-active a { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 -354px no-repeat; } .ui-tabs .cms-panel-padded .ui-tabs-panel { padding: 0; } .ui-tabs .cms-panel-padded .ui-tabs-panel .ui-tabs-panel { padding: 8px 0 0 0; } .ui-tabs .cms-panel-padded .Actions { padding: 0; } @@ -421,8 +420,8 @@ body.cms { overflow: hidden; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li { margin-right: 0; margin-top: 0; } .ui-tabs.cms-tabset-primary .ui-tabs-nav li a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary li a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav li a { margin: 0; line-height: 39px; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-all, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-top, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-right, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tr, .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-corner-tl, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-all, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-top, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-right, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tr, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-corner-tl, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-all, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-top, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-right, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tr, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-corner-tl { border-radius: 0; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -o-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } -.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #eceff1; z-index: 2; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-default, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-default, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-default { -moz-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; -webkit-box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; box-shadow: rgba(201, 205, 206, 0.8) 0 0 2px; background-color: #b0bec7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Q0ZGJlMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #d4dbe0), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#d4dbe0, #b0bec7); background-image: -webkit-linear-gradient(#d4dbe0, #b0bec7); background-image: linear-gradient(#d4dbe0, #b0bec7); border-top: none; border-right-color: #8399a7; border-left-color: #ced7dc; } +.ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background: #e6eaed; border-top: none; border-right-color: #b3b3b3; border-left-color: #ECEFF1; z-index: 2; } .ui-tabs.cms-tabset-primary .ui-tabs-nav .ui-state-active a, .ui-tabs .ui-tabs-nav.cms-tabset-nav-primary .ui-state-active a, .ui-tabs .cms-content-header-tabs .ui-tabs-nav .ui-state-active a { border-bottom: none; } .cms-content-header-tabs { float: right; } @@ -433,19 +432,19 @@ body.cms { overflow: hidden; } .cms-content-loading-spinner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; background: url(../images/spinner.gif) no-repeat 50% 50%; } /** ----------------------------------------------- Loading Screen ------------------------------------------------ */ -.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, white, #efefef, #c7c7c7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#e3e3e3), to(white)); } +.ss-loading-screen { width: 100%; height: 100%; overflow: hidden; position: absolute; z-index: 100000; background: #fff; background: -moz-radial-gradient(50% 50% 180deg, circle cover, #FFFFFF, #EFEFEF, #C7C7C7 100%); background: -webkit-gradient(radial, 50% 50%, 350, 50% 50%, 0, from(#E3E3E3), to(white)); } .ss-loading-screen .loading-logo { width: 100%; height: 100%; overflow: hidden; position: absolute; background: transparent url(../images/silverstripe_logo.png) no-repeat 50% 50%; } .ss-loading-screen p { width: 100%; text-align: center; position: absolute; bottom: 80px; z-index: 100001; } -.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } +.ss-loading-screen p span.notice { width: 300px; font-size: 14px; padding: 10px 20px; color: #dc7f00; border: none; background: none; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; display: inline-block; zoom: 1; *display: inline; } .ss-loading-screen .loading-animation { display: none; position: absolute; left: 49%; top: 75%; } /** -------------------------------------------- Actions -------------------------------------------- */ -.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 0; border-top: 1px solid #cacacc; -webkit-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -moz-box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #eceff1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #eceff1; } +.cms-content-actions, .cms-preview-controls { margin: 0; padding: 12px 12px; z-index: 0; border-top: 1px solid #cacacc; -moz-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; -webkit-box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; box-shadow: 1px 0 0 #ECEFF1, rgba(248, 248, 248, 0.9) 0 1px 0px inset, rgba(201, 205, 206, 0.8) 0 0 1px; height: 28px; background-color: #ECEFF1; } /** -------------------------------------------- Messages -------------------------------------------- */ -.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px 3px 3px 3px; -moz-border-radius: 3px 3px 3px 3px; -ms-border-radius: 3px 3px 3px 3px; -o-border-radius: 3px 3px 3px 3px; border-radius: 3px 3px 3px 3px; } -.message.notice { background-color: #f0f8fc; border-color: #93cde8; } -.message.warning { background-color: #fefbde; border-color: #e9d104; } +.message { display: block; clear: both; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #ccc solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px 3px 3px 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 3px 3px; } +.message.notice { background-color: #f0f8fc; border-color: #93CDE8; } +.message.warning { background-color: #fefbde; border-color: #E9D104; } .message.error, .message.bad, .message.required, .message.validation { background-color: #fae8e9; border-color: #e68288; } .message.good { background-color: #eaf6e4; border-color: #72c34b; } .message p { margin: 0; } @@ -453,7 +452,7 @@ body.cms { overflow: hidden; } .cms-edit-form .message { margin: 16px; } .cms-edit-form .ui-tabs-panel .message { margin: 16px 0; } -.notice-item { border: 0; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } +.notice-item { border: 0; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; font-family: inherit; font-size: inherit; padding: 8px 10px 8px 10px; } .notice-item-close { color: #333333; background: url(../images/filter-icons.png) no-repeat 0 -20px; width: 1px; height: 1px; overflow: hidden; padding: 0px 0 20px 15px; } @@ -479,7 +478,7 @@ body.cms { overflow: hidden; } #PageType ul li { float: none; width: 100%; padding: 9px 0 9px 15px; overflow: hidden; border-bottom-width: 2px; border-bottom: 2px groove rgba(255, 255, 255, 0.8); -webkit-border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; border-image: url(../images/textures/bg_fieldset_elements_border.png) 2 stretch stretch; } #PageType ul li:last-child { border-bottom: none; } #PageType ul li:hover, #PageType ul li.selected { background-color: rgba(255, 255, 102, 0.3); } -#PageType ul li.disabled { color: #aaaaaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } +#PageType ul li.disabled { color: #aaa; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); opacity: 0.5; } #PageType ul li.disabled:hover { background: none; } #PageType ul li input { margin: inherit; } #PageType ul li label { padding-left: 0; padding-bottom: 0; } @@ -493,22 +492,22 @@ body.cms { overflow: hidden; } .cms-content-toolbar:after { content: "\0020"; display: block; height: 0; clear: both; overflow: hidden; visibility: hidden; } .cms-content-toolbar .cms-tree-view-modes { float: right; padding-top: 5px; } .cms-content-toolbar .cms-tree-view-modes * { display: inline-block; } -.cms-content-toolbar .cms-tree-view-modes * label { color: #0073c1; } -.cms-content-toolbar .chzn-container-single .chzn-single { height: 26px; line-height: 26px; padding-left: 25px; color: #576468; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2NkY2RjZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #cdcdcd)); background-image: -webkit-linear-gradient(#e6e6e6, #cdcdcd); background-image: -moz-linear-gradient(#e6e6e6, #cdcdcd); background-image: -o-linear-gradient(#e6e6e6, #cdcdcd); background-image: linear-gradient(#e6e6e6, #cdcdcd); font-size: 13px; font-weight: bold; text-shadow: #e6e6e6 0 -1px 1px; box-shadow: none; } -.cms-content-toolbar .chzn-container-single .chzn-single:hover { -webkit-box-shadow: 0 0 5px #b3b3b3; -moz-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2QyZDJkMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebebeb), color-stop(100%, #d2d2d2)); background-image: -webkit-linear-gradient(#ebebeb, #d2d2d2); background-image: -moz-linear-gradient(#ebebeb, #d2d2d2); background-image: -o-linear-gradient(#ebebeb, #d2d2d2); background-image: linear-gradient(#ebebeb, #d2d2d2); } -.cms-content-toolbar .chzn-container-single .chzn-single:active { -webkit-box-shadow: inset 0 1px 3px #4d4d4d; -moz-box-shadow: inset 0 1px 3px #4d4d4d; box-shadow: inset 0 1px 3px #4d4d4d; } +.cms-content-toolbar .cms-tree-view-modes * label { color: #0073C1; } +.cms-content-toolbar .chzn-container-single .chzn-single { height: 26px; line-height: 26px; padding-left: 25px; color: #576468; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U2ZTZlNiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2NkY2RjZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e6e6e6), color-stop(100%, #cdcdcd)); background-image: -moz-linear-gradient(#e6e6e6, #cdcdcd); background-image: -webkit-linear-gradient(#e6e6e6, #cdcdcd); background-image: linear-gradient(#e6e6e6, #cdcdcd); font-size: 13px; font-weight: bold; text-shadow: #e6e6e6 0 -1px 1px; box-shadow: none; } +.cms-content-toolbar .chzn-container-single .chzn-single:hover { -moz-box-shadow: 0 0 5px #b3b3b3; -webkit-box-shadow: 0 0 5px #b3b3b3; box-shadow: 0 0 5px #b3b3b3; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2QyZDJkMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ebebeb), color-stop(100%, #d2d2d2)); background-image: -moz-linear-gradient(#ebebeb, #d2d2d2); background-image: -webkit-linear-gradient(#ebebeb, #d2d2d2); background-image: linear-gradient(#ebebeb, #d2d2d2); } +.cms-content-toolbar .chzn-container-single .chzn-single:active { -moz-box-shadow: inset 0 1px 3px #4d4d4d; -webkit-box-shadow: inset 0 1px 3px #4d4d4d; box-shadow: inset 0 1px 3px #4d4d4d; } .cms-content-toolbar .chzn-container-single .chzn-single span { padding-top: 1px; } .cms-content-toolbar .chzn-container-single .chzn-single div { border-left: none; width: 100%; } .cms-content-toolbar .chzn-container-single .chzn-single div b { background: url(../images/sprites-32x32/menu-arrow-deselected-down.png) no-repeat 9px 11px; float: right; width: 24px; } .cms-content-toolbar .ss-ui-button { margin-bottom: 8px; } /* -------------------------------------------------------- Content Tools is the sidebar on the left of the main content panel */ -.cms-content-tools { background: #eceff1; width: 200px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #c0c0c2; -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } +.cms-content-tools { background: #ECEFF1; width: 200px; overflow-y: auto; overflow-x: hidden; z-index: 70; border-right: 1px solid #C0C0C2; -moz-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); -webkit-box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); box-shadow: rgba(248, 248, 248, 0.9) -1px 0 0 inset, 0 0 1px rgba(201, 205, 206, 0.8); float: left; position: relative; } .cms-content-tools.filter { padding: 0 !important; } .cms-content-tools .cms-panel-header { clear: both; margin: 10px 0 7px; padding-bottom: 2px; line-height: 24px; border-bottom: 1px solid #d0d3d5; -webkit-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); -o-box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 1px 0 rgba(248, 248, 248, 0.9); } .cms-content-tools .cms-panel-content { width: 184px; padding: 8.8px 8px 0; overflow: auto; height: 100%; } .cms-content-tools .cms-panel-content .Actions .ss-ui-action-constructive { margin-right: 5px; } -.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -o-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } +.cms-content-tools .cms-content-header { background-color: #748d9d; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzc0OGQ5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #748d9d)); background-image: -moz-linear-gradient(#b0bec7, #748d9d); background-image: -webkit-linear-gradient(#b0bec7, #748d9d); background-image: linear-gradient(#b0bec7, #748d9d); } .cms-content-tools .cms-content-header h2 { text-shadow: #5c7382 -1px -1px 0; width: 176px; color: white; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } .cms-content-tools h3, .cms-content-tools h4, .cms-content-tools h5 { font-weight: bold; line-height: 16px; } .cms-content-tools h3 { font-size: 13px; } @@ -525,20 +524,20 @@ body.cms { overflow: hidden; } .cms-content-tools .fieldgroup .fieldgroup-field .field { margin: 0; padding: 0; } .cms-content-tools table { margin: 8px -4px; } .cms-content-tools table thead th { color: #1f1f1f; font-weight: bold; line-height: 16px; font-size: 11px; padding: 4px; } -.cms-content-tools table tr.active { background-color: #338dc1; color: white; } -.cms-content-tools table tr.active td.first-column { -webkit-border-radius: 6px 0 0 6px; -moz-border-radius: 6px 0 0 6px; -ms-border-radius: 6px 0 0 6px; -o-border-radius: 6px 0 0 6px; border-radius: 6px 0 0 6px; } -.cms-content-tools table tr.active td.last-column { -webkit-border-radius: 0 6px 6px 0; -moz-border-radius: 0 6px 6px 0; -ms-border-radius: 0 6px 6px 0; -o-border-radius: 0 6px 6px 0; border-radius: 0 6px 6px 0; } +.cms-content-tools table tr.active { background-color: #338DC1; color: white; } +.cms-content-tools table tr.active td.first-column { -moz-border-radius: 6px 0 0 6px; -webkit-border-radius: 6px; border-radius: 6px 0 0 6px; } +.cms-content-tools table tr.active td.last-column { -moz-border-radius: 0 6px 6px 0; -webkit-border-radius: 0; border-radius: 0 6px 6px 0; } .cms-content-tools table td { padding: 4px; line-height: 16px; vertical-align: top; } .cms-content-tools td { border-bottom: 1px solid #ced7dc; padding: 7px 2px; font-size: 11px; } /** ------------------------------------------------------------------ * CMS notice, used for filter messages, but generic enough to use elsewhere * ----------------------------------------------------------------- */ -.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } +.cms-notice { display: block; margin: 0 0 8px; padding: 10px 12px; font-weight: normal; border: 1px #d0d3d5 solid; background: #fff; background: rgba(255, 255, 255, 0.5); text-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } /** CMS Batch actions */ .cms-content-batchactions { float: left; position: relative; display: block; } -.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } +.cms-content-batchactions .view-mode-batchactions-wrapper { height: 18px; float: left; padding: 4px 6px; border: 1px solid #aaa; margin-bottom: 8px; margin-right: -1px; background-color: #D9D9D9; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); border-top-left-radius: 4px; border-bottom-left-radius: 4px; } .cms-content-batchactions .view-mode-batchactions-wrapper input { vertical-align: middle; } .cms-content-batchactions .view-mode-batchactions-wrapper label { vertical-align: middle; display: none; } .cms-content-batchactions .view-mode-batchactions-wrapper fieldset, .cms-content-batchactions .view-mode-batchactions-wrapper .Actions { display: inline-block; } @@ -549,7 +548,7 @@ body.cms { overflow: hidden; } .cms-content-batchactions form.cms-batch-actions { float: left; } .cms-content-batchactions.inactive form { display: none; } .cms-content-batchactions .chzn-container-single { display: block; } -.cms-content-batchactions .chzn-container-single .chzn-single { border-radius: 0; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -o-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(top, #ffffff, #d9d9d9); } +.cms-content-batchactions .chzn-container-single .chzn-single { border-radius: 0; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #ffffff, #d9d9d9); background-image: -webkit-linear-gradient(top, #ffffff, #d9d9d9); background-image: linear-gradient(to bottom, #ffffff, #d9d9d9); } .cms-content-batchactions .chzn-container-single .chzn-single span { padding-top: 0; } .cms-content-batchactions .cms-batch-actions .dropdown { margin: 0; } .cms-content-batchactions .cms-batch-actions .dropdown .chzn-single { padding-left: 8px; /* use default size without icon */ } @@ -582,7 +581,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .memberdatetimeoptionset .description { font-style: normal; } .memberdatetimeoptionset .toggle { font-size: 11px; } -.cms .cms-content { border-right: 1px solid #BBB; -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eceff1; width: 800px; z-index: 40; } +.cms .cms-content { border-right: 1px solid #BBB; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #ECEFF1; width: 800px; z-index: 40; } .cms .cms-content-fields { overflow-y: auto; overflow-x: auto; background: #e6eaed; width: 100%; } .cms .cms-content-fields #Root_Main .confirmedpassword { border-bottom: none; box-shadow: none; } .cms .cms-content-fields #Root_Main .customFormat { max-width: 80px; } @@ -598,21 +597,21 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; /** -------------------------------------------- Panels -------------------------------------------- */ .cms-panel { overflow: hidden; } -.cms-panel .cms-panel-toggle { -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } -.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; -moz-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } +.cms-panel .cms-panel-toggle { -moz-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); box-shadow: 0 0 1px rgba(248, 248, 248, 0.9); } +.cms-panel .cms-panel-toggle.south { border-top: 1px solid #9eafba; -moz-box-shadow: #bcc8cf 0 1px 0px inset; -webkit-box-shadow: #bcc8cf 0 1px 0px inset; box-shadow: #bcc8cf 0 1px 0px inset; position: absolute; bottom: 0; width: 100%; } .cms-panel .cms-panel-toggle a { display: block; text-align: right; padding: 4px 0; width: 100%; text-decoration: none; } .cms-panel .cms-panel-toggle a span { display: inline-block; margin: 0 5px; color: #1f1f1f; font-size: 16px; } .cms-panel .cms-panel-toggle a.toggle-expand { width: 40px; display: none; } -.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } +.cms-panel.cms-content-tools .cms-panel-toggle.south { border-top: 1px solid #cfd6db; -moz-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; -webkit-box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; box-shadow: rgba(248, 248, 248, 0.9) 0 1px 0px inset; } .cms-panel.collapsed { cursor: pointer; } .cms-panel.collapsed .cms-panel-header *, .cms-panel.collapsed .cms-panel-content, .cms-panel.collapsed .cms-panel-toggle a.toggle-collapse { display: none; } .cms-panel.collapsed .cms-panel-toggle a.toggle-expand { display: block; } .cms-panel .cms-panel-header { width: 100%; } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h2, .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel#cms-content-tools-CMSPageEditController .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; top: 24px; right: 577px; text-align: right; } .cms-panel .cms-panel-content-collapsed { width: 40px; display: none; } -.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -webkit-transform-origin: bottom right; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -o-transform-origin: bottom right; transform-origin: bottom right; -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -o-transform: rotate(270deg); transform: rotate(270deg); } +.cms-panel .cms-panel-content-collapsed h2, .cms-panel .cms-panel-content-collapsed h3 { border-bottom: 0; margin-left: 8px; -moz-transform-origin: bottom right; -ms-transform-origin: bottom right; -webkit-transform-origin: bottom right; transform-origin: bottom right; -moz-transform: rotate(270deg); -ms-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); } .cms-panel .cms-panel-content-collapsed .cms-panel-header { width: 600px; position: relative; right: 577px; text-align: right; border-bottom: none; box-shadow: none; } .cms-panel .child-flyout-indicator { width: 0; height: 0; border-right: 3px dashed #1f1f1f; border-top: 3px solid transparent; border-left: 3px solid transparent; border-bottom: 3px dashed #1f1f1f; position: absolute; right: 1px; margin-top: -8px; display: none; /* To be shown by javascript, see LeftAndMain.Panel.js */ } .cms-panel .collapsed-flyout { display: block !important; left: 41px; margin-top: -40px; position: fixed; width: 191px; } @@ -632,12 +631,12 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .cms .ui-dialog .ss-ui-dialog.ui-dialog-content { padding-top: 0px; } -.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; border: 3px solid #000 !important; border-radius: 8px; overflow: visible; padding: 0; } -.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } +.ui-dialog { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; border: 3px solid #000 !important; border-radius: 8px; overflow: visible; padding: 0; } +.ui-dialog .ui-dialog-titlebar.ui-widget-header { font-size: 14px; padding: 0; border: none; background-color: transparent; background-image: url(../images/textures/cms_content_header.png); background-repeat: repeat; -moz-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; -webkit-box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; box-shadow: rgba(107, 120, 123, 0.5) 0 0 4px inset; } .ui-dialog .ui-dialog-titlebar.ui-widget-header .ui-dialog-title { position: absolute; } .ui-dialog .ui-dialog-content { overflow: auto; } .ui-dialog .ui-dialog-content.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; padding-bottom: 8px; padding-top: 0px; } +.ui-dialog .cms-dialog-content { background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; padding-bottom: 8px; padding-top: 0px; } .ui-dialog .cms-dialog-content .Actions { overflow: auto; margin: 8px 0; padding-bottom: 8px; float: right; } .ui-dialog .cms-dialog-content .ui-tabs { position: static; } .ui-dialog .cms-dialog-content .ui-tabs .ui-tabs-nav { position: absolute; top: 0; right: 40px; } @@ -645,7 +644,7 @@ form.member-profile-form #Permissions .optionset li { float: none; width: auto; .ui-dialog .cms-dialog-content .clear { clear: both; } .ui-dialog.loading { background-image: url(../images/spinner.gif); background-position: 50% 50%; background-repeat: no-repeat; } -body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #f0f3f4; position: relative; } +body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_main_content.png") repeat left top #F0F3F4; position: relative; } /** -------------------------------------------- "Insert X" forms -------------------------------------------- */ .htmleditorfield-dialog.ui-dialog-content { padding: 0; position: relative; } @@ -665,9 +664,9 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-dialog .ss-insert-media, .htmleditorfield-dialog .Actions, .htmleditorfield-dialog .ss-insert-link { padding: 8px 16px; } .htmleditorfield-dialog .ss-insert-media .ui-tabs-panel, .htmleditorfield-dialog .Actions .ui-tabs-panel, .htmleditorfield-dialog .ss-insert-link .ui-tabs-panel { padding: 0; } .htmleditorfield-dialog .details .file-url { display: block; width: 300px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; } -.htmleditorfield-dialog .details .cms-file-info .field { border: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); } -.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } -.htmleditorfield-dialog .details .field.last { border-bottom: none; -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, 0); -moz-box-shadow: 0 0 0 rgba(0, 0, 0, 0); box-shadow: 0 0 0 rgba(0, 0, 0, 0); margin-bottom: 0; } +.htmleditorfield-dialog .details .cms-file-info .field { border: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; } +.htmleditorfield-dialog .details .field { border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); } +.htmleditorfield-dialog .details .field.last { border-bottom: none; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; margin-bottom: 0; } .htmleditorfield-dialog .CompositeField .text select { margin: 5px 0 0 0; } .htmleditorfield-linkform .step2 { margin-bottom: 16px; } @@ -680,7 +679,7 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield h4 { float: left; margin-top: 4px; margin-bottom: 0; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .middleColumn { margin-top: 16px; margin-left: 184px; } .htmleditorfield-mediaform .htmleditorfield-from-cms .ss-uploadfield .field.treedropdown { border-bottom: 0; padding: 0; } -.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -o-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } +.htmleditorfield-mediaform .ss-assetuploadfield .ss-uploadfield-editandorganize .ss-uploadfield-files .ss-uploadfield-item-info { background-color: #9e9e9e; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzllOWU5ZSIvPjxzdG9wIG9mZnNldD0iOCUiIHN0b3AtY29sb3I9IiM5ZDlkOWQiLz48c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzg3ODc4NyIvPjxzdG9wIG9mZnNldD0iNTQlIiBzdG9wLWNvbG9yPSIjODY4Njg2Ii8+PHN0b3Agb2Zmc2V0PSI5NiUiIHN0b3AtY29sb3I9IiM2YjZiNmIiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM2YzZjNmMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #9e9e9e), color-stop(8%, #9d9d9d), color-stop(50%, #878787), color-stop(54%, #868686), color-stop(96%, #6b6b6b), color-stop(100%, #6c6c6c)); background-image: -moz-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: -webkit-linear-gradient(top, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); background-image: linear-gradient(to bottom, #9e9e9e 0%, #9d9d9d 8%, #878787 50%, #868686 54%, #6b6b6b 96%, #6c6c6c 100%); } /** -------------------------------------------- Search forms (used in AssetAdmin, ModelAdmin, etc) -------------------------------------------- */ .cms-search-form { margin-bottom: 16px; } @@ -690,11 +689,11 @@ body.cms-dialog { overflow: auto; background: url("../images/textures/bg_cms_mai /** -------------------------------------------- Step labels -------------------------------------------- */ .step-label > * { display: inline-block; vertical-align: top; } .step-label .flyout { height: 18px; font-size: 14px; font-weight: bold; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; background-color: #667980; padding: 4px 3px 4px 6px; text-align: center; text-shadow: none; color: #fff; } -.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s10286f549b.png') 0 -296px no-repeat; margin-right: 4px; } +.step-label .arrow { height: 26px; width: 10px; background: url('../images/sprites-32x32-s871d283813.png') 0 -862px no-repeat; margin-right: 4px; } .step-label .title { height: 18px; padding: 4px; } /** -------------------------------------------- Item Edit Form -------------------------------------------- */ -.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } +.cms-file-info { overflow: auto; border-bottom: 1px solid rgba(201, 205, 206, 0.8); -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); margin-bottom: 8px; } .cms-file-info .cms-file-info-preview { float: left; width: 176px; margin-right: 8px; } .cms-file-info .cms-file-info-preview img { max-width: 176px; max-height: 128px; } .cms-file-info .cms-file-info-data { float: left; } @@ -737,10 +736,10 @@ form.import-form label.left { width: 250px; } /** -------------------------------------------- Buttons for FileUpload -------------------------------------------- */ .ss-uploadfield-item-edit-all .ui-button-text { padding-right: 0; } -.toggle-details-icon { background: url('../images/sprites-32x32-s10286f549b.png') 0 -406px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s10286f549b.png') 0 -348px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } -.toggle-details-icon.opened { background: url('../images/sprites-32x32-s10286f549b.png') 0 -1120px no-repeat; } -.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s10286f549b.png') 0 -332px no-repeat; } +.toggle-details-icon { background: url('../images/sprites-32x32-s871d283813.png') 0 -830px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon { background: url('../images/sprites-32x32-s871d283813.png') 0 -798px no-repeat; display: inline-block; width: 8px; height: 8px; padding-left: 5px; } +.toggle-details-icon.opened { background: url('../images/sprites-32x32-s871d283813.png') 0 -846px no-repeat; } +.ss-uploadfield-item-edit-all .toggle-details-icon.opened { background: url('../images/sprites-32x32-s871d283813.png') 0 -814px no-repeat; } /** -------------------------------------------- Hide preview toggle link by default. May be shown in IE7 stylesheet and forced to show with js if needed -------------------------------------------- */ .cms .Actions > .cms-preview-toggle-link, .cms .cms-navigator > .cms-preview-toggle-link { display: none; } @@ -785,7 +784,7 @@ form.import-form label.left { width: 250px; } .cms .jstree-themeroller .jstree-no-icon, .TreeDropdownField .treedropdownfield-panel .jstree-themeroller .jstree-no-icon { display: none; } .cms #jstree-marker, .TreeDropdownField .treedropdownfield-panel #jstree-marker { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 10px; font-size: 12px; height: 12px; width: 8px; z-index: 10001; background-color: transparent; text-shadow: 1px 1px 1px white; color: black; } .cms #jstree-marker-line, .TreeDropdownField .treedropdownfield-panel #jstree-marker-line { padding: 0; margin: 0; overflow: hidden; position: absolute; top: -30px; background-repeat: no-repeat; display: none; line-height: 0%; font-size: 1px; height: 1px; width: 100px; z-index: 10000; background-color: #456c43; cursor: pointer; border: 1px solid #eeeeee; border-left: 0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; -moz-border-radius: 1px; border-radius: 1px; -webkit-border-radius: 1px; } -.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } +.cms #vakata-contextmenu, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu { display: block; visibility: hidden; left: 0; top: -200px; position: absolute; margin: 0; padding: 0; min-width: 180px; background: #FFF; border: 1px solid silver; z-index: 10000; *width: 180px; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } .cms #vakata-contextmenu::before, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::before { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -10px; left: 24px; width: 0; border-width: 0 6px 10px 6px; border-color: #FFF transparent; border-style: solid; z-index: 10000; } .cms #vakata-contextmenu::after, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu::after { content: ""; display: block; /* reduce the damage in FF3.0 */ position: absolute; top: -11px; left: 23px; width: 0; border-width: 0 7px 11px 7px; border-color: #CCC transparent; border-style: solid; } .cms #vakata-contextmenu ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu ul { min-width: 180px; *width: 180px; } @@ -793,13 +792,13 @@ form.import-form label.left { width: 250px; } .cms #vakata-contextmenu li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li { line-height: 20px; min-height: 23px; position: relative; padding: 0px; } .cms #vakata-contextmenu li:last-child, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li:last-child { margin-bottom: 1px; } .cms #vakata-contextmenu li a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a { padding: 1px 10px; line-height: 23px; display: block; text-decoration: none; margin: 1px 1px 0 1px; border: 0; } -.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li a:hover, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li a:hover { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu li ins, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ins { float: left; width: 0; height: 0; text-decoration: none; margin-right: 2px; } .cms #vakata-contextmenu li .jstree-pageicon, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li .jstree-pageicon { margin-top: 3px; margin-right: 5px; } -.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } +.cms #vakata-contextmenu li.vakata-hover > a, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li.vakata-hover > a { padding: 1px 10px; background: #3875d7; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIyMCUiIHN0b3AtY29sb3I9IiMzODc1ZDciLz48c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iIzJhNjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); background-image: linear-gradient(to bottom, #3875d7 20%, #2a62bc 90%); color: #FFF; border: none; } .cms #vakata-contextmenu .right, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .right { right: 100%; left: auto; } .cms #vakata-contextmenu .bottom, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu .bottom { bottom: -1px; top: auto; } -.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -webkit-box-shadow: 0 0 10px #cccccc; -moz-box-shadow: 0 0 10px #cccccc; box-shadow: 0 0 10px #cccccc; } +.cms #vakata-contextmenu li ul, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul { display: none; position: absolute; top: -2px; left: 100%; background: #FFF; border: 1px solid silver; -moz-box-shadow: 0 0 10px #CCC; -webkit-box-shadow: 0 0 10px #CCC; box-shadow: 0 0 10px #CCC; } .cms #vakata-contextmenu li ul.col-2, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 { width: 360px; } .cms #vakata-contextmenu li ul.col-2 li, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-2 li { width: 50%; } .cms #vakata-contextmenu li ul.col-3, .TreeDropdownField .treedropdownfield-panel #vakata-contextmenu li ul.col-3 { width: 540px; } @@ -822,16 +821,16 @@ form.import-form label.left { width: 250px; } .tree-holder.jstree-apple li.status-deletedonlive .text, .cms-tree.jstree-apple li.status-deletedonlive .text { text-decoration: line-through; } .tree-holder.jstree-apple li.jstree-checked > a, .tree-holder.jstree-apple li.jstree-checked > a:link, .cms-tree.jstree-apple li.jstree-checked > a, .cms-tree.jstree-apple li.jstree-checked > a:link { background-color: #efe999; } .tree-holder.jstree-apple li.disabled > a > .jstree-checkbox, .cms-tree.jstree-apple li.disabled > a > .jstree-checkbox { background-position: -57px -54px; } -.tree-holder.jstree-apple li.readonly, .cms-tree.jstree-apple li.readonly { color: #aaaaaa; padding-left: 18px; } +.tree-holder.jstree-apple li.readonly, .cms-tree.jstree-apple li.readonly { color: #aaa; padding-left: 18px; } .tree-holder.jstree-apple li.readonly a, .tree-holder.jstree-apple li.readonly a:link, .cms-tree.jstree-apple li.readonly a, .cms-tree.jstree-apple li.readonly a:link { margin: 0; padding: 0; } .tree-holder.jstree-apple li.readonly .jstree-icon, .cms-tree.jstree-apple li.readonly .jstree-icon { display: none; } -.tree-holder.jstree-apple a, .tree-holder.jstree-apple a:link, .cms-tree.jstree-apple a, .cms-tree.jstree-apple a:link { color: #0073c1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } +.tree-holder.jstree-apple a, .tree-holder.jstree-apple a:link, .cms-tree.jstree-apple a, .cms-tree.jstree-apple a:link { color: #0073C1; padding: 3px 6px 3px 3px; border: none; display: inline-block; margin-right: 5px; } .tree-holder.jstree-apple ins, .cms-tree.jstree-apple ins { background-color: transparent; background-image: url(../images/sitetree_ss_default_icons.png); } -.tree-holder.jstree-apple span.badge, .cms-tree.jstree-apple span.badge { clear: both; text-transform: uppercase; display: inline-block; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; margin-top: -1px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; } +.tree-holder.jstree-apple span.badge, .cms-tree.jstree-apple span.badge { clear: both; text-transform: uppercase; display: inline-block; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; margin-top: -1px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; } .tree-holder.jstree-apple span.badge.status-modified, .tree-holder.jstree-apple span.badge.status-addedtodraft, .cms-tree.jstree-apple span.badge.status-modified, .cms-tree.jstree-apple span.badge.status-addedtodraft { color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .tree-holder.jstree-apple span.badge.status-deletedonlive, .tree-holder.jstree-apple span.badge.status-removedfromdraft, .cms-tree.jstree-apple span.badge.status-deletedonlive, .cms-tree.jstree-apple span.badge.status-removedfromdraft { color: #636363; border: 1px solid #E49393; background-color: #F2DADB; } .tree-holder.jstree-apple span.badge.status-workflow-approval, .cms-tree.jstree-apple span.badge.status-workflow-approval { color: #56660C; border: 1px solid #7C8816; background-color: #DAE79A; } -.tree-holder.jstree-apple span.comment-count, .cms-tree.jstree-apple span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -webkit-border-radius: 2px 2px; -moz-border-radius: 2px / 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } +.tree-holder.jstree-apple span.comment-count, .cms-tree.jstree-apple span.comment-count { clear: both; position: relative; text-transform: uppercase; display: inline-block; overflow: visible; padding: 0px 3px; font-size: 0.75em; line-height: 1em; margin-left: 3px; margin-right: 6px; -moz-border-radius: 2px / 2px; -webkit-border-radius: 2px 2px; border-radius: 2px / 2px; color: #7E7470; border: 1px solid #C9B800; background-color: #FFF0BC; } .tree-holder.jstree-apple span.comment-count:before, .cms-tree.jstree-apple span.comment-count:before { content: ""; position: absolute; border-style: solid; display: block; width: 0; bottom: -4px; /* value = - border-top-width - border-bottom-width */ left: 3px; /* controls horizontal position */ border-width: 4px 4px 0; border-color: #C9B800 transparent; } .tree-holder.jstree-apple span.comment-count:after, .cms-tree.jstree-apple span.comment-count:after { content: ""; position: absolute; border-style: solid; /* reduce the damage in FF3.0 */ display: block; width: 0; bottom: -3px; /* value = - border-top-width - border-bottom-width */ left: 4px; /* value = (:before left) + (:before border-left) - (:after border-left) */ border-width: 3px 3px 0; border-color: #FFF0BC transparent; } .tree-holder.jstree-apple .jstree-hovered, .cms-tree.jstree-apple .jstree-hovered { text-shadow: none; text-decoration: none; } @@ -853,9 +852,9 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-tree a.jstree-loading .jstree-pageicon { background: url(../images/throbber.gif) top left no-repeat; } /** Styles for the left hand side menu and header for the admin panels. Take into consideration CSS selector performance. @package framework @subpackage admin */ -.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -o-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } +.cms-logo-header { position: relative !important; top: auto !important; height: auto !important; padding: 0 8px; line-height: 24px; background-color: #22385b; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMwNGU4MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0MjEzNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #304e80), color-stop(100%, #142136)); background-image: -moz-linear-gradient(#304e80, #142136); background-image: -webkit-linear-gradient(#304e80, #142136); background-image: linear-gradient(#304e80, #142136); } .cms-logo-header span { color: white; display: block; padding-left: 26px; } -.cms-logo-header span a { color: #3ebae0; display: inline; } +.cms-logo-header span a { color: #3EBAE0; display: inline; } .cms-logo { border-bottom: 1px solid #1a2a45; overflow: hidden; padding: 10px 0 9px; /* should come to 40px with border bottom and line-height */ position: relative; vertical-align: middle; font-size: 12px; min-height: 20px; } .collapsed .cms-logo { padding: 0; } @@ -864,10 +863,10 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-logo span { font-weight: bold; font-size: 12px; line-height: 16px; padding: 2px 0; margin-left: 30px; } .cms-login-status { border-top: 1px solid #19435c; padding: 8px 0 9.6px; line-height: 16px; font-size: 11px; } -.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s10286f549b.png') 0 -1094px no-repeat; text-indent: -9999em; opacity: 0.9; } +.cms-login-status .logout-link { display: inline-block; height: 16px; width: 16px; float: left; margin: 0 8px 0 5px; background: url('../images/sprites-32x32-s871d283813.png') 0 -772px no-repeat; text-indent: -9999em; opacity: 0.9; } .cms-login-status .logout-link:hover, .cms-login-status .logout-link:focus { opacity: 1; } -.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } +.cms-menu { z-index: 80; background: #b0bec7; width: 160px; -moz-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; -webkit-box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; box-shadow: rgba(0, 0, 0, 0.9) 0 0 3px; } .cms-menu a { text-decoration: none; } .cms-menu .cms-panel-content { width: 160px; overflow-x: hidden; overflow-y: auto; position: relative !important; top: auto !important; left: auto !important; } .cms-menu.collapsed { width: 40px; cursor: auto; z-index: 1000; } @@ -883,18 +882,18 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-menu.collapsed.cms-panel .cms-panel-content { display: block; } .cms-menu-list li { /* Style applied to the menu flyout only when the collapsed setting */ } -.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -o-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } -.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -o-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } -.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -o-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } +.cms-menu-list li a { display: block; line-height: 16px; min-height: 16px; font-size: 12px; text-shadow: #bfcad2 1px 1px 0; color: #1f1f1f; padding: 11px 5px 11px 8px; background-color: #b0bec7; cursor: pointer; position: relative; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #b0bec7), color-stop(100%, #92a5b2)); background-image: -moz-linear-gradient(#b0bec7, #92a5b2); background-image: -webkit-linear-gradient(#b0bec7, #92a5b2); background-image: linear-gradient(#b0bec7, #92a5b2); border-top: 1px solid #c2cdd4; border-bottom: 1px solid #748d9d; } +.cms-menu-list li a:hover { text-decoration: none; background-color: #b6c3cb; border-bottom: 1px solid #8399a7; color: #2c2c2c; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2JmY2FkMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2IwYmVjNyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #bfcad2), color-stop(100%, #b0bec7)); background-image: -moz-linear-gradient(#bfcad2, #b0bec7); background-image: -webkit-linear-gradient(#bfcad2, #b0bec7); background-image: linear-gradient(#bfcad2, #b0bec7); } +.cms-menu-list li a:focus, .cms-menu-list li a:active { border-top: 1px solid #a1b2bc; text-decoration: none; background-color: #a1b2bc; color: #393939; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzkyYTViMiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ExYjJiYyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #92a5b2), color-stop(100%, #a1b2bc)); background-image: -moz-linear-gradient(#92a5b2, #a1b2bc); background-image: -webkit-linear-gradient(#92a5b2, #a1b2bc); background-image: linear-gradient(#92a5b2, #a1b2bc); } .cms-menu-list li a .icon { display: block; position: absolute; top: 50%; margin-left: 4px; margin-top: -8px; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); opacity: 0.7; } .cms-menu-list li a .text { display: block; margin-left: 30px; } .cms-menu-list li a .toggle-children { display: inline-block; float: right; width: 20px; height: 100%; cursor: pointer; } -.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s10286f549b.png') 0 -348px no-repeat; vertical-align: middle; } -.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s10286f549b.png') 0 -332px no-repeat; } +.cms-menu-list li a .toggle-children .toggle-children-icon { display: inline-block; width: 8px; height: 8px; background: url('../images/sprites-32x32-s871d283813.png') 0 -798px no-repeat; vertical-align: middle; } +.cms-menu-list li a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s871d283813.png') 0 -814px no-repeat; } .cms-menu-list li ul li a { border-top: 1px solid #b6c3cb; } -.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338dc1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -o-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } -.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s10286f549b.png') 0 -406px no-repeat; } -.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s10286f549b.png') 0 -1120px no-repeat; } +.cms-menu-list li.current a { color: white; text-shadow: #1e5270 0 -1px 0; border-top: 1px solid #55a4d2; border-bottom: 1px solid #236184; background-color: #338DC1; background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzOGRjMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzI4NzA5OSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #338dc1), color-stop(100%, #287099)); background-image: -moz-linear-gradient(#338dc1, #287099); background-image: -webkit-linear-gradient(#338dc1, #287099); background-image: linear-gradient(#338dc1, #287099); } +.cms-menu-list li.current a .toggle-children .toggle-children-icon { background: url('../images/sprites-32x32-s871d283813.png') 0 -830px no-repeat; } +.cms-menu-list li.current a .toggle-children.opened .toggle-children-icon { background: url('../images/sprites-32x32-s871d283813.png') 0 -846px no-repeat; } .cms-menu-list li.current ul { border-top: none; display: block; } .cms-menu-list li.current li { background-color: #287099; } .cms-menu-list li.current li a { font-size: 11px; padding: 0 10px 0 40px; height: 32px; line-height: 32px; color: #e2f0f7; background: none; border-top: 1px solid #2f81b1; border-bottom: 1px solid #1e5270; } @@ -917,42 +916,42 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls.cms-preview-controls { z-index: 1; background: #eceff1; height: 30px; /* should be set in js Layout to match page actions */ padding: 12px 12px; } .cms-content-controls .icon-view, .cms-content-controls .preview-selector.dropdown a.chzn-single { white-space: nowrap; } .cms-content-controls .icon-view:before, .cms-content-controls .preview-selector.dropdown a.chzn-single:before { display: inline-block; float: left; content: ''; width: 23px; height: 17px; overflow: hidden; } -.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -148px no-repeat; } -.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -121px no-repeat; } -.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -202px no-repeat; } -.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -229px no-repeat; } -.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -175px no-repeat; } -.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -67px no-repeat; } -.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -40px no-repeat; } -.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s10286f549b.png') 0 -94px no-repeat; } +.cms-content-controls .icon-auto:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -898px no-repeat; } +.cms-content-controls .icon-desktop:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -925px no-repeat; } +.cms-content-controls .icon-tablet:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -1087px no-repeat; } +.cms-content-controls .icon-mobile:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -1006px no-repeat; } +.cms-content-controls .icon-split:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -1060px no-repeat; } +.cms-content-controls .icon-edit:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -979px no-repeat; } +.cms-content-controls .icon-preview:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -1033px no-repeat; } +.cms-content-controls .icon-window:before { background: url('../images/sprites-32x32-s871d283813.png') 0 -952px no-repeat; } .cms-content-controls .cms-navigator { width: 100%; } .cms-content-controls .preview-selector.dropdown a.chzn-single { text-indent: -200px; } -.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } -.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; } -.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } -.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -webkit-border-radius: 0 0 3px 3px; -moz-border-radius: 0 0 3px 3px; -ms-border-radius: 0 0 3px 3px; -o-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; } +.cms-content-controls .preview-selector { float: right; border-bottom: none; position: relative; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 3px 0 0 4px; padding: 0; height: 28px; } +.cms-content-controls .preview-selector a.chzn-single { width: 20px; padding: 6px 5px 5px; height: 18px; margin: -3px 0 0; filter: none; /* remove ie background */ background: none; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.cms-content-controls .preview-selector a.chzn-single:hover, .cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { background-color: #dae0e5; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); box-shadow: 0 0 3px rgba(0, 0, 0, 0.05) inset, 0 1px 0 rgba(248, 248, 248, 0.9); } +.cms-content-controls .preview-selector a.chzn-single.chzn-single-with-drop { -moz-border-radius: 0 0 3px 3px; -webkit-border-radius: 0; border-radius: 0 0 3px 3px; } .cms-content-controls .preview-selector a.chzn-single div { display: none; } .cms-content-controls .preview-selector.open .chzn-drop { position: absolute; left: auto !important; right: 0; } -.cms-content-controls .preview-selector .chzn-drop { -webkit-border-radius: 3px 3px 0 3px; -moz-border-radius: 3px 3px 0 3px; -ms-border-radius: 3px 3px 0 3px; -o-border-radius: 3px 3px 0 3px; border-radius: 3px 3px 0 3px; -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } +.cms-content-controls .preview-selector .chzn-drop { -moz-border-radius: 3px 3px 0 3px; -webkit-border-radius: 3px; border-radius: 3px 3px 0 3px; -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); } .cms-content-controls .preview-selector .chzn-drop .chzn-results { width: 135px; } .cms-content-controls .preview-selector .chzn-drop .chzn-results .result-selected { background: #eceff1; } .cms-content-controls .preview-selector .chzn-container { width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop { padding: 0; border-bottom: 1px solid #aaa; margin-top: -5px; width: auto !important; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop .chzn-search { display: none; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul { padding: 0; margin: 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073c1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li { font-size: 12px; line-height: 16px; padding: 7px 16px 7px 6px; color: #0073C1; border-bottom: 1px solid #DDD; background-color: #FFF; /* Description styling */ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:before { margin-right: 2px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description { padding-top: 5px; padding-bottom: 5px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.description:before { margin-top: 5px; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073c1; filter: none; background: #f2f4f6; text-decoration: none; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -webkit-border-radius: 3px 3px 0 0; -moz-border-radius: 3px 3px 0 0; -ms-border-radius: 3px 3px 0 0; -o-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } -.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -webkit-border-radius: 0 0 0 3px; -moz-border-radius: 0 0 0 3px; -ms-border-radius: 0 0 0 3px; -o-border-radius: 0 0 0 3px; border-radius: 0 0 0 3px; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.highlighted, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:hover, .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li:focus { color: #0073C1; filter: none; background: #f2f4f6; text-decoration: none; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.first { -moz-border-radius: 3px 3px 0 0; -webkit-border-radius: 3px; border-radius: 3px 3px 0 0; } +.cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.last { border-bottom: none; -moz-border-radius: 0 0 0 3px; -webkit-border-radius: 0; border-radius: 0 0 0 3px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted { /* disable option (eg.split mode for smaller screen sizes) */ color: #CCC; background-color: #EEE; pointer-events: none; /*text-decoration: line-through;*/ } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li.restricted:before { opacity: 0.2; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li span { display: block; color: #6c6c6c; font-size: 0.85em; line-height: 1.1em; padding-left: 23px; } .cms-content-controls .preview-selector .chzn-container.chzn-with-rise .chzn-drop ul li .icon-view { margin-right: 4px; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444444; } -.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected { background: #e6eaed; color: #444; } +.cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected.highlighted, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:hover, .cms-content-controls .preview-selector .chzn-drop ul.chzn-results li.result-selected:focus { background: #e6eaed; color: #444; } .cms-content-controls .cms-preview-states { float: right; } .cms-content-controls .cms-preview-states select { max-width: 150px; } .cms-content-controls .cms-preview-states.dropdown { max-width: 150px; } @@ -960,28 +959,28 @@ li.class-ErrorPage > a .jstree-pageicon { background-position: 0 -112px; } .cms-content-controls .cms-preview-states.dropdown .chzn-container { max-width: 150px; } /* Styling for the preview screen sizes */ -.cms-preview { background-color: #eceff1; height: 100%; width: 100%; } +.cms-preview { background-color: #ECEFF1; height: 100%; width: 100%; } .cms-preview .cms-preview-overlay { width: 100%; height: 100%; } .cms-preview .preview-note { color: #CDD7DC; display: block; font-size: 22px; font-weight: bold; height: 82px; margin-top: -50px; margin-left: -150px; /* half of width */ position: absolute; text-align: center; text-shadow: 0 1px 0 #fff; top: 50%; left: 50%; width: 300px; } -.cms-preview .preview-note span { background: url('../images/sprites-64x64-s88957ee578.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } +.cms-preview .preview-note span { background: url('../images/sprites-64x64-s45180e3c4f.png') 0 0 no-repeat; display: block; height: 41px; margin: 0 auto 20px; width: 50px; } .cms-preview .preview-scroll { height: 100%; overflow: auto; position: relative; width: 100%; } .cms-preview .preview-scroll .preview-device-outer { height: 100%; width: 100%; } -.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } +.cms-preview .preview-scroll .preview-device-outer .preview-device-inner { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 100%; background-color: #FFF; } .cms-preview .preview-scroll .preview-device-outer .preview-device-inner iframe { height: 100%; overflow-y: auto; width: 100%; } -.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #eceff1; /* cover website preview icon */ } -.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-border-radius: 7px; -moz-border-radius: 7px; -ms-border-radius: 7px; -o-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } +.cms-preview.mobile .preview-scroll, .cms-preview.mobileLandscape .preview-scroll, .cms-preview.tablet .preview-scroll, .cms-preview.tabletLandscape .preview-scroll, .cms-preview.desktop .preview-scroll { background-color: #ECEFF1; /* cover website preview icon */ } +.cms-preview.mobile .preview-scroll .preview-device-outer, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer, .cms-preview.tablet .preview-scroll .preview-device-outer, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer, .cms-preview.desktop .preview-scroll .preview-device-outer { -moz-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px; background: #d5dde2; border: 1px solid transparent; border-left: 1px solid #cfd9de; padding: 0 16px 16px; } .cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner, .cms-preview.desktop .preview-scroll .preview-device-outer .preview-device-inner { border-top: 2px solid #e1e7ea; border-right: 1px solid transparent; border-bottom: 1px solid #e1e7ea; border-left: 1px solid #c3cfd6; } -.cms-preview.mobile .preview-scroll .preview-device-outer { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } -.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transform: rotate(0deg); -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -o-transform: rotate(0deg); transform: rotate(0deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -o-transform: rotate(-90deg); transform: rotate(-90deg); -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } -.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -webkit-transform-origin: 160px 160px; -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -o-transform-origin: 160px 160px; transform-origin: 160px 160px; -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } -.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tablet .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } -.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; } -.cms-preview.desktop .preview-scroll .preview-device-outer { -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.mobile .preview-scroll .preview-device-outer { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; margin: 20px auto 20px; overflow: hidden; padding-top: 16px; } +.cms-preview.mobile .preview-scroll .preview-device-outer .preview-device-inner { -moz-transform: rotate(0deg); -ms-transform: rotate(0deg); -webkit-transform: rotate(0deg); transform: rotate(0deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate { -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -webkit-transform: rotate(-90deg); transform: rotate(-90deg); -moz-transition: all 0.3s ease-in 1s; -o-transition: all 0.3s ease-in 1s; -webkit-transition: all 0.3s ease-in; -webkit-transition-delay: 1s; transition: all 0.3s ease-in 1s; height: 583px; margin: 0px auto 0px; width: 320px; } +.cms-preview.mobile .preview-scroll .preview-device-outer.rotate .preview-device-inner { -moz-transform-origin: 160px 160px; -ms-transform-origin: 160px 160px; -webkit-transform-origin: 160px 160px; transform-origin: 160px 160px; -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -webkit-transform: rotate(90deg); transform: rotate(90deg); -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; height: 320px; width: 583px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 12% auto; padding-top: 16px; } +.cms-preview.mobileLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tablet .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tablet .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } +.cms-preview.tabletLandscape .preview-scroll .preview-device-outer .preview-device-inner { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; } +.cms-preview.desktop .preview-scroll .preview-device-outer { -moz-transition: all 0.3s ease-out 1s; -o-transition: all 0.3s ease-out 1s; -webkit-transition: all 0.3s ease-out; -webkit-transition-delay: 1s; transition: all 0.3s ease-out 1s; margin: 0 auto; } /******************************************** * Defines the styles for .ss-ui-action-tabset: @@ -1005,16 +1004,16 @@ visible. Added and removed with js in TabSet.js */ /*************************** of ss-ui-action-tabset ****************************************************************/ } .cms .ss-ui-action-tabset.multi { /* Style the tab panels */ } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; overflow: hidden; *zoom: 1; border: 1px solid #b3b3b3; float: left; overflow: visible; padding: 0; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -o-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(top, #f8f8f8, #d9d9d9); -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li { background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y4ZjhmOCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2Q5ZDlkOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); background-size: 100%; background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #f8f8f8), color-stop(100%, #d9d9d9)); background-image: -moz-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: -webkit-linear-gradient(top, #f8f8f8, #d9d9d9); background-image: linear-gradient(to bottom, #f8f8f8, #d9d9d9); -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; background: #eaeaea; border: none; border-right: 1px solid #eee; border-left: 1px solid #b3b3b3; margin: 0; overflow: visible; min-width: 110px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; background: #f8f8f8; border-bottom: none !important; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a { -moz-border-radius-bottomleft: 0px; -webkit-border-bottom-left-radius: 0px; border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -webkit-border-bottom-right-radius: 0px; border-bottom-right-radius: 0px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a:active, .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.ui-state-active a span:active { outline: none; box-shadow: none; -webkit-box-shadow: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.first { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; border-left: none; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li.last { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; border-right: none; } -.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } +.cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link { color: #444; display: inline-block; font-weight: bold; line-height: 16px; padding: 5px 10px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .ui-no-icon { display: inline-block; float: left; height: 16px; padding: 0 2px; width: 16px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link .title { display: inline-block; line-height: 18px; } .cms .ss-ui-action-tabset.multi ul.ui-tabs-nav li a.tab-nav-link.view-mode-batchactions-wrapper .title { margin-left: 22px; } @@ -1023,10 +1022,10 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field select, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1036,7 +1035,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.multi .ss-ui-action-tab.ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1057,7 +1056,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset .batch-check { margin: 6px 0px 5px 9px; position: absolute; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar { min-width: 176px; /* for when the scrollbar is present & find dropdown open */ } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li { width: auto; } -.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } +.cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; overflow: hidden; padding-right: 0; width: 30px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset ul.ui-tabs-nav > li a.tab-nav-link.active { -webkit-transition-duration: 0.5s; -moz-transition-duration: 0.5s; -o-transition-duration: 0.5s; transition-duration: 0.5s; width: 110px; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open ul.ui-tabs-nav li.last, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.first, .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ss-ui-action-tabset.tabset-open-last ul.ui-tabs-nav li.last { -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; } .cms .ss-ui-action-tabset .cms-tree-view-sidebar .ui-tabs .ui-tabs-panel.ss-ui-action-tab { padding: 10px 6px; width: 162px; } @@ -1067,23 +1066,23 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset { margin-top: 2px; /* Style the panel for actions-menu */ /* Re-align last tab */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav { margin: 0; float: left; /* needed for ie but doesnt effect other browsers */ } .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li { background: none; border: none; border-bottom: none !important; display: inline; padding: 0; /* Make arrow point in up when nav open */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: white 0 1px 1px; color: #0073c1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; outline: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: white 0 10px 10px; color: #005b98; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s10286f549b.png') 0 -1188px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s10286f549b.png') 0 -1162px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s10286f549b.png') 0 -1214px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s10286f549b.png') 0 -1136px no-repeat; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #eceff1; border: 1px solid #ccc; border-bottom: 1px solid #eceff1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a { text-shadow: #fff 0 1px 1px; color: #0073C1; font-size: 13px; font-weight: normal; line-height: 24px; padding: 0 25px 0 10px; /* Arrow */ } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover { text-shadow: #fff 0 10px 10px; color: #005b98; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:after { background: url('../images/sprites-32x32-s871d283813.png') 0 -26px no-repeat; border-bottom: 0; content: ""; display: inline-block; height: 16px; margin-left: 6px; width: 16px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li a:hover:after { background: url('../images/sprites-32x32-s871d283813.png') 0 0 no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:after { background: url('../images/sprites-32x32-s871d283813.png') 0 -78px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset ul.ui-tabs-nav li.ui-state-active a:hover:after { background: url('../images/sprites-32x32-s871d283813.png') 0 -52px no-repeat; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel { overflow: hidden; *zoom: 1; -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomright: 0; -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; /* Restyle for smaller area*/ clear: both; display: block; background-color: #ECEFF1; border: 1px solid #ccc; border-bottom: 1px solid #ECEFF1; margin: 0; margin-top: 2px; max-width: 250px; padding: 8px 0 2px; position: absolute; z-index: 1; min-width: 190px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h5 { font-weight: bold; line-height: 16px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h3 { font-size: 13px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel h4 { font-size: 12px; margin: 5px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .ui-widget-content { background: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field { /* Fields are more compressed in some areas compared to the main content editing window so the below alters the internal spacing of the fields so we can move that spacing to between the form fields rather than padding */ border-bottom: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label { float: none; width: auto; font-size: 12px; padding: 0 8px 4px 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details { overflow: hidden; margin-top: 10px; display: block; color: #9d9d9d; font-style: italic; font-weight: normal; font-size: 1em; float: left; text-shadow: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -webkit-border-radius: 50px; -moz-border-radius: 50px; -ms-border-radius: 50px; -o-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field label.extra-details.fill:before { color: #fff; content: '?'; font-size: 12px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding-left: 3px; padding-right: 3px; display: block; float: left; text-shadow: none; -moz-border-radius: 50px; -webkit-border-radius: 50px; border-radius: 50px; background-color: #b7b7b7; width: 15px; height: 15px; margin-right: 5px; margin-bottom: 5px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field .middleColumn { margin: 0; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field input.text, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field select, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field textarea { padding: 5px; font-size: 11px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .field.checkbox { padding: 0 8px 0; } @@ -1093,7 +1092,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-fields { overflow: visible; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single { width: 100% !important; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .chzn-container-single .chzn-single { padding: 0 0 0 5px; float: none; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-content-actions, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-preview-controls { padding: 0; height: auto; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-edit-form { width: 100%; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .CompositeField { margin: 0; padding: 0; float: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .parent-mode { padding-top: 0; } @@ -1106,7 +1105,7 @@ visible. Added and removed with js in TabSet.js */ /*************************** .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information { border-bottom: 1px solid #e6e7e8; margin-bottom: 8px; padding: 0 20px 0 0; margin-right: 10px; margin-left: 10px; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel .cms-sitetree-information p.meta-info { color: #999; font-size: 11px; line-height: 16px; margin-bottom: 8px; white-space: nowrap; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button { width: 100%; } -.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } +.cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:hover, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:focus, .cms .ss-ui-action-tabset.action-menus.ss-tabset .ui-tabs-panel button.ss-ui-button:active { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; background-color: #e0e5e8; outline: none; } .cms .ss-ui-action-tabset.action-menus.ss-tabset .last .ui-tabs-panel.ss-ui-action-tab { left: auto; right: -1px; } .cms .cms-content-actions .Actions { overflow: visible; } @@ -1129,3 +1128,19 @@ green tick icon as a background this is created using compass generated classes .cms .cms-content .SecurityAdmin .cms-content-fields { overflow-y: auto; } .cms .cms-content .SecurityAdmin .cms-content-fields .aligned-right-label { margin-left: 184px; padding: 8px 0; } + +.cms-security h1 { margin: 45px 40px 5px 25px; font-size: 1.9em; line-height: 1.2; font-weight: bold; } +.cms-security .Content { margin: 0 50px 0 25px; } +.cms-security .Form { margin: 0 25px; } +.cms-security .Form .field { border: 0 none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; margin: 0; padding: 0; } +.cms-security .Form .field label.left { float: none; width: auto; } +.cms-security .Form .field .middleColumn { margin: 0; } +.cms-security .Form #Password { width: 300px; float: left; } +.cms-security .Form #ForgotPassword { float: left; padding: 40px 0 0 10px; } +.cms-security .Form #Remember { clear: both; } +.cms-security .Form .Actions { padding: 20px 0 0 0; } +.cms-security .Form .Actions #doLogout { line-height: 28px; margin: 0 0 0 10px; } + +.leftandmain-logindialog-dialog .ui-dialog-titlebar-close { display: none; } + +.leftandmain-logindialog-overlay { opacity: 0.8; } diff --git a/admin/images/btn-icon-s5a3074ba2a.png b/admin/images/btn-icon-s5a3074ba2a.png deleted file mode 100644 index 627c22b8026444dd03e9c440aaa536597df81378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21980 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 diff --git a/admin/images/menu-icons/24x24-s0dc15c36f9.png b/admin/images/menu-icons/24x24-s0dc15c36f9.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed8fc993d6a0e5f19bfe5ac601a1813baafa79b GIT binary patch literal 2394 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 M07*qoM6N<$f;py>RsaA1 literal 0 HcmV?d00001 diff --git a/admin/images/menu-icons/24x24-s391afdd013.png b/admin/images/menu-icons/24x24-s391afdd013.png deleted file mode 100644 index b1fd07bb9eca0ddba7032d48f8546b0a1682843b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2391 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 JPDHLkV1m+?m^}ah diff --git a/admin/images/sprites-32x32-s10286f549b.png b/admin/images/sprites-32x32-s10286f549b.png deleted file mode 100644 index 58d792fc9e9fef4397c41c3007971415a310a5be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18820 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 literal 0 HcmV?d00001 diff --git a/admin/images/sprites-64x64-s88957ee578.png b/admin/images/sprites-64x64-s88957ee578.png deleted file mode 100644 index 458b7520ae1f01132854d861b70cabb4cef11c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3059 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 diff --git a/admin/javascript/CMSSecurity.js b/admin/javascript/CMSSecurity.js new file mode 100644 index 000000000..088633076 --- /dev/null +++ b/admin/javascript/CMSSecurity.js @@ -0,0 +1,23 @@ +jQuery.noConflict(); + +/** + * File: LeftAndMain.js + */ +(function($) { + // setup jquery.entwine + $.entwine.warningLevel = $.entwine.WARN_LEVEL_BESTPRACTISE; + $.entwine('ss', function($) { + // Make all buttons "hoverable" with jQuery theming. + $('.cms input[type="submit"], .cms button, .cms input[type="reset"], .cms .ss-ui-button').entwine({ + onadd: function() { + this.addClass('ss-ui-button'); + if(!this.data('button')) this.button(); + this._super(); + }, + onremove: function() { + if(this.data('button')) this.button('destroy'); + this._super(); + } + }); + }); +}(jQuery)); diff --git a/admin/javascript/LeftAndMain.js b/admin/javascript/LeftAndMain.js index 2f6b529d3..d60161054 100644 --- a/admin/javascript/LeftAndMain.js +++ b/admin/javascript/LeftAndMain.js @@ -26,6 +26,40 @@ jQuery.noConflict(); // setup jquery.entwine $.entwine.warningLevel = $.entwine.WARN_LEVEL_BESTPRACTISE; $.entwine('ss', function($) { + + /* + * Handle messages sent via nested iframes + * Messages should be raised via postMessage with an object with the 'type' parameter given. + * An optional 'target' and 'data' parameter can also be specified. If no target is specified + * events will be sent to the window instead. + * type should be one of: + * - 'event' - Will trigger the given event (specified by 'event') on the target + * - 'callback' - Will call the given method (specified by 'callback') on the target + */ + $(window).on("message", function(e) { + var target, + event = e.originalEvent, + data = JSON.parse(event.data); + + // Reject messages outside of the same origin + if($.path.parseUrl(window.location.href).domain !== $.path.parseUrl(event.origin).domain) return; + + // Get target of this action + target = typeof(data.target) === 'undefined' + ? $(window) + : $(data.target); + + // Determine action + switch(data.type) { + case 'event': + target.trigger(data.event, data.data); + break; + case 'callback': + target[data.callback].call(target, data.data); + break; + } + }); + /** * Position the loading spinner animation below the ss logo */ @@ -82,21 +116,38 @@ jQuery.noConflict(); $(document).ajaxComplete(function(e, xhr, settings) { // Simulates a redirect on an ajax response. if(window.History.enabled) { - var url = xhr.getResponseHeader('X-ControllerURL'), + var url = xhr.getResponseHeader('X-ControllerURL'), // TODO Replaces trailing slashes added by History after locale (e.g. admin/?locale=en/) origUrl = History.getPageUrl().replace(/\/$/, ''), - opts, requestHeaders = settings.headers; + destUrl = settings.url, + opts; - if(url !== null && !isSameUrl(origUrl, url)) { - opts = {pjax: xhr.getResponseHeader('X-Pjax') ? xhr.getResponseHeader('X-Pjax') : settings.headers['X-Pjax']}; + // Only redirect if controller url differs to the requested or current one + if(url !== null && + (!isSameUrl(origUrl, url) || !isSameUrl(destUrl, url)) + ) { + opts = { + // Ensure that redirections are followed through by history API by handing it a unique ID + id: (new Date()).getTime() + String(Math.random()).replace(/\D/g,''), + pjax: xhr.getResponseHeader('X-Pjax') + ? xhr.getResponseHeader('X-Pjax') + : settings.headers['X-Pjax'] + }; window.History.pushState(opts, '', url); } } // Handle custom status message headers var msg = (xhr.getResponseHeader('X-Status')) ? xhr.getResponseHeader('X-Status') : xhr.statusText, + reathenticate = xhr.getResponseHeader('X-Reauthenticate'), msgType = (xhr.status < 200 || xhr.status > 399) ? 'bad' : 'good', ignoredMessages = ['OK']; + + // Enable reauthenticate dialog if requested + if(reathenticate) { + $('.cms-container').showLoginDialog(); + return; + } // Show message (but ignore aborted requests) if(xhr.status !== 0 && msg && $.inArray(msg, ignoredMessages)) { @@ -805,6 +856,80 @@ jQuery.noConflict(); .replace(/\?.*/, '') .replace(/#.*/, '') .replace($('base').attr('href'), ''); + }, + + showLoginDialog: function() { + var tempid = $('body').data('member-tempid'), + dialog = $('.leftandmain-logindialog'), + url = 'CMSSecurity/login'; + + // Force regeneration of any existing dialog + if(dialog.length) dialog.remove(); + + // Join url params + url = $.path.addSearchParams(url, { + 'tempid': tempid, + 'BackURL': window.location.href + }); + + // Show a placeholder for instant feedback. Will be replaced with actual + // form dialog once its loaded. + dialog = $('
'); + dialog.attr('id', new Date().getTime()); + dialog.data('url', url); + $('body').append(dialog); + } + }); + + // Login dialog page + $('.leftandmain-logindialog').entwine({ + onmatch: function() { + this._super(); + + // Create jQuery dialog + this.ssdialog({ + iframeUrl: this.data('url'), + dialogClass: "leftandmain-logindialog-dialog", + autoOpen: true, + minWidth: 500, + maxWidth: 500, + minHeight: 370, + maxHeight: 400, + closeOnEscape: false, + open: function() { + $('.ui-widget-overlay').addClass('leftandmain-logindialog-overlay'); + }, + close: function() { + $('.ui-widget-overlay').removeClass('leftandmain-logindialog-overlay'); + } + }); + }, + onunmatch: function() { + this._super(); + }, + open: function() { + this.ssdialog('open'); + }, + close: function() { + this.ssdialog('close'); + }, + toggle: function(bool) { + if(this.is(':visible')) this.close(); + else this.open(); + }, + /** + * Callback activated by CMSSecurity_success.ss + */ + reauthenticate: function(data) { + // Replace all SecurityID fields with the given value + if(typeof(data.SecurityID) !== 'undefined') { + $(':input[name=SecurityID]').val(data.SecurityID); + } + // Update TempID for current user + if(typeof(data.TempID) !== 'undefined') { + $('body').data('member-tempid', data.TempID); + } + this.close(); } }); diff --git a/admin/scss/_CMSSecurity.scss b/admin/scss/_CMSSecurity.scss new file mode 100644 index 000000000..08fe9bf8d --- /dev/null +++ b/admin/scss/_CMSSecurity.scss @@ -0,0 +1,63 @@ +.cms-security { + + h1 { + margin: 45px 40px 5px 25px; + font-size: 1.9em; + line-height: 1.2; + font-weight: bold; + } + + .Content { + margin: 0 50px 0 25px; + } + + .Form { + margin: 0 25px; + + .field { + border: 0 none; + @include box-shadow(none); + margin: 0; + padding: 0; + + label.left { + float: none; + width: auto; + } + .middleColumn { + margin: 0; + } + } + + #Password { + width: 300px; + float: left; + } + + #ForgotPassword { + float: left; + padding: 40px 0 0 10px; + } + + #Remember { + clear: both; + } + + .Actions { + padding: 20px 0 0 0; + + #doLogout { + line-height: 28px; + margin: 0 0 0 10px; + } + } + } +} + +.leftandmain-logindialog-dialog .ui-dialog-titlebar-close { + display: none; +} + +.leftandmain-logindialog-overlay { + opacity: 0.8; +} diff --git a/admin/scss/screen.scss b/admin/scss/screen.scss index 382c5ed54..f7bd56dd9 100644 --- a/admin/scss/screen.scss +++ b/admin/scss/screen.scss @@ -58,3 +58,4 @@ $experimental-support-for-svg: true; @import "actionTabs.scss"; @import "ModelAdmin.scss"; @import "SecurityAdmin.scss"; +@import "CMSSecurity.scss"; diff --git a/admin/templates/CMSSecurity_login.ss b/admin/templates/CMSSecurity_login.ss new file mode 100644 index 000000000..8e8e6e522 --- /dev/null +++ b/admin/templates/CMSSecurity_login.ss @@ -0,0 +1,17 @@ + + + + <% base_tag %> + $Title + + +

$Title

+ <% if $Content %> +
$Content
+ <% end_if %> +
+ $Form +
+ + + diff --git a/admin/templates/CMSSecurity_success.ss b/admin/templates/CMSSecurity_success.ss new file mode 100644 index 000000000..1f2c34af1 --- /dev/null +++ b/admin/templates/CMSSecurity_success.ss @@ -0,0 +1,37 @@ + + + + <% base_tag %> + $Title + + +

$Title

+ <% if $Content %> +
$Content
+ <% end_if %> + + + + diff --git a/admin/templates/LeftAndMain.ss b/admin/templates/LeftAndMain.ss index 8b039407e..bb286762f 100644 --- a/admin/templates/LeftAndMain.ss +++ b/admin/templates/LeftAndMain.ss @@ -6,7 +6,9 @@ $Title - + <% include CMSLoadingScreen %>
diff --git a/docs/en/changelogs/3.1.7.md b/docs/en/changelogs/3.1.7.md index 671e15bbd..079b75507 100644 --- a/docs/en/changelogs/3.1.7.md +++ b/docs/en/changelogs/3.1.7.md @@ -1,5 +1,27 @@ # 3.1.7 +## Upgrading + +### Authentication + +3.1.7 introduces a re-authentication feature, which allows user working in the CMS to quickly re-enter their password +and continue working should their session expire. This occurs through a popup dialog, which asks the user for their +current password to continue working. + +If using a custom `[api:Authenticator]` class to replace the default MemberAuthenticator, then by default this feature +will be disabled. If multiple authenticators are used, only supported ones will be available within the CMS. + +In order to create a CMS supported version the `Authenticator::supports_cms` and `Authenticator::get_cms_login_form` +methods should be overridden. See `[api:MemberAuthenticator]` for an example implementation. + +Check the documentation at the [Authentication](/topics/authentication) topic. + +### Default Admin + +In this version the way that the default admin user is managed is slightly changed. Rather than defaulting to the first +administrator user in the CMS, a user logging in as a default admin will always be assigned to a "Default Admin" +user with admin privileges. In the past, this user would only be created if no other administrators existed. + ## Security * 2014-07-05 [c247dd5](https://github.com/silverstripe/silverstripe-framework/commit/c247dd5) Add default $lock_out_after_incorrect_logins value [SS-2014-016]. diff --git a/docs/en/topics/authentication.md b/docs/en/topics/authentication.md new file mode 100644 index 000000000..7bf25c10b --- /dev/null +++ b/docs/en/topics/authentication.md @@ -0,0 +1,55 @@ +# Authentication + +By default, silverstripe provides a `[api:MemberAuthenticator]` class which hooks into its own internal +authentication system. + +The main login system uses these controllers to handle the various security requests: + + * `[api:Security]` Which is the controller which handles most front-end security requests, including + Logging in, logging out, resetting password, or changing password. This class also provides an interface + to allow configured `[api:Authenticator]` classes to each display a custom login form. + * `[api:CMSSecurity]` Which is the controller which handles security requests within the CMS, and allows + users to re-login without leaving the CMS. + +## Member Authentication + +The default member authentication system is implemented in the following classes: + + * `[api:MemberAuthenticator]` Which is the default member authentication implementation. This uses the email + and password stored internally for each member to authenticate them. + * `[api:MemberLoginForm]` Is the default form used by `MemberAuthenticator`, and is displayed on the public site + at the url `Security/login` by default. + * `[api:CMSMemberLoginForm]` Is the secondary form used by `MemberAuthenticator`, and will be displayed to the + user within the CMS any time their session expires or they are logged out via an action. This form is + presented via a popup dialog, and can be used to re-authenticate that user automatically without them having + to lose their workspace. E.g. if editing a form, the user can login and continue to publish their content. + +## Custom Authentication + +Additional authentication methods (oauth, etc) can be implemented by creating custom implementations of each of the +following base classes: + + * `[api:Authenticator]` The base class for authentication systems. This class also acts as the factory + to generate various login forms for parts of the system. If an authenticator supports in-cms + reauthentication then it will be necessary to override the `supports_cms` and `get_cms_login_form` methods. + * `[api:LoginForm]` which is the base class for a login form which links to a specific authenticator. At the very + least, it will be necessary to implement a form class which provides a default login interface. If in-cms + re-authentication is desired, then a specialised subclass of this method may be necessary. For example, this form + could be extended to require confirmation of username as well as password. + +## Default Admin + +When a new silverstripe site is created for the first time, it may be necessary to create a default admin to provide +CMS access for the first time. SilverStripe provides a default admin configuration system, which allows a username +and password to be configured for a single special user outside of the normal membership system. + +It is advisable to configure this user in your `_ss_environment.php` file outside of the web root, as below: + + :::php + // Configure a default username and password to access the CMS on all sites in this environment. + define('SS_DEFAULT_ADMIN_USERNAME', 'admin'); + define('SS_DEFAULT_ADMIN_PASSWORD', 'password'); + +When a user logs in with these credentials, then a `[api:Member]` with the Email 'admin' will be generated in +the database, but without any password information. This means that the password can be reset or changed by simply +updating the `_ss_environment.php` file. diff --git a/docs/en/topics/environment-management.md b/docs/en/topics/environment-management.md index ea5267095..9066aa8f8 100644 --- a/docs/en/topics/environment-management.md +++ b/docs/en/topics/environment-management.md @@ -117,8 +117,8 @@ This is my `_ss_environment.php` file. I have it placed in `/var`, as each of th | `SS_DATABASE_NAME` | Set the database name. Assumes the `$database` global variable in your config is missing or empty. | | `SS_DATABASE_CHOOSE_NAME`| Boolean/Int. If set, then the system will choose a default database name for you if one isn't give in the $database variable. The database name will be "SS_" followed by the name of the folder into which you have installed SilverStripe. If this is enabled, it means that the phpinstaller will work out of the box without the installer needing to alter any files. This helps prevent accidental changes to the environment. If `SS_DATABASE_CHOOSE_NAME` is an integer greater than one, then an ancestor folder will be used for the database name. This is handy for a site that's hosted from /sites/examplesite/www or /buildbot/allmodules-2.3/build. If it's 2, the parent folder will be chosen; if it's 3 the grandparent, and so on.| | `SS_ENVIRONMENT_TYPE`| The environment type: dev, test or live.| -| `SS_DEFAULT_ADMIN_USERNAME`| The username of the default admin - this is a non-database user with administrative privileges.| -| `SS_DEFAULT_ADMIN_PASSWORD`| The password of the default admin.| +| `SS_DEFAULT_ADMIN_USERNAME`| The username of the default admin. This is a user with administrative privileges.| +| `SS_DEFAULT_ADMIN_PASSWORD`| The password of the default admin. This will not be stored in the database.| | `SS_USE_BASIC_AUTH`| Protect the site with basic auth (good for test sites)| | `SS_SEND_ALL_EMAILS_TO`| If you set this define, all emails will be redirected to this address.| | `SS_SEND_ALL_EMAILS_FROM`| If you set this define, all emails will be send from this address.| diff --git a/docs/en/topics/index.md b/docs/en/topics/index.md index b55721314..5eaaa0c7f 100644 --- a/docs/en/topics/index.md +++ b/docs/en/topics/index.md @@ -3,7 +3,8 @@ This section provides an overview on how things fit together, the "conceptual glue" between APIs and features. It is where most documentation should live, and is the natural "second step" after finishing the tutorials. - * [Access Control and Page Security](access-control): Restricting access and setting up permissions on your website + * [Access Control and Page Security](access-control): Restricting access and setting up permissions on your website. + * [Authentication](authentication): Overview of the default member authentication system. * [Caching](caching): Explains built-in caches for classes, config and templates. How to use your own caches. * [Command line Usage](commandline): Calling controllers via the command line interface using `sake` * [Configuration](configuration): Influence behaviour through PHP and YAML configuration diff --git a/forms/Form.php b/forms/Form.php index 89b6dcdde..03ec19afd 100644 --- a/forms/Form.php +++ b/forms/Form.php @@ -57,7 +57,10 @@ class Form extends RequestHandler { protected $fields; protected $actions; - + + /** + * @var Controller + */ protected $controller; protected $name; @@ -274,12 +277,17 @@ class Form extends RequestHandler { // Protection against CSRF attacks $token = $this->getSecurityToken(); if( ! $token->checkRequest($request)) { - if (empty($vars['SecurityID'])) { + $securityID = $token->getName(); + if (empty($vars[$securityID])) { $this->httpError(400, _t("Form.CSRF_FAILED_MESSAGE", - "There seems to have been a technical problem. Please click the back button, - refresh your browser, and try again.")); + "There seems to have been a technical problem. Please click the back button, ". + "refresh your browser, and try again." + )); } else { - Session::set("FormInfo.{$this->FormName()}.data", $this->getData()); + // Clear invalid token on refresh + $data = $this->getData(); + unset($data[$securityID]); + Session::set("FormInfo.{$this->FormName()}.data", $data); Session::set("FormInfo.{$this->FormName()}.errors", array()); $this->sessionMessage( _t("Form.CSRF_EXPIRED_MESSAGE", "Your session has expired. Please re-submit the form."), @@ -1188,7 +1196,7 @@ class Form extends RequestHandler { $dataFields = $this->fields->dataFields(); if($dataFields) foreach($dataFields as $field) { $name = $field->getName(); - + // Skip fields that have been exlcuded if($fieldList && !in_array($name, $fieldList)) continue; diff --git a/lang/en.yml b/lang/en.yml index 4bca451c9..c652643a2 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -83,6 +83,18 @@ en: CheckboxField: NOANSWER: No YESANSWER: Yes + CMSMemberLoginForm: + BUTTONFORGOTPASSWORD: 'Forgot password?' + BUTTONLOGIN: 'Log back in' + BUTTONLOGOUT: 'Log out' + PASSWORDEXPIRED: '

Your password has expired. Please choose a new one.

' + CMSSecurity: + INVALIDUSER: '

Invalid user. Please re-authenticate here to continue.

' + LoginMessage: '

If you have any unsaved work you can return to where you left off by logging back in below.

' + SUCCESS: Success + SUCCESSCONTENT: '

Login success. If you are not automatically redirected click here

' + TimedOutTitleAnonymous: 'Your session has timed out.' + TimedOutTitleMember: 'Hey {name}!
Your session has timed out.' ConfirmedPasswordField: ATLEAST: 'Passwords must be at least {min} characters long.' BETWEEN: 'Passwords must be {min} to {max} characters long.' @@ -176,7 +188,8 @@ en: TEXT2: 'password reset link' TEXT3: for Form: - CSRF_FAILED_MESSAGE: 'There seems to have been a technical problem. Please click the back button, refresh your browser, and try again.' + CSRF_EXPIRED_MESSAGE: 'Your session has expired. Please re-submit the form.' + CSRF_FAILED_MESSAGE: 'There seems to have been a technical problem. Please click the back button, refresh your browser, and try again.' FIELDISREQUIRED: '{name} is required' SubmitBtnLabel: Go VALIDATIONCREDITNUMBER: 'Please ensure you have entered the {number} credit card number correctly' @@ -251,6 +264,8 @@ en: HtmlEditorField: ADDURL: 'Add URL' ADJUSTDETAILSDIMENSIONS: 'Details & dimensions' + ANCHORSCANNOTACCESSPAGE: 'You are not permitted to access the content of the target page.' + ANCHORSPAGENOTFOUND: 'Target page not found.' ANCHORVALUE: Anchor BUTTONADDURL: 'Add url' BUTTONINSERT: Insert @@ -354,6 +369,7 @@ en: NEWPASSWORD: 'New Password' NoPassword: 'There is no password on this member.' PASSWORD: Password + PASSWORDEXPIRED: 'Your password has expired. Please choose a new one.' PLURALNAME: Members REMEMBERME: 'Remember me next time?' SINGULARNAME: Member @@ -460,8 +476,8 @@ en: SINGULARNAME: Role Title: Title PermissionRoleCode: - PLURALNAME: 'Permission Role Cods' PermsError: 'Can''t assign code "%s" with privileged permissions (requires ADMIN access)' + PLURALNAME: 'Permission Role Codes' SINGULARNAME: 'Permission Role Code' Permissions: PERMISSIONS_CATEGORY: 'Roles and access permissions' diff --git a/security/Authenticator.php b/security/Authenticator.php index 75c05ef4d..abaf08e38 100644 --- a/security/Authenticator.php +++ b/security/Authenticator.php @@ -51,6 +51,23 @@ abstract class Authenticator extends Object { public static function get_login_form(Controller $controller) { } + /** + * Method that creates the re-authentication form for the in-CMS view + * + * @param Controller $controller + */ + public static function get_cms_login_form(Controller $controller) { + } + + /** + * Determine if this authenticator supports in-cms reauthentication + * + * @return bool + */ + public static function supports_cms() { + return false; + } + /** * Get the name of the authentication method @@ -61,7 +78,7 @@ abstract class Authenticator extends Object { } public static function register($authenticator) { - self::register_authenticator($authenticator); + self::register_authenticator($authenticator); } @@ -108,10 +125,10 @@ abstract class Authenticator extends Object { */ public static function unregister_authenticator($authenticator) { if(call_user_func(array($authenticator, 'on_unregister')) === true) { - if(in_array($authenticator, self::$authenticators)) { - unset(self::$authenticators[array_search($authenticator, self::$authenticators)]); - } - }; + if(in_array($authenticator, self::$authenticators)) { + unset(self::$authenticators[array_search($authenticator, self::$authenticators)]); + } + } } diff --git a/security/CMSMemberLoginForm.php b/security/CMSMemberLoginForm.php new file mode 100644 index 000000000..8806ba330 --- /dev/null +++ b/security/CMSMemberLoginForm.php @@ -0,0 +1,166 @@ +Link($action); + } + + public function __construct(Controller $controller, $name) { + // Set default fields + $fields = new FieldList( + HiddenField::create("AuthenticationMethod", null, $this->authenticator_class, $this), + HiddenField::create('tempid', null, $controller->getRequest()->requestVar('tempid')), + PasswordField::create("Password", _t('Member.PASSWORD', 'Password')), + LiteralField::create( + 'forgotPassword', + sprintf( + '

%s

', + $this->getExternalLink('lostpassword'), + _t('CMSMemberLoginForm.BUTTONFORGOTPASSWORD', "Forgot password?") + ) + ) + ); + + if(Security::config()->autologin_enabled) { + $fields->push(new CheckboxField( + "Remember", + _t('Member.REMEMBERME', "Remember me next time?") + )); + } + + // Determine returnurl to redirect to parent page + $logoutLink = $this->getExternalLink('logout'); + if($returnURL = $controller->getRequest()->requestVar('BackURL')) { + $logoutLink = Controller::join_links($logoutLink, '?BackURL='.urlencode($returnURL)); + } + + // Make actions + $actions = new FieldList( + FormAction::create('dologin', _t('CMSMemberLoginForm.BUTTONLOGIN', "Log back in")), + LiteralField::create( + 'doLogout', + sprintf( + '

%s

', + $logoutLink, + _t('CMSMemberLoginForm.BUTTONLOGOUT', "Log out") + ) + ) + ); + + parent::__construct($controller, $name, $fields, $actions); + } + + /** + * Try to authenticate the user + * + * @param array Submitted data + * @return Member Returns the member object on successful authentication + * or NULL on failure. + */ + public function performLogin($data) { + $authenticator = $this->authenticator_class; + $member = $authenticator::authenticate($data, $this); + if($member) { + $member->LogIn(isset($data['Remember'])); + return $member; + } + + $this->extend('authenticationFailed', $data); + } + + /** + * Login form handler method + * + * This method is called when the user clicks on "Log in" + * + * @param array $data Submitted data + */ + public function dologin($data) { + if($this->performLogin($data)) { + $this->logInUserAndRedirect($data); + } else { + // Find best url to redirect back to + $request = $this->controller->getRequest(); + $url = $request->getHeader('X-Backurl') + ?: $request->getHeader('Referer') + ?: $this->controller->Link('login'); + return $this->controller->redirect($url); + } + } + + /** + * Redirect the user to the change password form. + * + * @return SS_HTTPResponse + */ + protected function redirectToChangePassword() { + // Since this form is loaded via an iframe, this redirect must be performed via javascript + $changePasswordForm = new ChangePasswordForm($this->controller, 'ChangePasswordForm'); + $changePasswordForm->sessionMessage( + _t('Member.PASSWORDEXPIRED', 'Your password has expired. Please choose a new one.'), + 'good' + ); + + // Get redirect url + $changePasswordURL = $this->getExternalLink('changepassword'); + if($backURL = $this->controller->getRequest()->requestVar('BackURL')) { + Session::set('BackURL', $backURL); + $changePasswordURL = Controller::join_links($changePasswordURL,'?BackURL=' . urlencode($backURL)); + } + $changePasswordURLATT = Convert::raw2att($changePasswordURL); + $changePasswordURLJS = Convert::raw2js($changePasswordURL); + $message = _t( + 'CMSMemberLoginForm.PASSWORDEXPIRED', + '

Your password has expired. Please choose a new one.

', + 'Message displayed to user if their session cannot be restored', + array('link' => $changePasswordURLATT) + ); + + // Redirect to change password page + $this->controller->getResponse()->setStatusCode(200); + $this->controller->getResponse()->setBody(<< + +$message + + +PHP + ); + return $this->controller->getResponse(); + } + + /** + * Send user to the right location after login + * + * @param array $data + * @return SS_HTTPResponse + */ + protected function logInUserAndRedirect($data) { + // Check password expiry + if(Member::currentUser()->isPasswordExpired()) { + // Redirect the user to the external password change form if necessary + return $this->redirectToChangePassword(); + } else { + // Link to success template + $url = $this->controller->Link('success'); + return $this->controller->redirect($url); + } + } +} diff --git a/security/CMSSecurity.php b/security/CMSSecurity.php new file mode 100644 index 000000000..8f5ea616b --- /dev/null +++ b/security/CMSSecurity.php @@ -0,0 +1,195 @@ + 'HTMLText' + ); + + private static $allowed_actions = array( + 'LoginForm', + 'success' + ); + + public function init() { + parent::init(); + + // Include CMS styles and js + Requirements::css(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css'); + Requirements::css(FRAMEWORK_ADMIN_DIR . '/css/screen.css'); + Requirements::combine_files( + 'cmssecurity.js', + array( + THIRDPARTY_DIR . '/jquery/jquery.js', + THIRDPARTY_DIR . '/jquery-ui/jquery-ui.js', + THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js', + FRAMEWORK_ADMIN_DIR . '/javascript/lib.js', + FRAMEWORK_ADMIN_DIR . '/javascript/CMSSecurity.js' + ) + ); + } + + public function Link($action = null) { + return Controller::join_links(Director::baseURL(), "CMSSecurity", $action); + } + + /** + * Get known logged out member + * + * @return Member + */ + public function getTargetMember() { + if($tempid = $this->request->requestVar('tempid')) { + return Member::member_from_tempid($tempid); + } + } + + public function getResponseController($title) { + // Use $this to prevent use of Page to render underlying templates + return $this; + } + + protected function getLoginMessage() { + return parent::getLoginMessage() + ?: _t( + 'CMSSecurity.LoginMessage', + '

If you have any unsaved work you can return to where you left off by logging back in below.

' + ); + } + + public function getTitle() { + // Check if logged in already + if(Member::currentUserID()) { + return _t('CMSSecurity.SUCCESS', 'Success'); + } + + // Display logged-out message + $member = $this->getTargetMember(); + if($member) { + return _t( + 'CMSSecurity.TimedOutTitleMember', + 'Hey {name}!
Your session has timed out.', + 'Title for CMS popup login form for a known user', + array('name' => $member->FirstName) + ); + } else { + return _t( + 'CMSSecurity.TimedOutTitleAnonymous', + 'Your session has timed out.', + 'Title for CMS popup login form without a known user' + ); + } + } + + /** + * Redirects the user to the external login page + * + * @return SS_HTTPResponse + */ + protected function redirectToExternalLogin() { + $loginURL = Security::create()->Link('login'); + $loginURLATT = Convert::raw2att($loginURL); + $loginURLJS = Convert::raw2js($loginURL); + $message = _t( + 'CMSSecurity.INVALIDUSER', + '

Invalid user. Please re-authenticate here to continue.

', + 'Message displayed to user if their session cannot be restored', + array('link' => $loginURLATT) + ); + $this->response->setStatusCode(200); + $this->response->setBody(<< + +$message + + +PHP + ); + return $this->response; + } + + protected function preLogin() { + // If no member has been previously logged in for this session, force a redirect to the main login page + if(!$this->getTargetMember()) { + return $this->redirectToExternalLogin(); + } + + return parent::preLogin(); + } + + public function GetLoginForms() { + $forms = array(); + $authenticators = Authenticator::get_authenticators(); + foreach($authenticators as $authenticator) { + // Get only CMS-supporting authenticators + if($authenticator::supports_cms()) { + $forms[] = $authenticator::get_cms_login_form($this); + } + } + return $forms; + } + + /** + * Determine if CMSSecurity is enabled + * + * @return bool + */ + public static function enabled() { + // Count all cms-supported methods + $authenticators = Authenticator::get_authenticators(); + foreach($authenticators as $authenticator) { + // Supported if at least one authenticator is supported + if($authenticator::supports_cms()) return true; + } + return false; + } + + public function LoginForm() { + $authenticator = $this->getAuthenticator(); + if($authenticator && $authenticator::supports_cms()) { + return $authenticator::get_cms_login_form($this); + } + user_error('Passed invalid authentication method', E_USER_ERROR); + } + + protected function getTemplatesFor($action) { + return array("CMSSecurity_{$action}", "CMSSecurity") + + parent::getTemplatesFor($action); + } + + /** + * Given a successful login, tell the parent frame to close the dialog + * + * @return SS_HTTPResponse + */ + public function success() { + // Ensure member is properly logged in + if(!Member::currentUserID()) { + return $this->redirectToExternalLogin(); + } + + // Get redirect url + $controller = $this->getResponseController(_t('CMSSecurity.SUCCESS', 'Success')); + $backURL = $this->request->requestVar('BackURL') + ?: Session::get('BackURL') + ?: Director::absoluteURL(AdminRootController::config()->url_base, true); + + // Show login + $controller = $controller->customise(array( + 'Content' => _t( + 'CMSSecurity.SUCCESSCONTENT', + '

Login success. If you are not automatically redirected '. + 'click here

', + 'Login message displayed in the cms popup once a user has re-authenticated themselves', + array('link' => $backURL) + ) + )); + + return $controller->renderWith($this->getTemplatesFor('success')); + } +} diff --git a/security/LoginForm.php b/security/LoginForm.php index dd768b038..6a2d00cd7 100644 --- a/security/LoginForm.php +++ b/security/LoginForm.php @@ -23,14 +23,13 @@ abstract class LoginForm extends Form { * form. * @var string */ - protected $authenticator_class; /** - * Get the authenticator class - * @return Authenticator Returns the authenticator class for this login form. + * Get the authenticator instance + * + * @return Authenticator Returns the authenticator instance for this login form. */ - public function getAuthenticator() { if(!class_exists($this->authenticator_class) || !is_subclass_of($this->authenticator_class, 'Authenticator')) { user_error("The form uses an invalid authenticator class! '{$this->authenticator_class}'" @@ -38,7 +37,7 @@ abstract class LoginForm extends Form { return; } - return new $this->authenticator_class; + return Injector::inst()->get($this->authenticator_class); } } diff --git a/security/Member.php b/security/Member.php index fb5f57435..19f9c4292 100644 --- a/security/Member.php +++ b/security/Member.php @@ -5,23 +5,25 @@ * @package framework * @subpackage security * - * @property string FirstName - * @property string Surname - * @property string Email - * @property string Password - * @property string RememberLoginHash - * @property int NumVisit - * @property string LastVisited Date and time of last visit - * @property string AutoLoginHash - * @property string AutoLoginExpired - * @property string PasswordEncryption - * @property string Salt - * @property string PasswordExpiry - * @property string LockedOutUntil - * @property string Locale - * @property int FailedLoginCount - * @property string DateFormat - * @property string TimeFormat + * @property string $FirstName + * @property string $Surname + * @property string $Email + * @property string $Password + * @property string $RememberLoginToken + * @property string $TempIDHash + * @property string $TempIDExpired + * @property int $NumVisit + * @property string $LastVisited Date and time of last visit + * @property string $AutoLoginHash + * @property string $AutoLoginExpired + * @property string $PasswordEncryption + * @property string $Salt + * @property string $PasswordExpiry + * @property string $LockedOutUntil + * @property string $Locale + * @property int $FailedLoginCount + * @property string $DateFormat + * @property string $TimeFormat */ class Member extends DataObject implements TemplateGlobalProvider { @@ -29,11 +31,13 @@ class Member extends DataObject implements TemplateGlobalProvider { 'FirstName' => 'Varchar', 'Surname' => 'Varchar', 'Email' => 'Varchar(256)', // See RFC 5321, Section 4.5.3.1.3. + 'TempIDHash' => 'Varchar(160)', // Temporary id used for cms re-authentication + 'TempIDExpired' => 'SS_Datetime', // Expiry of temp login 'Password' => 'Varchar(160)', 'RememberLoginToken' => 'Varchar(160)', // Note: this currently holds a hash, not a token. 'NumVisit' => 'Int', 'LastVisited' => 'SS_Datetime', - 'AutoLoginHash' => 'Varchar(160)', + 'AutoLoginHash' => 'Varchar(160)', // Used to auto-login the user on password reset 'AutoLoginExpired' => 'SS_Datetime', // This is an arbitrary code pointing to a PasswordEncryptor instance, // not an actual encryption algorithm. @@ -99,6 +103,25 @@ class Member extends DataObject implements TemplateGlobalProvider { 'Surname' => 'Last Name', 'Email' => 'Email', ); + + /** + * Internal-use only fields + * + * @config + * @var array + */ + private static $hidden_fields = array( + 'RememberLoginToken', + 'AutoLoginHash', + 'AutoLoginExpired', + 'PasswordEncryption', + 'PasswordExpiry', + 'LockedOutUntil', + 'TempIDHash', + 'TempIDExpired', + 'Salt', + 'NumVisit' + ); /** * @config @@ -163,6 +186,23 @@ class Member extends DataObject implements TemplateGlobalProvider { */ private static $session_regenerate_id = true; + + /** + * Default lifetime of temporary ids. + * + * This is the period within which a user can be re-authenticated within the CMS by entering only their password + * and without losing their workspace. + * + * Any session expiration outside of this time will require them to login from the frontend using their full + * username and password. + * + * Defaults to 72 hours. Set to zero to disable expiration. + * + * @config + * @var int Lifetime in seconds + */ + private static $temp_id_lifetime = 259200; + /** * @deprecated 3.2 Use the "Member.session_regenerate_id" config setting instead */ @@ -182,25 +222,42 @@ class Member extends DataObject implements TemplateGlobalProvider { public function requireDefaultRecords() { parent::requireDefaultRecords(); // Default groups should've been built by Group->requireDefaultRecords() already + static::default_admin(); + } + + /** + * Get the default admin record if it exists, or creates it otherwise if enabled + * + * @return Member + */ + public static function default_admin() { + // Check if set + if(!Security::has_default_admin()) return null; // Find or create ADMIN group + singleton('Group')->requireDefaultRecords(); $adminGroup = Permission::get_groups_by_permission('ADMIN')->First(); - if(!$adminGroup) { - singleton('Group')->requireDefaultRecords(); - $adminGroup = Permission::get_groups_by_permission('ADMIN')->First(); - } - - // Add a default administrator to the first ADMIN group found (most likely the default - // group created through Group->requireDefaultRecords()). - $admins = Permission::get_members_by_permission('ADMIN')->First(); - if(!$admins) { - // Leave 'Email' and 'Password' are not set to avoid creating + + // Find member + $admin = Member::get() + ->filter('Email', Security::default_admin_username()) + ->first(); + if(!$admin) { + // 'Password' is not set to avoid creating // persistent logins in the database. See Security::setDefaultAdmin(). + // Set 'Email' to identify this as the default admin $admin = Member::create(); $admin->FirstName = _t('Member.DefaultAdminFirstname', 'Default Admin'); + $admin->Email = Security::default_admin_username(); $admin->write(); + } + + // Ensure this user is in the admin group + if(!$admin->inGroup($adminGroup)) { $admin->Groups()->add($adminGroup); } + + return $admin; } /** @@ -415,12 +472,29 @@ class Member extends DataObject implements TemplateGlobalProvider { $this->LockedOutUntil = null; } + $this->regenerateTempID(); + $this->write(); // Audit logging hook $this->extend('memberLoggedIn'); } + /** + * Trigger regeneration of TempID. + * + * This should be performed any time the user presents their normal identification (normally Email) + * and is successfully authenticated. + */ + public function regenerateTempID() { + $generator = new RandomGenerator(); + $this->TempIDHash = $generator->randomToken('sha1'); + $this->TempIDExpired = self::config()->temp_id_lifetime + ? date('Y-m-d H:i:s', strtotime(SS_Datetime::now()->getValue()) + self::config()->temp_id_lifetime) + : null; + $this->write(); + } + /** * Check if the member ID logged in session actually * has a database record of the same ID. If there is @@ -577,6 +651,7 @@ class Member extends DataObject implements TemplateGlobalProvider { * Return the member for the auto login hash * * @param bool $login Should the member be logged in? + * @return Member */ public static function member_from_autologinhash($RAW_hash, $login = false) { $SQL_hash = Convert::raw2sql($RAW_hash); @@ -592,6 +667,24 @@ class Member extends DataObject implements TemplateGlobalProvider { return $member; } + /** + * Find a member record with the given TempIDHash value + * + * @param string $tempid + * @return Member + */ + public static function member_from_tempid($tempid) { + $members = Member::get() + ->filter('TempIDHash', $tempid); + + // Exclude expired + if(static::config()->temp_id_lifetime) { + $members = $members->filter('TempIDExpired:GreaterThan', SS_Datetime::now()->getValue()); + } + + return $members->first(); + } + /** * Returns the fields for the member form - used in the registration/profile module. * It should return fields that are editable by the admin and the logged-in user. @@ -617,17 +710,9 @@ class Member extends DataObject implements TemplateGlobalProvider { i18n::get_existing_translations() )); - $fields->removeByName('RememberLoginToken'); - $fields->removeByName('NumVisit'); - $fields->removeByName('LastVisited'); - $fields->removeByName('AutoLoginHash'); - $fields->removeByName('AutoLoginExpired'); - $fields->removeByName('PasswordEncryption'); - $fields->removeByName('Salt'); - $fields->removeByName('PasswordExpiry'); + $fields->removeByName(static::config()->hidden_fields); $fields->removeByName('FailedLoginCount'); - $fields->removeByName('LastViewed'); - $fields->removeByName('LockedOutUntil'); + $this->extend('updateMemberFormFields', $fields); return $fields; @@ -1224,20 +1309,11 @@ class Member extends DataObject implements TemplateGlobalProvider { _t('Member.INTERFACELANG', "Interface Language", 'Language of the CMS'), i18n::get_existing_translations() )); - - $mainFields->removeByName('RememberLoginToken'); - $mainFields->removeByName('AutoLoginHash'); - $mainFields->removeByName('AutoLoginExpired'); - $mainFields->removeByName('PasswordEncryption'); - $mainFields->removeByName('PasswordExpiry'); - $mainFields->removeByName('LockedOutUntil'); + $mainFields->removeByName($self->config()->hidden_fields); if( ! $self->config()->lock_out_after_incorrect_logins) { $mainFields->removeByName('FailedLoginCount'); } - - $mainFields->removeByName('Salt'); - $mainFields->removeByName('NumVisit'); $mainFields->makeFieldReadonly('LastVisited'); diff --git a/security/MemberAuthenticator.php b/security/MemberAuthenticator.php index 0aa35c996..cf96e5e25 100644 --- a/security/MemberAuthenticator.php +++ b/security/MemberAuthenticator.php @@ -18,10 +18,115 @@ class MemberAuthenticator extends Authenticator { 'sha1' => 'sha1_v2.4' ); + /** + * Attempt to find and authenticate member if possible from the given data + * + * @param array $data + * @param Form $form + * @param bool &$success Success flag + * @return Member Found member, regardless of successful login + */ + protected static function authenticate_member($data, $form, &$success) { + // Default success to false + $success = false; + + // Attempt to identify by temporary ID + $member = null; + $email = null; + if(!empty($data['tempid'])) { + // Find user by tempid, in case they are re-validating an existing session + $member = Member::member_from_tempid($data['tempid']); + if($member) $email = $member->Email; + } + + // Otherwise, get email from posted value instead + if(!$member && !empty($data['Email'])) { + $email = $data['Email']; + } + + // Check default login (see Security::setDefaultAdmin()) + $asDefaultAdmin = $email === Security::default_admin_username(); + if($asDefaultAdmin) { + // If logging is as default admin, ensure record is setup correctly + $member = Member::default_admin(); + $success = Security::check_default_admin($email, $data['Password']); + if($success) return $member; + } + + // Attempt to identify user by email + if(!$member && $email) { + // Find user by email + $member = Member::get() + ->filter(Member::config()->unique_identifier_field, $email) + ->first(); + } + + // Validate against member if possible + if($member && !$asDefaultAdmin) { + $result = $member->checkPassword($data['Password']); + $success = $result->valid(); + } else { + $result = new ValidationResult(false, _t('Member.ERRORWRONGCRED')); + } + + // Emit failure to member and form (if available) + if(!$success) { + if($member) $member->registerFailedLogin(); + if($form) $form->sessionMessage($result->message(), 'bad'); + } + + return $member; + } + + /** + * Log login attempt + * TODO We could handle this with an extension + * + * @param array $data + * @param Member $member + * @param bool $success + */ + protected static function record_login_attempt($data, $member, $success) { + if(!Security::config()->login_recording) return; + + // Check email is valid + $email = isset($data['Email']) ? $data['Email'] : null; + if(is_array($email)) { + throw new InvalidArgumentException("Bad email passed to MemberAuthenticator::authenticate(): $email"); + } + + $attempt = new LoginAttempt(); + if($success) { + // successful login (member is existing with matching password) + $attempt->MemberID = $member->ID; + $attempt->Status = 'Success'; + + // Audit logging hook + $member->extend('authenticated'); + + } else { + // Failed login - we're trying to see if a user exists with this email (disregarding wrong passwords) + $attempt->Status = 'Failure'; + if($member) { + // Audit logging hook + $attempt->MemberID = $member->ID; + $member->extend('authenticationFailed'); + + } else { + // Audit logging hook + singleton('Member')->extend('authenticationFailedUnknownUser', $data); + } + } + + $attempt->Email = $email; + $attempt->IP = Controller::curr()->getRequest()->getIP(); + $attempt->write(); + } + /** * Method to authenticate an user * - * @param array $RAW_data Raw data to authenticate the user + * @param array $data Raw data to authenticate the user * @param Form $form Optional: If passed, better error messages can be * produced by using * {@link Form::sessionMessage()} @@ -29,100 +134,27 @@ class MemberAuthenticator extends Authenticator { * the member object * @see Security::setDefaultAdmin() */ - public static function authenticate($RAW_data, Form $form = null) { - if(array_key_exists('Email', $RAW_data) && $RAW_data['Email']){ - $SQL_user = Convert::raw2sql($RAW_data['Email']); - } else { - return false; - } - - $isLockedOut = false; - $result = null; - - // Default login (see Security::setDefaultAdmin()) - if(Security::check_default_admin($RAW_data['Email'], $RAW_data['Password'])) { - $member = Security::findAnAdministrator(); - } else { - $member = DataObject::get_one( - "Member", - "\"" . Member::config()->unique_identifier_field . "\" = '$SQL_user' AND \"Password\" IS NOT NULL" - ); - - if($member) { - $result = $member->checkPassword($RAW_data['Password']); - } else { - $result = new ValidationResult(false, _t('Member.ERRORWRONGCRED')); - } - - if($member && !$result->valid()) { - $member->registerFailedLogin(); - $member = false; - } - } + public static function authenticate($data, Form $form = null) { + // Find authenticated member + $member = static::authenticate_member($data, $form, $success); // Optionally record every login attempt as a {@link LoginAttempt} object - /** - * TODO We could handle this with an extension - */ - if(Security::config()->login_recording) { - $attempt = new LoginAttempt(); - if($member) { - // successful login (member is existing with matching password) - $attempt->MemberID = $member->ID; - $attempt->Status = 'Success'; - - // Audit logging hook - $member->extend('authenticated'); - } else { - // failed login - we're trying to see if a user exists with this email (disregarding wrong passwords) - $existingMember = DataObject::get_one( - "Member", - "\"" . Member::config()->unique_identifier_field . "\" = '$SQL_user'" - ); - if($existingMember) { - $attempt->MemberID = $existingMember->ID; - - // Audit logging hook - $existingMember->extend('authenticationFailed'); - } else { - - // Audit logging hook - singleton('Member')->extend('authenticationFailedUnknownUser', $RAW_data); - } - $attempt->Status = 'Failure'; - } - if(is_array($RAW_data['Email'])) { - user_error("Bad email passed to MemberAuthenticator::authenticate(): $RAW_data[Email]", E_USER_WARNING); - return false; - } - - $attempt->Email = $RAW_data['Email']; - $attempt->IP = Controller::curr()->getRequest()->getIP(); - $attempt->write(); - } + static::record_login_attempt($data, $member, $success); // Legacy migration to precision-safe password hashes. // A login-event with cleartext passwords is the only time // when we can rehash passwords to a different hashing algorithm, // bulk-migration doesn't work due to the nature of hashing. // See PasswordEncryptor_LegacyPHPHash class. - if( - $member // only migrate after successful login - && self::$migrate_legacy_hashes - && array_key_exists($member->PasswordEncryption, self::$migrate_legacy_hashes) - ) { - $member->Password = $RAW_data['Password']; + if($success && $member && isset(self::$migrate_legacy_hashes[$member->PasswordEncryption])) { + $member->Password = $data['Password']; $member->PasswordEncryption = self::$migrate_legacy_hashes[$member->PasswordEncryption]; $member->write(); } - if($member) { - Session::clear('BackURL'); - } else { - if($form && $result) $form->sessionMessage($result->message(), 'bad'); - } + if($success) Session::clear('BackURL'); - return $member; + return $success ? $member : null; } @@ -135,7 +167,16 @@ class MemberAuthenticator extends Authenticator { * method */ public static function get_login_form(Controller $controller) { - return Object::create("MemberLoginForm", $controller, "LoginForm"); + return MemberLoginForm::create($controller, "LoginForm"); + } + + public static function get_cms_login_form(\Controller $controller) { + return CMSMemberLoginForm::create($controller, "LoginForm"); + } + + public static function supports_cms() { + // Don't automatically support subclasses of MemberAuthenticator + return get_called_class() === __CLASS__; } diff --git a/security/MemberLoginForm.php b/security/MemberLoginForm.php index 263ea0473..b86333f35 100644 --- a/security/MemberLoginForm.php +++ b/security/MemberLoginForm.php @@ -201,7 +201,10 @@ JS; Session::set('BackURL', $backURL); } $cp = new ChangePasswordForm($this->controller, 'ChangePasswordForm'); - $cp->sessionMessage('Your password has expired. Please choose a new one.', 'good'); + $cp->sessionMessage( + _t('Member.PASSWORDEXPIRED', 'Your password has expired. Please choose a new one.'), + 'good' + ); return $this->controller->redirect('Security/changepassword'); } diff --git a/security/Security.php b/security/Security.php index 315fda7f6..c2d3ecbed 100644 --- a/security/Security.php +++ b/security/Security.php @@ -6,14 +6,14 @@ */ class Security extends Controller { - private static $allowed_actions = array( - 'index', - 'login', - 'logout', - 'basicauthlogin', - 'lostpassword', - 'passwordsent', - 'changepassword', + private static $allowed_actions = array( + 'index', + 'login', + 'logout', + 'basicauthlogin', + 'lostpassword', + 'passwordsent', + 'changepassword', 'ping', 'LoginForm', 'ChangePasswordForm', @@ -200,6 +200,10 @@ class Security extends Controller { if(!Member::currentUser()) { $response->setBody(_t('ContentController.NOTLOGGEDIN','Not logged in')); $response->setStatusDescription(_t('ContentController.NOTLOGGEDIN','Not logged in')); + // Tell the CMS to allow re-aunthentication + if(CMSSecurity::enabled()) { + $response->addHeader('X-Reauthenticate', '1'); + } } return $response; } else { @@ -294,26 +298,32 @@ class Security extends Controller { } /** - * Get the login form to process according to the submitted data + * Get the selected authenticator for this request + * + * @return string Class name of Authenticator */ - public function LoginForm() { - if(isset($this->requestParams['AuthenticationMethod'])) { - $authenticator = trim($_REQUEST['AuthenticationMethod']); - + protected function getAuthenticator() { + $authenticator = $this->request->requestVar('AuthenticationMethod'); + if($authenticator) { $authenticators = Authenticator::get_authenticators(); if(in_array($authenticator, $authenticators)) { - return call_user_func(array($authenticator, 'get_login_form'), $this); + return $authenticator; } + } else { + return Authenticator::get_default_authenticator(); } - else { - if($authenticator = Authenticator::get_default_authenticator()) { - return call_user_func(array($authenticator, 'get_login_form'), $this); - } - } - - user_error('Passed invalid authentication method', E_USER_ERROR); } + /** + * Get the login form to process according to the submitted data + * + * @return Form + */ + public function LoginForm() { + $authenticator = $this->getAuthenticator(); + if($authenticator) return $authenticator::get_login_form($this); + throw new Exception('Passed invalid authentication method'); + } /** * Get the login forms for all available authentication methods @@ -323,15 +333,12 @@ class Security extends Controller { * * @todo Check how to activate/deactivate authentication methods */ - public function GetLoginForms() - { + public function GetLoginForms() { $forms = array(); $authenticators = Authenticator::get_authenticators(); foreach($authenticators as $authenticator) { - array_push($forms, - call_user_func(array($authenticator, 'get_login_form'), - $this)); + $forms[] = $authenticator::get_login_form($this); } return $forms; @@ -345,7 +352,7 @@ class Security extends Controller { * @return string Returns the link to the given action */ public function Link($action = null) { - return "Security/$action"; + return Controller::join_links(Director::baseURL(), "Security", $action); } /** @@ -373,6 +380,107 @@ class Security extends Controller { } } + /** + * Perform pre-login checking and prepare a response if available prior to login + * + * @return SS_HTTPResponse Substitute response object if the login process should be curcumvented. + * Returns null if should proceed as normal. + */ + protected function preLogin() { + // Event handler for pre-login, with an option to let it break you out of the login form + $eventResults = $this->extend('onBeforeSecurityLogin'); + // If there was a redirection, return + if($this->redirectedTo()) return $this->response; + // If there was an SS_HTTPResponse object returned, then return that + if($eventResults) { + foreach($eventResults as $result) { + if($result instanceof SS_HTTPResponse) return $result; + } + } + } + + /** + * Prepare the controller for handling the response to this request + * + * @param string $title Title to use + * @return Controller + */ + protected function getResponseController($title) { + if(!class_exists('SiteTree')) return $this; + + // Use sitetree pages to render the security page + $tmpPage = new Page(); + $tmpPage->Title = $title; + $tmpPage->URLSegment = "Security"; + // Disable ID-based caching of the log-in page by making it a random number + $tmpPage->ID = -1 * rand(1,10000000); + + $controller = Page_Controller::create($tmpPage); + $controller->setDataModel($this->model); + $controller->init(); + return $controller; + } + + /** + * Determine the list of templates to use for rendering the given action + * + * @param string $action + * @return array Template list + */ + protected function getTemplatesFor($action) { + return array("Security_{$action}", 'Security', $this->stat('template_main'), 'BlankPage'); + } + + /** + * Combine the given forms into a formset with a tabbed interface + * + * @param array $forms List of LoginForm instances + * @return string + */ + protected function generateLoginFormSet($forms) { + // Include resources + Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery/jquery.js'); + Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery-ui/jquery-ui.js'); + Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js'); + Requirements::css(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css'); + Requirements::css(FRAMEWORK_DIR . '/css/Security_login.css'); + Requirements::javascript(FRAMEWORK_DIR . '/javascript/TabSet.js'); + + $content = '
'; + $content .= '
'; + $content .= '\n" . $contentForms . "\n
\n
\n"; + return $content; + } + + /** + * Get the HTML Content for the $Content area during login + * + * @return string Message in HTML format + */ + protected function getLoginMessage() { + $message = Session::get('Security.Message.message'); + if(empty($message)) return null; + + $messageType = Session::get('Security.Message.type'); + if($messageType === 'bad') { + return "

$message

"; + } else { + return "

$message

"; + } + } + /** * Show the "login" page @@ -380,91 +488,36 @@ class Security extends Controller { * @return string Returns the "login" page as HTML code. */ public function login() { - // Event handler for pre-login, with an option to let it break you out of the login form - $eventResults = $this->extend('onBeforeSecurityLogin'); - // If there was a redirection, return - if($this->redirectedTo()) return; - // If there was an SS_HTTPResponse object returned, then return that - else if($eventResults) { - foreach($eventResults as $result) { - if($result instanceof SS_HTTPResponse) return $result; - } - } - + // Check pre-login process + if($response = $this->preLogin()) return $response; + + // Legacy: Allow projects to use custom mysite/css/tabs.css here $customCSS = project() . '/css/tabs.css'; if(Director::fileExists($customCSS)) { Requirements::css($customCSS); } - if(class_exists('SiteTree')) { - $tmpPage = new Page(); - $tmpPage->Title = _t('Security.LOGIN', 'Log in'); - $tmpPage->URLSegment = "Security"; - // Disable ID-based caching of the log-in page by making it a random number - $tmpPage->ID = -1 * rand(1,10000000); + // Get response handler + $controller = $this->getResponseController(_t('Security.LOGIN', 'Log in')); - $controller = Page_Controller::create($tmpPage); - $controller->setDataModel($this->model); - $controller->init(); - } else { - $controller = $this; - } - - // if the controller calls Director::redirect(), this will break early - if(($response = $controller->getResponse()) && $response->isFinished()) return $response; - - $content = ''; $forms = $this->GetLoginForms(); if(!count($forms)) { user_error('No login-forms found, please use Authenticator::register_authenticator() to add one', E_USER_ERROR); } + + // if the controller calls Director::redirect(), this will break early + if(($response = $controller->getResponse()) && $response->isFinished()) return $response; // only display tabs when more than one authenticator is provided // to save bandwidth and reduce the amount of custom styling needed if(count($forms) > 1) { - // Needed because the in the template makes problems - // with the tabstrip library otherwise - $link_base = Director::absoluteURL($this->Link("login")); - - Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery/jquery.js'); - Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery-ui/jquery-ui.js'); - - Requirements::javascript(FRAMEWORK_DIR . '/thirdparty/jquery-entwine/dist/jquery.entwine-dist.js'); - - Requirements::css(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css'); - - Requirements::css(FRAMEWORK_DIR . '/css/Security_login.css'); - - Requirements::javascript(FRAMEWORK_DIR . '/javascript/TabSet.js'); - - $content = '
'; - $content .= '
'; - $content .= '\n" . $content_forms . "\n
\n
\n"; + $content = $this->generateLoginFormSet($forms); } else { - $content .= $forms[0]->forTemplate(); + $content = $forms[0]->forTemplate(); } - if(strlen($message = Session::get('Security.Message.message')) > 0) { - $message_type = Session::get('Security.Message.type'); - if($message_type == 'bad') { - $message = "

$message

"; - } else { - $message = "

$message

"; - } - + if($message = $this->getLoginMessage()) { $customisedController = $controller->customise(array( "Content" => $message, "Form" => $content, @@ -478,9 +531,7 @@ class Security extends Controller { Session::clear('Security.Message'); // custom processing - return $customisedController->renderWith( - array('Security_login', 'Security', $this->stat('template_main'), 'BlankPage') - ); + return $customisedController->renderWith($this->getTemplatesFor('login')); } public function basicauthlogin() { @@ -494,16 +545,7 @@ class Security extends Controller { * @return string Returns the "lost password" page as HTML code. */ public function lostpassword() { - if(class_exists('SiteTree')) { - $tmpPage = new Page(); - $tmpPage->Title = _t('Security.LOSTPASSWORDHEADER', 'Lost Password'); - $tmpPage->URLSegment = 'Security'; - $tmpPage->ID = -1; // Set the page ID to -1 so we dont get the top level pages as its children - $controller = Page_Controller::create($tmpPage); - $controller->init(); - } else { - $controller = $this; - } + $controller = $this->getResponseController(_t('Security.LOSTPASSWORDHEADER', 'Lost Password')); // if the controller calls Director::redirect(), this will break early if(($response = $controller->getResponse()) && $response->isFinished()) return $response; @@ -520,9 +562,7 @@ class Security extends Controller { )); //Controller::$currentController = $controller; - return $customisedController->renderWith( - array('Security_lostpassword', 'Security', $this->stat('template_main'), 'BlankPage') - ); + return $customisedController->renderWith($this->getTemplatesFor('lostpassword')); } @@ -556,16 +596,7 @@ class Security extends Controller { * @return string Returns the "password sent" page as HTML code. */ public function passwordsent($request) { - if(class_exists('SiteTree')) { - $tmpPage = new Page(); - $tmpPage->Title = _t('Security.LOSTPASSWORDHEADER', 'Lost Password'); - $tmpPage->URLSegment = 'Security'; - $tmpPage->ID = -1; // Set the page ID to -1 so we dont get the top level pages as its children - $controller = Page_Controller::create($tmpPage); - $controller->init(); - } else { - $controller = $this; - } + $controller = $this->getResponseController(_t('Security.LOSTPASSWORDHEADER', 'Lost Password')); // if the controller calls Director::redirect(), this will break early if(($response = $controller->getResponse()) && $response->isFinished()) return $response; @@ -586,9 +617,7 @@ class Security extends Controller { )); //Controller::$currentController = $controller; - return $customisedController->renderWith( - array('Security_passwordsent', 'Security', $this->stat('template_main'), 'BlankPage') - ); + return $customisedController->renderWith($this->getTemplatesFor('passwordsent')); } @@ -622,16 +651,7 @@ class Security extends Controller { * @return string Returns the "change password" page as HTML code. */ public function changepassword() { - if(class_exists('SiteTree')) { - $tmpPage = new Page(); - $tmpPage->Title = _t('Security.CHANGEPASSWORDHEADER', 'Change your password'); - $tmpPage->URLSegment = 'Security'; - $tmpPage->ID = -1; // Set the page ID to -1 so we dont get the top level pages as its children - $controller = Page_Controller::create($tmpPage); - $controller->init(); - } else { - $controller = $this; - } + $controller = $this->getResponseController(_t('Security.CHANGEPASSWORDHEADER', 'Change your password')); // if the controller calls Director::redirect(), this will break early if(($response = $controller->getResponse()) && $response->isFinished()) return $response; @@ -689,9 +709,7 @@ class Security extends Controller { } } - return $customisedController->renderWith( - array('Security_changepassword', 'Security', $this->stat('template_main'), 'BlankPage') - ); + return $customisedController->renderWith($this->getTemplatesFor('changepassword')); } /** @@ -750,9 +768,21 @@ class Security extends Controller { $member = Permission::get_members_by_permission('ADMIN')->First(); } + if(!$member) { + $member = Member::default_admin(); + } + return $member; } + /** + * Flush the default admin credentials + */ + public static function clear_default_admin() { + self::$default_username = null; + self::$default_password = null; + } + /** * Set a default admin in dev-mode @@ -798,6 +828,24 @@ class Security extends Controller { return !empty(self::$default_username) && !empty(self::$default_password); } + /** + * Get default admin username + * + * @return string + */ + public static function default_admin_username() { + return self::$default_username; + } + + /** + * Get default admin password + * + * @return string + */ + public static function default_admin_password() { + return self::$default_password; + } + /** * Set strict path checking * diff --git a/tests/forms/FormTest.php b/tests/forms/FormTest.php index 8226f783a..3631736b0 100644 --- a/tests/forms/FormTest.php +++ b/tests/forms/FormTest.php @@ -299,6 +299,7 @@ class FormTest extends FunctionalTest { public function testDisableSecurityTokenAcceptsSubmissionWithoutToken() { SecurityToken::enable(); + $expectedToken = SecurityToken::inst()->getValue(); $response = $this->get('FormTest_ControllerWithSecurityToken'); // can't use submitForm() as it'll automatically insert SecurityID into the POST data @@ -312,16 +313,30 @@ class FormTest extends FunctionalTest { ); $this->assertEquals(400, $response->getStatusCode(), 'Submission fails without security token'); + // Generate a new token which doesn't match the current one + $generator = new RandomGenerator(); + $invalidToken = $generator->randomToken('sha1'); + $this->assertNotEquals($invalidToken, $expectedToken); + + // Test token with request $response = $this->get('FormTest_ControllerWithSecurityToken'); $response = $this->post( 'FormTest_ControllerWithSecurityToken/Form', array( 'Email' => 'test@test.com', 'action_doSubmit' => 1, - 'SecurityID' => -1 + 'SecurityID' => $invalidToken ) ); $this->assertEquals(200, $response->getStatusCode(), 'Submission reloads form if security token invalid'); + $this->assertTrue( + stripos($response->getBody(), 'name="SecurityID" value="'.$expectedToken.'"') !== false, + 'Submission reloads with correct security token after failure' + ); + $this->assertTrue( + stripos($response->getBody(), 'name="SecurityID" value="'.$invalidToken.'"') === false, + 'Submission reloads without incorrect security token after failure' + ); $matched = $this->cssParser()->getBySelector('#Form_Form_Email'); $attrs = $matched[0]->attributes(); diff --git a/tests/security/MemberAuthenticatorTest.php b/tests/security/MemberAuthenticatorTest.php index f0365cd6e..1b1f6c17b 100644 --- a/tests/security/MemberAuthenticatorTest.php +++ b/tests/security/MemberAuthenticatorTest.php @@ -6,6 +6,23 @@ class MemberAuthenticatorTest extends SapphireTest { protected $usesDatabase = true; + + protected $defaultUsername = null; + protected $defaultPassword = null; + + public function setUp() { + parent::setUp(); + + $this->defaultUsername = Security::default_admin_username(); + $this->defaultPassword = Security::default_admin_password(); + Security::clear_default_admin(); + Security::setDefaultAdmin('admin', 'password'); + } + + public function tearDown() { + Security::setDefaultAdmin($this->defaultUsername, $this->defaultPassword); + parent::tearDown(); + } public function testLegacyPasswordHashMigrationUponLogin() { $member = new Member(); @@ -63,4 +80,88 @@ class MemberAuthenticatorTest extends SapphireTest { Member::config()->unique_identifier_field = $origField; } + + public function testGenerateLoginForm() { + $controller = new Security(); + + // Create basic login form + $frontendForm = MemberAuthenticator::get_login_form($controller); + $this->assertTrue($frontendForm instanceof MemberLoginForm); + + // Supports cms login form + $this->assertTrue(MemberAuthenticator::supports_cms()); + $cmsForm = MemberAuthenticator::get_cms_login_form($controller); + $this->assertTrue($cmsForm instanceof CMSMemberLoginForm); + } + + /** + * Test that a member can be authenticated via their temp id + */ + public function testAuthenticateByTempID() { + $member = new Member(); + $member->Email = 'test1@test.com'; + $member->PasswordEncryption = "sha1"; + $member->Password = "mypassword"; + $member->write(); + + // Make form + $controller = new Security(); + $form = new Form($controller, 'Form', new FieldList(), new FieldList()); + + // If the user has never logged in, then the tempid should be empty + $tempID = $member->TempIDHash; + $this->assertEmpty($tempID); + + // If the user logs in then they have a temp id + $member->logIn(true); + $tempID = $member->TempIDHash; + $this->assertNotEmpty($tempID); + + // Test correct login + $result = MemberAuthenticator::authenticate(array( + 'tempid' => $tempID, + 'Password' => 'mypassword' + ), $form); + $this->assertNotEmpty($result); + $this->assertEquals($result->ID, $member->ID); + $this->assertEmpty($form->Message()); + + // Test incorrect login + $form->clearMessage(); + $result = MemberAuthenticator::authenticate(array( + 'tempid' => $tempID, + 'Password' => 'notmypassword' + ), $form); + $this->assertEmpty($result); + $this->assertEquals('The provided details don't seem to be correct. Please try again.', $form->Message()); + $this->assertEquals('bad', $form->MessageType()); + } + + /** + * Test that the default admin can be authenticated + */ + public function testDefaultAdmin() { + // Make form + $controller = new Security(); + $form = new Form($controller, 'Form', new FieldList(), new FieldList()); + + // Test correct login + $result = MemberAuthenticator::authenticate(array( + 'Email' => 'admin', + 'Password' => 'password' + ), $form); + $this->assertNotEmpty($result); + $this->assertEquals($result->Email, Security::default_admin_username()); + $this->assertEmpty($form->Message()); + + // Test incorrect login + $form->clearMessage(); + $result = MemberAuthenticator::authenticate(array( + 'Email' => 'admin', + 'Password' => 'notmypassword' + ), $form); + $this->assertEmpty($result); + $this->assertEquals('The provided details don't seem to be correct. Please try again.', $form->Message()); + $this->assertEquals('bad', $form->MessageType()); + } } diff --git a/tests/security/SecurityDefaultAdminTest.php b/tests/security/SecurityDefaultAdminTest.php index 734e42f0e..f81531a08 100644 --- a/tests/security/SecurityDefaultAdminTest.php +++ b/tests/security/SecurityDefaultAdminTest.php @@ -1,5 +1,8 @@ defaultUsername = Security::default_admin_username(); + $this->defaultPassword = Security::default_admin_password(); + Security::clear_default_admin(); + Security::setDefaultAdmin('admin', 'password'); + } + + public function tearDown() { + Security::setDefaultAdmin($this->defaultUsername, $this->defaultPassword); + parent::tearDown(); } public function testCheckDefaultAdmin() { - if(Security::has_default_admin()) { - $this->markTestSkipped( - 'Default admin present. There\'s no way to inspect default admin state, ' . - 'so we don\'t override existing settings' - ); - } - - Security::setDefaultAdmin('admin', 'password'); - $this->assertTrue(Security::has_default_admin()); $this->assertTrue( Security::check_default_admin('admin', 'password'), @@ -33,8 +37,6 @@ class SecurityDefaultAdminTest extends SapphireTest { Security::check_default_admin('admin', 'wrongpassword'), 'Fails with incorrect password' ); - - Security::setDefaultAdmin(null, null); } public function testFindAnAdministratorCreatesNewUser() { @@ -45,8 +47,21 @@ class SecurityDefaultAdminTest extends SapphireTest { $this->assertInstanceOf('Member', $admin); $this->assertTrue(Permission::checkMember($admin, 'ADMIN')); - $this->assertNull($admin->Email); + $this->assertEquals($admin->Email, Security::default_admin_username()); $this->assertNull($admin->Password); } + + public function testDefaultAdmin() { + $adminMembers = Permission::get_members_by_permission('ADMIN'); + $this->assertEquals(0, $adminMembers->count()); + + $admin = Member::default_admin(); + + $this->assertInstanceOf('Member', $admin); + $this->assertTrue(Permission::checkMember($admin, 'ADMIN')); + $this->assertEquals($admin->Email, Security::default_admin_username()); + $this->assertNull($admin->Password); + + } }