Asset CleanUp: Page Speed Booster - Version 1.3.3.7

Version Description

  • New Feature: Google Fonts Optimization: Option to preload Google Font Files
  • New Feature: Local Fonts Optimization: Option to preload Local Font Files
  • Extra Compatibility with the latest version of SG Optimiser
Download this release

Release Info

Developer gabelivan
Plugin Icon 128x128 Asset CleanUp: Page Speed Booster
Version 1.3.3.7
Comparing to
See all releases

Code changes from version 1.3.3.6 to 1.3.3.7

assets/style.min.css CHANGED
@@ -1 +1 @@
1
- #wpacu-pages-info-area{width:98%}#wpacu-top-area{margin:15px 0;padding:0 10px}#wpacu-quick-actions{color:#74777b;float:right;width:auto;margin-right:30px;background:rgba(40,44,42,.05);border-radius:10px;padding:6px 12px}#wpacu-quick-actions .wpacu-actions-title{font-weight:200;letter-spacing:.5px}#wpacu-quick-actions a{color:#004567;text-decoration:none}#wpacu-quick-actions a:hover{color:#0073aa}#wpacu-logo-wrap{width:auto;display:inline-block;position:relative}#wpacu-logo-wrap a{display:block}#wpacu-logo-wrap img{width:352px;height:79px}#wpacu-logo-wrap .wpacu-pro-sign{position:absolute;height:auto;font-family:FiraSans-Medium,proxima-nova-1,Montserrat,Helvetica,sans-serif;font-size:13px;font-weight:600;letter-spacing:1px;padding:5px 11px;border-radius:15px;right:-60px;top:30px;width:auto;display:inline-block;text-align:center}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-lite{color:#74777b;background:rgba(40,44,42,.05)}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-pro{color:#004567;background-color:rgba(40,44,42,.05)}#wpacu_meta_box_content .dashicons.dashicons-warning,.wpacu-tabs nav ul li span.extra-info.license-status.inactive{color:#c00}.wpacu-tabs{position:relative;overflow:hidden;margin:0 auto 20px;width:100%;font-weight:300;font-size:20px}.wpacu-tabs nav{text-align:center}.wpacu-tabs nav ul{position:relative;display:-ms-flexbox;display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:flex;margin:0 auto;padding:0;max-width:1200px;list-style:none;-ms-box-orient:horizontal;-ms-box-pack:center;-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center}.wpacu-tabs nav ul li{position:relative;z-index:1;display:block;margin:0;text-align:center;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}.wpacu-tabs nav ul li span.extra-info{position:absolute;font-size:12px;left:0;right:50%;bottom:12px;-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.wpacu-tabs nav ul li span.extra-info .dashicons{font-size:16px;margin-right:-3px;margin-top:1px}.wpacu-tabs nav ul li span.extra-info.license-status.active{color:green}.wpacu-tabs nav ul li span.extra-info.assets-unloaded-false{color:#004567}.wpacu-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons,.wpacu-tabs nav ul li span.extra-info.assets-unloaded-true,.wpacu-tabs nav ul li span.extra-info.bulk-unloads-true{color:green}.wpacu-tabs nav a{position:relative;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:2.5}.wpacu-tabs nav a span{vertical-align:middle;font-size:14px}.wpacu-tabs nav li.wpacu-tab-current a{color:#74777b}.wpacu-tabs nav a:focus{outline:0}.wpacu-tabs .dashicons{font-size:20px}.no-js .wpacu-content-wrap section{display:block;padding-bottom:2em;border-bottom:1px solid rgba(255,255,255,.6)}.no-flexbox nav ul{display:block}.no-flexbox nav ul li{min-width:15%;display:inline-block}@media screen and (max-width:58em){.wpacu-tabs nav a.icon span{display:none}.wpacu-tabs nav a:before{margin-right:0}}.wpacu-tabs-style-underline nav{background:#fff}.wpacu-tabs-style-underline nav a{color:#74777b;font-size:18px;text-transform:uppercase;text-decoration:none;padding:.25em 0 .5em;border-left:1px solid #e7ecea;-webkit-transition:color .2s;transition:color .2s}.wpacu-tabs-style-underline nav li:last-child a{border-right:1px solid #e7ecea}.wpacu-tabs-style-underline nav li a::after{position:absolute;bottom:0;left:0;width:100%;height:6px;background:#2CC185;content:'';-webkit-transition:-webkit-transform .3s;transition:transform .3s;-webkit-transform:translate3d(0,150%,0);transform:translate3d(0,150%,0)}.wpacu-tabs-style-underline nav li.wpacu-tab-current a::after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.wpacu-tabs-style-underline nav a span{font-weight:700}.wpacu-tabs-style-topline{max-width:1200px;margin:20px auto 30px 0;width:100%;font-weight:300;text-decoration:none}.wpacu-tabs-style-topline nav li{border:1px solid rgba(40,44,42,.1)}.wpacu-tabs-style-topline nav li:not(:last-child){border-right:none}.wpacu-tabs-style-topline nav li.wpacu-tab-current{border-top-color:#008f9c;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 18px;background:rgba(40,44,42,.05);color:#74777b;line-height:1;-webkit-transition:color .2s;transition:color .2s;text-decoration:none}.wpacu-tabs-style-topline nav a:focus,.wpacu-tabs-style-topline nav a:hover{background:0 0;color:#008f9c}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #008f9c;color:#008f9c}.wpacu-tabs-style-topline nav li.wpacu-tab-current a span:not(.dashicons){font-weight:600}.wpacu-tabs-style-topline nav a span{text-transform:uppercase;font-weight:400}.wpacu-tab-nav-wrapper{border-bottom:none!important}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active{background:#fff;position:relative}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active:after{content:'';width:100%;bottom:-2px;left:0;position:absolute;border-bottom:2px solid #fff}.wpacu-script-attributes-area{margin:20px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings{padding:5px 7px!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings.wpacu-first{margin:0 28px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings label{margin:0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li{margin:0 16px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:last-child{margin:0 2px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings{background:#fff!important;border:1px solid #eee!important;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:5px 10px!important;list-style:none;display:inline-block;margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings input[type=radio]{width:auto;padding:0;margin:0 5px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings.wpacu-first{margin:0 34px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li{float:left;margin:0 17px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:last-child{margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings:hover{background:#f2faf2}tr.wpacu_location_changed>td{border-left:#004567 4px solid}tr.wpacu_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}tr.wpacu_not_load td .wpacu-assets-inline-code-wrap,tr.wpacu_not_load td .wpacu-script-attributes-area,tr.wpacu_not_load th .wpacu-assets-inline-code-wrap,tr.wpacu_not_load th .wpacu-script-attributes-area{filter:alpha(opacity=45);opacity:.45}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none}#wpacu_meta_box_content,.wpacu_widefat{width:99%}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpassetcleanup_asset_list small{width:auto;float:none;display:inline}#wpacu_meta_box_content .emoji{font-size:18px}#wpacu_meta_box_content h3{margin-left:0;padding-left:0}#wpacu_meta_box_content div.wpacu_note{padding:10px;background-color:#f5f5f5}#wpacu_meta_box_content .wpacu_verified{padding:10px;background-color:#f5f5f5;border-left:1px solid #ddd}#wpacu_meta_box_content .wpacu_verified span{color:#0073aa;font-weight:700}#wpacu_meta_box_content div.wpacu_warning{border:1px solid #c00}#wpacu_meta_box_content ul.wpacu_asset_options{margin:0;padding:0}#wpacu_meta_box_content ul.wpacu_asset_options li{list-style:none;display:inline-block}#wpacu_meta_box_content ul.wpacu_asset_options label{font-weight:400;margin-right:5px;margin-top:5px;margin-bottom:5px}.wpacu-updated-frontend{font-weight:400;background-color:#fff;border-left:4px solid #46b450;border-top:1px solid #46b450;border-right:1px solid #46b450;border-bottom:1px solid #46b450;padding:9px 14px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#wpacu-update-front-settings-area{margin:10px 0;display:inline-block;position:relative}#wpacu-updating-front-settings{display:none;position:absolute;top:5px;right:-35px}#wpacu_wrap_assets{color:#000!important;text-align:left!important;clear:both!important;width:90%!important;padding:20px!important;margin:30px 0 0 15px!important;border:1px solid #cdcdcd;z-index:10000!important;position:relative!important;background-color:#fff!important}#wpacu_wrap_assets div.wpacu_warning{border:1px solid #c00;padding:5px 10px}#wpacu_wrap_assets small{display:inline!important;margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{width:auto!important;margin-right:4px!important}#wpacu_wrap_assets img:not(.wpacu-ajax-loader){display:inline-block!important}#wpacu_wrap_assets p{line-height:22px!important;margin:10px 0!important;text-align:left!important;font-weight:400!important}#wpacu_wrap_assets p:first-child,.wpacu_verified{margin:0 0 10px!important}#wpacu_wrap_assets h1{margin:0 0 20px!important;font-size:160%!important;text-align:left!important}#wpacu_wrap_assets h3{margin:20px 0;font-size:130%}.wpacu_asset_row:first-child td{border-top:1px solid #cdcdcd}.wpacu_asset_row td{border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row.wpacu_notice_row td{position:relative;padding:5px;border-bottom:1px solid transparent}.wpacu_asset_row.wpacu_notice_row td div.wpacu-warning{width:auto;margin:5px;font-style:italic}.wpacu_asset_row:not(.wpacu_notice_row) td{padding:18px!important;position:relative}.wpacu_asset_row:not(.wpacu_notice_row) td.selected,.wpacu_asset_row:not(.wpacu_notice_row) td:hover{-moz-box-shadow:inset 0 0 12px #cdcdcd;-webkit-box-shadow:inset 0 0 12px #cdcdcd;box-shadow:inset 0 0 12px #cdcdcd}.wpacu_asset_row:not(.wpacu_notice_row) td p{padding:0!important;margin-bottom:10px!important;word-wrap:break-word!important;-ms-word-break:break-all;word-break:break-word}.wpacu_asset_row:not(.wpacu_notice_row) td label{width:auto!important;margin:0!important;cursor:pointer!important;display:inline-block!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row:not(.wpacu_notice_row) td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_row:not(.wpacu_notice_row) td.wpacu_check{width:50px!important}.asset-table-extra-info td{padding:5px!important}body.wp-admin .wpacu_asset_row td.wpacu_check{width:25px!important}.wpacu_asset_row .dashicons-warning{color:red!important}label.wpacu_add_global{cursor:pointer!important}label.wpacu_input_load_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}tr.wpacu_global_rule_row.selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}.nav-tab-wrapper.nav-assets-manager .nav-tab{font-size:13px;font-weight:500;padding:6px 10px}.nav-tab-wrapper.nav-assets-manager .nav-tab.for-pro{padding:6px 8px 6px 3px}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 10px 0 0;list-style:none;display:inline-block;line-height:normal}ul.wpacu_asset_options li.remove_rule label{font-weight:700}ul.wpacu_asset_options label{margin-right:20px;font-weight:400}ul.wpacu_asset_options label input{margin-right:4px}.wpacu_list_table,.wpacu_list_table div,.wpacu_list_table li,.wpacu_list_table p{font-weight:400}.wpacu_striped>tbody>:nth-child(even),ul.wpacu_striped>:nth-child(even){background-color:#fff!important}.wpacu_striped>tbody>:nth-child(odd),ul.wpacu_striped>:nth-child(odd){background-color:#f9f9f9!important}.wpacu_update_btn{-moz-box-shadow:inset 0 1px 0 0 #54a3f7!important;-webkit-box-shadow:inset 0 1px 0 0 #54a3f7!important;box-shadow:inset 0 1px 0 0 #54a3f7!important;background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#007dc1),color-stop(1,#0061a7))!important;background:-moz-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-webkit-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-o-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-ms-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:linear-gradient(to bottom,#007dc1 5%,#0061a7 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#007dc1', endColorstr='#0061a7', GradientType=0)!important;background-color:#007dc1!important;-moz-border-radius:3px!important;-webkit-border-radius:3px!important;border-radius:3px!important;border:1px solid #124d77!important;display:inline-block!important;cursor:pointer!important;color:#fff!important;font-size:15px!important;padding:10px 24px!important;text-decoration:none!important;text-shadow:0 1px 0 #154682!important;height:auto!important;line-height:normal!important}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.wpacu_update_btn.wpacu_submitting,.wpacu_update_btn:hover{background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#0061a7),color-stop(1,#007dc1))!important;background:-moz-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-webkit-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-o-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-ms-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:linear-gradient(to bottom,#0061a7 5%,#007dc1 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0061a7', endColorstr='#007dc1', GradientType=0)!important;background-color:#0061a7!important}.wpacu_update_btn.wpacu_submitting{cursor:default!important}.wpacu_update_btn:active{position:relative!important;top:1px!important}.wpacu-btns .btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wpacu-btns .btn.focus,.wpacu-btns .btn:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.wpacu-btns .btn.disabled,.wpacu-btns .btn:disabled{cursor:not-allowed;opacity:.65}.wpacu-btns .btn.active,.wpacu-btns .btn:active{background-image:none}.wpacu-btns a.btn.disabled,.wpacu-btns fieldset[disabled] a.btn{pointer-events:none}.wpacu-btns .btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.wpacu-btns .btn-primary.focus,.wpacu-btns .btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-primary.disabled,.wpacu-btns .btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary.active,.wpacu-btns .btn-primary:active,.wpacu-btns .show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.wpacu-btns .btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary:hover{color:#292b2c;background-color:#e6e6e6;border-color:#adadad}.wpacu-btns .btn-secondary.focus,.wpacu-btns .btn-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-secondary.disabled,.wpacu-btns .btn-secondary:disabled{background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary.active,.wpacu-btns .btn-secondary:active,.wpacu-btns .show>.btn-secondary.dropdown-toggle{color:#292b2c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.wpacu-btns .btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.wpacu-btns .btn-info.focus,.wpacu-btns .btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-info.disabled,.wpacu-btns .btn-info:disabled{background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info.active,.wpacu-btns .btn-info:active,.wpacu-btns .show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.wpacu-btns .btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.wpacu-btns .btn-success.focus,.wpacu-btns .btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-success.disabled,.wpacu-btns .btn-success:disabled{background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success.active,.wpacu-btns .btn-success:active,.wpacu-btns .show>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.wpacu-btns .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.wpacu-btns .btn-warning.focus,.wpacu-btns .btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-warning.disabled,.wpacu-btns .btn-warning:disabled{background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning.active,.wpacu-btns .btn-warning:active,.wpacu-btns .show>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.wpacu-btns .btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.wpacu-btns .btn-danger.focus,.wpacu-btns .btn-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-danger.disabled,.wpacu-btns .btn-danger:disabled{background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger.active,.wpacu-btns .btn-danger:active,.wpacu-btns .show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.wpacu-btns .btn-outline-primary{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.wpacu-btns .btn-outline-primary:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-primary.focus,.wpacu-btns .btn-outline-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-outline-primary.disabled,.wpacu-btns .btn-outline-primary:disabled{color:#0275d8;background-color:transparent}.wpacu-btns .btn-outline-primary.active,.wpacu-btns .btn-outline-primary:active,.wpacu-btns .show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.wpacu-btns .btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-secondary.focus,.wpacu-btns .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-outline-secondary.disabled,.wpacu-btns .btn-outline-secondary:disabled{color:#ccc;background-color:transparent}.wpacu-btns .btn-outline-secondary.active,.wpacu-btns .btn-outline-secondary:active,.wpacu-btns .show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-info{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.wpacu-btns .btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-info.focus,.wpacu-btns .btn-outline-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-outline-info.disabled,.wpacu-btns .btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.wpacu-btns .btn-outline-info.active,.wpacu-btns .btn-outline-info:active,.wpacu-btns .show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-success{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.wpacu-btns .btn-outline-success:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-success.focus,.wpacu-btns .btn-outline-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-outline-success.disabled,.wpacu-btns .btn-outline-success:disabled{color:#5cb85c;background-color:transparent}.wpacu-btns .btn-outline-success.active,.wpacu-btns .btn-outline-success:active,.wpacu-btns .show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-warning{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning.focus,.wpacu-btns .btn-outline-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-outline-warning.disabled,.wpacu-btns .btn-outline-warning:disabled{color:#f0ad4e;background-color:transparent}.wpacu-btns .btn-outline-warning.active,.wpacu-btns .btn-outline-warning:active,.wpacu-btns .show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-danger{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.wpacu-btns .btn-outline-danger:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-outline-danger.focus,.wpacu-btns .btn-outline-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-outline-danger.disabled,.wpacu-btns .btn-outline-danger:disabled{color:#d9534f;background-color:transparent}.wpacu-btns .btn-outline-danger.active,.wpacu-btns .btn-outline-danger:active,.wpacu-btns .show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-link{font-weight:400;color:#0275d8;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.wpacu-btns .btn-link,.wpacu-btns .btn-link.active,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:disabled{background-color:transparent}.wpacu-btns .btn-link,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{border-color:transparent}.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.wpacu-btns .btn-link:disabled{color:#636c72}.wpacu-btns .btn-link:disabled:focus,.wpacu-btns .btn-link:disabled:hover{text-decoration:none}.wpacu-btns .btn-group-lg>.btn,.wpacu-btns .btn-lg{padding:.75rem 1.5rem;font-size:1.25rem;-webkit-border-radius:.3rem;-moz-border-radius:.3rem;border-radius:.3rem}.wpacu-btns .btn-group-sm>.btn,.wpacu-btns .btn-sm{padding:.25rem .5rem;font-size:.875rem;-webkit-border-radius:.2rem;-moz-border-radius:.2rem;border-radius:.2rem}.wpacu-btns .btn-block{display:block;width:100%}.go-pro-button,.go-pro-link-no-style,.wordpress-core-file{display:inline-block;text-decoration:none}.wpacu-btns .btn-block+.btn-block{margin-top:.5rem}.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=button].btn-block,.wpacu-btns input[type=submit].btn-block{width:100%}.wpacu-btns .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.go-pro-button{background-color:#4CAF50;border:2px solid #4CAF50;color:#fff;padding:12px 18px;text-align:center;font-size:16px;margin:4px 2px;cursor:pointer;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-transition-duration:.4s;transition-duration:.4s}.go-pro-button:hover{background-color:#fff;color:#000;border:2px solid #4CAF50;text-decoration:none}.wpacu-restore-pos-btn{font-size:14px!important;line-height:normal!important;height:42px!important;padding:0 18px!important;margin-top:10px!important}body.wp-admin .wpacu_asset_row .go-pro-link-no-style .wpacu-tooltip{padding:8px 2px}body.wp-admin .go-pro-link-no-style .wpacu-tooltip{text-shadow:none;font-weight:400;font-size:12px;line-height:16px;padding:8px 11px}.go-pro-link-no-style{position:relative;color:inherit}.go-pro-link-no-style:not(.nav-tab){font-style:italic}.go-pro-link-no-style.no-transition .wpacu-tooltip{-webkit-transition:0s all ease;transition:0s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style>img{max-width:20px;max-height:20px}.go-pro-link-no-style .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#00a7a7;color:#fff;text-align:center;padding:8px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-65px;-webkit-transition:.1s all ease;transition:.1s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip:after{content:"";position:absolute;border-width:10px;border-style:solid;top:100%;left:50%;left:calc(50% - 10px);border-color:#00a7a7 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-on-pages-btn{cursor:pointer;margin-left:-77px;width:130px}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip{bottom:-40px;left:120px;margin-left:-86px}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip:after{top:41px;left:-20px;border-color:transparent #c00 transparent transparent}.wordpress-core-file{position:relative;font-style:normal;color:inherit}.wordpress-core-file .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#c00;color:#fff;text-align:center;padding:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-86px;-webkit-transition:.1s all ease;transition:.1s all ease;-webkit-transition-delay:0s;transition-delay:0s}.wordpress-core-file .wpacu-tooltip:after{content:"";position:absolute;border-width:10px;border-style:solid;top:100%;left:50%;left:calc(50% - 10px);border-color:#c00 transparent transparent}.wordpress-core-file:hover .wpacu-tooltip{visibility:visible}.ajax-direct-call-error-area{background:#fff;padding:10px;border:1px solid #c00;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.ajax-direct-call-error-area td{padding:6px}.ajax-direct-call-error-area .note{margin-top:0;padding-top:0}.ajax-direct-call-error-area .error-code{color:#c00;font-weight:700}.ajax-wp-remote-post-call-error-area{background:#fff;padding:20px}.ajax-wp-remote-post-call-error-area .table-data{background:0 0;border:1px solid #c66;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.ajax-wp-remote-post-call-error-area .table-data td{padding:10px}.wrap-upgrade-info{background:#fff;padding:0 15px;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-notice{margin:20px 20px 0 0!important}.wpacu-notice p{font-weight:600!important;font-style:italic}.wpacu-notice .dashicons{font-weight:inherit!important;color:#46b450!important;margin-right:4px;vertical-align:text-bottom;font-size:27px}.wpacu-notice-info{padding:12px 12px 12px 16px;background:#fff;border-left:4px solid #008f9c}.wpacu-notice-info p{margin-top:8px}.wpacu-notice-info p:first-child{margin-top:0}.wpacu-notice-info p:last-child{margin-bottom:0}.wpacu-warning{font-size:15px;padding:10px;background:#fffcec;border:1px solid #fdd5c9;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin:0 0 5px;width:100%}.pro-page-unlock-notice{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;padding:10px;background:#f2faf2;border:1px solid #c0e8c0;width:auto;display:block}.wpacu-license-area .notice,.wpacu-settings-area .notice{margin-left:0;padding:10px!important;width:97%;box-sizing:border-box;font-weight:600;font-style:italic}#wpacu-dom-get-type-selections,.wpacu-radio-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections.wpacu-vertical,.wpacu-radio-selections.wpacu-vertical{display:block;margin-top:15px;margin-bottom:18px}#wpacu-dom-get-type-selections.wpacu-vertical li,.wpacu-radio-selections.wpacu-vertical li{float:none;margin-bottom:12px}#wpacu-dom-get-type-selections.wpacu-vertical li:last-child,.wpacu-radio-selections.wpacu-vertical li:last-child{margin-bottom:0}#wpacu-dom-get-type-selections li,.wpacu-radio-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child,.wpacu-radio-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child,.wpacu-radio-selections li:last-child{margin-right:0}.wpacu_combine_loaded_js_level_area{display:none;background:0 0;border-left:2px solid #008f9c;padding-top:8px;padding-bottom:8px;padding-right:10px;padding-left:10px;margin:20px 0 15px}.wpacu_combine_loaded_js_level_area.wpacu_active{display:block}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.wpacu-wrap li,.wpacu-wrap p,.wpacu-wrap td{font-weight:400}.wpacu-wrap small{width:auto;float:none;display:inline}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-tab-content{display:block;width:100%}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-area-title{color:#004567;padding:16px 15px;background:#f8f8f8;border-left:5px solid #004567b0;border-top:1px solid #e7e7e7;border-right:1px solid #e7e7e7;border-bottom:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-size:1.45em;font-weight:500}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area{margin:0}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area .button{padding:11px 28px;height:auto;font-size:18px}.wpacu-wrap.wpacu-settings-show-all #wpacu-updating-settings{margin-left:224px;top:25px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch{width:auto;height:auto}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input{display:block}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox],.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox]{margin:0 0 3px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch{position:relative;display:inline-block;width:52px;height:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider{background-color:#52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled:before{content:"\f160";font-family:Dashicons,Arial,"Times New Roman","Bitstream Charter",Times,serif;position:absolute;font-size:23px;top:5px;right:2px;z-index:1000}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:4px;line-height:1.4}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em{font-weight:200}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_read_more,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_read_more{margin-top:-10px;font-style:italic;font-size:12px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices{list-style:none;margin:0}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li{float:left;margin-right:30px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li:last-child{margin-right:0}#wpacu-assets-list-by-location-selected{background:0 0;border:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:8px;clear:both}.notice.notice-success+.wpacu-wrap.wpacu-settings-area{margin-top:20px}.wpacu-form-table th{vertical-align:top;text-align:left;padding:5px 20px 20px 0;width:200px;line-height:1.3;font-weight:600}.wpacu-form-table th label{color:#23282d;font-weight:600;font-size:14px;text-shadow:none;vertical-align:middle;cursor:pointer}.wpacu-form-table td{padding-bottom:25px}.wpacu-form-table td:last-child p:last-child{margin:0}.wpacu-form-table label input[type=checkbox]{height:19px;width:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.wpacu-form-table label input[type=checkbox]:checked,.wpacu-form-table label input[type=checkbox]:hover{border:1px solid green}.wpacu-form-table label input[type=checkbox]:checked:before{color:#52af00;font:400 24px/1 dashicons}#wpacu-settings-vertical-tab-wrap{display:table;width:100%}#wpacu-settings-vertical-tab-wrap *{box-sizing:border-box}.wpacu-settings-tab{display:table-cell;width:19%;height:100%;vertical-align:top}.wpacu-settings-tab a{text-decoration:none;border-left:3px solid transparent;display:block;background-color:#f1f1f1;color:#004567;padding:17px 16px;width:100%;outline:0;text-align:left;cursor:pointer;font-size:14px;font-weight:600;border-bottom:1px solid #ccc}.wpacu-settings-tab a:first-child{border-top:1px solid transparent!important}.wpacu-settings-tab a:last-child{border-bottom:1px solid transparent!important}.wpacu-settings-tab a:hover{background-color:#fff;border-left:3px solid #004567;position:relative}.wpacu-settings-tab a.active{color:#004567;background-color:#fff;border-left:3px solid #004567;position:relative;border-bottom:1px solid #ccc}.wpacu-settings-tab a.active:after{content:'';position:absolute;height:100%;width:1px;top:0;right:-1px;background-color:#fff}.wpacu-settings-tab-content{background-color:#fff;display:none;padding:12px 18px;width:79%;border-left:none;height:100%;border-top-right-radius:10px;border-bottom-right-radius:10px}.wpacu-settings-tab-content h2{padding:0 0 15px;border-bottom:1px solid #e7e7e7}.wpacu-settings-tab-content.active{display:table-cell}#wpacu_minify_css_exceptions_area,#wpacu_minify_js_exceptions_area{margin:16px 0 0}#wpacu-update-button-area{position:relative;margin-left:19%}#wpacu-update-button-area.no-left-margin{margin-left:0}#wpacu-update-button-area p{margin-top:10px}#wpacu-update-button-area .button{padding:5px 18px;height:38px;font-size:15px}#wpacu-updating-settings{position:absolute;margin-left:183px;top:19px;display:none}#combine_loaded_js_info_area{position:relative}#combine_loaded_js_info_area.locked-for-pro:before{position:absolute;content:'';height:100%;width:100%;background:#fff;opacity:.5;z-index:10000}body.wp-admin .wpacu-handle-notes{margin-top:10px!important}body.wp-admin .wpacu-handle-notes p{margin-top:0!important}body.wp-admin .wpacu-handle-notes p a{font-size:inherit}body.wp-admin .wpacu-handle-notes p a span.dashicons{font-size:19px;width:19px;height:19px;vertical-align:bottom;text-decoration:none}.wpacu-handle-notes{margin-top:12px!important;padding-top:5px;border-top:1px solid #e7e7e7}.wpacu-handle-notes .wpacu-handle-notes-field{display:none}.wpacu-handle-notes .wpacu-handle-notes-field>textarea{font-size:85%;padding:6px;width:320px;max-width:100%}.wpacu-handle-notes p{margin:10px 0 0!important}.wpacu-handle-notes p a.wpacu-add-handle-note{text-decoration:none;font-size:80%;display:inline-block;color:inherit}.wpacu-handle-notes p a.wpacu-add-handle-note span.dashicons{font-size:18px;width:18px;height:18px}.wrap_bulk_unload_options{width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wrap_bulk_unload_options .wpacu_asset_options_wrap{flex-grow:1;margin:5px 10px 14px 0!important;padding:8px 10px 2px!important}.wrap_bulk_unload_options .wpacu_asset_options_wrap .wpacu_slider_text{position:relative!important;vertical-align:top;left:inherit!important;top:inherit!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch{position:relative;display:inline-block;min-width:52px;width:52px;height:29px;margin-right:5px!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input{display:none}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.15s;transition:.15s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.15s;transition:.15s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider{background-color:#C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_slider_text{position:absolute;left:62px;top:3px}.editor-post-saved-state.is-wpacu-reloading{animation:edit-post__loading-fade-animation .5s infinite}body.wp-admin .wpacu_asset_row.wpacu-loading{position:relative}body.wp-admin .wpacu_asset_row.wpacu-loading .wpacu-ajax-loader{display:block!important}body.wp-admin .wpacu_asset_row .wpacu-ajax-loader{display:none;width:58px;height:58px;position:absolute;bottom:0;right:0;opacity:.75}.wpacu_asset_row input{width:auto;height:auto;min-height:16px}.wpacu_asset_row .tip{background:inherit;border-left:4px solid #e7e7e7;margin:5px 0;padding:7px;font-style:italic;font-size:small;line-height:1.4}.wpacu_asset_row td{width:100%;text-align:left}.wpacu_asset_row td p:last-child{margin-bottom:0!important}.wpacu_asset_row td .wpacu_asset_options_wrap{padding:8px 10px;margin:15px 0;background:#fff;border:1px solid #eee;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu_asset_row td .wpacu_asset_options_wrap p:first-child{margin-top:0;margin-bottom:8px!important}.wpacu_asset_row p.wpacu_handle{margin-top:0}.wpacu_asset_row li.wpacu_unload_this_page{display:block!important;position:relative}.wpacu-clearfix:after,.wpacu-clearfix:before{display:table;content:''}.wpacu-contract-expand-area{width:100%;margin:20px 0 0}.wpacu-contract-expand-area .col-left{float:left}.wpacu-contract-expand-area .col-left h4{margin-bottom:0}.wpacu-contract-expand-area .col-right{float:right}.wpacu-clearfix:after{clear:both}.wpacu-wp-button{color:#555;border-color:#ccc;background:#f7f7f7;box-shadow:0 1px 0 #ccc;vertical-align:top}body.wp-admin .wpacu-wp-button{font-size:13px;line-height:26px;height:28px}.wpacu-wp-button.wpacu-wp-button-secondary{display:inline-block;text-decoration:none;height:auto;margin:0 5px 0 0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wpacu-wp-button:hover{background:#fafafa;border-color:#999;color:#23282d}.distinguish-asset-list{list-style:none;margin-left:0;margin-bottom:5px;display:inline-block}.distinguish-asset-list li{float:left;margin-right:20px}.distinguish-asset-list li:last-child{margin-right:0}body[class*=asset-cleanup-pro] a.wpacu-plugin-contracted-wrap-link{padding:16px 6px 16px 41px!important}body[class*=asset-cleanup-pro] .wpacu-area-open .wpacu-plugin-toggle-all{font-size:12px!important;width:calc(100% - 26px)!important}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all{top:5px}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all ul li{font-size:12px!important}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-area{margin-top:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location>a.wpacu-assets-collapsible{padding:15px 15px 15px 43px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu_list_table{border-width:0;margin:0;border-spacing:inherit;width:100%;box-shadow:3px 3px 2px #ddd;border-bottom-right-radius:5px;border-top-right-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-name{font-weight:600}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-version{font-weight:200}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area[data-wpacu-plugin=oxygen] .icon-area{border-radius:50%}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all{display:inline-block;padding:0;font-size:13px;width:100%;width:calc(100% + 46px);min-width:250px;position:absolute;left:100%;left:calc(100% + 6px);margin:0;top:4px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all ul{display:inline-block;margin:0;list-style:none;padding-left:13px;padding-top:0}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all ul li{padding:0;margin:0;line-height:normal;font-size:14px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all ul li:first-child{font-style:italic;margin-bottom:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;position:relative;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title:after{content:'';position:absolute;width:100%;left:0;bottom:0;height:1px;background-color:#fdfdfd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap{padding:0 0 10px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open .wpacu-plugin-toggle-all{display:inline-block;padding:7px 12px 16px;font-size:14px;width:100%;text-align:left;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open.wpacu-plugin-assets-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link{color:inherit;text-decoration:none;font-weight:inherit;font-style:inherit;font-size:105%;line-height:initial;height:auto;margin:14px 0 0;padding:13px 6px 14px 39px;position:relative;display:block}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:after{position:absolute;font-size:18px;font-family:Dashicons;right:12px;top:14px;content:"\f132"}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open:after{content:"\f460"}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover{border:1px solid #878787;background:#f9f9f9}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover.wpacu-link-closed{box-shadow:3px 3px 2px #ddd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open{border-top:1px solid #cdcdcd;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:none}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed.wpacu-last-wrap-link{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default{top:10px;left:10px;width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area{width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area:before{font-size:22px;line-height:22px;top:4px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title{position:relative;padding:17px 10px 16px 46px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title:after{content:'';position:absolute;width:100%;left:0;bottom:0;height:1px;background-color:#fdfdfd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-area-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-open{padding:0;max-height:100%}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-closed{padding:0;overflow:hidden;max-height:0}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{margin-top:0;margin-bottom:-1px;padding:14px 10px 16px 12px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title.wpacu-theme-has-icon{padding:18px 10px 16px 58px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:-1px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-location-child-area-first{margin-top:2px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-area-expanded .wpacu-area-title{display:inline-block;z-index:1;padding:17px 10px 16px 46px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;border-top-right-radius:8px;border-top-left-radius:8px;background-color:#f9f9f9;border-left:1px solid #cdcdcd;border-top:1px solid #cdcdcd;border-bottom:1px solid transparent;border-right:1px solid #cdcdcd;position:relative}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon){color:#b4b9be;background-color:#eee;box-shadow:inset 0 0 10px rgba(160,165,170,.15);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon) .icon-area:before{content:"\f106";font-family:Dashicons;position:absolute;font-size:28px;line-height:28px;top:5px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-theme{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-theme .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-wp_core{border:1px solid #c00}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content{padding:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table{width:100%;margin:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td{border-left:hidden;border-right:hidden;border-bottom:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child{margin-bottom:0!important}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child{border-bottom:hidden}a.wpacu-assets-collapsible{color:#000;font-size:20px;text-decoration:none;display:block;position:relative;background-color:#f1f3f8;cursor:pointer;padding:15px 15px 15px 36px;width:auto;border:none;text-align:left;outline:0}a.wpacu-assets-collapsible>span.dashicons{font-size:25px;line-height:normal;position:absolute;top:15px;top:calc(50% - 21px);left:22px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-collapsible:hover{background-color:#f1f3f8;text-decoration:none}a.wpacu-assets-collapsible:after{position:absolute;font-size:22px;font-family:Dashicons;right:14px;top:16px}a.wpacu-assets-collapsible:not(.wpacu-assets-collapsible-active):after{content:"\f132"}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active{background-color:#f1f3f8}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active:after{content:"\f460"}.wpacu-assets-collapsible-content{padding:0 16px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-collapsible-content .wpacu-assets-note{margin:0;padding:15px 15px 10px}.wpacu-assets-collapsible-content>div:not(.wpacu-assets-table-list-wrap){padding:16px 0 0}.wpacu-assets-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-collapsible-content.wpacu-open{max-height:100%}a.wpacu-assets-inline-code-collapsible{color:inherit;font-size:14px;text-decoration:none;display:inline-block;position:relative;cursor:pointer;width:auto;outline:0;background:#f1f3f8;border:1px solid #cdcdcd;padding:4px 21px 4px 8px;margin:0 0 0 6px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}a.wpacu-assets-inline-code-collapsible:hover{border:1px solid #5c5c5c}a.wpacu-assets-inline-code-collapsible:after{position:absolute;font-size:15px;font-family:Dashicons;right:-3px;top:-1px;width:14px;height:14px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-inline-code-collapsible:not(.wpacu-assets-inline-code-collapsible-active):after{content:"\f132"}a.wpacu-assets-inline-code-collapsible.wpacu-assets-inline-code-collapsible-active:after{content:"\f460"}.wpacu-assets-inline-code-collapsible-content{font-size:80%;padding:0 8px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-inline-code-collapsible-content>div{padding:7px 8px 0}.wpacu-assets-inline-code-collapsible-content>div>p{line-height:normal!important}.wpacu-assets-inline-code-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-inline-code-collapsible-content.wpacu-open{max-height:100%}.wpacu_asset_row p div.select{display:inline-block}.wpacu-wrap-choose-position{display:inline}.wpacu-wrap-choose-position>div{display:inline-block}.wpacu-wrap-choose-position select{width:auto;font-size:inherit;display:inline;margin-left:6px;margin-right:4px}.wpacu-wrap-choose-position>.select>.select{display:inline}.wpacu-wrap-choose-position>.select>.select select{padding-right:30px}.wpacu-wrap-choose-position>.select>.select:after{right:15px;top:-4px}.wpacu_table_wrap{margin:20px 0 0}.wpacu_table_wrap>table{border:1px solid #cdcdcd}.wpacu_table_wrap .table{width:100%;max-width:100%;margin-bottom:1rem;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu_table_wrap .table td,.wpacu_table_wrap .table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.wpacu_table_wrap .table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.wpacu_table_wrap .table tbody+tbody{border-top:2px solid #eceeef}.wpacu_table_wrap .table .table{background-color:#fff}.wpacu_table_wrap .table-sm td,.wpacu_table_wrap .table-sm th{padding:.3rem}.wpacu_table_wrap .table-bordered,.wpacu_table_wrap .table-bordered td,.wpacu_table_wrap .table-bordered th{border:1px solid #eceeef}.wpacu_table_wrap .table-bordered thead td,.wpacu_table_wrap .table-bordered thead th{border-bottom-width:2px}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(even){background-color:#f9f9f9}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(odd){background-color:#fff}.wpacu_table_wrap .table-active,.wpacu_table_wrap .table-active>td,.wpacu_table_wrap .table-active>th,.wpacu_table_wrap .table-hover .table-active:hover,.wpacu_table_wrap .table-hover .table-active:hover>td,.wpacu_table_wrap .table-hover .table-active:hover>th,.wpacu_table_wrap .table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.wpacu_table_wrap .table-success,.wpacu_table_wrap .table-success>td,.wpacu_table_wrap .table-success>th{background-color:#dff0d8}.wpacu_table_wrap .table-hover .table-success:hover,.wpacu_table_wrap .table-hover .table-success:hover>td,.wpacu_table_wrap .table-hover .table-success:hover>th{background-color:#d0e9c6}.wpacu_table_wrap .table-info,.wpacu_table_wrap .table-info>td,.wpacu_table_wrap .table-info>th{background-color:#d9edf7}.wpacu_table_wrap .table-hover .table-info:hover,.wpacu_table_wrap .table-hover .table-info:hover>td,.wpacu_table_wrap .table-hover .table-info:hover>th{background-color:#c4e3f3}.wpacu_table_wrap .table-warning,.wpacu_table_wrap .table-warning>td,.wpacu_table_wrap .table-warning>th{background-color:#fcf8e3}.wpacu_table_wrap .table-hover .table-warning:hover,.wpacu_table_wrap .table-hover .table-warning:hover>td,.wpacu_table_wrap .table-hover .table-warning:hover>th{background-color:#faf2cc}.wpacu_table_wrap .table-danger,.wpacu_table_wrap .table-danger>td,.wpacu_table_wrap .table-danger>th{background-color:#f2dede}.wpacu_table_wrap .table-hover .table-danger:hover,.wpacu_table_wrap .table-hover .table-danger:hover>td,.wpacu_table_wrap .table-hover .table-danger:hover>th{background-color:#ebcccc}.wpacu_table_wrap .thead-inverse th{color:#fff;background-color:#292b2c}.wpacu_table_wrap .thead-default th{color:#464a4c;background-color:#eceeef}.wpacu_table_wrap .table-inverse{color:#fff;background-color:#292b2c}.wpacu_table_wrap .table-inverse td,.wpacu_table_wrap .table-inverse th,.wpacu_table_wrap .table-inverse thead th{border-color:#fff}.wpacu_table_wrap .table-inverse.table-bordered,.wpacu_table_wrap .table-responsive.table-bordered{border:0}.wpacu_table_wrap .table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}.wp-list-table .wpacu_remove_global_attr_row.wpacu_selected,.wp-list-table .wpacu_restore_position_row.wpacu_selected{background:#e7e7e7}ul.hire-reasons{margin-bottom:20px}ul.hire-reasons li{font-size:14px;line-height:22px;margin-bottom:12px}ul.hire-reasons li .dashicons{font-size:23px;line-height:23px}ul.hire-reasons li .dashicons.dashicons-yes{color:green}ol.getting-started li{font-size:14px;line-height:22px;margin-bottom:8px}.wpacu-get-help-wrap p{font-size:14px}.wpacu-get-help-wrap .help-content-wrap{margin:20px 0 25px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;width:100%}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-align:start;-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wpacu-get-help-wrap .help-content-wrap .help-content{padding:15px;background:#fff;border:1px solid #E0E0E0;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;box-shadow:2px 3px 8px 0 #231f2038;flex:1 1 50%;margin-bottom:10px}.wpacu-get-help-wrap .help-content-wrap .help-content .content-title{margin:5px 0 15px}.wpacu-get-help-wrap .help-content-wrap .help-content .cols-wrap{width:100%;margin:0 auto;display:table}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area{margin:5px 0 0;position:relative}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-left{float:left;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-right{float:right;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.activate-plugin img{max-width:280px}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area img{width:99%;margin:8px 0;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{order:2}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap .help-content{margin-right:24px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{margin-right:0}}.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{order:1}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{margin-bottom:30px}}.wpacu-get-help-wrap .help-content-wrap .help-content ul{list-style:none;padding-left:0}.wpacu-get-help-wrap .help-content-wrap .help-content ul li{font-size:14px;line-height:22px;margin-bottom:15px}.wpacu-get-help-wrap .help-content-wrap .help-content p:last-child,.wpacu-get-help-wrap .help-content-wrap .help-content ul li:last-child{margin-bottom:0}#wpacu-license-data-remove-area{display:none;margin:10px 0 25px}#wpacu-license-data-remove-area.wpacu-visible{display:block}span#wpacu-license-data-removed-msg{display:block;padding-left:26px}#wpacu-warning-read{display:none;margin:10px 0}#wpacu-warning-read span.dashicons-warning{color:#c00}#wpacu-warning-read.wpacu-visible{display:block}#wpacu-reset-submit-area{margin:10px 0;clear:both}#wpacu-reset-submit-btn{margin:10px 0 0}.wpacu-tools-area{margin:10px 20px 0 2px}.wpacu-tools-area .wpacu-tools-container{background:#fff;padding:15px;border:1px solid #cdcdcd;width:96%}.wpacu-tools-area .wpacu-tools-container form>div:first-child{margin:0 0 10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning{display:none;box-sizing:border-box;margin-top:10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p{margin:0 0 10px;line-height:22px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p:only-child{margin:0}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning ul{font-size:13px;list-style-type:disc;padding-left:30px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning.wpacu-visible{display:block}.wpacu-tools-area .wpacu-export-import-area{padding:10px}.wpacu-tools-area .wpacu-export-import-area form>p:first-of-type{margin-top:0}.wpacu-tools-area .wpacu-export-import-area form>p:last-of-type{margin-bottom:0}.wpacu-tools-area .wpacu-export-import-area:hover{background:rgba(40,44,42,.05);box-shadow:inset 0 0 10px rgba(160,165,170,.15)}.wpacu-tools-area .wpacu-export-import-area+hr{display:block;height:1px;border:0;border-top:1px solid #cdcdcd;margin:10px 0;padding:0}#wpacu-import-form button.wpacu-importing img.wpacu-spinner{display:inline-block}#wpacu-import-form button img.wpacu-spinner{display:none;margin:0 0 0 5px;height:16px;width:16px;vertical-align:middle}.wpacu-about-wrap .wpacu-about-text img{width:auto;height:150px;position:absolute;top:20px;right:-20px}@media only screen and (max-width:767px){.wpacu-about-wrap h1{margin:20px}.wpacu-about-wrap .wpacu-about-text img{display:none}.wpacu-about-wrap .wpacu-about-text{margin:20px}}.wpacu-about-wrap .about-wrap-content .area-title{font-size:19px;line-height:19px;margin-bottom:0}.wpacu-about-wrap hr{margin:10px 0}.wpacu-lite-vs-pro-wrap ul{display:flex;top:0;z-index:10;padding-bottom:14px}.wpacu-lite-vs-pro-wrap li{list-style:none;flex:1}.wpacu-lite-vs-pro-wrap li:last-child{border-right:1px solid #DDD}.wpacu-lite-vs-pro-wrap button{width:100%;border:1px solid #DDD;border-right:0;border-top:0;padding:10px;background:#FFF;font-size:14px;font-weight:700;height:60px;color:#999}.wpacu-lite-vs-pro-wrap li.active button{background:#F5F5F5;color:#000}.wpacu-lite-vs-pro-wrap table{border-collapse:collapse;table-layout:fixed;width:100%}.wpacu-lite-vs-pro-wrap th{background:inherit}.wpacu-lite-vs-pro-wrap tr.first{background:inherit;font-size:18px}.wpacu-lite-vs-pro-wrap tr.first .bg-lite{border-top:4px solid #6d6e70;background:#fff;color:#6d6e70}.wpacu-lite-vs-pro-wrap tr.first .bg-pro{border-top:4px solid green;background:#fff;color:green}.wpacu-lite-vs-pro-wrap tr:not(.first){background:#fff}.wpacu-lite-vs-pro-wrap tr:not(:last-child):hover{background:#f8f8f8}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{height:53px;border:1px solid #DDD;padding:10px 16px;empty-cells:show;text-align:left}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{font-size:14px}}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{text-align:center;display:none}.wpacu-lite-vs-pro-wrap td.default{display:table-cell}.wpacu-lite-vs-pro-wrap .txt-l{font-size:28px;font-weight:700}.wpacu-lite-vs-pro-wrap .txt-top{position:relative;top:-9px;left:-2px}.wpacu-lite-vs-pro-wrap svg{width:18px;height:18px}.wpacu-lite-vs-pro-wrap svg path{fill:green}.wpacu-lite-vs-pro-wrap .tick{color:#2CA01C}.wpacu-lite-vs-pro-wrap .tick img{fill:#2CA01C}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .txt-l{font-size:20px}.wpacu-lite-vs-pro-wrap .tick{font-size:15px}}.wpacu-lite-vs-pro-wrap .na{font-size:18px;opacity:.3;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.wpacu-lite-vs-pro-wrap .hide{border:0;background:0 0}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{display:table-cell!important;width:auto}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:130px}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .na{font-size:15px}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:42px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap td .button{font-size:16px!important}}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td .button{font-size:14px!important;padding:0 20px!important}.wpacu-lite-vs-pro-wrap td .button.button-primary{margin-top:6px;margin-bottom:14px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap{margin-bottom:40px;clear:both}}.wpacu-video-areas>div{padding:20px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-video-areas>div:nth-child(odd){background:#fff}.wpacu-video-areas>div:nth-child(even){background:inherit}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 15px;display:flex}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right{padding:0 20px 0 25px}}@media only screen and (min-width:992px) and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 40px}}.wpacu-video-areas .wpacu-video-area-wrapper ol{font-size:14px}.wpacu-video-areas .wpacu-video-area-wrapper ul{font-size:14px;list-style:disc;margin-left:22px}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:first-child{margin-top:0}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:last-child{margin-bottom:0}}@media only screen and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}}#wpassetcleanup_asset_list.postbox h2{padding-left:52px!important;position:relative}#wpassetcleanup_asset_list.postbox h2:before{content:'';position:absolute;background-image:url(images/wpacu-logo-transparent-bg-v1.png);background-size:cover;top:6px;left:13px;width:33px;height:26px;opacity:.8;-webkit-filter:grayscale(100%);filter:grayscale(100%)}body.wp-admin .wpacu-modal{display:none;position:fixed;z-index:1000000;padding-top:15%;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}body.wp-admin .wpacu-modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%;max-width:600px;border-radius:10px}body.wp-admin .wpacu-close{color:#aaa;float:right;font-size:28px;font-weight:700}body.wp-admin .wpacu-close:focus,body.wp-admin .wpacu-close:hover{color:#000;text-decoration:none;cursor:pointer}.wpacu-bulk-changes-tabs{display:table;position:relative;overflow:hidden;margin:0;width:100%}.wpacu-bulk-changes-tabs li{border-top:1px solid rgba(40,44,42,.1);border-left:1px solid rgba(40,44,42,.1);border-bottom:1px solid rgba(40,44,42,.1);float:left;line-height:38px;padding:0;position:relative;margin-bottom:12px}.wpacu-bulk-changes-tabs li:last-child{border-right:1px solid rgba(40,44,42,.1)}.wpacu-bulk-changes-tabs a{position:relative;background:rgba(40,44,42,.05);color:#004567;font-size:14px;font-weight:500;display:block;letter-spacing:0;outline:0;padding:6px 20px;text-decoration:none;border-top:3px solid transparent}.wpacu-bulk-changes-tabs a:hover{background:#f1f1f1;border-top:3px solid transparent}.wpacu-bulk-changes-tabs .current a{background:#fff;border-top:3px solid #004567}.wpacu-bulk-changes-tabs .current a:hover{background:#fff}.wpacu-bulk-changes-tabs .current a:after,.wpacu-bulk-changes-tabs .current a:before{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.wpacu-bulk-changes-tabs .current a:after{border-color:rgba(136,183,213,0);border-top-color:#fff;border-width:12px;margin-left:-12px}.wpacu-bulk-changes-tabs .current a:before{border-color:rgba(194,225,245,0);border-top-color:rgba(40,44,42,.1);border-width:13px;margin-left:-13px}
1
+ #wpacu-pages-info-area{width:98%}#wpacu-top-area{margin:15px 0;padding:0 10px}#wpacu-quick-actions{color:#74777b;float:right;width:auto;margin-right:30px;background:rgba(40,44,42,.05);border-radius:10px;padding:6px 12px}#wpacu-quick-actions .wpacu-actions-title{font-weight:200;letter-spacing:.5px}#wpacu-quick-actions a{color:#004567;text-decoration:none}#wpacu-quick-actions a:hover{color:#0073aa}#wpacu-logo-wrap{width:auto;display:inline-block;position:relative}#wpacu-logo-wrap a{display:block}#wpacu-logo-wrap img{width:352px;height:79px}#wpacu-logo-wrap .wpacu-pro-sign{position:absolute;height:auto;font-family:FiraSans-Medium,proxima-nova-1,Montserrat,Helvetica,sans-serif;font-size:13px;font-weight:600;letter-spacing:1px;padding:5px 11px;border-radius:15px;right:-60px;top:30px;width:auto;display:inline-block;text-align:center}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-lite{color:#74777b;background:rgba(40,44,42,.05)}#wpacu-logo-wrap .wpacu-pro-sign.wpacu-pro{color:#004567;background-color:rgba(40,44,42,.05)}#wpacu_meta_box_content .dashicons.dashicons-warning,.wpacu-tabs nav ul li span.extra-info.license-status.inactive{color:#c00}.wpacu-tabs{position:relative;overflow:hidden;margin:0 auto 20px;width:100%;font-weight:300;font-size:20px}.wpacu-tabs nav{text-align:center}.wpacu-tabs nav ul{position:relative;display:-ms-flexbox;display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:flex;margin:0 auto;padding:0;max-width:1200px;list-style:none;-ms-box-orient:horizontal;-ms-box-pack:center;-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-justify-content:center;-moz-justify-content:center;-ms-justify-content:center;justify-content:center}.wpacu-tabs nav ul li{position:relative;z-index:1;display:block;margin:0;text-align:center;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}.wpacu-tabs nav ul li span.extra-info{position:absolute;font-size:12px;left:0;right:50%;bottom:12px;-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.wpacu-tabs nav ul li span.extra-info .dashicons{font-size:16px;margin-right:-3px;margin-top:1px}.wpacu-tabs nav ul li span.extra-info.license-status.active{color:green}.wpacu-tabs nav ul li span.extra-info.assets-unloaded-false{color:#004567}.wpacu-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons,.wpacu-tabs nav ul li span.extra-info.assets-unloaded-true,.wpacu-tabs nav ul li span.extra-info.bulk-unloads-true{color:green}.wpacu-tabs nav a{position:relative;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:2.5}.wpacu-tabs nav a span{vertical-align:middle;font-size:14px}.wpacu-tabs nav li.wpacu-tab-current a{color:#74777b}.wpacu-tabs nav a:focus{outline:0}.wpacu-tabs .dashicons{font-size:20px}.no-js .wpacu-content-wrap section{display:block;padding-bottom:2em;border-bottom:1px solid rgba(255,255,255,.6)}.no-flexbox nav ul{display:block}.no-flexbox nav ul li{min-width:15%;display:inline-block}@media screen and (max-width:58em){.wpacu-tabs nav a.icon span{display:none}.wpacu-tabs nav a:before{margin-right:0}}.wpacu-tabs-style-underline nav{background:#fff}.wpacu-tabs-style-underline nav a{color:#74777b;font-size:18px;text-transform:uppercase;text-decoration:none;padding:.25em 0 .5em;border-left:1px solid #e7ecea;-webkit-transition:color .2s;transition:color .2s}.wpacu-tabs-style-underline nav li:last-child a{border-right:1px solid #e7ecea}.wpacu-tabs-style-underline nav li a::after{position:absolute;bottom:0;left:0;width:100%;height:6px;background:#2CC185;content:'';-webkit-transition:-webkit-transform .3s;transition:transform .3s;-webkit-transform:translate3d(0,150%,0);transform:translate3d(0,150%,0)}.wpacu-tabs-style-underline nav li.wpacu-tab-current a::after{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.wpacu-tabs-style-underline nav a span{font-weight:700}.wpacu-tabs-style-topline{max-width:1200px;margin:20px auto 30px 0;width:100%;font-weight:300;text-decoration:none}.wpacu-tabs-style-topline nav li{border:1px solid rgba(40,44,42,.1)}.wpacu-tabs-style-topline nav li:not(:last-child){border-right:none}.wpacu-tabs-style-topline nav li.wpacu-tab-current{border-top-color:#008f9c;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 18px;background:rgba(40,44,42,.05);color:#74777b;line-height:1;-webkit-transition:color .2s;transition:color .2s;text-decoration:none}.wpacu-tabs-style-topline nav a:focus,.wpacu-tabs-style-topline nav a:hover{background:0 0;color:#008f9c}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #008f9c;color:#008f9c}.wpacu-tabs-style-topline nav li.wpacu-tab-current a span:not(.dashicons){font-weight:600}.wpacu-tabs-style-topline nav a span{text-transform:uppercase;font-weight:400}.wpacu-tab-nav-wrapper{border-bottom:none!important}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active{background:#fff;position:relative}.wpacu-tab-nav-wrapper .nav-tab.nav-tab-active:after{content:'';width:100%;bottom:-2px;left:0;position:absolute;border-bottom:2px solid #fff}.wpacu-script-attributes-area{margin:20px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings{padding:5px 7px!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings.wpacu-first{margin:0 28px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings label{margin:0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li{margin:0 16px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area.wpacu-lite ul.wpacu-script-attributes-settings li:last-child{margin:0 2px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings{background:#fff!important;border:1px solid #eee!important;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:5px 10px!important;list-style:none;display:inline-block;margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings input[type=radio]{width:auto;padding:0;margin:0 5px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings.wpacu-first{margin:0 34px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li{float:left;margin:0 17px 0 0}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:first-child{margin:0 10px 0 0!important}.wpacu-script-attributes-area .wpacu-script-attributes-settings li:last-child{margin:0}.wpacu-script-attributes-area .wpacu-script-attributes-settings:hover{background:#f2faf2}tr.wpacu_location_changed>td{border-left:#004567 4px solid}tr.wpacu_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}tr.wpacu_not_load td .wpacu-assets-inline-code-wrap,tr.wpacu_not_load td .wpacu-script-attributes-area,tr.wpacu_not_load th .wpacu-assets-inline-code-wrap,tr.wpacu_not_load th .wpacu-script-attributes-area{filter:alpha(opacity=45);opacity:.45}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none}#wpacu_meta_box_content,.wpacu_widefat{width:99%}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpassetcleanup_asset_list small{width:auto;float:none;display:inline}#wpacu_meta_box_content .emoji{font-size:18px}#wpacu_meta_box_content h3{margin-left:0;padding-left:0}#wpacu_meta_box_content div.wpacu_note{padding:10px;background-color:#f5f5f5}#wpacu_meta_box_content .wpacu_verified{padding:10px;background-color:#f5f5f5;border-left:1px solid #ddd}#wpacu_meta_box_content .wpacu_verified span{color:#0073aa;font-weight:700}#wpacu_meta_box_content div.wpacu_warning{border:1px solid #c00}#wpacu_meta_box_content ul.wpacu_asset_options{margin:0;padding:0}#wpacu_meta_box_content ul.wpacu_asset_options li{list-style:none;display:inline-block}#wpacu_meta_box_content ul.wpacu_asset_options label{font-weight:400;margin-right:5px;margin-top:5px;margin-bottom:5px}.wpacu-updated-frontend{font-weight:400;background-color:#fff;border-left:4px solid #46b450;border-top:1px solid #46b450;border-right:1px solid #46b450;border-bottom:1px solid #46b450;padding:9px 14px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#wpacu-update-front-settings-area{margin:10px 0;display:inline-block;position:relative}#wpacu-updating-front-settings{display:none;position:absolute;top:5px;right:-35px}#wpacu_wrap_assets{color:#000!important;text-align:left!important;clear:both!important;width:90%!important;padding:20px!important;margin:30px 0 0 15px!important;border:1px solid #cdcdcd;z-index:10000!important;position:relative!important;background-color:#fff!important}#wpacu_wrap_assets div.wpacu_warning{border:1px solid #c00;padding:5px 10px}#wpacu_wrap_assets small{display:inline!important;margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{width:auto!important;margin-right:4px!important}#wpacu_wrap_assets img:not(.wpacu-ajax-loader){display:inline-block!important}#wpacu_wrap_assets p{line-height:22px!important;margin:10px 0!important;text-align:left!important;font-weight:400!important}#wpacu_wrap_assets p:first-child,.wpacu_verified{margin:0 0 10px!important}#wpacu_wrap_assets h1{margin:0 0 20px!important;font-size:160%!important;text-align:left!important}#wpacu_wrap_assets h3{margin:20px 0;font-size:130%}.wpacu_asset_row:first-child td{border-top:1px solid #cdcdcd}.wpacu_asset_row td{border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row.wpacu_notice_row td{position:relative;padding:5px;border-bottom:1px solid transparent}.wpacu_asset_row.wpacu_notice_row td div.wpacu-warning{width:auto;margin:5px;font-style:italic}.wpacu_asset_row:not(.wpacu_notice_row) td{padding:18px!important;position:relative}.wpacu_asset_row:not(.wpacu_notice_row) td.selected,.wpacu_asset_row:not(.wpacu_notice_row) td:hover{-moz-box-shadow:inset 0 0 12px #cdcdcd;-webkit-box-shadow:inset 0 0 12px #cdcdcd;box-shadow:inset 0 0 12px #cdcdcd}.wpacu_asset_row:not(.wpacu_notice_row) td p{padding:0!important;margin-bottom:10px!important;word-wrap:break-word!important;-ms-word-break:break-all;word-break:break-word}.wpacu_asset_row:not(.wpacu_notice_row) td label{width:auto!important;margin:0!important;cursor:pointer!important;display:inline-block!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row:not(.wpacu_notice_row) td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_row:not(.wpacu_notice_row) td.wpacu_check{width:50px!important}.asset-table-extra-info td{padding:5px!important}body.wp-admin .wpacu_asset_row td.wpacu_check{width:25px!important}.wpacu_asset_row .dashicons-warning{color:red!important}label.wpacu_add_global{cursor:pointer!important}label.wpacu_input_load_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}tr.wpacu_global_rule_row.selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}.nav-tab-wrapper.nav-assets-manager .nav-tab{font-size:13px;font-weight:500;padding:6px 10px}.nav-tab-wrapper.nav-assets-manager .nav-tab.for-pro{padding:6px 8px 6px 3px}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 10px 0 0;list-style:none;display:inline-block;line-height:normal}ul.wpacu_asset_options li.remove_rule label{font-weight:700}ul.wpacu_asset_options label{margin-right:20px;font-weight:400}ul.wpacu_asset_options label input{margin-right:4px}.wpacu_list_table,.wpacu_list_table div,.wpacu_list_table li,.wpacu_list_table p{font-weight:400}.wpacu_striped>tbody>:nth-child(even),ul.wpacu_striped>:nth-child(even){background-color:#fff!important}.wpacu_striped>tbody>:nth-child(odd),ul.wpacu_striped>:nth-child(odd){background-color:#f9f9f9!important}.wpacu_update_btn{-moz-box-shadow:inset 0 1px 0 0 #54a3f7!important;-webkit-box-shadow:inset 0 1px 0 0 #54a3f7!important;box-shadow:inset 0 1px 0 0 #54a3f7!important;background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#007dc1),color-stop(1,#0061a7))!important;background:-moz-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-webkit-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-o-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:-ms-linear-gradient(top,#007dc1 5%,#0061a7 100%)!important;background:linear-gradient(to bottom,#007dc1 5%,#0061a7 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#007dc1', endColorstr='#0061a7', GradientType=0)!important;background-color:#007dc1!important;-moz-border-radius:3px!important;-webkit-border-radius:3px!important;border-radius:3px!important;border:1px solid #124d77!important;display:inline-block!important;cursor:pointer!important;color:#fff!important;font-size:15px!important;padding:10px 24px!important;text-decoration:none!important;text-shadow:0 1px 0 #154682!important;height:auto!important;line-height:normal!important}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.wpacu_update_btn.wpacu_submitting,.wpacu_update_btn:hover{background:-webkit-gradient(linear,left top,left bottom,color-stop(.05,#0061a7),color-stop(1,#007dc1))!important;background:-moz-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-webkit-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-o-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:-ms-linear-gradient(top,#0061a7 5%,#007dc1 100%)!important;background:linear-gradient(to bottom,#0061a7 5%,#007dc1 100%)!important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0061a7', endColorstr='#007dc1', GradientType=0)!important;background-color:#0061a7!important}.wpacu_update_btn.wpacu_submitting{cursor:default!important}.wpacu_update_btn:active{position:relative!important;top:1px!important}.wpacu-btns .btn{display:inline-block;font-weight:400;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wpacu-btns .btn.focus,.wpacu-btns .btn:focus{outline:0;-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.25);box-shadow:0 0 0 2px rgba(2,117,216,.25)}.wpacu-btns .btn.disabled,.wpacu-btns .btn:disabled{cursor:not-allowed;opacity:.65}.wpacu-btns .btn.active,.wpacu-btns .btn:active{background-image:none}.wpacu-btns a.btn.disabled,.wpacu-btns fieldset[disabled] a.btn{pointer-events:none}.wpacu-btns .btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary:hover{color:#fff;background-color:#025aa5;border-color:#01549b}.wpacu-btns .btn-primary.focus,.wpacu-btns .btn-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-primary.disabled,.wpacu-btns .btn-primary:disabled{background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-primary.active,.wpacu-btns .btn-primary:active,.wpacu-btns .show>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;background-image:none;border-color:#01549b}.wpacu-btns .btn-secondary{color:#292b2c;background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary:hover{color:#292b2c;background-color:#e6e6e6;border-color:#adadad}.wpacu-btns .btn-secondary.focus,.wpacu-btns .btn-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-secondary.disabled,.wpacu-btns .btn-secondary:disabled{background-color:#fff;border-color:#ccc}.wpacu-btns .btn-secondary.active,.wpacu-btns .btn-secondary:active,.wpacu-btns .show>.btn-secondary.dropdown-toggle{color:#292b2c;background-color:#e6e6e6;background-image:none;border-color:#adadad}.wpacu-btns .btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.wpacu-btns .btn-info.focus,.wpacu-btns .btn-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-info.disabled,.wpacu-btns .btn-info:disabled{background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-info.active,.wpacu-btns .btn-info:active,.wpacu-btns .show>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;background-image:none;border-color:#2aabd2}.wpacu-btns .btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success:hover{color:#fff;background-color:#449d44;border-color:#419641}.wpacu-btns .btn-success.focus,.wpacu-btns .btn-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-success.disabled,.wpacu-btns .btn-success:disabled{background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-success.active,.wpacu-btns .btn-success:active,.wpacu-btns .show>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;background-image:none;border-color:#419641}.wpacu-btns .btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#eb9316}.wpacu-btns .btn-warning.focus,.wpacu-btns .btn-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-warning.disabled,.wpacu-btns .btn-warning:disabled{background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-warning.active,.wpacu-btns .btn-warning:active,.wpacu-btns .show>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;background-image:none;border-color:#eb9316}.wpacu-btns .btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#c12e2a}.wpacu-btns .btn-danger.focus,.wpacu-btns .btn-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-danger.disabled,.wpacu-btns .btn-danger:disabled{background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-danger.active,.wpacu-btns .btn-danger:active,.wpacu-btns .show>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;background-image:none;border-color:#c12e2a}.wpacu-btns .btn-outline-primary{color:#0275d8;background-image:none;background-color:transparent;border-color:#0275d8}.wpacu-btns .btn-outline-primary:hover{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-primary.focus,.wpacu-btns .btn-outline-primary:focus{-webkit-box-shadow:0 0 0 2px rgba(2,117,216,.5);box-shadow:0 0 0 2px rgba(2,117,216,.5)}.wpacu-btns .btn-outline-primary.disabled,.wpacu-btns .btn-outline-primary:disabled{color:#0275d8;background-color:transparent}.wpacu-btns .btn-outline-primary.active,.wpacu-btns .btn-outline-primary:active,.wpacu-btns .show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.wpacu-btns .btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.wpacu-btns .btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-secondary.focus,.wpacu-btns .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 2px rgba(204,204,204,.5);box-shadow:0 0 0 2px rgba(204,204,204,.5)}.wpacu-btns .btn-outline-secondary.disabled,.wpacu-btns .btn-outline-secondary:disabled{color:#ccc;background-color:transparent}.wpacu-btns .btn-outline-secondary.active,.wpacu-btns .btn-outline-secondary:active,.wpacu-btns .show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.wpacu-btns .btn-outline-info{color:#5bc0de;background-image:none;background-color:transparent;border-color:#5bc0de}.wpacu-btns .btn-outline-info:hover{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-info.focus,.wpacu-btns .btn-outline-info:focus{-webkit-box-shadow:0 0 0 2px rgba(91,192,222,.5);box-shadow:0 0 0 2px rgba(91,192,222,.5)}.wpacu-btns .btn-outline-info.disabled,.wpacu-btns .btn-outline-info:disabled{color:#5bc0de;background-color:transparent}.wpacu-btns .btn-outline-info.active,.wpacu-btns .btn-outline-info:active,.wpacu-btns .show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.wpacu-btns .btn-outline-success{color:#5cb85c;background-image:none;background-color:transparent;border-color:#5cb85c}.wpacu-btns .btn-outline-success:hover{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-success.focus,.wpacu-btns .btn-outline-success:focus{-webkit-box-shadow:0 0 0 2px rgba(92,184,92,.5);box-shadow:0 0 0 2px rgba(92,184,92,.5)}.wpacu-btns .btn-outline-success.disabled,.wpacu-btns .btn-outline-success:disabled{color:#5cb85c;background-color:transparent}.wpacu-btns .btn-outline-success.active,.wpacu-btns .btn-outline-success:active,.wpacu-btns .show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.wpacu-btns .btn-outline-warning{color:#f0ad4e;background-image:none;background-color:transparent;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning:hover{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-warning.focus,.wpacu-btns .btn-outline-warning:focus{-webkit-box-shadow:0 0 0 2px rgba(240,173,78,.5);box-shadow:0 0 0 2px rgba(240,173,78,.5)}.wpacu-btns .btn-outline-warning.disabled,.wpacu-btns .btn-outline-warning:disabled{color:#f0ad4e;background-color:transparent}.wpacu-btns .btn-outline-warning.active,.wpacu-btns .btn-outline-warning:active,.wpacu-btns .show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.wpacu-btns .btn-outline-danger{color:#d9534f;background-image:none;background-color:transparent;border-color:#d9534f}.wpacu-btns .btn-outline-danger:hover{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-outline-danger.focus,.wpacu-btns .btn-outline-danger:focus{-webkit-box-shadow:0 0 0 2px rgba(217,83,79,.5);box-shadow:0 0 0 2px rgba(217,83,79,.5)}.wpacu-btns .btn-outline-danger.disabled,.wpacu-btns .btn-outline-danger:disabled{color:#d9534f;background-color:transparent}.wpacu-btns .btn-outline-danger.active,.wpacu-btns .btn-outline-danger:active,.wpacu-btns .show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.wpacu-btns .btn-link{font-weight:400;color:#0275d8;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.wpacu-btns .btn-link,.wpacu-btns .btn-link.active,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:disabled{background-color:transparent}.wpacu-btns .btn-link,.wpacu-btns .btn-link:active,.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{border-color:transparent}.wpacu-btns .btn-link:focus,.wpacu-btns .btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.wpacu-btns .btn-link:disabled{color:#636c72}.wpacu-btns .btn-link:disabled:focus,.wpacu-btns .btn-link:disabled:hover{text-decoration:none}.wpacu-btns .btn-group-lg>.btn,.wpacu-btns .btn-lg{padding:.75rem 1.5rem;font-size:1.25rem;-webkit-border-radius:.3rem;-moz-border-radius:.3rem;border-radius:.3rem}.wpacu-btns .btn-group-sm>.btn,.wpacu-btns .btn-sm{padding:.25rem .5rem;font-size:.875rem;-webkit-border-radius:.2rem;-moz-border-radius:.2rem;border-radius:.2rem}.wpacu-btns .btn-block{display:block;width:100%}.go-pro-button,.go-pro-link-no-style,.wordpress-core-file{display:inline-block;text-decoration:none}.wpacu-btns .btn-block+.btn-block{margin-top:.5rem}.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=button].btn-block,.wpacu-btns input[type=submit].btn-block{width:100%}.wpacu-btns .fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.go-pro-button{background-color:#4CAF50;border:2px solid #4CAF50;color:#fff;padding:12px 18px;text-align:center;font-size:16px;margin:4px 2px;cursor:pointer;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-transition-duration:.4s;transition-duration:.4s}.go-pro-button:hover{background-color:#fff;color:#000;border:2px solid #4CAF50;text-decoration:none}.wpacu-restore-pos-btn{font-size:14px!important;line-height:normal!important;height:42px!important;padding:0 18px!important;margin-top:10px!important}body.wp-admin .wpacu_asset_row .go-pro-link-no-style .wpacu-tooltip{padding:8px 2px}body.wp-admin .go-pro-link-no-style .wpacu-tooltip{text-shadow:none;font-weight:400;font-size:12px;line-height:16px;padding:8px 11px}.go-pro-link-no-style{position:relative;color:inherit}.go-pro-link-no-style:not(.nav-tab){font-style:italic}.go-pro-link-no-style.no-transition .wpacu-tooltip{-webkit-transition:0s all ease;transition:0s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style>img{max-width:20px;max-height:20px}.go-pro-link-no-style .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#00a7a7;color:#fff;text-align:center;padding:8px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-65px;-webkit-transition:.1s all ease;transition:.1s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip:after{content:"";position:absolute;border-width:10px;border-style:solid;top:100%;left:50%;left:calc(50% - 10px);border-color:#00a7a7 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-on-pages-btn{cursor:pointer;margin-left:-77px;width:130px}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip{bottom:-40px;left:120px;margin-left:-86px}.wpacu_list_table tr:first-child .wordpress-core-file .wpacu-tooltip:after{top:41px;left:-20px;border-color:transparent #c00 transparent transparent}.wordpress-core-file{position:relative;font-style:normal;color:inherit}.wordpress-core-file .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:160px;background-color:#c00;color:#fff;text-align:center;padding:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;bottom:100%;bottom:calc(100% + 15px);left:50%;margin-left:-86px;-webkit-transition:.1s all ease;transition:.1s all ease;-webkit-transition-delay:0s;transition-delay:0s}.wordpress-core-file .wpacu-tooltip:after{content:"";position:absolute;border-width:10px;border-style:solid;top:100%;left:50%;left:calc(50% - 10px);border-color:#c00 transparent transparent}.wordpress-core-file:hover .wpacu-tooltip{visibility:visible}.ajax-direct-call-error-area{background:#fff;padding:10px;border:1px solid #c00;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.ajax-direct-call-error-area td{padding:6px}.ajax-direct-call-error-area .note{margin-top:0;padding-top:0}.ajax-direct-call-error-area .error-code{color:#c00;font-weight:700}.ajax-wp-remote-post-call-error-area{background:#fff;padding:20px}.ajax-wp-remote-post-call-error-area .table-data{background:0 0;border:1px solid #c66;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.ajax-wp-remote-post-call-error-area .table-data td{padding:10px}.wrap-upgrade-info{background:#fff;padding:0 15px;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-notice{margin:20px 20px 0 0!important}.wpacu-notice p{font-weight:600!important;font-style:italic}.wpacu-notice .dashicons{font-weight:inherit!important;color:#46b450!important;margin-right:4px;vertical-align:text-bottom;font-size:27px}.wpacu-notice-info{padding:12px 12px 12px 16px;background:#fff;border-left:4px solid #008f9c}.wpacu-notice-info p{margin-top:8px}.wpacu-notice-info p:first-child{margin-top:0}.wpacu-notice-info p:last-child{margin-bottom:0}.wpacu-warning{font-size:15px;padding:10px;background:#fffcec;border:1px solid #fdd5c9;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;margin:0 0 5px;width:100%}.pro-page-unlock-notice{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;padding:10px;background:#f2faf2;border:1px solid #c0e8c0;width:auto;display:block}.wpacu-license-area .notice,.wpacu-settings-area .notice{margin-left:0;padding:10px!important;width:97%;box-sizing:border-box;font-weight:600;font-style:italic}#wpacu-dom-get-type-selections,.wpacu-radio-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections.wpacu-vertical,.wpacu-radio-selections.wpacu-vertical{display:block;margin-top:15px;margin-bottom:18px}#wpacu-dom-get-type-selections.wpacu-vertical li,.wpacu-radio-selections.wpacu-vertical li{float:none;margin-bottom:12px}#wpacu-dom-get-type-selections.wpacu-vertical li:last-child,.wpacu-radio-selections.wpacu-vertical li:last-child{margin-bottom:0}#wpacu-dom-get-type-selections li,.wpacu-radio-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child,.wpacu-radio-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child,.wpacu-radio-selections li:last-child{margin-right:0}.wpacu_combine_loaded_js_level_area{display:none;background:0 0;border-left:2px solid #008f9c;padding-top:8px;padding-bottom:8px;padding-right:10px;padding-left:10px;margin:20px 0 15px}.wpacu_combine_loaded_js_level_area.wpacu_active{display:block}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.wpacu-wrap li,.wpacu-wrap p,.wpacu-wrap td{font-weight:400}.wpacu-wrap small{width:auto;float:none;display:inline}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-tab-content{display:block;width:100%}.wpacu-wrap.wpacu-settings-show-all .wpacu-settings-area-title{color:#004567;padding:16px 15px;background:#f8f8f8;border-left:5px solid #004567b0;border-top:1px solid #e7e7e7;border-right:1px solid #e7e7e7;border-bottom:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;font-size:1.45em;font-weight:500}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round{border-radius:29px}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area{margin:0}.wpacu-wrap.wpacu-settings-show-all #wpacu-update-button-area .button{padding:11px 28px;height:auto;font-size:18px}.wpacu-wrap.wpacu-settings-show-all #wpacu-updating-settings{margin-left:224px;top:25px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch{width:auto;height:auto}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input{display:block}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox],.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch input[type=checkbox]{margin:0 0 3px}.wpacu-wrap.wpacu-switch-standard .asset-cleanup-pro_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider,.wpacu-wrap.wpacu-switch-standard .asset-cleanup_page_wpassetcleanup_settings .wpacu_switch .wpacu_slider{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch{position:relative;display:inline-block;width:52px;height:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input{display:none}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch:not(.wpacu_switch_standard) .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.2s;transition:.2s}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider{background-color:#52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #52af00}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled,.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_disabled:before{content:"\f160";font-family:Dashicons,Arial,"Times New Roman","Bitstream Charter",Times,serif;position:absolute;font-size:23px;top:5px;right:2px;z-index:1000}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:4px;line-height:1.4}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle em{font-weight:200}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_read_more,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_read_more{margin-top:-10px;font-style:italic;font-size:12px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices{list-style:none;margin:0}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li{float:left;margin-right:30px}.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup-pro_page_wpassetcleanup_settings .input_style_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_inline_code_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .assets_list_layout_areas_status_choices li:last-child,.asset-cleanup_page_wpassetcleanup_settings .input_style_choices li:last-child{margin-right:0}#wpacu-assets-list-by-location-selected{background:0 0;border:1px solid #e7e7e7;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:8px;clear:both}.notice.notice-success+.wpacu-wrap.wpacu-settings-area{margin-top:20px}.wpacu-form-table th{vertical-align:top;text-align:left;padding:5px 20px 20px 0;width:200px;line-height:1.3;font-weight:600}.wpacu-form-table th label{color:#23282d;font-weight:600;font-size:14px;text-shadow:none;vertical-align:middle;cursor:pointer}.wpacu-form-table td{padding-bottom:25px}.wpacu-form-table td:last-child p:last-child{margin:0}.wpacu-form-table label input[type=checkbox]{height:19px;width:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.wpacu-form-table label input[type=checkbox]:checked,.wpacu-form-table label input[type=checkbox]:hover{border:1px solid green}.wpacu-form-table label input[type=checkbox]:checked:before{color:#52af00;font:400 24px/1 dashicons}#wpacu-settings-vertical-tab-wrap{display:table;width:100%}#wpacu-settings-vertical-tab-wrap *{box-sizing:border-box}.wpacu-settings-tab{display:table-cell;width:20%;height:100%;vertical-align:top}.wpacu-settings-tab a{text-decoration:none;border-left:3px solid transparent;display:block;background-color:#f1f1f1;color:#004567;padding:17px 16px;width:100%;outline:0;text-align:left;cursor:pointer;font-size:14px;font-weight:600;border-bottom:1px solid #ccc}.wpacu-settings-tab a:first-child{border-top:1px solid transparent!important}.wpacu-settings-tab a:last-child{border-bottom:1px solid transparent!important}.wpacu-settings-tab a:hover{background-color:#fff;border-left:3px solid #004567;position:relative}.wpacu-settings-tab a.active{color:#004567;background-color:#fff;border-left:3px solid #004567;position:relative;border-bottom:1px solid #ccc}.wpacu-settings-tab a.active:after{content:'';position:absolute;height:100%;width:1px;top:0;right:-1px;background-color:#fff}.wpacu-settings-tab-content{background-color:#fff;display:none;padding:12px 18px;width:79%;border-left:none;height:100%;border-top-right-radius:10px;border-bottom-right-radius:10px}.wpacu-settings-tab-content h2{padding:0 0 15px;border-bottom:1px solid #e7e7e7}.wpacu-settings-tab-content.active{display:table-cell}#wpacu_minify_css_exceptions_area,#wpacu_minify_js_exceptions_area{margin:16px 0 0}#wpacu-update-button-area{position:relative;margin-left:19%}#wpacu-update-button-area.no-left-margin{margin-left:0}#wpacu-update-button-area p{margin-top:10px}#wpacu-update-button-area .button{padding:5px 18px;height:38px;font-size:15px}#wpacu-updating-settings{position:absolute;margin-left:183px;top:19px;display:none}#combine_loaded_js_info_area{position:relative}#combine_loaded_js_info_area.locked-for-pro:before{position:absolute;content:'';height:100%;width:100%;background:#fff;opacity:.5;z-index:10000}body.wp-admin .wpacu-handle-notes{margin-top:10px!important}body.wp-admin .wpacu-handle-notes p{margin-top:0!important}body.wp-admin .wpacu-handle-notes p a{font-size:inherit}body.wp-admin .wpacu-handle-notes p a span.dashicons{font-size:19px;width:19px;height:19px;vertical-align:bottom;text-decoration:none}.wpacu-handle-notes{margin-top:12px!important;padding-top:5px;border-top:1px solid #e7e7e7}.wpacu-handle-notes .wpacu-handle-notes-field{display:none}.wpacu-handle-notes .wpacu-handle-notes-field>textarea{font-size:85%;padding:6px;width:320px;max-width:100%}.wpacu-handle-notes p{margin:10px 0 0!important}.wpacu-handle-notes p a.wpacu-add-handle-note{text-decoration:none;font-size:80%;display:inline-block;color:inherit}.wpacu-handle-notes p a.wpacu-add-handle-note span.dashicons{font-size:18px;width:18px;height:18px}.wrap_bulk_unload_options{width:auto;display:inline-flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.wrap_bulk_unload_options .wpacu_asset_options_wrap{flex-grow:1;margin:5px 10px 14px 0!important;padding:8px 10px 2px!important}.wrap_bulk_unload_options .wpacu_asset_options_wrap .wpacu_slider_text{position:relative!important;vertical-align:top;left:inherit!important;top:inherit!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch{position:relative;display:inline-block;min-width:52px;width:52px;height:29px;margin-right:5px!important}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input{display:none}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.15s;transition:.15s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider:before{position:absolute;content:'';height:22px;width:22px;left:4px;bottom:4px;background-color:#fff;-webkit-transition:.15s;transition:.15s}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider{background-color:#C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:focus+.wpacu_slider{box-shadow:0 0 1px #C00}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch input:checked+.wpacu_slider:before{-webkit-transform:translateX(22px);-ms-transform:translateX(22px);transform:translateX(22px)}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-switch-enhanced .wpacu_asset_row .wpacu_slider_text{position:absolute;left:62px;top:3px}.editor-post-saved-state.is-wpacu-reloading{animation:edit-post__loading-fade-animation .5s infinite}body.wp-admin .wpacu_asset_row.wpacu-loading{position:relative}body.wp-admin .wpacu_asset_row.wpacu-loading .wpacu-ajax-loader{display:block!important}body.wp-admin .wpacu_asset_row .wpacu-ajax-loader{display:none;width:58px;height:58px;position:absolute;bottom:0;right:0;opacity:.75}.wpacu_asset_row input{width:auto;height:auto;min-height:16px}.wpacu_asset_row .tip{background:inherit;border-left:4px solid #e7e7e7;margin:5px 0;padding:7px;font-style:italic;font-size:small;line-height:1.4}.wpacu_asset_row td{width:100%;text-align:left}.wpacu_asset_row td p:last-child{margin-bottom:0!important}.wpacu_asset_row td .wpacu_asset_options_wrap{padding:8px 10px;margin:15px 0;background:#fff;border:1px solid #eee;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu_asset_row td .wpacu_asset_options_wrap p:first-child{margin-top:0;margin-bottom:8px!important}.wpacu_asset_row p.wpacu_handle{margin-top:0}.wpacu_asset_row li.wpacu_unload_this_page{display:block!important;position:relative}.wpacu-clearfix:after,.wpacu-clearfix:before{display:table;content:''}.wpacu-contract-expand-area{width:100%;margin:20px 0 0}.wpacu-contract-expand-area .col-left{float:left}.wpacu-contract-expand-area .col-left h4{margin-bottom:0}.wpacu-contract-expand-area .col-right{float:right}.wpacu-clearfix:after{clear:both}.wpacu-wp-button{color:#555;border-color:#ccc;background:#f7f7f7;box-shadow:0 1px 0 #ccc;vertical-align:top}body.wp-admin .wpacu-wp-button{font-size:13px;line-height:26px;height:28px}.wpacu-wp-button.wpacu-wp-button-secondary{display:inline-block;text-decoration:none;height:auto;margin:0 5px 0 0;padding:0 10px 1px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-sizing:border-box}.wpacu-wp-button:hover{background:#fafafa;border-color:#999;color:#23282d}.distinguish-asset-list{list-style:none;margin-left:0;margin-bottom:5px;display:inline-block}.distinguish-asset-list li{float:left;margin-right:20px}.distinguish-asset-list li:last-child{margin-right:0}body[class*=asset-cleanup-pro] a.wpacu-plugin-contracted-wrap-link{padding:16px 6px 16px 41px!important}body[class*=asset-cleanup-pro] .wpacu-area-open .wpacu-plugin-toggle-all{font-size:12px!important;width:calc(100% - 26px)!important}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all{top:5px}body.wp-admin .wpacu-area-expanded .wpacu-plugin-toggle-all ul li{font-size:12px!important}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-area{margin-top:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location>a.wpacu-assets-collapsible{padding:15px 15px 15px 43px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu_list_table{border-width:0;margin:0;border-spacing:inherit;width:100%;box-shadow:3px 3px 2px #ddd;border-bottom-right-radius:5px;border-top-right-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-name{font-weight:600}.wpacu-assets-collapsible-wrap.wpacu-by-location span.wpacu-child-location-version{font-weight:200}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area[data-wpacu-plugin=oxygen] .icon-area{border-radius:50%}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all{display:inline-block;padding:0;font-size:13px;width:100%;width:calc(100% + 46px);min-width:250px;position:absolute;left:100%;left:calc(100% + 6px);margin:0;top:4px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all ul{display:inline-block;margin:0;list-style:none;padding-left:13px;padding-top:0}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all ul li{padding:0;margin:0;line-height:normal;font-size:14px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-location-child-area .wpacu-plugin-toggle-all ul li:first-child{font-style:italic;margin-bottom:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;position:relative;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title:after{content:'';position:absolute;width:100%;left:0;bottom:0;height:1px;background-color:#fdfdfd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap{padding:0 0 10px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open .wpacu-plugin-toggle-all{display:inline-block;padding:7px 12px 16px;font-size:14px;width:100%;text-align:left;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-plugin-assets-wrap.wpacu-area-open.wpacu-plugin-assets-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link{color:inherit;text-decoration:none;font-weight:inherit;font-style:inherit;font-size:105%;line-height:initial;height:auto;margin:14px 0 0;padding:13px 6px 14px 39px;position:relative;display:block}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:after{position:absolute;font-size:18px;font-family:Dashicons;right:12px;top:14px;content:"\f132"}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open:after{content:"\f460"}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover{border:1px solid #878787;background:#f9f9f9}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link:hover.wpacu-link-closed{box-shadow:3px 3px 2px #ddd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-open{border-top:1px solid #cdcdcd;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:none}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-link-closed.wpacu-last-wrap-link{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default{top:10px;left:10px;width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area{width:30px;height:30px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .icon-plugin-default .icon-area:before{font-size:22px;line-height:22px;top:4px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title{position:relative;padding:17px 10px 16px 46px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link .wpacu-area-title:after{content:'';position:absolute;width:100%;left:0;bottom:0;height:1px;background-color:#fdfdfd}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content a.wpacu-plugin-contracted-wrap-link.wpacu-area-last{margin-bottom:18px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-open{padding:0;max-height:100%}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-area-closed{padding:0;overflow:hidden;max-height:0}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{margin-top:0;margin-bottom:-1px;padding:14px 10px 16px 12px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title.wpacu-theme-has-icon{padding:18px 10px 16px 58px!important}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:-1px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-location-child-area-first{margin-top:2px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area.wpacu-area-expanded .wpacu-area-title{display:inline-block;z-index:1;padding:17px 10px 16px 46px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area .wpacu-area-title{display:inline;border-top-right-radius:8px;border-top-left-radius:8px;background-color:#f9f9f9;border-left:1px solid #cdcdcd;border-top:1px solid #cdcdcd;border-bottom:1px solid transparent;border-right:1px solid #cdcdcd;position:relative}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon){color:#b4b9be;background-color:#eee;box-shadow:inset 0 0 10px rgba(160,165,170,.15);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default:not(.has-icon) .icon-area:before{content:"\f106";font-family:Dashicons;position:absolute;font-size:28px;line-height:28px;top:5px;left:5px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-plugin-default .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-theme{position:absolute;padding:0;top:10px;left:10px;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-by-location .icon-theme .icon-area{position:relative;width:37px;height:37px}.wpacu-assets-collapsible-wrap.wpacu-wp_core{border:1px solid #c00}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content{padding:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table{width:100%;margin:0}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row td{border-left:hidden;border-right:hidden;border-bottom:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child{margin-bottom:0!important}.wpacu-assets-collapsible-wrap.wpacu-external .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child,.wpacu-assets-collapsible-wrap.wpacu-wp_core .wpacu-assets-collapsible-content .wpacu_list_table .wpacu_asset_row:last-child td:last-child{border-bottom:hidden}a.wpacu-assets-collapsible{color:#000;font-size:20px;text-decoration:none;display:block;position:relative;background-color:#f1f3f8;cursor:pointer;padding:15px 15px 15px 36px;width:auto;border:none;text-align:left;outline:0}a.wpacu-assets-collapsible>span.dashicons{font-size:25px;line-height:normal;position:absolute;top:15px;top:calc(50% - 21px);left:22px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-collapsible:hover{background-color:#f1f3f8;text-decoration:none}a.wpacu-assets-collapsible:after{position:absolute;font-size:22px;font-family:Dashicons;right:14px;top:16px}a.wpacu-assets-collapsible:not(.wpacu-assets-collapsible-active):after{content:"\f132"}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active{background-color:#f1f3f8}a.wpacu-assets-collapsible.wpacu-assets-collapsible-active:after{content:"\f460"}.wpacu-assets-collapsible-content{padding:0 16px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-collapsible-content .wpacu-assets-note{margin:0;padding:15px 15px 10px}.wpacu-assets-collapsible-content>div:not(.wpacu-assets-table-list-wrap){padding:16px 0 0}.wpacu-assets-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-collapsible-content.wpacu-open{max-height:100%}a.wpacu-assets-inline-code-collapsible{color:inherit;font-size:14px;text-decoration:none;display:inline-block;position:relative;cursor:pointer;width:auto;outline:0;background:#f1f3f8;border:1px solid #cdcdcd;padding:4px 21px 4px 8px;margin:0 0 0 6px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}a.wpacu-assets-inline-code-collapsible:hover{border:1px solid #5c5c5c}a.wpacu-assets-inline-code-collapsible:after{position:absolute;font-size:15px;font-family:Dashicons;right:-3px;top:-1px;width:14px;height:14px;-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}a.wpacu-assets-inline-code-collapsible:not(.wpacu-assets-inline-code-collapsible-active):after{content:"\f132"}a.wpacu-assets-inline-code-collapsible.wpacu-assets-inline-code-collapsible-active:after{content:"\f460"}.wpacu-assets-inline-code-collapsible-content{font-size:80%;padding:0 8px;max-height:0;overflow:hidden;background-color:#fbfbfb8c}.wpacu-assets-inline-code-collapsible-content>div{padding:7px 8px 0}.wpacu-assets-inline-code-collapsible-content>div>p{line-height:normal!important}.wpacu-assets-inline-code-collapsible-content>div>p:first-child{margin-top:0}.wpacu-assets-inline-code-collapsible-content.wpacu-open{max-height:100%}.wpacu_asset_row p div.select{display:inline-block}.wpacu-wrap-choose-position{display:inline}.wpacu-wrap-choose-position>div{display:inline-block}.wpacu-wrap-choose-position select{width:auto;font-size:inherit;display:inline;margin-left:6px;margin-right:4px}.wpacu-wrap-choose-position>.select>.select{display:inline}.wpacu-wrap-choose-position>.select>.select select{padding-right:30px}.wpacu-wrap-choose-position>.select>.select:after{right:15px;top:-4px}.wpacu_table_wrap{margin:20px 0 0}.wpacu_table_wrap>table{border:1px solid #cdcdcd}.wpacu_table_wrap .table{width:100%;max-width:100%;margin-bottom:1rem;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu_table_wrap .table td,.wpacu_table_wrap .table th{padding:.75rem;vertical-align:top;border-top:1px solid #eceeef}.wpacu_table_wrap .table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.wpacu_table_wrap .table tbody+tbody{border-top:2px solid #eceeef}.wpacu_table_wrap .table .table{background-color:#fff}.wpacu_table_wrap .table-sm td,.wpacu_table_wrap .table-sm th{padding:.3rem}.wpacu_table_wrap .table-bordered,.wpacu_table_wrap .table-bordered td,.wpacu_table_wrap .table-bordered th{border:1px solid #eceeef}.wpacu_table_wrap .table-bordered thead td,.wpacu_table_wrap .table-bordered thead th{border-bottom-width:2px}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(even){background-color:#f9f9f9}.wpacu_table_wrap .table-striped tbody tr:nth-of-type(odd){background-color:#fff}.wpacu_table_wrap .table-active,.wpacu_table_wrap .table-active>td,.wpacu_table_wrap .table-active>th,.wpacu_table_wrap .table-hover .table-active:hover,.wpacu_table_wrap .table-hover .table-active:hover>td,.wpacu_table_wrap .table-hover .table-active:hover>th,.wpacu_table_wrap .table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.wpacu_table_wrap .table-success,.wpacu_table_wrap .table-success>td,.wpacu_table_wrap .table-success>th{background-color:#dff0d8}.wpacu_table_wrap .table-hover .table-success:hover,.wpacu_table_wrap .table-hover .table-success:hover>td,.wpacu_table_wrap .table-hover .table-success:hover>th{background-color:#d0e9c6}.wpacu_table_wrap .table-info,.wpacu_table_wrap .table-info>td,.wpacu_table_wrap .table-info>th{background-color:#d9edf7}.wpacu_table_wrap .table-hover .table-info:hover,.wpacu_table_wrap .table-hover .table-info:hover>td,.wpacu_table_wrap .table-hover .table-info:hover>th{background-color:#c4e3f3}.wpacu_table_wrap .table-warning,.wpacu_table_wrap .table-warning>td,.wpacu_table_wrap .table-warning>th{background-color:#fcf8e3}.wpacu_table_wrap .table-hover .table-warning:hover,.wpacu_table_wrap .table-hover .table-warning:hover>td,.wpacu_table_wrap .table-hover .table-warning:hover>th{background-color:#faf2cc}.wpacu_table_wrap .table-danger,.wpacu_table_wrap .table-danger>td,.wpacu_table_wrap .table-danger>th{background-color:#f2dede}.wpacu_table_wrap .table-hover .table-danger:hover,.wpacu_table_wrap .table-hover .table-danger:hover>td,.wpacu_table_wrap .table-hover .table-danger:hover>th{background-color:#ebcccc}.wpacu_table_wrap .thead-inverse th{color:#fff;background-color:#292b2c}.wpacu_table_wrap .thead-default th{color:#464a4c;background-color:#eceeef}.wpacu_table_wrap .table-inverse{color:#fff;background-color:#292b2c}.wpacu_table_wrap .table-inverse td,.wpacu_table_wrap .table-inverse th,.wpacu_table_wrap .table-inverse thead th{border-color:#fff}.wpacu_table_wrap .table-inverse.table-bordered,.wpacu_table_wrap .table-responsive.table-bordered{border:0}.wpacu_table_wrap .table-responsive{display:block;width:100%;overflow-x:auto;-ms-overflow-style:-ms-autohiding-scrollbar}.wp-list-table .wpacu_remove_global_attr_row.wpacu_selected,.wp-list-table .wpacu_restore_position_row.wpacu_selected{background:#e7e7e7}ul.hire-reasons{margin-bottom:20px}ul.hire-reasons li{font-size:14px;line-height:22px;margin-bottom:12px}ul.hire-reasons li .dashicons{font-size:23px;line-height:23px}ul.hire-reasons li .dashicons.dashicons-yes{color:green}ol.getting-started li{font-size:14px;line-height:22px;margin-bottom:8px}.wpacu-get-help-wrap p{font-size:14px}.wpacu-get-help-wrap .help-content-wrap{margin:20px 0 25px;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-moz-flex;display:-webkit-flex;display:flex;width:100%}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-align:start;-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.wpacu-get-help-wrap .help-content-wrap .help-content{padding:15px;background:#fff;border:1px solid #E0E0E0;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;box-shadow:2px 3px 8px 0 #231f2038;flex:1 1 50%;margin-bottom:10px}.wpacu-get-help-wrap .help-content-wrap .help-content .content-title{margin:5px 0 15px}.wpacu-get-help-wrap .help-content-wrap .help-content .cols-wrap{width:100%;margin:0 auto;display:table}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area{margin:5px 0 0;position:relative}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-left{float:left;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.col-right{float:right;width:48%}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area.activate-plugin img{max-width:280px}.wpacu-get-help-wrap .help-content-wrap .help-content .wpacu-image-area img{width:99%;margin:8px 0;border:1px solid #cdcdcd;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{order:2}@media only screen and (min-width:768px){.wpacu-get-help-wrap .help-content-wrap .help-content{margin-right:24px}.wpacu-get-help-wrap .help-content-wrap .help-content.upgrade-help{margin-right:0}}.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{order:1}@media only screen and (max-width:767px){.wpacu-get-help-wrap .help-content-wrap .help-content.tech-help{margin-bottom:30px}}.wpacu-get-help-wrap .help-content-wrap .help-content ul{list-style:none;padding-left:0}.wpacu-get-help-wrap .help-content-wrap .help-content ul li{font-size:14px;line-height:22px;margin-bottom:15px}.wpacu-get-help-wrap .help-content-wrap .help-content p:last-child,.wpacu-get-help-wrap .help-content-wrap .help-content ul li:last-child{margin-bottom:0}#wpacu-license-data-remove-area{display:none;margin:10px 0 25px}#wpacu-license-data-remove-area.wpacu-visible{display:block}span#wpacu-license-data-removed-msg{display:block;padding-left:26px}#wpacu-warning-read{display:none;margin:10px 0}#wpacu-warning-read span.dashicons-warning{color:#c00}#wpacu-warning-read.wpacu-visible{display:block}#wpacu-reset-submit-area{margin:10px 0;clear:both}#wpacu-reset-submit-btn{margin:10px 0 0}.wpacu-tools-area{margin:10px 20px 0 2px}.wpacu-tools-area .wpacu-tools-container{background:#fff;padding:15px;border:1px solid #cdcdcd;width:96%}.wpacu-tools-area .wpacu-tools-container form>div:first-child{margin:0 0 10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning{display:none;box-sizing:border-box;margin-top:10px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p{margin:0 0 10px;line-height:22px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning p:only-child{margin:0}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning ul{font-size:13px;list-style-type:disc;padding-left:30px}.wpacu-tools-area .wpacu-tools-container form .wpacu-warning.wpacu-visible{display:block}.wpacu-tools-area .wpacu-export-import-area{padding:10px}.wpacu-tools-area .wpacu-export-import-area form>p:first-of-type{margin-top:0}.wpacu-tools-area .wpacu-export-import-area form>p:last-of-type{margin-bottom:0}.wpacu-tools-area .wpacu-export-import-area:hover{background:rgba(40,44,42,.05);box-shadow:inset 0 0 10px rgba(160,165,170,.15)}.wpacu-tools-area .wpacu-export-import-area+hr{display:block;height:1px;border:0;border-top:1px solid #cdcdcd;margin:10px 0;padding:0}#wpacu-import-form button.wpacu-importing img.wpacu-spinner{display:inline-block}#wpacu-import-form button img.wpacu-spinner{display:none;margin:0 0 0 5px;height:16px;width:16px;vertical-align:middle}.wpacu-about-wrap .wpacu-about-text img{width:auto;height:150px;position:absolute;top:20px;right:-20px}@media only screen and (max-width:767px){.wpacu-about-wrap h1{margin:20px}.wpacu-about-wrap .wpacu-about-text img{display:none}.wpacu-about-wrap .wpacu-about-text{margin:20px}}.wpacu-about-wrap .about-wrap-content .area-title{font-size:19px;line-height:19px;margin-bottom:0}.wpacu-about-wrap hr{margin:10px 0}.wpacu-lite-vs-pro-wrap ul{display:flex;top:0;z-index:10;padding-bottom:14px}.wpacu-lite-vs-pro-wrap li{list-style:none;flex:1}.wpacu-lite-vs-pro-wrap li:last-child{border-right:1px solid #DDD}.wpacu-lite-vs-pro-wrap button{width:100%;border:1px solid #DDD;border-right:0;border-top:0;padding:10px;background:#FFF;font-size:14px;font-weight:700;height:60px;color:#999}.wpacu-lite-vs-pro-wrap li.active button{background:#F5F5F5;color:#000}.wpacu-lite-vs-pro-wrap table{border-collapse:collapse;table-layout:fixed;width:100%}.wpacu-lite-vs-pro-wrap th{background:inherit}.wpacu-lite-vs-pro-wrap tr.first{background:inherit;font-size:18px}.wpacu-lite-vs-pro-wrap tr.first .bg-lite{border-top:4px solid #6d6e70;background:#fff;color:#6d6e70}.wpacu-lite-vs-pro-wrap tr.first .bg-pro{border-top:4px solid green;background:#fff;color:green}.wpacu-lite-vs-pro-wrap tr:not(.first){background:#fff}.wpacu-lite-vs-pro-wrap tr:not(:last-child):hover{background:#f8f8f8}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{height:53px;border:1px solid #DDD;padding:10px 16px;empty-cells:show;text-align:left}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{font-size:14px}}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{text-align:center;display:none}.wpacu-lite-vs-pro-wrap td.default{display:table-cell}.wpacu-lite-vs-pro-wrap .txt-l{font-size:28px;font-weight:700}.wpacu-lite-vs-pro-wrap .txt-top{position:relative;top:-9px;left:-2px}.wpacu-lite-vs-pro-wrap svg{width:18px;height:18px}.wpacu-lite-vs-pro-wrap svg path{fill:green}.wpacu-lite-vs-pro-wrap .tick{color:#2CA01C}.wpacu-lite-vs-pro-wrap .tick img{fill:#2CA01C}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .txt-l{font-size:20px}.wpacu-lite-vs-pro-wrap .tick{font-size:15px}}.wpacu-lite-vs-pro-wrap .na{font-size:18px;opacity:.3;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.wpacu-lite-vs-pro-wrap .hide{border:0;background:0 0}.wpacu-lite-vs-pro-wrap td,.wpacu-lite-vs-pro-wrap th{display:table-cell!important;width:auto}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:130px}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap .na{font-size:15px}.wpacu-lite-vs-pro-wrap td+td,.wpacu-lite-vs-pro-wrap th+th{width:42px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap td .button{font-size:16px!important}}@media only screen and (max-width:767px){.wpacu-lite-vs-pro-wrap td .button{font-size:14px!important;padding:0 20px!important}.wpacu-lite-vs-pro-wrap td .button.button-primary{margin-top:6px;margin-bottom:14px}}@media only screen and (min-width:768px){.wpacu-lite-vs-pro-wrap{margin-bottom:40px;clear:both}}.wpacu-video-areas>div{padding:20px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.wpacu-video-areas>div:nth-child(odd){background:#fff}.wpacu-video-areas>div:nth-child(even){background:inherit}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 15px;display:flex}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right{padding:0 20px 0 25px}}@media only screen and (min-width:992px) and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper{margin:0 0 40px}}.wpacu-video-areas .wpacu-video-area-wrapper ol{font-size:14px}.wpacu-video-areas .wpacu-video-area-wrapper ul{font-size:14px;list-style:disc;margin-left:22px}@media only screen and (min-width:1200px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:first-child{margin-top:0}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-col-right p:last-child{margin-bottom:0}}@media only screen and (max-width:1199px){.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}.wpacu-video-areas .wpacu-video-area-wrapper .wpacu-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}}#wpassetcleanup_asset_list.postbox h2{padding-left:52px!important;position:relative}#wpassetcleanup_asset_list.postbox h2:before{content:'';position:absolute;background-image:url(images/wpacu-logo-transparent-bg-v1.png);background-size:cover;top:6px;left:13px;width:33px;height:26px;opacity:.8;-webkit-filter:grayscale(100%);filter:grayscale(100%)}body.wp-admin .wpacu-modal{display:none;position:fixed;z-index:1000000;padding-top:15%;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#000;background-color:rgba(0,0,0,.4)}body.wp-admin .wpacu-modal-content{background-color:#fefefe;margin:auto;padding:20px;border:1px solid #888;width:80%;max-width:600px;border-radius:10px}body.wp-admin .wpacu-close{color:#aaa;float:right;font-size:28px;font-weight:700}body.wp-admin .wpacu-close:focus,body.wp-admin .wpacu-close:hover{color:#000;text-decoration:none;cursor:pointer}.wpacu-bulk-changes-tabs{display:table;position:relative;overflow:hidden;margin:0;width:100%}.wpacu-bulk-changes-tabs li{border-top:1px solid rgba(40,44,42,.1);border-left:1px solid rgba(40,44,42,.1);border-bottom:1px solid rgba(40,44,42,.1);float:left;line-height:38px;padding:0;position:relative;margin-bottom:12px}.wpacu-bulk-changes-tabs li:last-child{border-right:1px solid rgba(40,44,42,.1)}.wpacu-bulk-changes-tabs a{position:relative;background:rgba(40,44,42,.05);color:#004567;font-size:14px;font-weight:500;display:block;letter-spacing:0;outline:0;padding:6px 20px;text-decoration:none;border-top:3px solid transparent}.wpacu-bulk-changes-tabs a:hover{background:#f1f1f1;border-top:3px solid transparent}.wpacu-bulk-changes-tabs .current a{background:#fff;border-top:3px solid #004567}.wpacu-bulk-changes-tabs .current a:hover{background:#fff}.wpacu-bulk-changes-tabs .current a:after,.wpacu-bulk-changes-tabs .current a:before{top:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.wpacu-bulk-changes-tabs .current a:after{border-color:rgba(136,183,213,0);border-top-color:#fff;border-width:12px;margin-left:-12px}.wpacu-bulk-changes-tabs .current a:before{border-color:rgba(194,225,245,0);border-top-color:rgba(40,44,42,.1);border-width:13px;margin-left:-13px}
classes/CleanUp.php CHANGED
@@ -12,17 +12,10 @@ class CleanUp
12
*/
13
public function init()
14
{
15
- add_action('init', function() {
16
- // Is "Test Mode" enabled and the page is viewed by a regular visitor (non-admin)?
17
- // Stop here as the script will NOT PREVENT any of the elements below to load
18
- // They will load as they used to for the regular visitor while the admin debugs the website
19
- if (Main::instance()->preventAssetsSettings()) {
20
- return;
21
- }
22
-
23
- // Perform the cleaning
24
- CleanUp::doClean();
25
- }, 12);
26
}
27
28
/**
@@ -30,6 +23,10 @@ class CleanUp
30
*/
31
public function doClean()
32
{
33
$settings = Main::instance()->settings;
34
35
// Remove "Really Simple Discovery (RSD)" link?
@@ -88,8 +85,8 @@ class CleanUp
88
89
// Remove "WordPress version" and all other "generator" meta tags?
90
if ($settings['remove_generator_tag']) {
91
- add_action('wp_loaded', function () {
92
- ob_start(function ($htmlSource) {
93
return self::removeMetaGenerators($htmlSource);
94
});
95
}, PHP_INT_MAX);
@@ -97,8 +94,8 @@ class CleanUp
97
98
// Remove valid HTML Comments
99
if ($settings['remove_html_comments']) {
100
- add_action('wp_loaded', function () {
101
- ob_start(function ($htmlSource) {
102
return self::removeHtmlComments($htmlSource);
103
});
104
}, PHP_INT_MAX);
@@ -115,8 +112,8 @@ class CleanUp
115
}
116
117
// Also clean it up from the <head>
118
- add_action('wp_loaded', function() {
119
- ob_start(function ($htmlSource) {
120
$pingBackUrl = get_bloginfo('pingback_url');
121
122
$matchRegExps = array(
@@ -140,13 +137,13 @@ class CleanUp
140
public function disableXmlRpcPingback()
141
{
142
// Disable Pingback method
143
- add_filter('xmlrpc_methods', function ($methods) {
144
unset($methods['pingback.ping'], $methods['pingback.extensions.getPingbacks']);
145
return $methods;
146
} );
147
148
// Remove X-Pingback HTTP header
149
- add_filter('wp_headers', function ($headers) {
150
unset($headers['X-Pingback']);
151
return $headers;
152
});
@@ -239,8 +236,8 @@ class CleanUp
239
}
240
241
if (! (function_exists('libxml_use_internal_errors')
242
- && function_exists('libxml_clear_errors')
243
- && class_exists('DOMDocument')))
244
{
245
return $htmlSource;
246
}
@@ -293,7 +290,7 @@ class CleanUp
293
// Do not strip MSIE conditional comments
294
if (strpos($entireComment, '<!--<![endif]-->') !== false ||
295
preg_match('#<!--\[if(.*?)]>(.*?)<!-->#si', $entireComment) ||
296
- preg_match('#<!--\[if(.*?)\[endif\]-->#si', $entireComment)) {
297
continue;
298
}
299
@@ -439,7 +436,7 @@ class CleanUp
439
*/
440
public function doDisableOembed()
441
{
442
- add_action('init', function() {
443
// Remove the REST API endpoint.
444
remove_action('rest_api_init', 'wp_oembed_register_route');
445
@@ -447,7 +444,7 @@ class CleanUp
447
add_filter('embed_oembed_discover', '__return_false');
448
449
// Don't filter oEmbed results.
450
- remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
451
452
// Remove oEmbed discovery links.
453
remove_action('wp_head', 'wp_oembed_add_discovery_links');
@@ -455,12 +452,12 @@ class CleanUp
455
// Remove oEmbed-specific JavaScript from the front-end and back-end.
456
remove_action('wp_head', 'wp_oembed_add_host_js');
457
458
- add_filter('tiny_mce_plugins', function ($plugins) {
459
return array_diff($plugins, array('wpembed'));
460
});
461
462
// Remove all embeds rewrite rules.
463
- add_filter('rewrite_rules_array', function ($rules) {
464
foreach($rules as $rule => $rewrite) {
465
if (false !== strpos($rewrite, 'embed=true')) {
466
unset($rules[$rule]);
@@ -470,7 +467,7 @@ class CleanUp
470
});
471
472
// Remove filter of the oEmbed result before any HTTP requests are made.
473
- remove_filter('pre_oembed_result', 'wp_filter_pre_oembed_result', 10);
474
}, 9999 );
475
}
476
@@ -523,7 +520,7 @@ class CleanUp
523
add_filter('sgo_js_minify_exclude', array($this, 'allJsHandles'));
524
add_filter('sgo_js_async_exclude', array($this, 'allJsHandles'));
525
526
- add_filter('sgo_html_minify_exclude_params', function ($excludeParams) {
527
$excludeParams[] = WPACU_LOAD_ASSETS_REQ_KEY;
528
return $excludeParams;
529
});
12
*/
13
public function init()
14
{
15
+ // Is "Test Mode" is enabled and the page is viewed by a regular visitor (not administrator with plugin activation privileges)?
16
+ // Stop here as the script will NOT PREVENT any of the elements below to load
17
+ // They will load as they used to for the regular visitor while the admin debugs the website
18
+ add_action('init', array($this, 'doClean'), 12);
19
}
20
21
/**
23
*/
24
public function doClean()
25
{
26
+ if (Main::instance()->preventAssetsSettings()) {
27
+ return;
28
+ }
29
+
30
$settings = Main::instance()->settings;
31
32
// Remove "Really Simple Discovery (RSD)" link?
85
86
// Remove "WordPress version" and all other "generator" meta tags?
87
if ($settings['remove_generator_tag']) {
88
+ add_action('wp_loaded', static function () {
89
+ ob_start(static function ($htmlSource) {
90
return self::removeMetaGenerators($htmlSource);
91
});
92
}, PHP_INT_MAX);
94
95
// Remove valid HTML Comments
96
if ($settings['remove_html_comments']) {
97
+ add_action('wp_loaded', static function () {
98
+ ob_start(static function ($htmlSource) {
99
return self::removeHtmlComments($htmlSource);
100
});
101
}, PHP_INT_MAX);
112
}
113
114
// Also clean it up from the <head>
115
+ add_action('wp_loaded', static function() {
116
+ ob_start(static function ($htmlSource) {
117
$pingBackUrl = get_bloginfo('pingback_url');
118
119
$matchRegExps = array(
137
public function disableXmlRpcPingback()
138
{
139
// Disable Pingback method
140
+ add_filter('xmlrpc_methods', static function ($methods) {
141
unset($methods['pingback.ping'], $methods['pingback.extensions.getPingbacks']);
142
return $methods;
143
} );
144
145
// Remove X-Pingback HTTP header
146
+ add_filter('wp_headers', static function ($headers) {
147
unset($headers['X-Pingback']);
148
return $headers;
149
});
236
}
237
238
if (! (function_exists('libxml_use_internal_errors')
239
+ && function_exists('libxml_clear_errors')
240
+ && class_exists('DOMDocument')))
241
{
242
return $htmlSource;
243
}
290
// Do not strip MSIE conditional comments
291
if (strpos($entireComment, '<!--<![endif]-->') !== false ||
292
preg_match('#<!--\[if(.*?)]>(.*?)<!-->#si', $entireComment) ||
293
+ preg_match('#<!--\[if(.*?)\[endif]-->#si', $entireComment)) {
294
continue;
295
}
296
436
*/
437
public function doDisableOembed()
438
{
439
+ add_action('init', static function() {
440
// Remove the REST API endpoint.
441
remove_action('rest_api_init', 'wp_oembed_register_route');
442
444
add_filter('embed_oembed_discover', '__return_false');
445
446
// Don't filter oEmbed results.
447
+ remove_filter('oembed_dataparse', 'wp_filter_oembed_result');
448
449
// Remove oEmbed discovery links.
450
remove_action('wp_head', 'wp_oembed_add_discovery_links');
452
// Remove oEmbed-specific JavaScript from the front-end and back-end.
453
remove_action('wp_head', 'wp_oembed_add_host_js');
454
455
+ add_filter('tiny_mce_plugins', static function ($plugins) {
456
return array_diff($plugins, array('wpembed'));
457
});
458
459
// Remove all embeds rewrite rules.
460
+ add_filter('rewrite_rules_array', static function ($rules) {
461
foreach($rules as $rule => $rewrite) {
462
if (false !== strpos($rewrite, 'embed=true')) {
463
unset($rules[$rule]);
467
});
468
469
// Remove filter of the oEmbed result before any HTTP requests are made.
470
+ remove_filter('pre_oembed_result', 'wp_filter_pre_oembed_result');
471
}, 9999 );
472
}
473
520
add_filter('sgo_js_minify_exclude', array($this, 'allJsHandles'));
521
add_filter('sgo_js_async_exclude', array($this, 'allJsHandles'));
522
523
+ add_filter('sgo_html_minify_exclude_params', static function ($excludeParams) {
524
$excludeParams[] = WPACU_LOAD_ASSETS_REQ_KEY;
525
return $excludeParams;
526
});
classes/Lite.php CHANGED
@@ -26,7 +26,7 @@ class Lite
26
$current_screen = \get_current_screen();
27
28
if ($current_screen->base === 'term' && isset($current_screen->taxonomy) && $current_screen->taxonomy != '') {
29
- add_action ($current_screen->taxonomy . '_edit_form_fields', function ($tag) {
30
?>
31
<tr class="form-field">
32
<th scope="row" valign="top"><label for="wpassetcleanup_list"><?php echo WPACU_PLUGIN_TITLE; ?> <?php _e('CSS &amp; JavaScript Load Manager', 'wp-asset-clean-up'); ?></label></th>
26
$current_screen = \get_current_screen();
27
28
if ($current_screen->base === 'term' && isset($current_screen->taxonomy) && $current_screen->taxonomy != '') {
29
+ add_action ($current_screen->taxonomy . '_edit_form_fields', static function ($tag) {
30
?>
31
<tr class="form-field">
32
<th scope="row" valign="top"><label for="wpassetcleanup_list"><?php echo WPACU_PLUGIN_TITLE; ?> <?php _e('CSS &amp; JavaScript Load Manager', 'wp-asset-clean-up'); ?></label></th>
classes/Main.php CHANGED
@@ -109,20 +109,6 @@ class Main
109
*/
110
public $ignoreChildrenHandlesOnTheFly = array();
111
112
- /**
113
- * @var int
114
- */
115
- /*
116
- public $lastScriptPos = 1;
117
- */
118
-
119
- /**
120
- * @var int
121
- */
122
- /*
123
- public $lastStylePos = 1;
124
- */
125
-
126
/**
127
* @var int
128
*/
@@ -189,7 +175,8 @@ class Main
189
'autoptimize-toolbar',
190
'query-monitor',
191
'wp-fastest-cache-toolbar', // WP Fastest Cache plugin toolbar CSS
192
- 'litespeed-cache' // LiteSpeed toolbar
193
);
194
195
$this->skipAssets['scripts'] = array(
@@ -1102,9 +1089,7 @@ class Main
1102
1103
$list = array();
1104
1105
- $currentUnloadedAll = $currentUnloaded = (array)json_decode(
1106
- $this->getAssetsUnloaded($this->getCurrentPostId())
1107
- );
1108
1109
// Append global unloaded assets to current (one by one) unloaded ones
1110
if (! empty($this->globalUnloaded['styles'])) {
@@ -1302,8 +1287,6 @@ class Main
1302
$data['all'] = Sorting::sortListByAlpha($data['all']);
1303
}
1304
1305
- //echo '<pre>'; print_r($data['all']);
1306
-
1307
$this->fetchUrl = Misc::getPageUrl($this->getCurrentPostId());
1308
1309
$data['fetch_url'] = $this->fetchUrl;
@@ -1920,14 +1903,6 @@ class Main
1920
}
1921
1922
/**
1923
- * @return bool
1924
- */
1925
- public static function isSettingsPage()
1926
- {
1927
- return (Misc::getVar('get', 'page') === WPACU_PLUGIN_ID . '_settings');
1928
- }
1929
-
1930
- /**
1931
* @return bool
1932
*/
1933
public static function isWpDefaultSearchPage()
109
*/
110
public $ignoreChildrenHandlesOnTheFly = array();
111
112
/**
113
* @var int
114
*/
175
'autoptimize-toolbar',
176
'query-monitor',
177
'wp-fastest-cache-toolbar', // WP Fastest Cache plugin toolbar CSS
178
+ 'litespeed-cache', // LiteSpeed toolbar
179
+ 'siteground-optimizer-combined-styles-header' // Combine CSS in SG Optimiser (irrelevant as it made from the combined handles)
180
);
181
182
$this->skipAssets['scripts'] = array(
1089
1090
$list = array();
1091
1092
+ $currentUnloadedAll = $currentUnloaded = json_decode($this->getAssetsUnloaded($this->getCurrentPostId()), ARRAY_A);
1093
1094
// Append global unloaded assets to current (one by one) unloaded ones
1095
if (! empty($this->globalUnloaded['styles'])) {
1287
$data['all'] = Sorting::sortListByAlpha($data['all']);
1288
}
1289
1290
$this->fetchUrl = Misc::getPageUrl($this->getCurrentPostId());
1291
1292
$data['fetch_url'] = $this->fetchUrl;
1903
}
1904
1905
/**
1906
* @return bool
1907
*/
1908
public static function isWpDefaultSearchPage()
classes/Misc.php CHANGED
@@ -1135,7 +1135,7 @@ SQL;
1135
}
1136
1137
$result = round(
1138
- // 1024 ** ($base - $floorBase) is available only from PHP 5.6+
1139
pow(1024, ($base - $floorBase)),
1140
$precision
1141
);
1135
}
1136
1137
$result = round(
1138
+ // 1024 ** ($base - $floorBase) is available only from PHP 5.6+
1139
pow(1024, ($base - $floorBase)),
1140
$precision
1141
);
classes/OptimiseAssets/CombineCss.php ADDED
@@ -0,0 +1,395 @@
1
+ <?php
2
+ namespace WpAssetCleanUp\OptimiseAssets;
3
+
4
+ use WpAssetCleanUp\Main;
5
+ use WpAssetCleanUp\Menu;
6
+ use WpAssetCleanUp\FileSystem;
7
+
8
+ /**
9
+ * Class CombineCss
10
+ * @package WpAssetCleanUp\OptimiseAssets
11
+ */
12
+ class CombineCss
13
+ {
14
+ /**
15
+ * @var string
16
+ */
17
+ public static $jsonStorageFile = 'css-combined{maybe-extra-info}.json';
18
+
19
+ /**
20
+ * @param $htmlSource
21
+ *
22
+ * @return mixed
23
+ */
24
+ public static function doCombine($htmlSource)
25
+ {
26
+ $useDom = function_exists('libxml_use_internal_errors') && function_exists('libxml_clear_errors') && class_exists('DOMDocument');
27
+
28
+ if (! $useDom) {
29
+ return $htmlSource;
30
+ }
31
+
32
+ if ( array_key_exists('wpacu_no_css_combine', $_GET) || // not on query string request (debugging purposes)
33
+ ! self::proceedWithCssCombine() ) {
34
+ return $htmlSource;
35
+ }
36
+
37
+ // Speed up processing by getting the already existing final CSS file URI
38
+ // This will avoid parsing the HTML DOM and determine the combined URI paths for all the CSS files
39
+ $storageJsonContents = OptimizeCommon::getAssetCachedData(self::$jsonStorageFile, OptimizeCss::getRelPathCssCacheDir(), 'css');
40
+
41
+ // $uriToFinalCssFile will always be relative ONLY within WP_CONTENT_DIR . self::getRelPathCssCacheDir()
42
+ // which is usually "wp-content/cache/asset-cleanup/css/"
43
+
44
+ if (empty($storageJsonContents)) {
45
+ $storageJsonContentsToSave = array();
46
+
47
+ /*
48
+ * NO CACHING? Parse the DOM
49
+ */
50
+ // Nothing in the database records or the retrieved cached file does not exist?
51
+ OptimizeCommon::clearAssetCachedData( self::$jsonStorageFile );
52
+
53
+ // Fetch the DOM, and then set a new transient
54
+ $documentForCSS = new \DOMDocument();
55
+
56
+ libxml_use_internal_errors(true);
57
+
58
+ // Fore some reason, <noscript> is not recognised by DOMDocument as a tag belonging to HEAD
59
+ $htmlSourceAlt = str_replace(array('<noscript>', '</noscript>'), array('<!--', '-->'), $htmlSource);
60
+
61
+ $documentForCSS->loadHTML($htmlSourceAlt);
62
+
63
+ $storageJsonContents = array();
64
+
65
+ foreach ( array( 'head', 'body' ) as $docLocationTag ) {
66
+ $combinedUriPaths = $localAssetsPaths = $linkHrefs = array();
67
+
68
+ $docLocationElements = $documentForCSS->getElementsByTagName( $docLocationTag )->item( 0 );
69
+ $linkTags = $docLocationElements->getElementsByTagName( 'link' );
70
+
71
+ if ( $linkTags === null ) {
72
+ continue;
73
+ }
74
+
75
+ foreach ( $linkTags as $tagObject ) {
76
+ if ( ! $tagObject->hasAttributes() ) {
77
+ continue;
78
+ }
79
+
80
+ $linkAttributes = array();
81
+
82
+ foreach ( $tagObject->attributes as $attrObj ) {
83
+ $linkAttributes[ $attrObj->nodeName ] = trim( $attrObj->nodeValue );
84
+ }
85
+
86
+ // The attribute's value was fetched for verification, thus the attribute is not relevant anymore
87
+ if (isset($linkAttributes['data-wpacu-link-href-before']) && $linkAttributes['data-wpacu-link-href-before']) {
88
+ $htmlSource = str_replace('<link data-wpacu-link-href-before="'.$linkAttributes['data-wpacu-link-href-before'].'" ', '<link ', $htmlSource);
89
+ }
90
+
91
+ // Only rel="stylesheet" (with no rel="preload" associated with it) gets prepared for combining as links with rel="preload" (if any) are never combined into a standard render-blocking CSS file
92
+ // rel="preload" is there for a reason to make sure the CSS code is made available earlier prior to the one from rel="stylesheet" which is render-blocking
93
+ if (isset($linkAttributes['rel'], $linkAttributes['href']) && $linkAttributes['href']) {
94
+ // Make sure that tag value is checked and it's matched against the value from the HTML source code
95
+ //$htmlSource .= $attrObj->nodeValue."\n";
96
+ $href = (string) $linkAttributes['href'];
97
+
98
+ // 1) Check if there is any rel="preload" connected to the rel="stylesheet"
99
+ // making sure the file is not added to the final CSS combined file
100
+
101
+ // 2) Only combine media "all", "screen" and the ones with no media
102
+ // Do not combine media='only screen and (max-width: 768px)' etc.
103
+ if ( $linkAttributes['rel'] === 'preload' ) {
104
+ continue;
105
+ }
106
+
107
+ if (isset($linkAttributes['data-wpacu-to-be-preloaded-basic']) && $linkAttributes['data-wpacu-to-be-preloaded-basic']) {
108
+ continue;
109
+ }
110
+
111
+ if (array_key_exists( 'media', $linkAttributes ) && ! in_array( $linkAttributes['media'], array( 'all', 'screen' ) ) ) {
112
+ continue;
113
+ }
114
+
115
+ if (self::skipCombine( $linkAttributes['href'] ) ) {
116
+ continue;
117
+ }
118
+
119
+ // Was it optimized and has the URL updated? Check the Source URL
120
+ if (isset($linkAttributes['data-wpacu-link-href-before']) && $linkAttributes['data-wpacu-link-href-before'] && self::skipCombine($linkAttributes['data-wpacu-link-href-before'])) {
121
+ continue;
122
+ }
123
+
124
+ $localAssetPath = OptimizeCommon::getLocalAssetPath( $href, 'css' );
125
+
126
+ // It will skip external stylesheets (from a different domain)
127
+ if ( $localAssetPath ) {
128
+ $combinedUriPaths[] = OptimizeCommon::getHrefRelPath( $href );
129
+ $localAssetsPaths[ $href ] = $localAssetPath;
130
+ $linkHrefs[] = $href;
131
+ }
132
+ }
133
+ }
134
+
135
+ // No Link Tags? Continue
136
+ if ( empty( $linkHrefs ) ) {
137
+ continue;
138
+ }
139
+
140
+ $maybeDoCssCombine = self::maybeDoCssCombine( sha1( implode( '', $combinedUriPaths ) ), $localAssetsPaths, $linkHrefs, $docLocationTag );
141
+
142
+ // Local path to combined CSS file
143
+ $localFinalCssFile = $maybeDoCssCombine['local_final_css_file'];
144
+
145
+ // URI (e.g. /wp-content/cache/asset-cleanup/[file-name-here.css]) to the combined CSS file
146
+ $uriToFinalCssFile = $maybeDoCssCombine['uri_final_css_file'];
147
+
148
+ // Any link hrefs removed perhaps if the file wasn't combined?
149
+ $linkHrefs = $maybeDoCssCombine['link_hrefs'];
150
+
151
+ if ( file_exists( $localFinalCssFile ) ) {
152
+ $storageJsonContents[$docLocationTag] = array(
153
+ 'uri_to_final_css_file' => $uriToFinalCssFile,
154
+ 'link_hrefs' => array_map( static function ( $href ) {
155
+ return str_replace( '{site_url}', site_url(), $href );
156
+ }, $linkHrefs )
157
+ );
158
+
159
+ $storageJsonContentsToSave[$docLocationTag] = array(
160
+ 'uri_to_final_css_file' => $uriToFinalCssFile,
161
+ 'link_hrefs' => array_map( static function ( $href ) {
162
+ return str_replace( site_url(), '{site_url}', $href );
163
+ }, $linkHrefs )
164
+ );
165
+ }
166
+ }
167
+
168
+ libxml_clear_errors();
169
+
170
+ OptimizeCommon::setAssetCachedData(
171
+ self::$jsonStorageFile,
172
+ OptimizeCss::getRelPathCssCacheDir(),
173
+ json_encode($storageJsonContentsToSave)
174
+ );
175
+ }
176
+
177
+ if ( ! empty($storageJsonContents) ) {
178
+ foreach ($storageJsonContents as $locationTag => $storageJsonContentLocation) {
179
+ if (! isset($storageJsonContentLocation['link_hrefs'][0])) {
180
+ continue;
181
+ }
182
+
183
+ $storageJsonContentLocation['link_hrefs'] = array_map( static function ( $href ) {
184
+ return str_replace( '{site_url}', site_url(), $href );
185
+ }, $storageJsonContentLocation['link_hrefs'] );
186
+
187
+ $finalTagUrl = OptimizeCommon::filterWpContentUrl() . OptimizeCss::getRelPathCssCacheDir() . $storageJsonContentLocation['uri_to_final_css_file'];
188
+
189
+ $finalCssTag = <<<HTML
190
+ <link id='wpacu-combined-css-{$locationTag}' rel='stylesheet' href='{$finalTagUrl}' type='text/css' media='all' />
191
+ HTML;
192
+ $htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
193
+
194
+ // Detect first LINK tag from the <$locationTag> and replace it with the final combined LINK tag
195
+ $firstLinkTag = OptimizeCss::getFirstLinkTag($storageJsonContentLocation['link_hrefs'][0], $htmlSource);
196
+
197
+ if ($firstLinkTag) {
198
+ $htmlSource = str_replace( $firstLinkTag, $finalCssTag, $htmlSource );
199
+ }
200
+
201
+ if ($htmlSource !== $htmlSourceBeforeAnyLinkTagReplacement) {
202
+ $htmlSource = OptimizeCommon::stripJustCombinedFileTags( $storageJsonContentLocation['link_hrefs'], $htmlSource, 'css' ); // Strip the combined files to avoid duplicate code
203
+
204
+ // There should be at least two replacements made
205
+ if ($htmlSource === 'do_not_combine') {
206
+ $htmlSource = $htmlSourceBeforeAnyLinkTagReplacement;
207
+ }
208
+ }
209
+ }
210
+ }
211
+
212
+ return $htmlSource;
213
+ }
214
+
215
+ /**
216
+ * @param $href
217
+ *
218
+ * @return bool
219
+ */
220
+ public static function skipCombine($href)
221
+ {
222
+ $regExps = array();
223
+
224
+ if (Main::instance()->settings['combine_loaded_css_exceptions'] !== '') {
225
+ $loadedCssExceptionsPatterns = trim(Main::instance()->settings['combine_loaded_css_exceptions']);
226
+
227
+ if (strpos($loadedCssExceptionsPatterns, "\n")) {
228
+ // Multiple values (one per line)
229
+ foreach (explode("\n", $loadedCssExceptionsPatterns) as $loadedCssExceptionPattern) {
230
+ $regExps[] = '#'.trim($loadedCssExceptionPattern).'#';
231
+ }
232
+ } else {
233
+ // Only one value?
234
+ $regExps[] = '#'.trim($loadedCssExceptionsPatterns).'#';
235
+ }
236
+ }
237
+
238
+ // No exceptions set? Do not skip combination
239
+ if (empty($regExps)) {
240
+ return false;
241
+ }
242
+
243
+ foreach ($regExps as $regExp) {
244
+ if ( preg_match( $regExp, $href ) ) {
245
+ // Skip combination
246
+ return true;
247
+ }
248
+ }
249
+
250
+ return false;
251
+ }
252
+
253
+ /**
254
+ * @param $shaOneCombinedUriPaths
255
+ * @param $localAssetsPaths
256
+ * @param $linkHrefs
257
+ * @param $docLocationTag
258
+ *
259
+ * @return array
260
+ */
261
+ public static function maybeDoCssCombine($shaOneCombinedUriPaths, $localAssetsPaths, $linkHrefs, $docLocationTag)
262
+ {
263
+ $current_user = wp_get_current_user();
264
+ $dirToUserCachedFile = ((isset($current_user->ID) && $current_user->ID > 0) ? 'logged-in/'.$current_user->ID.'/' : '');
265
+
266
+ $uriToFinalCssFile = $dirToUserCachedFile . $docLocationTag . '-' .$shaOneCombinedUriPaths . '.css';
267
+ $localFinalCssFile = WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir() . $uriToFinalCssFile;
268
+
269
+ $localDirForCssFile = WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir() . $dirToUserCachedFile;
270
+
271
+ // Only combine if $shaOneCombinedUriPaths.css does not exist
272
+ // If "?ver" value changes on any of the assets or the asset list changes in any way
273
+ // then $shaOneCombinedUriPaths will change too and a new CSS file will be generated and loaded
274
+
275
+ $skipIfFileExists = true;
276
+
277
+ if ($skipIfFileExists || ! file_exists($localFinalCssFile)) {
278
+ // Change $assetsContents as paths to fonts and images that are relative (e.g. ../, ../../) have to be updated
279
+ $finalAssetsContents = '';
280
+
281
+ foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
282
+ $posLastSlash = strrpos($assetHref, '/');
283
+ $pathToAssetDir = substr($assetHref, 0, $posLastSlash);
284
+
285
+ $parseUrl = parse_url($pathToAssetDir);
286
+
287
+ if (isset($parseUrl['scheme']) && $parseUrl['scheme'] !== '') {
288
+ $pathToAssetDir = str_replace(
289
+ array('http://'.$parseUrl['host'], 'https://'.$parseUrl['host']),
290
+ '',
291
+ $pathToAssetDir
292
+ );
293
+ } elseif (strpos($pathToAssetDir, '//') === 0) {
294
+ $pathToAssetDir = str_replace(
295
+ array('//'.$parseUrl['host'], '//'.$parseUrl['host']),
296
+ '',
297
+ $pathToAssetDir
298
+ );
299
+ }
300
+
301
+ $cssContent = FileSystem::file_get_contents($localAssetsPath);
302
+
303
+ if ($cssContent) {
304
+ // Do not combine it if it contains "@import"
305
+ if (stripos($cssContent, '@import') !== false) {
306
+ unset($localAssetsPaths[$assetHref]);
307
+ $linkHrefKey = array_search($assetHref, $linkHrefs);
308
+ unset($linkHrefs[$linkHrefKey]);
309
+ continue;
310
+ }
311
+
312
+ // Does it have a source map? Strip it
313
+ if (strpos($cssContent, 'sourceMappingURL') !== false) {
314
+ $cssContent = OptimizeCommon::stripSourceMap($cssContent);
315
+ }
316
+
317
+ $finalAssetsContents .= '/*** Source: '.str_replace(ABSPATH, '/', $localAssetsPath)." ***/\n";
318
+ $finalAssetsContents .= OptimizeCss::maybeFixCssBackgroundUrls($cssContent, $pathToAssetDir . '/') . "\n\n";
319
+ }
320
+ }
321
+
322
+ $finalAssetsContents = trim($finalAssetsContents);
323
+
324
+ if ($finalAssetsContents) {
325
+ if ($dirToUserCachedFile !== '' && isset($current_user->ID) && $current_user->ID > 0 && ! is_dir($localDirForCssFile)) {
326
+ $makeLocalDirForCss = @mkdir($localDirForCssFile);
327
+
328
+ if (! $makeLocalDirForCss) {
329
+ return array('uri_final_css_file' => '', 'local_final_css_file' => '');
330
+ }
331
+ }
332
+
333
+ FileSystem::file_put_contents($localFinalCssFile, $finalAssetsContents);
334
+ }
335
+ }
336
+
337
+ return array(
338
+ 'uri_final_css_file' => $uriToFinalCssFile,
339
+ 'local_final_css_file' => $localFinalCssFile,
340
+ 'link_hrefs' => $linkHrefs
341
+ );
342
+ }
343
+
344
+ /**
345
+ * @return bool
346
+ */
347
+ public static function proceedWithCssCombine()
348
+ {
349
+ // No CSS files are combined in the Dashboard
350
+ // Always in the front-end view
351
+ // Do not combine if there's a POST request as there could be assets loading conditionally
352
+ // that might not be needed when the page is accessed without POST, making the final CSS file larger
353
+ if (! empty($_POST) || is_admin()) {
354
+ return false; // Do not combine
355
+ }
356
+
357
+ // Only clean request URIs allowed (with Exceptions)
358
+ // Exceptions
359
+ if ((strpos($_SERVER['REQUEST_URI'], '?') !== false) && ! OptimizeCommon::loadOptimizedAssetsIfQueryStrings()) {
360
+ return false;
361
+ }
362
+
363
+ if (! OptimizeCommon::doCombineIsRegularPage()) {
364
+ return false;
365
+ }
366
+
367
+ $pluginSettings = Main::instance()->settings;
368
+
369
+ if ($pluginSettings['test_mode'] && ! Menu::userCanManageAssets()) {
370
+ return false; // Do not combine anything if "Test Mode" is ON and the user is in guest mode (not logged-in)
371
+ }
372
+
373
+ if ($pluginSettings['combine_loaded_css'] === '') {
374
+ return false; // Do not combine
375
+ }
376
+
377
+ if (OptimizeCss::isOptimizeCssEnabledByOtherParty('if_enabled')) {
378
+ return false; // Do not combine (it's already enabled in other plugin)
379
+ }
380
+
381
+ if ( ($pluginSettings['combine_loaded_css'] === 'for_admin'
382
+ || $pluginSettings['combine_loaded_css_for_admin_only'] == 1)
383
+ && Menu::userCanManageAssets()) {
384
+ return true; // Do combine
385
+ }
386
+
387
+ if ( $pluginSettings['combine_loaded_css_for_admin_only'] === ''
388
+ && in_array($pluginSettings['combine_loaded_css'], array('for_all', 1)) ) {
389
+ return true; // Do combine
390
+ }
391
+
392
+ // Finally, return false as none of the checks above matched
393
+ return false;
394
+ }
395
+ }
classes/OptimiseAssets/CombineJs.php ADDED
@@ -0,0 +1,486 @@
1
+ <?php
2
+ namespace WpAssetCleanUp\OptimiseAssets;
3
+
4
+ use WpAssetCleanUp\Main;
5
+ use WpAssetCleanUp\Menu;
6
+ use WpAssetCleanUp\FileSystem;
7
+
8
+ /**
9
+ * Class CombineJs
10
+ * @package WpAssetCleanUp\OptimiseAssets
11
+ */
12
+ class CombineJs
13
+ {
14
+ /**
15
+ * @var string
16
+ */
17
+ public static $jsonStorageFile = 'js-combined{maybe-extra-info}.json';
18
+
19
+ /**
20
+ * @param $htmlSource
21
+ *
22
+ * @return mixed
23
+ */
24
+ public static function doCombine($htmlSource)
25
+ {
26
+ if ( array_key_exists('wpacu_no_js_combine', $_GET) || // not on query string request (debugging purposes)
27
+ ! self::proceedWithJsCombine() ) {
28
+ return $htmlSource;
29
+ }
30
+
31
+ $useDom = function_exists('libxml_use_internal_errors') && function_exists('libxml_clear_errors') && class_exists('DOMDocument');
32
+
33
+ if (! $useDom) {
34
+ return $htmlSource;
35
+ }
36
+
37
+ $combineLevel = 2;
38
+
39
+ // Speed up processing by getting the already existing final CSS file URI
40
+ // This will avoid parsing the HTML DOM and determine the combined URI paths for all the CSS files
41
+ $finalCacheList = OptimizeCommon::getAssetCachedData(self::$jsonStorageFile, OptimizeJs::getRelPathJsCacheDir(), 'js');
42
+
43
+ // $uriToFinalJsFile will always be relative ONLY within WP_CONTENT_DIR . self::getRelPathJsCacheDir()
44
+ // which is usually "wp-content/cache/asset-cleanup/js/"
45
+
46
+ // "false" would make it avoid checking the cache and always use the DOM Parser / RegExp
47
+ // for DEV purposes ONLY as it uses more resources
48
+ if (empty($finalCacheList)) {
49
+ /*
50
+ * NO CACHING TRANSIENT; Parse the DOM
51
+ */
52
+ // Nothing in the database records or the retrieved cached file does not exist?
53
+ OptimizeCommon::clearAssetCachedData(self::$jsonStorageFile);
54
+
55
+ $regExpPattern = '#<script[^>]*>.*?</script>#is';
56
+
57
+ preg_match_all($regExpPattern, OptimizeCommon::cleanerHtmlSource($htmlSource), $matchesSourcesFromTags, PREG_SET_ORDER);
58
+
59
+ // No <script> tag found? Do not continue
60
+ if (empty($matchesSourcesFromTags)) {
61
+ return $htmlSource;
62
+ }
63
+
64
+ if ($combineLevel === 2) {
65
+ $matchesSourcesFromTags = OptimizeJs::clearInlineScriptTags($matchesSourcesFromTags);
66
+ }
67
+
68
+ if (empty($matchesSourcesFromTags)) {
69
+ return $htmlSource;
70
+ }
71
+
72
+ $combinableList = $bodyGroupIndexes = array();
73
+
74
+ $groupIndex = 1;
75
+ $jQueryAndMigrateGroup = 0;
76
+
77
+ $jQueryGroupIndex = $loadsLocaljQuery = $loadsLocaljQueryMigrate = false;
78
+
79
+ $lastScriptSrcFromHead = OptimizeJs::lastScriptSrcFromHead($htmlSource);
80
+
81
+ $reachedBody = false;
82
+
83
+ $domTag = new \DOMDocument();
84
+
85
+ libxml_use_internal_errors( true );
86
+
87
+ // Only keep combinable JS files
88
+ foreach ($matchesSourcesFromTags as $matchSourceFromTag) {
89
+ $matchedSourceFromTag = trim( $matchSourceFromTag[0] );
90
+
91
+ $domTag->loadHTML($matchedSourceFromTag);
92
+
93
+ $scriptNotCombinable = $scriptPreloaded = $src = false;
94
+
95
+ foreach ($domTag->getElementsByTagName( 'script' ) as $tagObject) {
96
+ if (! $tagObject->hasAttributes()) {
97
+ continue;
98
+ }
99
+
100
+ $scriptAttributes = array();
101
+
102
+ foreach ( $tagObject->attributes as $attrObj ) {
103
+ $scriptAttributes[ $attrObj->nodeName ] = trim($attrObj->nodeValue);
104
+ }
105
+
106
+ // The attribute's value was fetched for verification, thus the attribute is not relevant anymore
107
+ if (isset($scriptAttributes['data-wpacu-script-src-before']) && $scriptAttributes['data-wpacu-script-src-before']) {
108
+ $beforeAfterReps = array('<script data-wpacu-script-src-before="'.$scriptAttributes['data-wpacu-script-src-before'].'" ' => '<script ');
109
+ $matchedSourceFromTag = str_replace(array_keys($beforeAfterReps), array_values($beforeAfterReps), $matchedSourceFromTag);
110
+ $htmlSource = str_replace(array_keys($beforeAfterReps), array_values($beforeAfterReps), $htmlSource);
111
+ }
112
+
113
+ if (isset($scriptAttributes['src']) && $scriptAttributes['src']) {
114
+ $src = (string) $scriptAttributes['src'];
115
+
116
+ $scriptNotCombinable = false;
117
+
118
+ if (self::skipCombine($src)) {
119
+ $scriptNotCombinable = true;
120
+ }
121
+
122
+ // Do not add it to the combination list if it has "async" or "defer" attributes
123
+ if (in_array($scriptAttributes, array('async', 'defer'))) {
124
+ $scriptNotCombinable = true;
125
+ }
126
+
127
+ if (isset($scriptAttributes['data-wpacu-to-be-preloaded-basic']) && $scriptAttributes['data-wpacu-to-be-preloaded-basic']) {
128
+ $scriptNotCombinable = $scriptPreloaded = true;
129
+ }
130
+
131
+ // Was it optimized and has the URL updated? Check the Source URL
132
+ if (! $scriptNotCombinable && isset($scriptAttributes['data-wpacu-script-src-before']) && $scriptAttributes['data-wpacu-script-src-before'] && self::skipCombine($scriptAttributes['data-wpacu-script-src-before'])) {
133
+ $scriptNotCombinable = true;
134
+ }
135
+ }
136
+
137
+ }
138
+
139
+ if ( $src && ! $scriptNotCombinable ) {
140
+ $localAssetPath = OptimizeCommon::getLocalAssetPath( $src, 'js' );
141
+
142
+ if ( $localAssetPath ) {
143
+ $combinableList[ $groupIndex ][] = array(
144
+ 'src' => $src,
145
+ 'local' => $localAssetPath,
146
+ 'html' => $matchedSourceFromTag
147
+ );
148
+
149
+ if ( strpos( $localAssetPath, '/wp-includes/js/jquery/jquery.js' ) !== false ) {
150
+ $loadsLocaljQuery = true;
151
+ $jQueryGroupIndex = $groupIndex;
152
+
153
+ $jQueryArrayGroupKeys = array_keys( $combinableList[ $groupIndex ] );
154
+ $jQueryScriptIndex = array_pop( $jQueryArrayGroupKeys );
155
+
156
+ $jQueryAndMigrateGroup ++;
157
+ } elseif ( strpos( $localAssetPath,
158
+ '/wp-includes/js/jquery/jquery-migrate.' ) !== false ) {
159
+ $loadsLocaljQueryMigrate = true;
160
+ $jQueryAndMigrateGroup ++;
161
+ }
162
+ }
163
+
164
+ // We'll check the current group
165
+ // If we have jQuery and jQuery migrate, we will consider the group completed
166
+ // and we will move on to the next group
167
+ if ( $jQueryAndMigrateGroup > 1 ) {
168
+ $groupIndex ++;
169
+ $jQueryAndMigrateGroup = 0; // reset it to avoid having one file per group!
170
+ }
171
+
172
+ // Have we passed <head> and stumbled upon the first script tag from the <body>
173
+ // Then consider the group completed
174
+ if ($lastScriptSrcFromHead && ($src === $lastScriptSrcFromHead)) {
175
+ $groupIndex++;
176
+ $reachedBody = true;
177
+ }
178
+ } elseif (! $scriptPreloaded) {
179
+ $groupIndex ++;
180
+ }
181
+
182
+ if ($reachedBody) {
183
+ $bodyGroupIndexes[] = $groupIndex;
184
+ }
185
+ }
186
+
187
+ // Is the page loading local jQuery but not local jQuery Migrate?
188
+ // Keep jQuery as standalone file (not in the combinable list)
189
+ if ( $loadsLocaljQuery && ! $loadsLocaljQueryMigrate && isset($jQueryScriptIndex) ) {
190
+ unset($combinableList[$jQueryGroupIndex][$jQueryScriptIndex]);
191
+ }
192
+
193
+ // Could be pages such as maintenance mode with no external JavaScript files
194
+ if (empty($combinableList)) {
195
+ return $htmlSource;
196
+ }
197
+
198
+ $groupNo = 1;
199
+
200
+ $finalCacheList = array();
201
+
202
+ foreach ($combinableList as $groupIndex => $groupFiles) {
203
+ // Any groups having one file? Then it's not really a group and the file should load on its own
204
+ // Could be one extra file besides the jQuery & jQuery Migrate group or the only JS file called within the HEAD
205
+ if (count($groupFiles) < 2) {
206
+ continue;
207
+ }
208
+
209
+ $combinedUriPaths = $localAssetsPaths = $groupScriptTags = $groupScriptSrcs = array();
210
+
211
+ foreach ( $groupFiles as $groupFileData ) {
212
+ $src = $groupFileData['src'];
213
+ $groupScriptSrcs[] = $src;
214
+ $combinedUriPaths[] = OptimizeCommon::getHrefRelPath( $src );
215
+ $localAssetsPaths[ $src ] = $groupFileData['local'];
216
+ $groupScriptTags[] = $groupFileData['html'];
217
+ }
218
+
219
+ // <head> or <body>
220
+ $docLocationScript = in_array($groupIndex, $bodyGroupIndexes) ? 'body' : 'head';
221
+
222
+ $maybeDoJsCombine = self::maybeDoJsCombine(
223
+ sha1( implode( '', $combinedUriPaths ) ) . '-' . $groupNo,
224
+ $localAssetsPaths,
225
+ $docLocationScript
226
+ );
227
+
228
+ // Local path to combined CSS file
229
+ $localFinalJsFile = $maybeDoJsCombine['local_final_js_file'];
230
+
231
+ // URI (e.g. /wp-content/cache/asset-cleanup/[file-name-here.js]) to the combined JS file
232
+ $uriToFinalJsFile = $maybeDoJsCombine['uri_final_js_file'];
233
+
234
+ if ( ! file_exists( $localFinalJsFile ) ) {
235
+ return $htmlSource; // something is not right as the file wasn't created, we will return the original HTML source
236
+ }
237
+
238
+ $groupScriptSrcsFilter = array_map( function ( $src ) {
239
+ return str_replace( site_url(), '{site_url}', $src );
240
+ }, $groupScriptSrcs );
241
+
242
+ $groupScriptTagsFilter = array_map( function ( $scriptTag ) {
243
+ return str_replace( site_url(), '{site_url}', $scriptTag );
244
+ }, $groupScriptTags );
245
+
246
+ $finalCacheList[ $groupNo ] = array(
247
+ 'uri_to_final_js_file' => $uriToFinalJsFile,
248
+ 'script_srcs' => $groupScriptSrcsFilter,
249
+ 'script_tags' => $groupScriptTagsFilter
250
+ );
251
+
252
+ if (Main::instance()->settings['combine_loaded_js_defer_body'] && in_array($groupIndex, $bodyGroupIndexes)) {
253
+ $finalCacheList[ $groupNo ]['extras'][] = 'defer';
254
+ }
255
+
256
+ $groupNo++;
257
+ }
258
+
259
+ OptimizeCommon::setAssetCachedData(self::$jsonStorageFile, OptimizeJs::getRelPathJsCacheDir(), json_encode($finalCacheList));
260
+ }
261
+
262
+ if (! empty($finalCacheList)) {
263
+ foreach ( $finalCacheList as $groupNo => $cachedValues ) {
264
+ $htmlSourceBeforeGroupReplacement = $htmlSource;
265
+
266
+ $uriToFinalJsFile = $cachedValues['uri_to_final_js_file'];
267
+
268
+ // Basic Combining (1) -> replace "first" tag with the final combination tag (there would be most likely multiple groups)
269
+ // Enhanced Combining (2) -> replace "last" tag with the final combination tag (most likely one group)
270
+ $indexReplacement = ($combineLevel === 2) ? (count($cachedValues['script_tags']) - 1) : 0;
271
+
272
+ $finalTagUrl = OptimizeCommon::filterWpContentUrl() . OptimizeJs::getRelPathJsCacheDir() . $uriToFinalJsFile;
273
+
274
+ $deferAttr = (isset($cachedValues['extras']) && in_array('defer', $cachedValues['extras'])) ? 'defer="defer"' : '';
275
+
276
+ $finalJsTag = <<<HTML
277
+ <script {$deferAttr} id='wpacu-combined-js-group-{$groupNo}' type='text/javascript' src='{$finalTagUrl}'></script>
278
+ HTML;
279
+ $tagsStripped = 0;
280
+
281
+ foreach ( $cachedValues['script_tags'] as $groupScriptTagIndex => $scriptTag ) {
282
+ $scriptTag = str_replace( '{site_url}', site_url(), $scriptTag );
283
+
284
+ if ( $groupScriptTagIndex === $indexReplacement ) {
285
+ $htmlSourceBeforeTagReplacement = $htmlSource;
286
+ $htmlSource = OptimizeJs::strReplaceOnce( $scriptTag, $finalJsTag, $htmlSource );
287
+ } else {
288
+ $htmlSourceBeforeTagReplacement = $htmlSource;
289
+ $htmlSource = OptimizeJs::strReplaceOnce( $scriptTag, '', $htmlSource );
290
+ }
291
+
292
+ if ($htmlSource !== $htmlSourceBeforeTagReplacement) {
293
+ $tagsStripped++;
294
+ }
295
+ }
296
+
297
+ // At least two tags has have be stripped from the group to consider doing the group replacement
298
+ // If the tags weren't replaced it's likely there were changes to their structure after they were cached for the group merging
299
+ if ($tagsStripped < 2) {
300
+ $htmlSource = $htmlSourceBeforeGroupReplacement;
301
+ }
302
+ }
303
+ }
304
+
305
+ return $htmlSource;
306
+ }
307
+
308
+ /**
309
+ * @param $src
310
+ *
311
+ * @return bool
312
+ */
313
+ public static function skipCombine($src)
314
+ {
315
+ $regExps = array();
316
+
317
+ if (Main::instance()->settings['combine_loaded_js_exceptions'] !== '') {
318
+ $loadedCssExceptionsPatterns = trim(Main::instance()->settings['combine_loaded_js_exceptions']);
319
+
320
+ if (strpos($loadedCssExceptionsPatterns, "\n")) {
321
+ // Multiple values (one per line)
322
+ foreach (explode("\n", $loadedCssExceptionsPatterns) as $loadedCssExceptionPattern) {
323
+ $regExps[] = '#'.trim($loadedCssExceptionPattern).'#';
324
+ }
325
+ } else {
326
+ // Only one value?
327
+ $regExps[] = '#'.trim($loadedCssExceptionsPatterns).'#';
328
+ }
329
+ }
330
+
331
+ // No exceptions set? Do not skip combination
332
+ if (empty($regExps)) {
333
+ return false;
334
+ }
335
+
336
+ foreach ($regExps as $regExp) {
337
+ if ( preg_match( $regExp, $src ) ) {
338
+ // Skip combination
339
+ return true;
340
+ }
341
+ }
342
+
343
+ return false;
344
+ }
345
+
346
+ /**
347
+ * @param $shaOneCombinedUriPaths
348
+ * @param $localAssetsPaths
349
+ * @param $docLocationScript
350
+ *
351
+ * @return array
352
+ */
353
+ public static function maybeDoJsCombine($shaOneCombinedUriPaths, $localAssetsPaths, $docLocationScript)
354
+ {
355
+ $current_user = wp_get_current_user();
356
+ $dirToUserCachedFile = ((isset($current_user->ID) && $current_user->ID > 0) ? 'logged-in/'.$current_user->ID.'/' : '');
357
+
358
+ $uriToFinalJsFile = $dirToUserCachedFile . $docLocationScript . '-' . $shaOneCombinedUriPaths . '.js';
359
+
360
+ $localFinalJsFile = WP_CONTENT_DIR . OptimizeJs::getRelPathJsCacheDir() . $uriToFinalJsFile;
361
+ $localDirForJsFile = WP_CONTENT_DIR . OptimizeJs::getRelPathJsCacheDir() . $dirToUserCachedFile;
362
+
363
+ // Only combine if $shaOneCombinedUriPaths.js does not exist
364
+ // If "?ver" value changes on any of the assets or the asset list changes in any way
365
+ // then $shaOneCombinedUriPaths will change too and a new JS file will be generated and loaded
366
+
367
+ $skipIfFileExists = true;
368
+
369
+ if ($skipIfFileExists || ! file_exists($localFinalJsFile)) {
370
+ // Change $assetsContents as paths to fonts and images that are relative (e.g. ../, ../../) have to be updated
371
+ $finalJsContentsGroupsArray = array();
372
+
373
+ foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
374
+ $posLastSlash = strrpos($assetHref, '/');
375
+ $pathToAssetDir = substr($assetHref, 0, $posLastSlash);
376
+
377
+ $parseUrl = parse_url($pathToAssetDir);
378
+
379
+ if (isset($parseUrl['scheme']) && $parseUrl['scheme'] !== '') {
380
+ $pathToAssetDir = str_replace(
381
+ array('http://'.$parseUrl['host'], 'https://'.$parseUrl['host']),
382
+ '',
383
+ $pathToAssetDir
384
+ );
385
+ } elseif (strpos($pathToAssetDir, '//') === 0) {
386
+ $pathToAssetDir = str_replace(
387
+ array('//'.$parseUrl['host'], '//'.$parseUrl['host']),
388
+ '',
389
+ $pathToAssetDir
390
+ );
391
+ }
392
+
393
+ $jsContent = FileSystem::file_get_contents($localAssetsPath);
394
+
395
+ if ($jsContent) {
396
+ // Does it have a source map? Strip it
397
+ if (strpos($jsContent, 'sourceMappingURL') !== false) {
398
+ $jsContent = OptimizeCommon::stripSourceMap($jsContent);
399
+ }
400
+
401
+ $finalJsContentsIndex = 1;
402
+
403
+ $finalJsContentsGroupsArray[$finalJsContentsIndex][] = '/*** Source: '.str_replace(ABSPATH, '/', $localAssetsPath)." ***/\n" . OptimizeJs::maybeDoJsFixes($jsContent, $pathToAssetDir . '/') . "\n\n";
404
+ }
405
+ }
406
+
407
+ if (! empty($finalJsContentsGroupsArray)) {
408
+ $contentsOne = isset($finalJsContentsGroupsArray[1]) && ! empty($finalJsContentsGroupsArray[1]) ? implode ('', $finalJsContentsGroupsArray[1]) : '';
409
+ $contentsTwo = isset($finalJsContentsGroupsArray[2]) && ! empty($finalJsContentsGroupsArray[2]) ? implode ('', $finalJsContentsGroupsArray[2]) : '';
410
+
411
+ $finalJsContents = $contentsOne . $contentsTwo;
412
+
413
+ if ( $dirToUserCachedFile !== '' && isset( $current_user->ID ) && $current_user->ID > 0) {
414
+ if (! is_dir( $localDirForJsFile)) {
415
+ $makeLocalDirForJs = @mkdir($localDirForJsFile);
416
+
417
+ if (! $makeLocalDirForJs) {
418
+ return array('uri_final_js_file' => '', 'local_final_js_file' => '');
419
+ }
420
+ }
421
+ }
422
+
423
+ @file_put_contents( $localFinalJsFile, $finalJsContents );
424
+ }
425
+ }
426
+
427
+ return array(
428
+ 'uri_final_js_file' => $uriToFinalJsFile,
429
+ 'local_final_js_file' => $localFinalJsFile
430
+ );
431
+ }
432
+
433
+ /**
434
+ * @return bool
435
+ */
436
+ public static function proceedWithJsCombine()
437
+ {
438
+ // No JS files are combined in the Dashboard
439
+ // Always in the front-end view
440
+ // Do not combine if there's a POST request as there could be assets loading conditionally
441
+ // that might not be needed when the page is accessed without POST, making the final JS file larger
442
+ if (! empty($_POST) || is_admin()) {
443
+ return false; // Do not combine
444
+ }
445
+
446
+ // Only clean request URIs allowed (with few exceptions)
447
+ if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
448
+ // Exceptions
449
+ if (! OptimizeCommon::loadOptimizedAssetsIfQueryStrings()) {
450
+ return false;
451
+ }
452
+ }
453
+
454
+ if (! OptimizeCommon::doCombineIsRegularPage()) {
455
+ return false;
456
+ }
457
+
458
+ $pluginSettings = Main::instance()->settings;
459
+
460
+ if ($pluginSettings['test_mode'] && ! Menu::userCanManageAssets()) {
461
+ return false; // Do not combine anything if "Test Mode" is ON
462
+ }
463
+
464
+ if ($pluginSettings['combine_loaded_js'] === '') {
465
+ return false; // Do not combine
466
+ }
467
+
468
+ if (OptimizeJs::isOptimizeJsEnabledByOtherParty('if_enabled')) {
469
+ return false; // Do not combine (it's already enabled in other plugin)
470
+ }
471
+
472
+ if ( ($pluginSettings['combine_loaded_js'] === 'for_admin'
473
+ || $pluginSettings['combine_loaded_js_for_admin_only'] == 1)
474
+ && Menu::userCanManageAssets() ) {
475
+ return true; // Do combine
476
+ }
477
+
478
+ if ( $pluginSettings['combine_loaded_js_for_admin_only'] === ''
479
+ && in_array($pluginSettings['combine_loaded_js'], array('for_all', 1)) ) {
480
+ return true; // Do combine
481
+ }
482
+
483
+ // Finally, return false as none of the checks above matched
484
+ return false;
485
+ }
486
+ }
classes/OptimiseAssets/{GoogleFonts.php → FontsGoogle.php} RENAMED
@@ -4,10 +4,10 @@ namespace WpAssetCleanUp\OptimiseAssets;
4
use WpAssetCleanUp\Main;
5
6
/**
7
- * Class GoogleFonts
8
* @package WpAssetCleanUp\OptimiseAssets
9
*/
10
- class GoogleFonts
11
{
12
/**
13
* @var string
@@ -24,6 +24,10 @@ class GoogleFonts
24
*/
25
public function init()
26
{
27
add_action('init', function() {
28
// don't apply any changes if not in the front-end view (e.g. Dashboard view)
29
// or test mode is enabled and a guest user is accessing the page
@@ -34,79 +38,151 @@ class GoogleFonts
34
add_filter('style_loader_src', array($this, 'alterGoogleFontLink'));
35
}, 20);
36
37
- add_action('wp_loaded', function() {
38
- // don't apply any changes if not in the front-end view (e.g. Dashboard view)
39
- // or test mode is enabled and a guest user is accessing the page
40
- if (is_admin() || Main::instance()->preventAssetsSettings()) {
41
- return;
42
- }
43
44
- ob_start(function($htmlSource) {
45
- // Cleaner HTML Source
46
- $altHtmlSource = preg_replace('#<noscript>(.*?)</noscript>#si', '', $htmlSource);
47
48
- // Do not continue if there is no single reference to the string we look for in the clean HTML source
49
- if (stripos($altHtmlSource, self::$containsStr) === false) {
50
- return $htmlSource;
51
}
52
53
- // Get all valid LINKs that have the $string within them
54
- $strContainsFormat = preg_quote(self::$containsStr, '/');
55
- $regExpPattern = '#<link[^>]*' . $strContainsFormat . '.*(>)#Usmi';
56
57
- preg_match_all($regExpPattern, $altHtmlSource, $matchesFromLinkTags, PREG_SET_ORDER);
58
59
- // Needs to match at least one to carry on with the replacements
60
- if (isset($matchesFromLinkTags[0]) && ! empty($matchesFromLinkTags[0])) {
61
- $finalCombinableLinks = $preloadedLinks = array();
62
63
- foreach ($matchesFromLinkTags as $linkIndex => $linkTagArray) {
64
- $linkTag = $finalLinkTag = trim(trim($linkTagArray[0], '"\''));
65
- preg_match_all('#href=("|\')' . '(.*)' . '("|\')#Usmi', $linkTag, $outputMatches);
66
- $linkHrefOriginal = $finalLinkHref = trim($outputMatches[2][0], '"\'');
67
68
- // If anything is set apart from '[none set]', proceed
69
- if (Main::instance()->settings['google_fonts_display']) {
70
- $newLinkHref = $finalLinkHref = self::alterGoogleFontLink($linkHrefOriginal);
71
72
- if ($newLinkHref !== $linkHrefOriginal) {
73
- $finalLinkTag = str_replace($linkHrefOriginal, $newLinkHref, $linkTag);
74
75
- // Finally, alter the HTML source
76
- $htmlSource = str_replace($linkTag, $finalLinkTag, $htmlSource);
77
- }
78
- }
79
80
- if (preg_match('/rel=("\')preload("\')/i', $finalLinkTag)
81
- || strpos($finalLinkTag, 'data-wpacu-to-be-preloaded-basic')) {
82
- $preloadedLinks[] = $finalLinkHref;
83
- }
84
85
- $finalCombinableLinks[] = array('href' => $finalLinkHref, 'tag' => $finalLinkTag);
86
}
87
88
- $preloadedLinks = array_unique($preloadedLinks);
89
90
- // Remove data for preloaded LINKs
91
- if (! empty($preloadedLinks)) {
92
- foreach ($finalCombinableLinks as $fclIndex => $combinableLinkData) {
93
- if (in_array($combinableLinkData['href'], $preloadedLinks)) {
94
- unset($finalCombinableLinks[$fclIndex]);
95
- }
96
}
97
}
98
99
- // Only proceed with the combine if there's obviously at least 2 combinable URL requests to Google Fonts
100
- if (count($finalCombinableLinks) > 1 && Main::instance()->settings['google_fonts_combine']) {
101
- $htmlSource = self::combineGoogleFontLinks($finalCombinableLinks, $htmlSource);
102
}
103
}
104
105
- $htmlSource = self::alterGoogleFontUrlFromInlineStyleTags($htmlSource);
106
107
- return $htmlSource;
108
- });
109
- }, PHP_INT_MAX);
110
}
111
112
/**
@@ -192,7 +268,7 @@ class GoogleFonts
192
*/
193
public static function alterGoogleFontUrlFromCssContent($cssContent)
194
{
195
- if (stripos($cssContent, 'fonts.googleapis.com') === false) {
196
return $cssContent;
197
}
198
4
use WpAssetCleanUp\Main;
5
6
/**
7
+ * Class FontsGoogle
8
* @package WpAssetCleanUp\OptimiseAssets
9
*/
10
+ class FontsGoogle
11
{
12
/**
13
* @var string
24
*/
25
public function init()
26
{
27
+ add_filter('wp_resource_hints', array($this, 'resourceHints'), 10, 2);
28
+
29
+ add_action('wp_head', array($this, 'preloadFontFiles'), 1);
30
+
31
add_action('init', function() {
32
// don't apply any changes if not in the front-end view (e.g. Dashboard view)
33
// or test mode is enabled and a guest user is accessing the page
38
add_filter('style_loader_src', array($this, 'alterGoogleFontLink'));
39
}, 20);
40
41
+ add_action('wp_loaded', array($this, 'alterHtmlSource'), PHP_INT_MAX);
42
+ }
43
44
+ /**
45
+ * @param $urls
46
+ * @param $relationType
47
+ *
48
+ * @return array
49
+ */
50
+ public function resourceHints($urls, $relationType)
51
+ {
52
+ if ('preconnect' === $relationType && Main::instance()->settings['google_fonts_preconnect']) {
53
+ $urls[] = array(
54
+ 'href' => 'https://fonts.gstatic.com/',
55
+ 'crossorigin'
56
+ );
57
+ }
58
59
+ return $urls;
60
+ }
61
+
62
+ /**
63
+ *
64
+ */
65
+ public function preloadFontFiles()
66
+ {
67
+ if ($preloadFontFiles = Main::instance()->settings['google_fonts_preload_files']) {
68
+ $preloadFontFilesArray = array();
69
+
70
+ if (strpos($preloadFontFiles, "\n") !== false) {
71
+ foreach (explode("\n", $preloadFontFiles) as $preloadFontFile) {
72
+ $preloadFontFilesArray[] = trim($preloadFontFile);
73
}
74
+ } else {
75
+ $preloadFontFilesArray[] = trim($preloadFontFiles);
76
+ }
77
+
78
+ $preloadFontFilesOutput = '';
79
+
80
+ // Finally, go through the list
81
+ foreach ($preloadFontFilesArray as $preloadFontFile) {
82
+ $preloadFontFilesOutput .= '<link rel="preload" as="font" href="'.esc_attr($preloadFontFile).'" data-wpacu-preload-font="1" crossorigin>'."\n";
83
+ }
84
+
85
+ echo apply_filters('wpacu_preload_google_font_files_output', $preloadFontFilesOutput);
86
+ }
87
+ }
88
+
89
+ /**
90
+ *
91
+ */
92
+ public function alterHtmlSource()
93
+ {
94
+ // don't apply any changes if not in the front-end view (e.g. Dashboard view)
95
+ // or test mode is enabled and a guest user is accessing the page
96
+ if (is_admin() || Main::instance()->preventAssetsSettings()) {
97
+ return;
98
+ }
99
100
+ ob_start(static function($htmlSource) {
101
+ // Cleaner HTML Source
102
+ $altHtmlSource = preg_replace('#<noscript(.*?)</noscript>#si', '', $htmlSource);
103
+ $altHtmlSource = preg_replace('#<!--(.*?)-->#s', '', $altHtmlSource);
104
+ $altHtmlSource = preg_replace('#<style(.*?)</style>#si', '', $altHtmlSource);
105
+ $altHtmlSource = preg_replace('#<script(.*?)</script>#si', '', $altHtmlSource);
106
107
+ // Do not continue if there is no single reference to the string we look for in the clean HTML source
108
+ if (stripos($altHtmlSource, self::$containsStr) === false) {
109
+ return $htmlSource;
110
+ }
111
112
+ // Get all valid LINKs that have the $string within them
113
+ $strContainsFormat = preg_quote(self::$containsStr, '/');
114
+ $regExpPattern = '#<link[^>]*' . $strContainsFormat . '.*(>)#Usmi';
115
116
+ preg_match_all($regExpPattern, $altHtmlSource, $matchesFromLinkTags, PREG_SET_ORDER);
117
118
+ // Needs to match at least one to carry on with the replacements
119
+ if (isset($matchesFromLinkTags[0]) && ! empty($matchesFromLinkTags[0])) {
120
+ $finalCombinableLinks = $preloadedLinks = array();
121
122
+ foreach ($matchesFromLinkTags as $linkIndex => $linkTagArray) {
123
+ $linkTag = $finalLinkTag = trim(trim($linkTagArray[0], '"\''));
124
125
+ // Extra checks to make sure it's a valid LINK tag
126
+ if ( (strpos($linkTag, "'") !== false && (substr_count($linkTag, "'") % 2))
127
+ || (strpos($linkTag, '"') !== false && (substr_count($linkTag, '"') % 2))
128
+ || (trim(strip_tags($linkTag)) !== '')) {
129
+ continue;
130
+ }
131
132
+ preg_match_all('#href=(["\'])' . '(.*)' . '(["\'])#Usmi', $linkTag, $outputMatches);
133
+ $linkHrefOriginal = $finalLinkHref = trim($outputMatches[2][0], '"\'');
134
+
135
+ // [START] Remove invalid requests with no font family
136
+ $urlParse = parse_url(str_replace('&amp;', '&', $linkHrefOriginal), PHP_URL_QUERY);
137
+ parse_str($urlParse, $qStr);
138
139
+ if (isset($qStr['family']) && ! $qStr['family']) {
140
+ $htmlSource = str_replace($linkTag, '', $htmlSource);
141
+ continue;
142
}
143
+ // [END] Remove invalid requests with no font family
144
+
145
+ // If anything is set apart from '[none set]', proceed
146
+ if (Main::instance()->settings['google_fonts_display']) {
147
+ $newLinkHref = $finalLinkHref = self::alterGoogleFontLink($linkHrefOriginal);
148
149
+ if ($newLinkHref !== $linkHrefOriginal) {
150
+ $finalLinkTag = str_replace($linkHrefOriginal, $newLinkHref, $linkTag);
151
152
+ // Finally, alter the HTML source
153
+ $htmlSource = str_replace($linkTag, $finalLinkTag, $htmlSource);
154
}
155
}
156
157
+ if (preg_match('/rel=(["\'])preload(["\'])/i', $finalLinkTag)
158
+ || strpos($finalLinkTag, 'data-wpacu-to-be-preloaded-basic')) {
159
+ $preloadedLinks[] = $finalLinkHref;
160
}
161
+
162
+ $finalCombinableLinks[] = array('href' => $finalLinkHref, 'tag' => $finalLinkTag);
163
}
164
165
+ $preloadedLinks = array_unique($preloadedLinks);
166
167
+ // Remove data for preloaded LINKs
168
+ if (! empty($preloadedLinks)) {
169
+ foreach ($finalCombinableLinks as $fclIndex => $combinableLinkData) {
170
+ if (in_array($combinableLinkData['href'], $preloadedLinks)) {
171
+ unset($finalCombinableLinks[$fclIndex]);
172
+ }
173
+ }
174
+ }
175
+
176
+ // Only proceed with the combine if there's obviously at least 2 combinable URL requests to Google Fonts
177
+ if (count($finalCombinableLinks) > 1 && Main::instance()->settings['google_fonts_combine']) {
178
+ $htmlSource = self::combineGoogleFontLinks($finalCombinableLinks, $htmlSource);
179
+ }
180
+ }
181
+
182
+ $htmlSource = self::alterGoogleFontUrlFromInlineStyleTags($htmlSource);
183
+
184
+ return $htmlSource;
185
+ });
186
}
187
188
/**
268
*/
269
public static function alterGoogleFontUrlFromCssContent($cssContent)
270
{
271
+ if (stripos($cssContent, 'fonts.googleapis.com') === false || ! Main::instance()->settings['google_fonts_display']) {
272
return $cssContent;
273
}
274
classes/OptimiseAssets/FontsLocal.php ADDED
@@ -0,0 +1,46 @@
1
+ <?php
2
+ namespace WpAssetCleanUp\OptimiseAssets;
3
+
4
+ use WpAssetCleanUp\Main;
5
+
6
+ /**
7
+ * Class LocalFonts
8
+ * @package WpAssetCleanUp\OptimiseAssets
9
+ */
10
+ class FontsLocal
11
+ {
12
+ /**
13
+ *
14
+ */
15
+ public function init()
16
+ {
17
+ add_action('wp_head', array($this, 'preloadFontFiles'), 1);
18
+ }
19
+
20
+ /**
21
+ *
22
+ */
23
+ public function preloadFontFiles()
24
+ {
25
+ if ($preloadFontFiles = Main::instance()->settings['local_fonts_preload_files']) {
26
+ $preloadFontFilesArray = array();
27
+
28
+ if (strpos($preloadFontFiles, "\n") !== false) {
29
+ foreach (explode("\n", $preloadFontFiles) as $preloadFontFile) {
30
+ $preloadFontFilesArray[] = trim($preloadFontFile);
31
+ }
32
+ } else {
33
+ $preloadFontFilesArray[] = trim($preloadFontFiles);
34
+ }
35
+
36
+ $preloadFontFilesOutput = '';
37
+
38
+ // Finally, go through the list
39
+ foreach ($preloadFontFilesArray as $preloadFontFile) {
40
+ $preloadFontFilesOutput .= '<link rel="preload" as="font" href="'.esc_attr($preloadFontFile).'" data-wpacu-preload-font="1" crossorigin>'."\n";
41
+ }
42
+
43
+ echo apply_filters('wpacu_preload_local_font_files_output', $preloadFontFilesOutput);
44
+ }
45
+ }
46
+ }
classes/OptimiseAssets/MinifyCss.php CHANGED
@@ -1,10 +1,8 @@
1
<?php
2
namespace WpAssetCleanUp\OptimiseAssets;
3
4
- use WpAssetCleanUp\FileSystem;
5
use WpAssetCleanUp\Main;
6
use WpAssetCleanUp\Menu;
7
- use WpAssetCleanUp\Misc;
8
use WpAssetCleanUp\MetaBoxes;
9
10
/**
@@ -13,317 +11,6 @@ use WpAssetCleanUp\MetaBoxes;
13
*/
14
class MinifyCss
15
{
16
- /**
17
- *
18
- */
19
- public function init()
20
- {
21
- add_action('wp_footer', function() {
22
- // Do not continue if "Minify CSS" is not enabled (in "Settings" or on the fly)
23
- if (! self::isMinifyCssEnabled()) {
24
- return;
25
- }
26
-
27
- global $wp_styles;
28
-
29
- $allStylesHandles = wp_cache_get('wpacu_all_styles_handles');
30
-
31
- if (empty($allStylesHandles)) {
32
- return;
33
- }
34
-
35
- $cssMinifyList = array();
36
-
37
- // [Start] Collect for caching
38
- $wpStylesDone = $wp_styles->done;
39
- $wpStylesRegistered = $wp_styles->registered;
40
-
41
- foreach ($wpStylesDone as $handle) {
42
- if (isset($wpStylesRegistered[$handle])) {
43
- $value = $wpStylesRegistered[$handle];
44
-
45
- $minifyValues = $this->maybeMinifyIt($value);
46
-
47
- if (! empty($minifyValues)) {
48
- $cssMinifyList[] = $minifyValues;
49
- }
50
- }
51
- }
52
-
53
- if (empty($cssMinifyList)) {
54
- return;
55
- }
56
-
57
- wp_cache_add('wpacu_css_minify_list', $cssMinifyList);
58
- // [End] Collect for caching
59
- }, PHP_INT_MAX);
60
- }
61
-
62
- /**
63
- * Next: Alter the HTML source by updating the original link URLs with the just cached ones
64
- *
65
- * @param $htmlSource
66
- *
67
- * @return mixed
68
- */
69
- public static function updateHtmlSourceOriginalToMinCss($htmlSource)
70
- {
71
- $cssMinifyList = wp_cache_get('wpacu_css_minify_list');
72
-
73
- // This will be taken from the transient
74
- if (empty($cssMinifyList)) {
75
- return $htmlSource;
76
- }
77
-
78
- $regExpPattern = '#<link[^>]*(stylesheet|preload)[^>]*(>)#Usmi';
79
-
80
- preg_match_all($regExpPattern, OptimizeCommon::cleanerHtmlSource($htmlSource), $matchesSourcesFromTags, PREG_SET_ORDER);
81
-
82
- if (empty($matchesSourcesFromTags)) {
83
- return $htmlSource;
84
- }
85
-
86
- foreach ($matchesSourcesFromTags as $matches) {
87
- $linkSourceTag = $matches[0];
88
-
89
- if (strip_tags($linkSourceTag) !== '') {
90
- // Hmm? Not a valid tag... Skip it...
91
- continue;
92
- }
93
-
94
- foreach ($cssMinifyList as $listValues) {
95
- // If the minified files are deleted (e.g. /wp-content/cache/ is cleared)
96
- // do not replace the CSS file path to avoid breaking the website
97
- if (! file_exists(rtrim(ABSPATH, '/') . $listValues[1])) {
98
- continue;
99
- }
100
-
101
- $sourceUrl = site_url() . $listValues[0];
102
- $minUrl = site_url() . $listValues[1];
103
-
104
- if ($linkSourceTag !== str_ireplace($sourceUrl, $minUrl, $linkSourceTag)) {
105
- $newLinkSourceTag = self::updateOriginalToMinifiedTag($linkSourceTag, $sourceUrl, $minUrl);
106
- $htmlSource = str_replace($linkSourceTag, $newLinkSourceTag, $htmlSource);
107
- break;
108
- }
109
- }
110
-
111
- }
112
-
113
- return $htmlSource;
114
- }
115
-
116
- /**
117
- * @param $linkSourceTag
118
- * @param $sourceUrl
119
- * @param $minUrl
120
- *
121
- * @return mixed
122
- */
123
- public static function updateOriginalToMinifiedTag($linkSourceTag, $sourceUrl, $minUrl)
124
- {
125
- $newLinkSourceTag = str_replace($sourceUrl, $minUrl, $linkSourceTag);
126
-
127
- // Strip ?ver=
128
- $newLinkSourceTag = str_replace('&#038;ver=', '?ver=', $newLinkSourceTag);
129
- $toStrip = Misc::extractBetween($newLinkSourceTag, '?ver=', ' ');
130
-
131
- if (in_array(substr($toStrip, -1), array('"', "'"))) {
132
- $toStrip = '?ver='. trim(trim($toStrip, '"'), "'");
133
- $newLinkSourceTag = str_replace($toStrip, '', $newLinkSourceTag);
134
- }
135
-
136
- return $newLinkSourceTag;
137
- }
138
-
139
- /**
140
- * @param $value
141
- *
142
- * @return array
143
- */
144
- public function maybeMinifyIt($value)
145
- {
146
- global $wp_version;
147
-
148
- $src = isset($value->src) ? $value->src : false;
149
-
150
- if (! $src || $this->skipMinify($src, $value->handle)) {
151
- return array();
152
- }
153
-
154
- $handleDbStr = md5($value->handle);
155
-
156
- $transientName = 'wpacu_css_minify_'.$handleDbStr;
157
-
158
- $savedValues = get_transient( $transientName );
159
-
160
- if ( $savedValues ) {
161
- $savedValuesArray = json_decode( $savedValues, ARRAY_A );
162
-
163
- if ( $savedValuesArray['ver'] !== $value->ver ) {
164
- // New File Version? Delete transient as it will be re-added to the database with the new version
165
- delete_transient( $transientName );
166
- } else {
167
- $localPathToCssMin = str_replace( '//', '/', ABSPATH . $savedValuesArray['min_uri'] );
168
-
169
- if ( isset( $savedValuesArray['source_uri'] ) && file_exists( $localPathToCssMin ) ) {
170
- return array(
171
- $savedValuesArray['source_uri'],
172
- $savedValuesArray['min_uri'],
173
- );
174
- }
175
- }
176
- }
177
-
178
- if (strpos($src, '/wp-includes/') === 0) {
179
- $src = site_url() . $src;
180
- }
181
-
182
- if ($value->handle === 'sccss_style' && in_array('simple-custom-css/simple-custom-css.php', apply_filters('active_plugins', get_option('active_plugins')))) {
183
- /*
184
- * Special Case: "Simple Custom CSS" Plugin
185
- *
186
- * /?sccss=1
187
- *
188
- * As it is (no minification or optimization), it adds extra load time to the page
189
- * as the CSS is read via PHP and all the WP environment is loading
190
- */
191
- $pathToAssetDir = '';
192
- $sourceBeforeMin = $value->src;
193
-
194
- $cssContent = Misc::getSimpleCustomCss();
195
-
196
- $newLocalSrc = WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir() . 'sccss_style.css';
197
-
198
- // Append CSS content to make it cacheable (exception)
199
- $cssContent = '/*! Simple Custom CSS */' ."\n". $cssContent;
200
-
201
- if (! FileSystem::file_put_contents($newLocalSrc, $cssContent)) {
202
- return array();
203
- }
204
- // strpos($src, '.css?ver=') === false
205
- } elseif (strpos($src, '/?custom-css=') !== false) {
206
- /*
207
- * JetPack Custom CSS
208
- * /?custom-css
209
- */
210
- global $wp_version;
211
-
212
- $pathToAssetDir = '';
213
- $sourceBeforeMin = $value->src;
214
-
215
- if (! OptimizeCommon::isSourceFromSameHost($sourceBeforeMin)) {
216
- return array();
217
- }
218
-
219
- $response = wp_remote_get($sourceBeforeMin);
220
- $responseCode = wp_remote_retrieve_response_code($response);
221
-
222
- if ($responseCode !== 200) {
223
- return array();
224
- }
225
-
226
- $cssContent = wp_remote_retrieve_body($response);
227
-
228
- $listSrcAfterSlash = str_replace('/?', '', strrchr($src, '/?'));
229
-
230
- parse_str($listSrcAfterSlash, $outputSrcParse);
231
-
232
- $customCssVersion = isset($outputSrcParse['custom-css']) ? $outputSrcParse['custom-css'] : $wp_version;
233
- $extraVersion = isset($value->ver) ? '_'.$value->ver : '';
234
-
235
- $newLocalSrc = WP_CONTENT_DIR . OptimizeCss::getRelPathCssCacheDir() . 'custom_css_' . $customCssVersion . $extraVersion . '.css';
236
-
237
- // Append CSS content to make it cacheable (exception)
238
- $cssContent = '/*! JetPack Custom CSS */' ."\n". $cssContent;
239
-
240
- if (! FileSystem::file_put_contents($newLocalSrc, $cssContent)) {
241
- return array();
242
- }
243
- } else {
244
- /*
245
- * All the CSS that exists as a .css file within the plugins/theme
246
- */
247
- $localAssetPath = OptimizeCommon::getLocalAssetPath($src, 'css');
248
-
249
- if (! file_exists($localAssetPath)) {
250
- return array();
251
- }
252
-
253
- $assetHref = $src;
254
-
255
- $posLastSlash = strrpos($assetHref, '/');
256
- $pathToAssetDir = substr($assetHref, 0, $posLastSlash);
257
-
258
- $parseUrl = parse_url($pathToAssetDir);
259
-
260
- if (isset($parseUrl['scheme']) && $parseUrl['scheme'] !== '') {
261
- $pathToAssetDir = str_replace(
262
- array('http://' . $parseUrl['host'], 'https://' . $parseUrl['host']),
263
- '',
264
- $pathToAssetDir
265
- );
266
- } elseif (strpos($pathToAssetDir, '//') === 0) {
267
- $pathToAssetDir = str_replace(
268
- array('//' . $parseUrl['host'], '//' . $parseUrl['host']),
269
- '',
270
- $pathToAssetDir
271
- );
272
- }
273
-
274
- $cssContent = FileSystem::file_get_contents($localAssetPath);
275
-
276
- $sourceBeforeMin = str_replace(ABSPATH, '/', $localAssetPath);
277
- }
278
-
279
- $cssContent = OptimizeCss::maybeFixCssBackgroundUrls($cssContent, $pathToAssetDir . '/'); // Minify it and save it to /wp-content/cache/css/min/
280
-
281
- // Any "font-display" enabled in "Settings" - "Google Fonts"?
282
- $cssContent = GoogleFonts::alterGoogleFontUrlFromCssContent($cssContent);
283
-
284
- $cssContent = self::applyMinification($cssContent);
285
-
286
- // Relative path to the new file
287
- $ver = (isset($value->ver) && $value->ver) ? $value->ver : $wp_version;
288
-
289
- $newFilePathUri = OptimizeCss::getRelPathCssCacheDir() . 'min/' . $value->handle . '-v' . $ver;
290
-
291
- $sha1File = @sha1_file($localAssetPath);
292
-
293
- if ($sha1File) {
294
- $newFilePathUri .= '-'.$sha1File;
295
- }
296
-
297
- $newFilePathUri .= '.css';
298
-
299
- $newLocalPath = WP_CONTENT_DIR . $newFilePathUri; // Ful Local path
300
- $newLocalPathUrl = WP_CONTENT_URL . $newFilePathUri; // Full URL path
301
-
302
- if ($cssContent) {
303
- $cssContent = '/*** Source (before minification): ' . $sourceBeforeMin . ' ***/' . "\n" . $cssContent;
304
- }
305
-
306
- $saveFile = FileSystem::file_put_contents($newLocalPath, $cssContent);
307
-
308
- if (! $saveFile && ! $cssContent) {
309
- return array();
310
- }
311
-
312
- $saveValues = array(
313
- 'source_uri' => OptimizeCommon::getHrefRelPath($src),
314
- 'min_uri' => OptimizeCommon::getHrefRelPath($newLocalPathUrl),
315
- 'ver' => $ver
316
- );
317
-
318
- // Add / Re-add (with new version) transient
319
- set_transient($transientName, json_encode($saveValues));
320
-
321
- return array(
322
- OptimizeCommon::getHrefRelPath($src),
323
- OptimizeCommon::getHrefRelPath($newLocalPathUrl),
324
- );
325
- }
326
-
327
/**
328
* @param $cssContent
329
*
@@ -372,7 +59,7 @@ class MinifyCss
372
*
373
* @return bool
374
*/
375
- public function skipMinify($src, $handle = '')
376
{
377
// Things like WP Fastest Cache Toolbar CSS shouldn't be minified and take up space on the server
378
if ($handle !== '' && in_array($handle, Main::instance()->skipAssets['styles'])) {
@@ -456,7 +143,7 @@ class MinifyCss
456
}
457
}
458
459
- if (Misc::isOptimizeCssEnabledByOtherParty('if_enabled')) {
460
return false;
461
}
462
1
<?php
2
namespace WpAssetCleanUp\OptimiseAssets;
3
4
use WpAssetCleanUp\Main;
5
use WpAssetCleanUp\Menu;
6
use WpAssetCleanUp\MetaBoxes;
7
8
/**
11
*/
12
class MinifyCss
13
{
</