Asset CleanUp: Page Speed Booster - Version 1.2.9.5

Version Description

  • Changed the way the combined loaded CSS files caching is stored (/wp-content/cache/asset-cleanup/); Transients are not used anymore to avoid having too many records in the options table
  • Clear cache now keeps the old merge CSS files in the "cache/asset-cleanup" folder in case a cached page still makes reference to any of the files
Download this release

Release Info

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

Code changes from version 1.2.9.4 to 1.2.9.5

Files changed (187) hide show
  1. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-deactivate.jpg +0 -0
  2. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-delete.jpg +0 -0
  3. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-2-choose-file.jpg +0 -0
  4. assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-3-activate-plugin.jpg +0 -0
  5. assets/style.min.css +1 -1
  6. classes/AdminBar.php +3 -18
  7. classes/Main.php +13 -81
  8. classes/Misc.php +22 -15
  9. classes/OptimiseAssets/CombineCommon.php +412 -0
  10. classes/{OptimizeCss.php → OptimiseAssets/CombineCss.php} +56 -330
  11. classes/OwnAssets.php +4 -27
  12. classes/Plugin.php +1 -1
  13. classes/Settings.php +8 -16
  14. classes/Sorting.php +4 -26
  15. classes/Tools.php +3 -2
  16. classes/Update.php +7 -15
  17. freemius/assets/css/admin/account.css +0 -0
  18. freemius/assets/css/admin/add-ons.css +0 -0
  19. freemius/assets/css/admin/affiliation.css +0 -0
  20. freemius/assets/css/admin/checkout.css +0 -0
  21. freemius/assets/css/admin/common.css +0 -0
  22. freemius/assets/css/admin/connect.css +0 -0
  23. freemius/assets/css/admin/debug.css +0 -0
  24. freemius/assets/css/admin/dialog-boxes.css +0 -0
  25. freemius/assets/css/admin/gdpr-optin-notice.css +0 -0
  26. freemius/assets/css/admin/index.php +0 -0
  27. freemius/assets/css/customizer.css +0 -0
  28. freemius/assets/css/index.php +0 -0
  29. freemius/assets/img/index.php +0 -0
  30. freemius/assets/img/plugin-icon.png +0 -0
  31. freemius/assets/img/theme-icon.png +0 -0
  32. freemius/assets/index.php +0 -0
  33. freemius/assets/js/index.php +0 -0
  34. freemius/assets/js/nojquery.ba-postmessage.js +0 -0
  35. freemius/assets/js/nojquery.ba-postmessage.min.js +0 -0
  36. freemius/assets/js/postmessage.js +0 -0
  37. freemius/config.php +0 -0
  38. freemius/includes/class-freemius-abstract.php +0 -0
  39. freemius/includes/class-freemius.php +0 -0
  40. freemius/includes/class-fs-admin-notices.php +0 -0
  41. freemius/includes/class-fs-api.php +0 -0
  42. freemius/includes/class-fs-logger.php +0 -0
  43. freemius/includes/class-fs-options.php +0 -0
  44. freemius/includes/class-fs-plugin-updater.php +0 -0
  45. freemius/includes/class-fs-security.php +0 -0
  46. freemius/includes/class-fs-storage.php +0 -0
  47. freemius/includes/class-fs-user-lock.php +0 -0
  48. freemius/includes/customizer/class-fs-customizer-support-section.php +0 -0
  49. freemius/includes/customizer/class-fs-customizer-upsell-control.php +0 -0
  50. freemius/includes/customizer/index.php +0 -0
  51. freemius/includes/debug/class-fs-debug-bar-panel.php +0 -0
  52. freemius/includes/debug/debug-bar-start.php +0 -0
  53. freemius/includes/debug/index.php +0 -0
  54. freemius/includes/entities/class-fs-affiliate-terms.php +0 -0
  55. freemius/includes/entities/class-fs-affiliate.php +0 -0
  56. freemius/includes/entities/class-fs-billing.php +0 -0
  57. freemius/includes/entities/class-fs-entity.php +0 -0
  58. freemius/includes/entities/class-fs-payment.php +0 -0
  59. freemius/includes/entities/class-fs-plugin-info.php +0 -0
  60. freemius/includes/entities/class-fs-plugin-license.php +0 -0
  61. freemius/includes/entities/class-fs-plugin-plan.php +0 -0
  62. freemius/includes/entities/class-fs-plugin-tag.php +0 -0
  63. freemius/includes/entities/class-fs-plugin.php +0 -0
  64. freemius/includes/entities/class-fs-pricing.php +0 -0
  65. freemius/includes/entities/class-fs-scope-entity.php +0 -0
  66. freemius/includes/entities/class-fs-site.php +0 -0
  67. freemius/includes/entities/class-fs-subscription.php +0 -0
  68. freemius/includes/entities/class-fs-user.php +0 -0
  69. freemius/includes/entities/index.php +0 -0
  70. freemius/includes/fs-core-functions.php +0 -0
  71. freemius/includes/fs-essential-functions.php +0 -0
  72. freemius/includes/fs-plugin-info-dialog.php +0 -0
  73. freemius/includes/i18n.php +0 -0
  74. freemius/includes/index.php +0 -0
  75. freemius/includes/l10n.php +0 -0
  76. freemius/includes/managers/class-fs-admin-menu-manager.php +0 -0
  77. freemius/includes/managers/class-fs-admin-notice-manager.php +0 -0
  78. freemius/includes/managers/class-fs-cache-manager.php +0 -0
  79. freemius/includes/managers/class-fs-gdpr-manager.php +0 -0
  80. freemius/includes/managers/class-fs-key-value-storage.php +0 -0
  81. freemius/includes/managers/class-fs-license-manager.php +0 -0
  82. freemius/includes/managers/class-fs-option-manager.php +0 -0
  83. freemius/includes/managers/class-fs-plan-manager.php +0 -0
  84. freemius/includes/managers/class-fs-plugin-manager.php +0 -0
  85. freemius/includes/managers/index.php +0 -0
  86. freemius/includes/sdk/Exceptions/ArgumentNotExistException.php +0 -0
  87. freemius/includes/sdk/Exceptions/EmptyArgumentException.php +0 -0
  88. freemius/includes/sdk/Exceptions/Exception.php +0 -0
  89. freemius/includes/sdk/Exceptions/InvalidArgumentException.php +0 -0
  90. freemius/includes/sdk/Exceptions/OAuthException.php +0 -0
  91. freemius/includes/sdk/Exceptions/index.php +0 -0
  92. freemius/includes/sdk/FreemiusBase.php +0 -0
  93. freemius/includes/sdk/FreemiusWordPress.php +0 -0
  94. freemius/includes/sdk/LICENSE.txt +0 -0
  95. freemius/includes/sdk/index.php +0 -0
  96. freemius/includes/supplements/fs-essential-functions-1.1.7.1.php +0 -0
  97. freemius/includes/supplements/fs-essential-functions-2.2.1.php +0 -0
  98. freemius/includes/supplements/index.php +0 -0
  99. freemius/index.php +0 -0
  100. freemius/languages/freemius-da_DK.mo +0 -0
  101. freemius/languages/freemius-da_DK.po +0 -0
  102. freemius/languages/freemius-en.mo +0 -0
  103. freemius/languages/freemius-en.po +0 -0
  104. freemius/languages/freemius-es_ES.mo +0 -0
  105. freemius/languages/freemius-es_ES.po +0 -0
  106. freemius/languages/freemius-fr_FR.mo +0 -0
  107. freemius/languages/freemius-fr_FR.po +0 -0
  108. freemius/languages/freemius-he_IL.mo +0 -0
  109. freemius/languages/freemius-he_IL.po +0 -0
  110. freemius/languages/freemius-it_IT.mo +0 -0
  111. freemius/languages/freemius-it_IT.po +0 -0
  112. freemius/languages/freemius-ja_JP.mo +0 -0
  113. freemius/languages/freemius-ja_JP.po +0 -0
  114. freemius/languages/freemius-nl_NL.mo +0 -0
  115. freemius/languages/freemius-nl_NL.po +0 -0
  116. freemius/languages/freemius-ru_RU.mo +0 -0
  117. freemius/languages/freemius-ru_RU.po +0 -0
  118. freemius/languages/freemius.pot +0 -0
  119. freemius/languages/index.php +0 -0
  120. freemius/require.php +0 -0
  121. freemius/start.php +0 -0
  122. freemius/templates/account.php +0 -0
  123. freemius/templates/account/billing.php +0 -0
  124. freemius/templates/account/index.php +0 -0
  125. freemius/templates/account/partials/activate-license-button.php +0 -0
  126. freemius/templates/account/partials/addon.php +0 -0
  127. freemius/templates/account/partials/deactivate-license-button.php +0 -0
  128. freemius/templates/account/partials/index.php +0 -0
  129. freemius/templates/account/partials/site.php +0 -0
  130. freemius/templates/account/payments.php +0 -0
  131. freemius/templates/add-ons.php +0 -0
  132. freemius/templates/add-trial-to-pricing.php +0 -0
  133. freemius/templates/admin-notice.php +0 -0
  134. freemius/templates/ajax-loader.php +0 -0
  135. freemius/templates/auto-installation.php +0 -0
  136. freemius/templates/checkout.php +0 -0
  137. freemius/templates/connect.php +0 -0
  138. freemius/templates/contact.php +0 -0
  139. freemius/templates/debug.php +0 -0
  140. freemius/templates/debug/api-calls.php +0 -0
  141. freemius/templates/debug/index.php +0 -0
  142. freemius/templates/debug/logger.php +0 -0
  143. freemius/templates/debug/plugins-themes-sync.php +0 -0
  144. freemius/templates/debug/scheduled-crons.php +0 -0
  145. freemius/templates/email.php +0 -0
  146. freemius/templates/firewall-issues-js.php +0 -0
  147. freemius/templates/forms/affiliation.php +0 -0
  148. freemius/templates/forms/deactivation/contact.php +0 -0
  149. freemius/templates/forms/deactivation/form.php +0 -0
  150. freemius/templates/forms/deactivation/index.php +0 -0
  151. freemius/templates/forms/deactivation/retry-skip.php +0 -0
  152. freemius/templates/forms/index.php +0 -0
  153. freemius/templates/forms/license-activation.php +0 -0
  154. freemius/templates/forms/optout.php +0 -0
  155. freemius/templates/forms/premium-versions-upgrade-handler.php +0 -0
  156. freemius/templates/forms/premium-versions-upgrade-metadata.php +0 -0
  157. freemius/templates/forms/resend-key.php +0 -0
  158. freemius/templates/forms/subscription-cancellation.php +0 -0
  159. freemius/templates/forms/trial-start.php +0 -0
  160. freemius/templates/gdpr-optin-js.php +0 -0
  161. freemius/templates/index.php +0 -0
  162. freemius/templates/js/index.php +0 -0
  163. freemius/templates/js/jquery.content-change.php +0 -0
  164. freemius/templates/js/open-license-activation.php +0 -0
  165. freemius/templates/js/style-premium-theme.php +0 -0
  166. freemius/templates/partials/network-activation.php +0 -0
  167. freemius/templates/plugin-icon.php +0 -0
  168. freemius/templates/plugin-info/description.php +0 -0
  169. freemius/templates/plugin-info/features.php +0 -0
  170. freemius/templates/plugin-info/index.php +0 -0
  171. freemius/templates/plugin-info/screenshots.php +0 -0
  172. freemius/templates/powered-by.php +0 -0
  173. freemius/templates/pricing.php +0 -0
  174. freemius/templates/secure-https-header.php +0 -0
  175. freemius/templates/sticky-admin-notice-js.php +0 -0
  176. freemius/templates/tabs-capture-js.php +0 -0
  177. freemius/templates/tabs.php +0 -0
  178. readme.txt +6 -2
  179. templates/admin-page-getting-started.php +16 -9
  180. templates/admin-page-settings-plugin.php +30 -4
  181. templates/meta-box-loaded-assets/_asset-script-single-row.php +36 -31
  182. templates/meta-box-loaded-assets/_asset-style-single-row.php +29 -28
  183. templates/meta-box-loaded-assets/view-by-location.php +1 -1
  184. templates/meta-box-loaded-assets/view-default.php +1 -1
  185. templates/settings-frontend.php +1 -5
  186. wpacu-load.php +9 -3
  187. wpacu.php +2 -2
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-deactivate.jpg CHANGED
File without changes
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-1-delete.jpg CHANGED
File without changes
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-2-choose-file.jpg CHANGED
File without changes
assets/images/wpacu-upgrade-steps/wpacu-upgrade-step-3-activate-plugin.jpg CHANGED
File without changes
assets/style.min.css CHANGED
@@ -1 +1 @@
1
- .wpacu_update_btn,label.wpacu_add_global{cursor:pointer!important}#wpacu-pages-info-area{width:98%}#wpacu-logo-area{margin:15px 0;padding:0 10px}#wpacu-logo-area img{max-width:340px;width:100%}.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.license-status{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.license-status.inactive{color:#c00}.wpacu-tabs nav ul li span.license-status.active{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:#0085ba;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 10px;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{color:#0085ba}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #0085ba;color:#0085ba}.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]{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_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}.dashicons-wpacu{width:17px;height:17px;margin:2px 0 0;font-size:16px;text-decoration:none}.wpacu_widefat .check-column.wpacu_check{padding:10px}body[class*=wpassetcleanup] #footer-left{border-left:2px solid green;padding-left:10px}#wpacu_meta_box_content{width:99%}#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 .dashicons.dashicons-warning{color:#c00}#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_wrap_assets img,#wpacu_wrap_assets small,.wpacu_asset_row td label{display:inline-block!important}#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_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{margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{margin-right:4px!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 td{padding:10px!important;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row td:first-child{border-top:1px solid #cdcdcd}.wpacu_asset_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 td label{margin:0!important;cursor:pointer!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_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_global_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}label.wpacu_bulk_unload_active{color:#d54e21}tr.wpacu_global_rule_row.selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 20px 0 0;list-style:none;display:inline-block}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_widefat{width:99%}.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;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: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: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=submit].btn-block,.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=button].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}.go-pro-link-no-style .wpacu-tooltip:after,.wordpress-core-file .wpacu-tooltip:after{content:"";border-width:10px;border-style:solid;top:100%}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{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 .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:130px;background-color:#27ae60;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:.2s all ease;transition:.2s all ease;-webkit-transition-delay:0s;transition-delay:0s}.go-pro-link-no-style .wpacu-tooltip:after{position:absolute;left:50%;left:calc(50% - 10px);border-color:#27ae60 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.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:.5s all ease;transition:.5s all ease;-webkit-transition-delay:0s;transition-delay:0s}.wordpress-core-file .wpacu-tooltip:after{position:absolute;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 #0085ba}.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;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-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons{color:green}#wpacu-dom-get-type-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child{margin-right:0}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.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{border-radius:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:2px;line-height:1.2}.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-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}.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;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:.2s;transition:.2s}.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:.2s;transition:.2s}.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{border-radius:29px}.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}.wpacu_asset_row td{width:100%}.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{content:'';display:table}.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}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all,.wpacu-assets-collapsible-wrap.wpacu-wrap-styles{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-scripts{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-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-plugins .wpacu-assets-collapsible-content .wpacu-location-child-area strong{padding:17px 10px 15px 46px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-bottom:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:14px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area strong{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;padding:10px}.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-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 #e7e7e7}.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{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{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;height:14px;width: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_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}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-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}
1
+ #wpacu_meta_box_content .dashicons.dashicons-warning,.wpacu-tabs nav ul li span.license-status.inactive{color:#c00}#wpacu-pages-info-area{width:98%}#wpacu-logo-area{margin:15px 0;padding:0 10px}#wpacu-logo-area img{width:352px;height:79px}.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.license-status{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.license-status.active{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:#0085ba;border-bottom:none}.wpacu-tabs-style-topline nav a{padding:20px 10px;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{color:#0085ba}.wpacu-tabs-style-topline nav li.wpacu-tab-current a{background:0 0;box-shadow:inset 0 3px 0 #0085ba;color:#0085ba}.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]{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_not_load td,tr.wpacu_not_load th{background:#FFE1E1!important}.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}#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_wrap_assets img,#wpacu_wrap_assets small,.wpacu_asset_row td label{display:inline-block!important}#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_wrap_assets,.wpacu_striped>tbody>:nth-child(even),ul.wpacu_striped>:nth-child(even){background-color:#fff!important}.wpacu-updated-frontend span.dashicons-yes{color:#46b450;font-size:26px}#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}#wpacu_wrap_assets div.wpacu_warning{border:1px solid #c00;padding:5px 10px}#wpacu_wrap_assets small{margin:0!important;letter-spacing:normal!important}#wpacu_wrap_assets input[type=checkbox]{margin-right:4px!important}#wpacu_wrap_assets p{line-height:22px!important;margin:10px 0!important;text-align:left!important;font-weight:400!important}.wpacu-assets-inline-code-collapsible-content>div>p,.wpacu_update_btn{line-height:normal!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 td{padding:18px!important;position:relative;border-left:1px solid #cdcdcd;border-right:1px solid #cdcdcd;border-bottom:1px solid #cdcdcd}.wpacu_asset_row td.selected,.wpacu_asset_row td:hover{border:1px solid #cdcdcd;-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 td:first-child{border-top:1px solid #cdcdcd}.wpacu_asset_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 td label{margin:0!important;cursor:pointer!important;font-size:100%!important;font-weight:400!important}.wpacu_asset_row td label span:not(.dashicons){font-size:100%!important}.wpacu_asset_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_global_checked{font-weight:700;color:#d54e21}label.wpacu_global_unload_exception{font-weight:700!important}label.wpacu_bulk_unload_active{color:#d54e21}tr.wpacu_global_rule_row.selected{background:#e7e7e7}.nav-tab-wrapper{border-bottom:1px solid #ccc;width:95%}ul.wpacu_asset_options{margin:0 10px 0 0;padding:0}ul.wpacu_asset_options li{margin:0 20px 0 0;list-style:none;display:inline-block}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(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}.wpacu-btns .btn:focus,.wpacu-btns .btn:hover,.wpacu-btns a{text-decoration:none}.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: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%}.wpacu-btns .btn-block+.btn-block{margin-top:.5rem}.wpacu-btns input[type=submit].btn-block,.wpacu-btns input[type=reset].btn-block,.wpacu-btns input[type=button].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;text-decoration:none;display:inline-block;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}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{font-weight:400;font-size:12px;line-height:16px;padding:8px 11px}.go-pro-link-no-style{position:relative;display:inline-block;color:inherit;text-decoration:none}.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 .wpacu-tooltip{font-size:14px;line-height:18px;position:absolute;z-index:1;visibility:hidden;width:130px;background-color:#27ae60;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:.2s all ease;transition:.2s 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:#27ae60 transparent transparent}.go-pro-link-no-style .wpacu-tooltip.wpacu-larger{width:240px}.go-pro-link-no-style:hover .wpacu-tooltip{visibility:visible}.wordpress-core-file{position:relative;display:inline-block;font-style:normal;color:inherit;text-decoration:none}.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:.5s all ease;transition:.5s 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 #0085ba}.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;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-license-area .notice .dashicons,.wpacu-settings-area .notice .dashicons{color:green}#wpacu-dom-get-type-selections{float:none;clear:both;width:auto;display:inline-block;margin-bottom:0;margin-top:0}#wpacu-dom-get-type-selections li{margin-right:30px;float:left;margin-bottom:0}#wpacu-dom-get-type-selections li:first-child{margin-right:15px}#wpacu-dom-get-type-selections li:last-child{margin-right:0}#wpacu-dom-get-type-infos{margin-bottom:0}#wpacu-dom-get-type-infos li{margin-bottom:0;line-height:20px}.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{border-radius:29px}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch .wpacu_slider.wpacu_round:before{border-radius:50%}.wpacu-wrap.wpacu-switch-enhanced .wpacu_switch.wpacu_locked_for_pro{opacity:.3}.asset-cleanup-pro_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle,.asset-cleanup_page_wpassetcleanup_settings .setting_title p.wpacu_subtitle{margin-top:2px;line-height:1.2}.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-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}.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;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:.2s;transition:.2s}.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:.2s;transition:.2s}.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{border-radius:29px}.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}.wpacu_asset_row td{width:100%}.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{content:'';display:table}.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}.wpacu-assets-collapsible-wrap{border:1px solid #cdcdcd}.wpacu-assets-collapsible-wrap.wpacu-by-location{margin-bottom:15px}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content>table:last-child,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content>table:last-child{margin-bottom:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-all,.wpacu-assets-collapsible-wrap.wpacu-wrap-styles{margin-top:20px}.wpacu-assets-collapsible-wrap.wpacu-wrap-scripts{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-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-themes .wpacu-assets-collapsible-content .wpacu-location-child-area strong{position:relative;padding:9px 10px 10px 15px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-plugins .wpacu-assets-collapsible-content .wpacu-location-child-area strong:after,.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area strong: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-location-child-area strong{position:relative;padding:17px 10px 16px 46px;z-index:1}.wpacu-assets-collapsible-wrap.wpacu-by-location.wpacu-themes .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-bottom:10px}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area{margin-top:22px;margin-bottom:14px;font-size:110%;line-height:initial}.wpacu-assets-collapsible-wrap.wpacu-by-location .wpacu-assets-collapsible-content .wpacu-location-child-area strong{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;padding:10px}.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-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{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;height:14px;width: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:first-child{margin-top:0}.wpacu-assets-inline-code-collapsible-content.wpacu-open{max-height:100%}.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}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-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}
classes/AdminBar.php CHANGED
@@ -54,10 +54,10 @@ class AdminBar
54
if (Main::instance()->settings['combine_loaded_css']) {
55
$wp_admin_bar->add_menu( array(
56
'parent' => 'assetcleanup-parent',
57
- 'id' => 'assetcleanup-clear-all-css-cache',
58
- 'title' => 'Clear Combined CSS Cache',
59
'href' => wp_nonce_url( admin_url( 'admin-post.php?action=assetcleanup_clear_assets_cache' . $goBackToCurrentUrl ),
60
- 'purge_css_cache' )
61
) );
62
}
63
@@ -113,20 +113,5 @@ class AdminBar
113
'meta' => array('target' => '_blank')
114
));
115
116
- /*
117
- if (Main::instance()->settings['test_mode']) {
118
- $wp_admin_bar->add_menu(array(
119
- 'parent' => 'assetcleanup-parent',
120
- 'id' => 'assetcleanup-test-mode-info',
121
- 'title' => 'With "Test Mode" on, anything will be applied only for your view.',
122
- ));
123
-
124
- $wp_admin_bar->add_menu(array(
125
- 'parent' => 'assetcleanup-parent',
126
- 'id' => 'assetcleanup-test-mode-info-2',
127
- 'title' => 'The visitors will see the pages as if the plugin is disabled. <a target="_blank" style="display:inline-block; text-decoration: underline; padding-left: 5px;" href="https://assetcleanup.com/docs/">More</a>',
128
- ));
129
}
130
- */
131
- }
132
}
54
if (Main::instance()->settings['combine_loaded_css']) {
55
$wp_admin_bar->add_menu( array(
56
'parent' => 'assetcleanup-parent',
57
+ 'id' => 'assetcleanup-clear-combined-files-cache',
58
+ 'title' => 'Clear Combined Files Cache',
59
'href' => wp_nonce_url( admin_url( 'admin-post.php?action=assetcleanup_clear_assets_cache' . $goBackToCurrentUrl ),
60
+ 'assetcleanup_clear_assets_cache' )
61
) );
62
}
63
113
'meta' => array('target' => '_blank')
114
));
115
116
}
117
}
classes/Main.php CHANGED
@@ -290,10 +290,9 @@ class Main
290
$type = 'post';
291
$post = $getCurrentPost;
292
$this->postTypesUnloaded = $this->getBulkUnload('post_type', $post->post_type);
293
- } elseif ($this->wpacuProEnabled()) {
294
- $type = 'for_pro';
295
- // $this->currentPostId should be 0 in this case
296
- } else {
297
// The request is done for a page such as is_archive(), is_author(), 404, search
298
// and the premium extension is not available, thus no load exceptions are available
299
return;
@@ -349,8 +348,7 @@ class Main
349
$data = array();
350
351
$data['get_assets'] = $getAssets;
352
-
353
- $data['fetch_url'] = Misc::getPageUrl($postId);
354
355
$this->parseTemplate('meta-box', $data, true);
356
}
@@ -629,16 +627,9 @@ class Main
629
$exceptionsListJson = get_option(
630
WPACU_PLUGIN_ID . '_front_page_load_exceptions'
631
);
632
- } elseif ($type === 'for_pro' && Main::wpacuProEnabled()) {
633
- // [wpacu_pro]
634
- if (class_exists( '\\WpAssetCleanUpPro\\LoadExceptions' )) {
635
- $ExceptionsPro = new \WpAssetCleanUpPro\LoadExceptions();
636
- $exceptionsListJson = $ExceptionsPro->getLoadExceptions();
637
- }
638
- // [/wpacu_pro]
639
}
640
641
- if ($exceptionsListJson) {
642
$exceptionsList = json_decode($exceptionsListJson, true);
643
644
if (json_last_error() !== JSON_ERROR_NONE) {
@@ -646,15 +637,7 @@ class Main
646
}
647
}
648
649
- /*
650
- if (! empty($_POST)) {
651
- echo '<pre>';
652
- print_r( $exceptionsList );
653
- exit;
654
- }
655
- */
656
-
657
- return $exceptionsList;
658
}
659
660
/**
@@ -790,10 +773,6 @@ class Main
790
}
791
}
792
793
- // [wpacu_pro]
794
- $currentUnloadedAll = apply_filters('wpacu_pro_filter_all_bulk_unloads', $currentUnloadedAll);
795
- // [/wpacu_pro]
796
-
797
$manageStyles = $wp_styles->done;
798
$manageScripts = $wp_scripts->done;
799
@@ -992,14 +971,8 @@ class Main
992
$type = 'front_page';
993
} elseif ($this->getCurrentPostId() > 0) {
994
$type = 'post';
995
- } else {
996
- // [wpacu_pro]
997
- // $this->getCurrentPostId() would be 0
998
- $type = 'for_pro';
999
- // [/wpacu_pro]
1000
}
1001
-
1002
- $data['load_exceptions'] = $this->getLoadExceptions($type, $this->getCurrentPostId());
1003
// [wpacu_lite]
1004
} else {
1005
$data['is_updateable'] = false;
@@ -1030,13 +1003,7 @@ class Main
1030
$data = $this->setPageTemplate($data);
1031
}
1032
1033
- // [wpacu_pro]
1034
- // If the premium extension is enabled, it will also pull the other bulk unloads
1035
- // such as 'taxonomy', 'author' etc.
1036
- $data = apply_filters('wpacu_pro_get_bulk_unloads', $data);
1037
- // [/wpacu_pro]
1038
-
1039
- $data['total_styles'] = ! empty($data['all']['styles']) ? count($data['all']['styles']) : 0;
1040
$data['total_scripts'] = ! empty($data['all']['scripts']) ? count($data['all']['scripts']) : 0;
1041
1042
$this->parseTemplate('settings-frontend', $data, true);
@@ -1185,22 +1152,10 @@ class Main
1185
}
1186
}
1187
1188
- // [wpacu_pro]
1189
- // If the pro version is used, it will also pull the other bulk unloads such as 'taxonomy', 'author' etc.
1190
- $data = apply_filters('wpacu_pro_get_bulk_unloads', $data);
1191
- // [/wpacu_pro]
1192
-
1193
- // For debug purposes
1194
- //unset($data['contents']); echo '<pre>'; print_r($data); exit;
1195
-
1196
- //echo '<pre>'; print_r($data['bulk_unloaded']['post_type']);
1197
- if ($postId > 0) {
1198
$type = 'post';
1199
- } elseif (Misc::getVar('post', 'tag_id')) {
1200
- // [wpacu_pro]
1201
- $type = 'for_pro';
1202
- // [/wpacu_pro]
1203
- } elseif($postId == 0) {
1204
$type = 'front_page';
1205
}
1206
@@ -1412,12 +1367,6 @@ class Main
1412
$this->assetsRemoved = get_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_no_load', true);
1413
}
1414
1415
- // [wpacu_pro]
1416
- // Premium Extension: Filter assets for pages such as category, tag, author, dates etc.
1417
- // Retrieves "per page" list of unloaded CSS and JavaScript
1418
- $this->assetsRemoved = apply_filters('wpacu_pro_get_assets_unloaded', $this->assetsRemoved);
1419
- // [/wpacu_pro]
1420
-
1421
@json_decode($this->assetsRemoved);
1422
1423
if (! (json_last_error() === JSON_ERROR_NONE) || empty($this->assetsRemoved)) {
@@ -1488,16 +1437,9 @@ class Main
1488
// Undetectable? The page is not a singular one nor the home page
1489
// It's likely an archive, category page (WooCommerce), 404 page etc.
1490
if (! $this->currentPostId && ! Misc::isHomePage()) {
1491
- // Check if "Asset CleanUp Pro" is enabled
1492
- // Archives, tags, categories (taxonomy) pages are available in the premium extension: Asset CleanUp Pro
1493
- if ($this->wpacuProEnabled()) {
1494
- // Could be archive of: Category, Tag, Author, Date, Custom Post Type or Custom Taxonomy based pages.
1495
- // Or: Search, 404 page etc.
1496
- $this->isUpdateable = true;
1497
- } else {
1498
- $this->isUpdateable = false;
1499
}
1500
- }
1501
1502
// [/wpacu_lite]
1503
@@ -1683,16 +1625,6 @@ class Main
1683
return false;
1684
}
1685
1686
- // [wpacu_pro]
1687
- /**
1688
- * @return bool
1689
- */
1690
- public function wpacuProEnabled()
1691
- {
1692
- return defined('WPACU_PRO_PLUGIN_FILE');
1693
- }
1694
- // [/wpacu_pro]
1695
-
1696
// [wpacu_lite]
1697
/**
1698
*
290
$type = 'post';
291
$post = $getCurrentPost;
292
$this->postTypesUnloaded = $this->getBulkUnload('post_type', $post->post_type);
293
+ }
294
+
295
+ else {
296
// The request is done for a page such as is_archive(), is_author(), 404, search
297
// and the premium extension is not available, thus no load exceptions are available
298
return;
348
$data = array();
349
350
$data['get_assets'] = $getAssets;
351
+ $data['fetch_url'] = Misc::getPageUrl($postId);
352
353
$this->parseTemplate('meta-box', $data, true);
354
}
627
$exceptionsListJson = get_option(
628
WPACU_PLUGIN_ID . '_front_page_load_exceptions'
629
);
630
}
631
632
+ if ($exceptionsListJson) {
633
$exceptionsList = json_decode($exceptionsListJson, true);
634
635
if (json_last_error() !== JSON_ERROR_NONE) {
637
}
638
}
639
640
+ return $exceptionsList;
641
}
642
643
/**
773
}
774
}
775
776
$manageStyles = $wp_styles->done;
777
$manageScripts = $wp_scripts->done;
778
971
$type = 'front_page';
972
} elseif ($this->getCurrentPostId() > 0) {
973
$type = 'post';
974
}
975
+ $data['load_exceptions'] = $this->getLoadExceptions($type, $this->getCurrentPostId());
976
// [wpacu_lite]
977
} else {
978
$data['is_updateable'] = false;
1003
$data = $this->setPageTemplate($data);
1004
}
1005
1006
+ $data['total_styles'] = ! empty($data['all']['styles']) ? count($data['all']['styles']) : 0;
1007
$data['total_scripts'] = ! empty($data['all']['scripts']) ? count($data['all']['scripts']) : 0;
1008
1009
$this->parseTemplate('settings-frontend', $data, true);
1152
}
1153
}
1154
1155
+ if ($postId > 0) {
1156
$type = 'post';
1157
+ }
1158
+ elseif($postId == 0) {
1159
$type = 'front_page';
1160
}
1161
1367
$this->assetsRemoved = get_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_no_load', true);
1368
}
1369
1370
@json_decode($this->assetsRemoved);
1371
1372
if (! (json_last_error() === JSON_ERROR_NONE) || empty($this->assetsRemoved)) {
1437
// Undetectable? The page is not a singular one nor the home page
1438
// It's likely an archive, category page (WooCommerce), 404 page etc.
1439
if (! $this->currentPostId && ! Misc::isHomePage()) {
1440
+ $this->isUpdateable = false;
1441
+
1442
}
1443
1444
// [/wpacu_lite]
1445
1625
return false;
1626
}
1627
1628
// [wpacu_lite]
1629
/**
1630
*
classes/Misc.php CHANGED
@@ -85,6 +85,27 @@ class Misc
85
return trim($strThree); // remove whitespaces;
86
}
87
88
/**
89
* @return string
90
*/
@@ -127,21 +148,7 @@ class Misc
127
return self::_filterPageUrl(get_permalink($postId));
128
}
129
130
- // For Pro Version (Dashboard view): category link, tag link, custom taxonomy etc.
131
- if (is_admin() && Main::instance()->wpacuProEnabled()) {
132
- $wpacuOwnAssets = new OwnAssets();
133
-
134
- if ($wpacuOwnAssets->isTaxonomyEditPage()) {
135
- $current_screen = \get_current_screen();
136
-
137
- $term = isset($_GET['tag_ID']) ? (int)$_GET['tag_ID'] : false;
138
- $taxonomy = $current_screen->taxonomy;
139
-
140
- return get_term_link($term, $taxonomy);
141
- }
142
- }
143
-
144
- // If it's not a singular page, nor the home page, continue...
145
// It could be: Archive page (e.g. author, category, tag, date, custom taxonomy), Search page, 404 page etc.
146
global $wp;
147
85
return trim($strThree); // remove whitespaces;
86
}
87
88
+ /**
89
+ * @param $string
90
+ * @param $endsWithString
91
+ * @return bool
92
+ */
93
+ public static function endsWith($string, $endsWithString)
94
+ {
95
+ $stringLen = strlen($string);
96
+ $endsWithStringLen = strlen($endsWithString);
97
+
98
+ if ($endsWithStringLen > $stringLen) {
99
+ return false;
100
+ }
101
+
102
+ return (substr_compare(
103
+ $string,
104
+ $endsWithString,
105
+ $stringLen - $endsWithStringLen, $endsWithStringLen
106
+ ) === 0);
107
+ }
108
+
109
/**
110
* @return string
111
*/
148
return self::_filterPageUrl(get_permalink($postId));
149
}
150
151
+ // If it's not a singular page, nor the home page, continue...
152
// It could be: Archive page (e.g. author, category, tag, date, custom taxonomy), Search page, 404 page etc.
153
global $wp;
154
classes/OptimiseAssets/CombineCommon.php ADDED
@@ -0,0 +1,412 @@
1
+ <?php
2
+ namespace WpAssetCleanUp\OptimiseAssets;
3
+
4
+ use WpAssetCleanUp\Misc;
5
+
6
+ /**
7
+ * Class CombineCommon
8
+ * @package WpAssetCleanUp
9
+ */
10
+ class CombineCommon
11
+ {
12
+ /**
13
+ * @var string
14
+ */
15
+ public static $relPathPluginCacheDir = '/cache/asset-cleanup/';
16
+
17
+ /**
18
+ * CombineCommon constructor.
19
+ */
20
+ public function __construct()
21
+ {
22
+ add_action('switch_theme', array($this, 'clearAllCache'));
23
+ add_action('after_switch_theme', array($this, 'clearAllCache'));
24
+
25
+ // Is WP Rocket's page cache cleared? Clear Asset CleanUp's CSS cache files too
26
+ if (array_key_exists('action', $_GET) && $_GET['action'] === 'purge_cache') {
27
+ add_action( 'before_rocket_clean_domain', array( $this, 'clearAllCache' ) );
28
+ }
29
+
30
+ add_action('admin_post_assetcleanup_clear_assets_cache', function() {
31
+ $this->clearAllCache(true);
32
+ });
33
+ }
34
+
35
+ /**
36
+ * Is this a regular WordPress page (not feed, REST API etc.)?
37
+ * If not, do not proceed with any CSS/JS combine
38
+ *
39
+ * @return bool
40
+ */
41
+ public static function doCombineIsRegularPage()
42
+ {
43
+ // In particular situations, do not process this
44
+ if ( strpos($_SERVER['REQUEST_URI'], '/wp-content/plugins/') !== false
45
+ && strpos($_SERVER['REQUEST_URI'], '/wp-content/themes/') !== false) {
46
+ return false;
47
+ }
48
+
49
+ if (Misc::endsWith($_SERVER['REQUEST_URI'], '/comments/feed/')) {
50
+ return false;
51
+ }
52
+
53
+ if (str_replace('//', '/', site_url().'/feed/') === $_SERVER['REQUEST_URI']) {
54
+ return false;
55
+ }
56
+
57
+ if (is_feed()) { // any kind of feed page
58
+ return false;
59
+ }
60
+
61
+ return true;
62
+ }
63
+
64
+ /**
65
+ * @param $filesSources
66
+ * @param $htmlSource
67
+ * @param $assetType
68
+ *
69
+ * @return mixed
70
+ */
71
+ public static function stripJustCombinedFileTags($filesSources, $htmlSource, $assetType = 'css')
72
+ {
73
+ if ($assetType === 'css') {
74
+ $tagName = 'link';
75
+ $sourceAttr = 'href';
76
+ $regExpPattern = '#<link[^>]*stylesheet[^>]*(>)#Usmi';
77
+ } else {
78
+ return $htmlSource;
79
+ }
80
+
81
+ preg_match_all($regExpPattern, $htmlSource, $matchesSourcesFromTags, PREG_SET_ORDER);
82
+
83
+ $linkTagsStripped = 0;
84
+
85
+ foreach ($matchesSourcesFromTags as $matchSourceFromTag) {
86
+ $matchedSourceFromTag = trim($matchSourceFromTag[0]);
87
+
88
+ $domTag = new \DOMDocument();
89
+ $domTag->loadHTML($matchedSourceFromTag);
90
+
91
+ foreach ($domTag->getElementsByTagName( $tagName ) as $tagObject) {
92
+ if (! $tagObject->hasAttributes()) {
93
+ continue;
94
+ }
95
+
96
+ foreach ($tagObject->attributes as $tagAttrs) {
97
+ if ($tagAttrs->nodeName === $sourceAttr && in_array($tagAttrs->nodeValue, $filesSources)) {
98
+ $replaceWith = '';
99
+
100
+ $htmlSourceBeforeLinkTagReplacement = $htmlSource;
101
+ $htmlSource = str_replace($matchedSourceFromTag, $replaceWith, $htmlSource);
102
+
103
+ if ($htmlSource !== $htmlSourceBeforeLinkTagReplacement) {
104
+ $linkTagsStripped++;
105
+ }
106
+
107
+ continue;
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ if ($linkTagsStripped < 2) {
114
+ return 'do_not_combine';
115
+ }
116
+
117
+ return $htmlSource;
118
+ }
119
+
120
+ /**
121
+ * @param $href
122
+ * @param $assetType
123
+ *
124
+ * @return bool|string
125
+ */
126
+ public static function getLocalAssetPath($href, $assetType)
127
+ {
128
+ /*
129
+ * Validate it first
130
+ */
131
+ // Asset's Host
132
+ $assetHost = strtolower(parse_url($href, PHP_URL_HOST));
133
+
134
+ // First check the host name
135
+ $siteDbUrl = get_option('siteurl');
136
+ $siteUrlHost = strtolower(parse_url($siteDbUrl, PHP_URL_HOST));
137
+
138
+ if ($assetHost !== $siteUrlHost) {
139
+ return false;
140
+ }
141
+
142
+ $hrefRelPath = self::getHrefRelPath($href);
143
+
144
+ if (strpos($hrefRelPath, '/') === 0) {
145
+ $hrefRelPath = substr($hrefRelPath, 1);
146
+ }
147
+
148
+ $localAssetPath = ABSPATH . $hrefRelPath;
149
+
150
+ if (strpos($localAssetPath, '?ver=') !== false) {
151
+ list($localAssetPathAlt,) = explode('?ver=', $localAssetPath);
152
+ $localAssetPath = $localAssetPathAlt;
153
+ }
154
+
155
+ // The file needs to have the .css or .js extension (not .php)
156
+ // as it will be later read via file_get_contents()
157
+ if (strrchr($localAssetPath, '.') === '.'.$assetType && file_exists($localAssetPath)) {
158
+ return $localAssetPath;
159
+ }
160
+
161
+ return false;
162
+ }
163
+
164
+ /**
165
+ * @param $href
166
+ *
167
+ * @return mixed
168
+ */
169
+ public static function getHrefRelPath($href)
170
+ {
171
+ $parseUrl = parse_url($href);
172
+ $hrefHost = $parseUrl['host'];
173
+
174
+ // Sometimes host is different on Staging websites such as the ones from Siteground
175
+ // e.g. staging1.domain.com and domain.com
176
+ // We need to make sure that the URI path is fetched correctly based on the host value from the $href
177
+ $siteDbUrl = get_option('siteurl');
178
+ $parseDbSiteUrl = parse_url($siteDbUrl);
179
+
180
+ $dbSiteUrlHost = $parseDbSiteUrl['host'];
181
+
182
+ $finalBaseUrl = str_replace($dbSiteUrlHost, $hrefHost, $siteDbUrl);
183
+
184
+ return str_replace($finalBaseUrl, '', $href);
185
+ }
186
+
187
+ /**
188
+ * @param $jsonStorageFile
189
+ * @param $relPathAssetCacheDir
190
+ * @param $assetType
191
+ *
192
+ * @return array|mixed|object
193
+ */
194
+ public static function getAssetCachedData($jsonStorageFile, $relPathAssetCacheDir, $assetType)
195
+ {
196
+ // Only clean request URIs allowed
197
+ if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
198
+ return array();
199
+ }
200
+
201
+ $requestUri = $_SERVER['REQUEST_URI'];
202
+ $requestUriPart = $requestUri;
203
+
204
+ if ($requestUri === '/') {
205
+ $requestUriPart = '';
206
+ }
207
+
208
+ $dirToFilename = WP_CONTENT_DIR . dirname($relPathAssetCacheDir).'/_storage/'
209
+ .parse_url(site_url(), PHP_URL_HOST).
210
+ $requestUriPart.'/';
211
+
212
+ $dirToFilename = str_replace('//', '/', $dirToFilename);
213
+
214
+ $assetsFile = $dirToFilename . self::filterStorageFileName($jsonStorageFile);
215
+
216
+ if ($assetType === 'css') {
217
+ $cachedAssetsFileExpiresIn = CombineCss::$cachedCssAssetsFileExpiresIn;
218
+ }
219
+ else {
220
+ return array();
221
+ }
222
+
223
+ // Delete cached file after it expired as it will be regenerated
224
+ if (filemtime($assetsFile) < (time() - 1 * $cachedAssetsFileExpiresIn)) {
225
+ self::clearAssetCachedData($jsonStorageFile, $relPathAssetCacheDir);
226
+ return array();
227
+ }
228
+
229
+ $optionValue = @file_get_contents($assetsFile);
230
+
231
+ if ($optionValue) {
232
+ $optionValueArray = json_decode($optionValue, ARRAY_A);
233
+
234
+ $uriToFinalCssFile = $optionValueArray['uri_to_final_css_file'];
235
+ $linkHrefs = $optionValueArray['link_hrefs'];
236
+
237
+ if ($uriToFinalCssFile) {
238
+ return array(
239
+ 'uri_final_css_file' => $uriToFinalCssFile,
240
+ 'local_final_css_file' => WP_CONTENT_DIR . $relPathAssetCacheDir . $uriToFinalCssFile,
241
+ 'link_hrefs' => array_map( function ( $linkHref ) {
242
+ return str_replace( '{site_url}', site_url(), $linkHref );
243
+ }, $linkHrefs )
244
+ );
245
+ }
246
+
247
+ }
248
+
249
+ return array();
250
+ }
251
+
252
+ /**
253
+ * @param $jsonStorageFile
254
+ * @param $relPathAssetCacheDir
255
+ * @param $list
256
+ */
257
+ public static function setAssetCachedData($jsonStorageFile, $relPathAssetCacheDir, $list)
258
+ {
259
+ // Only clean request URIs allowed
260
+ if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
261
+ return;
262
+ }
263
+
264
+ $requestUri = $_SERVER['REQUEST_URI'];
265
+ $requestUriPart = $requestUri;
266
+
267
+ if ($requestUri === '/') {
268
+ $requestUriPart = '';
269
+ }
270
+
271
+ $dirToFilename = WP_CONTENT_DIR . dirname($relPathAssetCacheDir).'/_storage/'
272
+ .parse_url(site_url(), PHP_URL_HOST).
273
+ $requestUriPart.'/';
274
+
275
+ $dirToFilename = str_replace('//', '/', $dirToFilename);
276
+ @mkdir($dirToFilename, 0755, true);
277
+
278
+ $assetsFile = $dirToFilename . self::filterStorageFileName($jsonStorageFile);
279
+
280
+ // CSS JSON FILE DATA
281
+ $assetsValue = json_encode(
282
+ array(
283
+ 'uri_to_final_css_file' => $list['uri_to_final_css_file'],
284
+ 'link_hrefs' => array_map( function ( $linkHref ) {
285
+ return str_replace( site_url(), '{site_url}', $linkHref );
286
+ }, $list['link_hrefs'] )
287
+ )
288
+ );
289
+
290
+ @file_put_contents($assetsFile, $assetsValue);
291
+ }
292
+
293
+ /**
294
+ * @param $jsonStorageFile
295
+ * @param $relPathAssetCacheDir
296
+ */
297
+ public static function clearAssetCachedData($jsonStorageFile, $relPathAssetCacheDir)
298
+ {
299
+ // Only clean request URIs allowed
300
+ if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
301
+ return;
302
+ }
303
+
304
+ $requestUri = $_SERVER['REQUEST_URI'];
305
+ $requestUriPart = $requestUri;
306
+
307
+ if ($requestUri === '/') {
308
+ $requestUriPart = '';
309
+ }
310
+
311
+ $dirToFilename = WP_CONTENT_DIR . dirname($relPathAssetCacheDir) . '/_storage/'
312
+ . parse_url(site_url(), PHP_URL_HOST) .
313
+ $requestUriPart . '/';
314
+
315
+ $assetsFile = $dirToFilename.self::filterStorageFileName($jsonStorageFile);
316
+
317
+ @unlink($assetsFile);
318
+ }
319
+
320
+ /**
321
+ * Clears all CSS & JS cache
322
+ *
323
+ * @param bool $redirectAfter
324
+ * @param bool $keepAssetFiles
325
+ *
326
+ * $keepCssJsFiles is kept to "true" as default
327
+ * there could be cache plugins still having cached pages that load specific merged files,
328
+ * to avoid breaking the layout/functionality
329
+ */
330
+ public function clearAllCache($redirectAfter = false, $keepAssetFiles = true)
331
+ {
332
+ if (self::doNotClearAllCache()) {
333
+ return;
334
+ }
335
+
336
+ $fileExtToRemove = array('.json');
337
+
338
+ // Also delete .css
339
+ if (! $keepAssetFiles) {
340
+ $fileExtToRemove[] = '.css';
341
+ }
342
+
343
+ $assetCleanUpCacheDir = dirname(WP_CONTENT_DIR . self::$relPathPluginCacheDir);
344
+ $storageDir = $assetCleanUpCacheDir.'/_storage';
345
+
346
+ $dirItems = new \RecursiveDirectoryIterator($assetCleanUpCacheDir, \RecursiveDirectoryIterator::SKIP_DOTS);
347
+
348
+ $storageEmptyDirs = array();
349
+
350
+ foreach(new \RecursiveIteratorIterator($dirItems, \RecursiveIteratorIterator::SELF_FIRST) as $item) {
351
+ $fileBaseName = strrchr($item, '/');
352
+
353
+ if (is_file($item) && in_array(strrchr($fileBaseName, '.'), $fileExtToRemove)) {
354
+ @unlink($item);
355
+ } else {
356
+ if ( strpos( $item, $storageDir ) !== false && $item != $storageDir ) {
357
+ $storageEmptyDirs[] = $item;
358
+ }
359
+ }
360
+ }
361
+
362
+ foreach (array_reverse($storageEmptyDirs) as $storageEmptyDir) {
363
+ @rmdir($storageEmptyDir);
364
+ }
365
+
366
+ if ( $redirectAfter && wp_get_referer() ) {
367
+ wp_safe_redirect( wp_get_referer() );
368
+ }
369
+ }
370
+
371
+ /**
372
+ * Prevent clear cache function in the following situations
373
+ *
374
+ * @return bool
375
+ */
376
+ public static function doNotClearAllCache()
377
+ {
378
+ // WooCommerce GET or AJAX call
379
+ if (array_key_exists('wc-ajax', $_GET) && $_GET['wc-ajax']) {
380
+ return true;
381
+ }
382
+
383
+ if (defined('WC_DOING_AJAX') && WC_DOING_AJAX === true) {
384
+ return true;
385
+ }
386
+
387
+ return false;
388
+ }
389
+
390
+ /**
391
+ * @param $fileName
392
+ *
393
+ * @return mixed
394
+ */
395
+ public static function filterStorageFileName($fileName)
396
+ {
397
+ $current_user = wp_get_current_user();
398
+
399
+ if (isset($current_user->ID) && $current_user->ID > 0) {
400
+ $fileName = str_replace(
401
+ '{maybe-extra-info}',
402
+ '-logged-in-'.$current_user->ID,
403
+ $fileName
404
+ );
405
+ } else {
406
+ // Just clear {maybe-extra-info}
407
+ $fileName = str_replace('{maybe-extra-info}', '', $fileName);
408
+ }
409
+
410
+ return $fileName;
411
+ }
412
+ }
classes/{OptimizeCss.php → OptimiseAssets/CombineCss.php} RENAMED
@@ -1,77 +1,29 @@
1
<?php
2
- namespace WpAssetCleanUp;
3
4
/**
5
- * Class OptimizeCss
6
* @package WpAssetCleanUp
7
*/
8
- class OptimizeCss
9
{
10
/**
11
* @var string
12
*/
13
public static $relPathCssCacheDir = '/cache/asset-cleanup/css/'; // keep trailing slash at the end
14
15
- /**
16
- * @var string
17
- */
18
- public static $transientCssNamePrefix = 'wpacu_css_';
19
-
20
/**
21
* @var float|int
22
*/
23
- private static $_transientExpiresIn = 60 * 60 * 12; // 8 hours in seconds
24
25
/**
26
- * @var
27
- */
28
- private $_transientCssName;
29
-
30
- /**
31
- * OptimizeCss constructor.
32
*/
33
- public function __construct()
34
- {
35
- add_action('switch_theme', array($this, 'clearAllCacheTransients'));
36
- add_action('after_switch_theme', array($this, 'clearAllCacheTransients'));
37
-
38
- // Is WP Rocket's page cache cleared? Clear Asset CleanUp's CSS cache files too
39
- if (array_key_exists('action', $_GET) && $_GET['action'] === 'purge_cache') {
40
- add_action( 'before_rocket_clean_domain', array( $this, 'clearAllCacheTransients' ) );
41
- }
42
-
43
- // Is the CSS cache transient deleted? Remove the cached CSS file too
44
- // The action below is triggered prior to transient deletion and ONLY in the front-end view (not within the Dashboard)
45
- add_action('plugins_loaded', array($this, 'afterPluginsLoaded'));
46
-
47
- add_action('admin_post_assetcleanup_clear_assets_cache', function() {
48
- $this->clearAllCacheTransients(true);
49
- });
50
- }
51
-
52
- /**
53
- *
54
- */
55
- public function afterPluginsLoaded()
56
- {
57
- if (! is_admin() && (strpos($_SERVER['REQUEST_URI'], '?') === false)) {
58
- $toMdFive = $_SERVER['REQUEST_URI'];
59
-
60
- if (is_user_logged_in()) {
61
- global $current_user;
62
-
63
- if (isset($current_user->ID) && $current_user->ID > 0) {
64
- $toMdFive .= '_'.$current_user->ID;
65
- }
66
- }
67
-
68
- $this->_transientCssName = self::$transientCssNamePrefix . md5( $toMdFive );
69
-
70
- // @TODO: Remove cached CSS files after a while making sure no caching system still loads the old file
71
- // @TODO: Maybe adding to "Tools" page would be an option
72
- //add_action( 'delete_transient_' . $this->transientCssName, array( $this, 'clearCssCacheFile' ) );
73
- }
74
- }
75
76
/**
77
*
@@ -90,35 +42,38 @@ class OptimizeCss
90
return $htmlSource;
91
}
92
93
- $cssCachedFileExists = false;
94
95
// Speed up processing by getting the already existing final CSS file URI
96
// This will avoid parsing the HTML DOM and determine the combined URI paths for all the CSS files
97
- $localFinalCssFileData = $this->getCssCachedTransient();
98
99
// $uriToFinalCssFile will always be relative ONLY within WP_CONTENT_DIR . self::$relPathCssCacheDir
100
// which is usually "wp-content/cache/asset-cleanup/css/"
101
-
102
if (! empty($localFinalCssFileData) && isset($localFinalCssFileData['local_final_css_file']) && file_exists($localFinalCssFileData['local_final_css_file'])) {
103
/*
104
* URIs to the LINK tags are already cached; No need to parse the DOM
105
*/
106
$uriToFinalCssFile = $localFinalCssFileData['uri_final_css_file'];
107
- $linkHrefs = $localFinalCssFileData['link_hrefs'];
108
- $cssCachedFileExists = true;
109
} else {
110
/*
111
* NO CACHING TRANSIENT; Parse the DOM
112
*/
113
// Nothing in the database records or the retrieved cached file does not exist?
114
- $this->deleteCssCachedTransient();
115
116
// Fetch the DOM, and then set a new transient
117
$document = new \DOMDocument();
118
$document->loadHTML($htmlSource);
119
120
$documentHead = $document->getElementsByTagName('head')->item(0);
121
-
122
libxml_use_internal_errors( true );
123
124
$combinedUriPaths = $hrefUriPreloads = $localAssetsPaths = $linkHrefs = array();
@@ -142,12 +97,12 @@ class OptimizeCss
142
//$htmlSource .= $attrObj->nodeValue."\n";
143
$href = (string)$attrObj->nodeValue;
144
145
- $localAssetPath = self::getLocalAssetPath($href);
146
147
if ($localAssetPath) {
148
- $combinedUriPaths[] = self::getHrefRelPath($href);
149
$localAssetsPaths[$href] = $localAssetPath;
150
- $linkHrefs[] = $href;
151
}
152
}
153
@@ -158,7 +113,7 @@ class OptimizeCss
158
}
159
160
if ($checkCssPreload && $attrObj->nodeName === 'href') {
161
- $hrefUriPreloads[] = self::getHrefRelPath($attrObj->nodeValue);
162
}
163
}
164
}
@@ -199,60 +154,41 @@ class OptimizeCss
199
$uriToFinalCssFile = $maybeDoCssCombine['uri_final_css_file'];
200
201
if (file_exists($localFinalCssFile)) {
202
- $cssCachedFileExists = true;
203
- $this->setCssCachedTransient( $uriToFinalCssFile, $linkHrefs );
204
}
205
}
206
207
- if ($cssCachedFileExists) {
208
$finalTagUrl = WP_CONTENT_URL . self::$relPathCssCacheDir . $uriToFinalCssFile;
209
210
$finalCssTag = <<<HTML
211
- <link id="asset-cleanup-combined-css" rel="stylesheet" href="{$finalTagUrl}" type="text/css" media="all" />
212
HTML;
213
214
// Append the combine CSS Link tag right after <head> section of the website
215
// Any other <head> strings will be ignored as only the first one from the HTML source code matters
216
// e.g. some may use <head> inside a JavaScript code or part of a comment
217
- $htmlSource = preg_replace('#<head>#si', '<head>'."\n" . $finalCssTag . "\n", $htmlSource, 1);
218
- $htmlSource = $this->stripJustCombinedSingleLinkTags($linkHrefs, $htmlSource); // Strip the combined files to avoid duplicate code
219
- }
220
-
221
- return $htmlSource;
222
- });
223
- }, 1);
224
- }
225
-
226
- /**
227
- * @param $linkHrefs
228
- * @param $htmlSource
229
- *
230
- * @return mixed
231
- */
232
- public function stripJustCombinedSingleLinkTags($linkHrefs, $htmlSource)
233
- {
234
- preg_match_all('#<link[^>]*stylesheet[^>]*(>)#Usmi', $htmlSource, $matchesLinkStylesheetTags, PREG_SET_ORDER);
235
236
- foreach ($matchesLinkStylesheetTags as $matchLinkStylesheetTag) {
237
- $matchedLinkStylesheetTag = $matchLinkStylesheetTag[0];
238
-
239
- $domLink = new \DOMDocument();
240
- $domLink->loadHTML($matchedLinkStylesheetTag);
241
242
- foreach ($domLink->getElementsByTagName( 'link' ) as $tagLinkObject) {
243
- if (! $tagLinkObject->hasAttributes()) {
244
- continue;
245
- }
246
247
- foreach ($tagLinkObject->attributes as $tagLinkAttrs) {
248
- if ($tagLinkAttrs->nodeName === 'href' && in_array($tagLinkAttrs->nodeValue, $linkHrefs)) {
249
- $htmlSource = str_replace($matchedLinkStylesheetTag, '', $htmlSource);
250
}
251
}
252
- }
253
- }
254
255
- return $htmlSource;
256
}
257
258
/**
@@ -281,7 +217,7 @@ HTML;
281
$finalAssetsContents = '';
282
283
foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
284
- $posLastSlash = strrpos($assetHref, '/');
285
$pathToAssetDir = substr($assetHref, 0, $posLastSlash);
286
287
$parseUrl = parse_url($pathToAssetDir);
@@ -303,7 +239,7 @@ HTML;
303
$assetContent = @file_get_contents($localAssetsPath);
304
305
if ($assetContent) {
306
- $finalAssetsContents .= $this->maybeFixCssBackgroundUrls($assetContent, $pathToAssetDir . '/') . "\n\n";
307
}
308
}
309
@@ -326,78 +262,13 @@ HTML;
326
);
327
}
328
329
- /**
330
- * @return array
331
- */
332
- public function getCssCachedTransient()
333
- {
334
- // Only clean request URIs allowed
335
- if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
336
- return array();
337
- }
338
-
339
- $optionValue = get_transient($this->_transientCssName);
340
-
341
- if ($optionValue) {
342
- $optionValueArray = json_decode($optionValue, ARRAY_A);
343
-
344
- $uriToFinalCssFile = $optionValueArray['uri_to_final_css_file'];
345
- $linkHrefs = $optionValueArray['link_hrefs'];
346
-
347
- if ($uriToFinalCssFile) {
348
- return array(
349
- 'uri_final_css_file' => $uriToFinalCssFile,
350
- 'local_final_css_file' => WP_CONTENT_DIR . self::$relPathCssCacheDir . $uriToFinalCssFile,
351
- 'link_hrefs' => $linkHrefs
352
- );
353
- }
354
- }
355
-
356
- return array();
357
- }
358
-
359
- /**
360
- * @param $uriToFinalCssFile
361
- * @param array $linkHrefs
362
- */
363
- public function setCssCachedTransient($uriToFinalCssFile, $linkHrefs)
364
- {
365
- // Only clean request URIs allowed
366
- if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
367
- return;
368
- }
369
-
370
- $optionValue = json_encode(
371
- array(
372
- 'request_' => $_SERVER['REQUEST_URI'],
373
- 'uri_to_final_css_file' => $uriToFinalCssFile,
374
- 'link_hrefs' => $linkHrefs
375
- )
376
- );
377
-
378
- set_transient($this->_transientCssName, $optionValue, self::$_transientExpiresIn);
379
- }
380
-
381
- /**
382
- *
383
- */
384
- public function deleteCssCachedTransient()
385
- {
386
- // Only clean request URIs allowed
387
- if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
388
- return;
389
- }
390
-
391
- delete_transient($this->_transientCssName);
392
- }
393
-
394
/**
395
* @param $cssContent
396
* @param $appendBefore
397
*
398
* @return mixed
399
*/
400
- public function maybeFixCssBackgroundUrls($cssContent, $appendBefore)
401
{
402
$cssContent = str_replace(
403
array('url("../', "url('../", 'url(../'),
@@ -451,72 +322,6 @@ HTML;
451
return $cssContent;
452
}
453
454
- /**
455
- * @param $href
456
- *
457
- * @return bool|string
458
- */
459
- public static function getLocalAssetPath($href)
460
- {
461
- /*
462
- * Validate it first
463
- */
464
- // Asset's Host
465
- $assetHost = strtolower(parse_url($href, PHP_URL_HOST));
466
-
467
- // First check the host name
468
- $siteUrl = get_option('siteurl');
469
- $siteUrlHost = strtolower(parse_url($siteUrl, PHP_URL_HOST));
470
-
471
- if ($assetHost !== $siteUrlHost) {
472
- return false;
473
- }
474
-
475
- $hrefRelPath = self::getHrefRelPath($href);
476
-
477
- if (strpos($hrefRelPath, '/') === 0) {
478
- $hrefRelPath = substr($hrefRelPath, 1);
479
- }
480
-
481
- $localAssetPath = ABSPATH . $hrefRelPath;
482
-
483
- //file_put_contents(WP_CONTENT_DIR . '/cache/asset-cleanup/css/data.log', $localAssetPath);
484
-
485
- if (strpos($localAssetPath, '?ver=') !== false) {
486
- list($localAssetPathAlt,) = explode('?ver=', $localAssetPath);
487
- $localAssetPath = $localAssetPathAlt;
488
- }
489
-
490
- if (strrchr($localAssetPath, '.') === '.css' && file_exists($localAssetPath)) {
491
- return $localAssetPath;
492
- }
493
-
494
- return false;
495
- }
496
-
497
- /**
498
- * @param $href
499
- *
500
- * @return mixed
501
- */
502
- public static function getHrefRelPath($href)
503
- {
504
- $parseUrl = parse_url($href);
505
- $hrefHost = $parseUrl['host'];
506
-
507
- // Sometimes host is different on Staging websites such as the ones from Siteground
508
- // e.g. staging1.domain.com and domain.com
509
- // We need to make sure that the URI path is fetched correctly based on the host value from the $href
510
- $siteDbUrl = get_option('siteurl');
511
- $parseDbSiteUrl = parse_url($siteDbUrl);
512
-
513
- $dbSiteUrlHost = $parseDbSiteUrl['host'];
514
-
515
- $finalBaseUrl = str_replace($dbSiteUrlHost, $hrefHost, $siteDbUrl);
516
-
517
- return str_replace($finalBaseUrl, '', $href);
518
- }
519
-
520
/**
521
* @return bool
522
*/
@@ -526,14 +331,23 @@ HTML;
526
// Always in the front-end view
527
// Do not combine if there's a POST request as there could be assets loading conditionally
528
// that might not be needed when the page is accessed without POST, making the final CSS file larger
529
- if (! empty($_POST) || array_key_exists('wpacu_no_css_combine', $_GET) || is_admin()) {
530
return false; // Do not combine
531
}
532
533
$pluginSettings = Main::instance()->settings;
534
535
- if ($pluginSettings['test_mode']) {
536
- return false; // Do not combine anything if "Test Mode" is ON
537
}
538
539
if ($pluginSettings['combine_loaded_css'] === '') {
@@ -552,92 +366,4 @@ HTML;
552
return false;
553
}
554
555
- /**
556
- * @param bool $redirectAfter
557
- */
558
- public function clearAllCacheTransients($redirectAfter = false)
559
- {
560
- if ($this->doNotClearAllCache()) {
561
- return;
562
- }
563
-
564
- global $wpdb;
565
-
566
- // First, select all and get the combined CSS file names in order to be deleted
567
- // As the files will be regenerated on page loads
568
- $transientNamePrefix = self::$transientCssNamePrefix;
569
-
570
- $sqlSelect = <<<SQL
571
- SELECT option_name, option_value FROM `{$wpdb->options}` WHERE option_name LIKE '_transient_{$transientNamePrefix}%'
572
- SQL;
573
- $sqlResults = $wpdb->get_results($sqlSelect, ARRAY_A);
574
-
575
- foreach ($sqlResults as $sqlResult) {
576
- // 53 = length of the following
577
- // _transient_ (11) + self::$transientCssNamePrefix + MD5 value (always 32)
578
- $optionNameValidLength = 11 + strlen(self::$transientCssNamePrefix) + 32;
579
-
580
- // nothing is left by chance to make sure the right transients gets deleted
581
- if (strlen($sqlResult['option_name']) === $optionNameValidLength) {
582
- delete_transient( str_replace( '_transient_', '', $sqlResult['option_name'] ) );
583
- // @TODO: Remove cached CSS files after a while making sure no caching system still loads the old file
584
- //$this->removeCachedCssFile( $sqlResult['option_value'] );
585
- }
586
- }
587
-
588
- if ( $redirectAfter && wp_get_referer() ) {
589
- wp_safe_redirect( wp_get_referer() );
590
- }
591
- }
592
-
593
- /**
594
- * Prevent clear cache function in the following situations
595
- *
596
- * @return bool
597
- */
598
- public function doNotClearAllCache()
599
- {
600
- // WooCommerce GET or AJAX call
601
- if (array_key_exists('wc-ajax', $_GET) && $_GET['wc-ajax']) {
602
- return true;
603
- }
604
-
605
- if (defined('WC_DOING_AJAX') && WC_DOING_AJAX === true) {
606
- return true;
607
- }
608
-
609
- return false;
610
- }
611
-
612
- /**
613
- * Triggers in the front-end view only for the current viewed page
614
- */
615
- /*
616
- public function clearCssCacheFile()
617
- {
618
- $optionValue = get_transient($this->transientCssName);
619
-
620
- if ($optionValue) {
621
- $this->removeCachedCssFile($optionValue);
622
- }
623
- }
624
- */
625
-
626
- /**
627
- * @param $optionValue
628
- */
629
- /*
630
- public function removeCachedCssFile($optionValue)
631
- {
632
- $optionValueArray = json_decode($optionValue, ARRAY_A);
633
- $uriToFinalCssFile = $optionValueArray['uri_to_final_css_file'];
634
-
635
- $fullLocalPathToCachedCssFile = WP_CONTENT_DIR . self::$relPathCssCacheDir . $uriToFinalCssFile;
636
-
637
- // Check the extension to make sure a CSS file is in fact deleted from the cache
638
- if (file_exists($fullLocalPathToCachedCssFile) && strrchr($uriToFinalCssFile, '.') === '.css') {
639
- @unlink($fullLocalPathToCachedCssFile);
640
- }
641
}
642
- */
643
- }
1
<?php
2
+ namespace WpAssetCleanUp\OptimiseAssets;
3
+
4
+ use WpAssetCleanUp\Main;
5
+ use WpAssetCleanUp\Menu;
6
7
/**
8
+ * Class CombineCss
9
* @package WpAssetCleanUp
10
*/
11
+ class CombineCss
12
{
13
/**
14
* @var string
15
*/
16
public static $relPathCssCacheDir = '/cache/asset-cleanup/css/'; // keep trailing slash at the end
17
18
/**
19
* @var float|int
20
*/
21
+ public static $cachedCssAssetsFileExpiresIn = 60 * 60 * 12; // 8 hours in seconds
22
23
/**
24
+ * @var string
25
*/
26
+ public $jsonStorageFile = 'css-combined{maybe-extra-info}.json';
27
28
/**
29
*
42
return $htmlSource;
43
}
44
45
+ // There has to be at least one "<link", otherwise, it could be a feed request or something similar (not page, post, homepage etc.)
46
+ if (stripos($htmlSource, '<link') === false) {
47
+ return $htmlSource;
48
+ }
49
+
50
+ $cachedFileExists = false;
51
52
// Speed up processing by getting the already existing final CSS file URI
53
// This will avoid parsing the HTML DOM and determine the combined URI paths for all the CSS files
54
+ $localFinalCssFileData = CombineCommon::getAssetCachedData($this->jsonStorageFile, self::$relPathCssCacheDir, 'css');
55
56
// $uriToFinalCssFile will always be relative ONLY within WP_CONTENT_DIR . self::$relPathCssCacheDir
57
// which is usually "wp-content/cache/asset-cleanup/css/"
58
if (! empty($localFinalCssFileData) && isset($localFinalCssFileData['local_final_css_file']) && file_exists($localFinalCssFileData['local_final_css_file'])) {
59
/*
60
* URIs to the LINK tags are already cached; No need to parse the DOM
61
*/
62
$uriToFinalCssFile = $localFinalCssFileData['uri_final_css_file'];
63
+ $linkHrefs = $localFinalCssFileData['link_hrefs'];
64
+ $cachedFileExists = true;
65
} else {
66
/*
67
* NO CACHING TRANSIENT; Parse the DOM
68
*/
69
// Nothing in the database records or the retrieved cached file does not exist?
70
+ CombineCommon::clearAssetCachedData($this->jsonStorageFile, self::$relPathCssCacheDir);
71
72
// Fetch the DOM, and then set a new transient
73
$document = new \DOMDocument();
74
$document->loadHTML($htmlSource);
75
76
$documentHead = $document->getElementsByTagName('head')->item(0);
77
libxml_use_internal_errors( true );
78
79
$combinedUriPaths = $hrefUriPreloads = $localAssetsPaths = $linkHrefs = array();
97
//$htmlSource .= $attrObj->nodeValue."\n";
98
$href = (string)$attrObj->nodeValue;
99
100
+ $localAssetPath = CombineCommon::getLocalAssetPath($href, 'css');
101
102
if ($localAssetPath) {
103
+ $combinedUriPaths[] = CombineCommon::getHrefRelPath($href);
104
$localAssetsPaths[$href] = $localAssetPath;
105
+ $linkHrefs[] = $href;
106
}
107
}
108
113
}
114
115
if ($checkCssPreload && $attrObj->nodeName === 'href') {
116
+ $hrefUriPreloads[] = CombineCommon::getHrefRelPath($attrObj->nodeValue);
117
}
118
}
119
}
154
$uriToFinalCssFile = $maybeDoCssCombine['uri_final_css_file'];
155
156
if (file_exists($localFinalCssFile)) {
157
+ $cachedFileExists = true;
158
+ CombineCommon::setAssetCachedData(
159
+ $this->jsonStorageFile,
160
+ self::$relPathCssCacheDir,
161
+ array('uri_to_final_css_file' => $uriToFinalCssFile, 'link_hrefs' => $linkHrefs)
162
+ );
163
}
164
}
165
166
+ if ($cachedFileExists) {
167
$finalTagUrl = WP_CONTENT_URL . self::$relPathCssCacheDir . $uriToFinalCssFile;
168
169
$finalCssTag = <<<HTML
170
+ <link id='asset-cleanup-combined-css' rel='stylesheet' href='{$finalTagUrl}' type='text/css' media='all' />
171
HTML;
172
173
// Append the combine CSS Link tag right after <head> section of the website
174
// Any other <head> strings will be ignored as only the first one from the HTML source code matters
175
// e.g. some may use <head> inside a JavaScript code or part of a comment
176
+ $htmlSourceBeforeAnyLinkTagReplacement = $htmlSource;
177
178
+ $htmlSource = preg_replace('#<head>#si', '<head>'."\n" . $finalCssTag . "\n", $htmlSource, 1);
179
180
+ $htmlSourceBeforeLinkTagLoopReplacement = $htmlSource;
181
+ $htmlSource = CombineCommon::stripJustCombinedFileTags($linkHrefs, $htmlSource, 'css'); // Strip the combined files to avoid duplicate code
182
183
+ // There should be at least two replacements made
184
+ if ($htmlSource === 'do_not_combine') {
185
+ return $htmlSourceBeforeAnyLinkTagReplacement;
186
}
187
}
188
189
+ return $htmlSource;
190
+ });
191
+ }, 1);
192
}
193
194
/**
217
$finalAssetsContents = '';
218
219
foreach ($localAssetsPaths as $assetHref => $localAssetsPath) {
220
+ $posLastSlash = strrpos($assetHref, '/');
221
$pathToAssetDir = substr($assetHref, 0, $posLastSlash);
222
223
$parseUrl = parse_url($pathToAssetDir);
239
$assetContent = @file_get_contents($localAssetsPath);
240
241
if ($assetContent) {
242
+ $finalAssetsContents .= self::maybeFixCssBackgroundUrls($assetContent, $pathToAssetDir . '/') . "\n\n";
243
}
244
}
245
262
);
263
}
264
265
/**
266
* @param $cssContent
267
* @param $appendBefore
268
*
269
* @return mixed
270
*/
271
+ public static function maybeFixCssBackgroundUrls($cssContent, $appendBefore)
272
{
273
$cssContent = str_replace(
274
array('url("../', "url('../", 'url(../'),
322
return $cssContent;
323
}
324
325
/**
326
* @return bool
327
*/
331
// Always in the front-end view
332
// Do not combine if there's a POST request as there could be assets loading conditionally
333
// that might not be needed when the page is accessed without POST, making the final CSS file larger
334
+ if (! empty($_POST) || is_admin()) {
335
return false; // Do not combine
336
}
337
338
+ // Only clean request URIs allowed
339
+ if (strpos($_SERVER['REQUEST_URI'], '?') !== false) {
340
+ return false;
341
+ }
342
+
343
+ if (! CombineCommon::doCombineIsRegularPage()) {
344
+ return false;
345
+ }
346
+
347
$pluginSettings = Main::instance()->settings;
348
349
+ if ($pluginSettings['test_mode'] && ! Menu::userCanManageAssets()) {
350
+ return false; // Do not combine anything if "Test Mode" is ON and the user is in guest mode (not logged-in)
351
}
352
353
if ($pluginSettings['combine_loaded_css'] === '') {
366
return false;
367
}
368
369
}
classes/OwnAssets.php CHANGED
@@ -15,11 +15,6 @@ class OwnAssets
15
*/
16
public $loadPluginAssets = false; // default
17
18
- /**
19
- * @var bool
20
- */
21
- public $isTaxonomyEditPage = false;
22
-
23
/**
24
*
25
*/
@@ -124,11 +119,7 @@ class OwnAssets
124
$this->loadPluginAssets = true;
125
}
126
127
- if ($this->isTaxonomyEditPage()) {
128
- $this->loadPluginAssets = true;
129
- }
130
-
131
- if (! $this->loadPluginAssets) {
132
return;
133
}
134
@@ -191,9 +182,9 @@ class OwnAssets
191
$postId = 0; // for home page
192
}
193
194
- // Not home page (posts list) nor Taxonomy Edit Page? Does it have a post ID?
195
// See if the individual post is published to continue
196
- if ($postId > 0 && (! $this->isTaxonomyEditPage())) {
197
$postStatus = get_post_status($postId);
198
199
if (! $postStatus) {
@@ -340,18 +331,4 @@ HTML;
340
return $src;
341
}
342
343
- /**
344
- * @return bool
345
- */
346
- public function isTaxonomyEditPage()
347
- {
348
- if ((!$this->isTaxonomyEditPage)
349
- && Main::instance()->wpacuProEnabled()
350
- && class_exists('\\WpAssetCleanUpPro\\MainPro')) {
351
- $mainPro = new \WpAssetCleanUpPro\MainPro();
352
- $this->isTaxonomyEditPage = $mainPro->isTaxonomyEditPage();
353
- }
354
-
355
- return $this->isTaxonomyEditPage;
356
- }
357
- }
15
*/
16
public $loadPluginAssets = false; // default
17
18
/**
19
*
20
*/
119
$this->loadPluginAssets = true;
120
}
121
122
+ if (! $this->loadPluginAssets) {
123
return;
124
}
125
182
$postId = 0; // for home page
183
}
184
185
+ // Not home page (posts list)? Does it have a post ID?
186
// See if the individual post is published to continue
187
+ if ($postId > 0) {
188
$postStatus = get_post_status($postId);
189
190
if (! $postStatus) {
331
return $src;
332
}
333
334
+ }
classes/Plugin.php CHANGED
@@ -75,7 +75,7 @@ class Plugin
75
*/
76
public static function createCacheFoldersFiles()
77
{
78
- $cacheCssDir = WP_CONTENT_DIR . OptimizeCss::$relPathCssCacheDir;
79
80
$emptyPhpFileContents = <<<TEXT
81
<?php
75
*/
76
public static function createCacheFoldersFiles()
77
{
78
+ $cacheCssDir = WP_CONTENT_DIR . OptimiseAssets\CombineCss::$relPathCssCacheDir;
79
80
$emptyPhpFileContents = <<<TEXT
81
<?php
classes/Settings.php CHANGED
@@ -1,6 +1,8 @@
1
<?php
2
namespace WpAssetCleanUp;
3
4
/**
5
* Class Settings
6
* @package WpAssetCleanUp
@@ -227,7 +229,7 @@ class Settings
227
*/
228
public function update($settings)
229
{
230
- self::clearAllCache();
231
232
$wpacuUpdate = new Update;
233
@@ -296,20 +298,10 @@ class Settings
296
*
297
*/
298
public static function clearAllCache()
299
- {
300
- // "Combined CSS Loaded" transients
301
- $optimizeCss = new OptimizeCss();
302
- $optimizeCss->clearAllCacheTransients();
303
304
- // "WP Rocket" cache
305
- /*
306
- add_action('init', function() {
307
- if ( function_exists( 'rocket_clean_domain' ) ) {
308
- try {
309
- @rocket_clean_domain();
310
- } catch ( \Exception $e ) {}
311
- }
312
- });
313
- */
314
- }
315
}
1
<?php
2
namespace WpAssetCleanUp;
3
4
+ use WpAssetCleanUp\OptimiseAssets\CombineCommon;
5
+
6
/**
7
* Class Settings
8
* @package WpAssetCleanUp
229
*/
230
public function update($settings)
231
{
232
+ CombineCommon::clearAllCache();
233
234
$wpacuUpdate = new Update;
235
298
*
299
*/
300
public static function clearAllCache()
301
+ {
302
+ // Clear "Combined CSS/JS Loaded Files" Cache
303
+ $combineCommon = new OptimiseAssets\CombineCommon();
304
+ $combineCommon->clearAllCache();
305
306
+ }
307
}
classes/Sorting.php CHANGED
@@ -61,7 +61,6 @@ class Sorting
61
public static function appendLocation($list)
62
{
63
$pluginsUrl = plugins_url();
64
- //$currentTheme = wp_get_theme();
65
66
$urlsToThemeDirs = array();
67
@@ -77,25 +76,10 @@ class Sorting
77
}
78
79
$urlsToThemeDirs = array_unique($urlsToThemeDirs);
80
- //echo '<pre>'; print_r($urlsToThemeDirs);
81
-
82
- /*
83
- $relPluginsPath = dirname(str_replace(ABSPATH, '', WPACU_PLUGIN_DIR)).'/';
84
-
85
- if ($relPluginsPath{0} !== '/') {
86
- $relPluginsPath = '/'.$relPluginsPath;
87
- }
88
- */
89
-
90
- //$locations = array();
91
92
foreach (array('styles', 'scripts') as $assetType) {
93
foreach ( $list[$assetType] as $indexNo => $asset ) {
94
- /*
95
- if (! (isset($asset->src) && $asset->src)) {
96
- continue;
97
- }
98
- */
99
$src = isset($asset->src) ? $asset->src : '';
100
101
if (strpos($src,'/wp-includes/') === 0) {
@@ -115,26 +99,21 @@ class Sorting
115
$asset->locationMain = 'plugins';
116
$asset->locationChild = $pluginDir;
117
118
- //$locations[ $assetsKey ][] = $asset;
119
- } else {
120
$isWithinThemes = false;
121
122
foreach ( $urlsToThemeDirs as $urlToThemeDir ) {
123
$srcRel = str_replace(site_url(),'', $src);
124
- //echo $src . ' - '. $urlToThemeDir. ' = '.stripos( $src, $urlToThemeDir ).'<br />';
125
126
if ( strpos( $srcRel, $urlToThemeDir ) !== false ) {
127
$isWithinThemes = true;
128
129
- //echo $urlToThemeDir.'<br />';
130
-
131
$themeDir = substr(strrchr(trim($urlToThemeDir, '/'), '/'), 1);
132
133
$asset->locationMain = 'themes';
134
$asset->locationChild = $themeDir;
135
break;
136
- //$locations['themes'] [$themeDir] [ $assetsKey ][] = $asset;
137
- }
138
}
139
140
// Default: "External"
@@ -142,8 +121,7 @@ class Sorting
142
// Outside "themes", "plugins" and "wp-includes"
143
$asset->locationMain = 'external';
144
$asset->locationChild = 'none';
145
- //$locations['external'][$assetsKey][] = $asset;
146
- }
147
}
148
149
$list[$assetType][$indexNo] = $asset;
61
public static function appendLocation($list)
62
{
63
$pluginsUrl = plugins_url();
64
65
$urlsToThemeDirs = array();
66
76
}
77
78
$urlsToThemeDirs = array_unique($urlsToThemeDirs);
79
80
foreach (array('styles', 'scripts') as $assetType) {
81
foreach ( $list[$assetType] as $indexNo => $asset ) {
82
+
83
$src = isset($asset->src) ? $asset->src : '';
84
85
if (strpos($src,'/wp-includes/') === 0) {
99
$asset->locationMain = 'plugins';
100
$asset->locationChild = $pluginDir;
101
102
+ } else {
103
$isWithinThemes = false;
104
105
foreach ( $urlsToThemeDirs as $urlToThemeDir ) {
106
$srcRel = str_replace(site_url(),'', $src);
107
108
if ( strpos( $srcRel, $urlToThemeDir ) !== false ) {
109
$isWithinThemes = true;
110
111
$themeDir = substr(strrchr(trim($urlToThemeDir, '/'), '/'), 1);
112
113
$asset->locationMain = 'themes';
114
$asset->locationChild = $themeDir;
115
break;
116
+ }
117
}
118
119
// Default: "External"
121
// Outside "themes", "plugins" and "wp-includes"
122
$asset->locationMain = 'external';
123
$asset->locationChild = 'none';
124
+ }
125
}
126
127
$list[$assetType][$indexNo] = $asset;
classes/Tools.php CHANGED
@@ -319,8 +319,6 @@ SQL;
319
320
// Remove Asset CleanUp's cache transients
321
$transientLikes = array(
322
- '_transient_timeout_'.OptimizeCss::$transientCssNamePrefix,
323
- '_transient_'.OptimizeCss::$transientCssNamePrefix,
324
'_transient_timeout_wpacu_',
325
'_transient_wpacu_',
326
);
@@ -337,6 +335,9 @@ SQL;
337
DELETE FROM `{$wpdb->prefix}options` WHERE {$transientLikesSql}
338
SQL;
339
$wpdb->query($sqlQuery);
340
} elseif ($wpacuResetValue === 'reset_settings') {
341
$sqlQuery = <<<SQL
342
DELETE FROM `{$wpdb->prefix}options` WHERE option_name='wpassetcleanup_settings'
319
320
// Remove Asset CleanUp's cache transients
321
$transientLikes = array(
322
'_transient_timeout_wpacu_',
323
'_transient_wpacu_',
324
);
335
DELETE FROM `{$wpdb->prefix}options` WHERE {$transientLikesSql}
336
SQL;
337
$wpdb->query($sqlQuery);
338
+
339
+ // Refers to the plugins' icons shown when viewing assets list by location is enabled
340
+ delete_transient('wpacu_active_plugins_icons');
341
} elseif ($wpacuResetValue === 'reset_settings') {
342
$sqlQuery = <<<SQL
343
DELETE FROM `{$wpdb->prefix}options` WHERE option_name='wpassetcleanup_settings'
classes/Update.php CHANGED
@@ -76,7 +76,6 @@ HTML;
76
}
77
78
/**
79
- * TODO: Remove priority later on as it's not needed anymore because there is a redirect after form submit
80
* Priority: 9 (AFTER current post ID is correctly retrieved and BEFORE the data from the database is fetched)
81
* Form was submitted in the frontend view (not Dashboard) from a singular page, front-page etc.
82
*/
@@ -135,11 +134,7 @@ HTML;
135
return;
136
}
137
138
- // [wpacu_pro]
139
- // Form Submitted from a page such as taxonomy (e.g. 'category'), author page, 404 page, search page etc.
140
- do_action('wpacu_pro_frontend_update');
141
- // [/wpacu_pro]
142
- }
143
144
/**
145
*
@@ -315,6 +310,8 @@ HTML;
315
/**
316
* Lite: For Singular Page (Post, Page, Custom Post Type) and Front Page (Home Page)
317
* Pro: 'for_pro' would trigger the actions from the premium extension (if available)
318
*
319
* This is the function that clears and updates the load exceptions for any of the requested pages
320
*
@@ -341,10 +338,7 @@ HTML;
341
delete_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_load_exceptions');
342
} elseif ($type === 'front_page') {
343
delete_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions');
344
- } /* [wpacu_pro] */ elseif ($type === 'for_pro') {
345
- // Clear existing list for pages like: taxonomy, 404, search, date etc.
346
- do_action( 'wpacu_pro_clear_load_exceptions' );
347
- } /* [/wpacu_pro] */
348
349
if (! $isPostOptionStyles && ! $isPostOptionScripts) {
350
return;
@@ -406,11 +400,9 @@ HTML;
406
}
407
} elseif ($type === 'front_page') {
408
update_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions', $jsonLoadExceptions);
409
- } /* [wpacu_pro] */ elseif ($type === 'for_pro') {
410
- // Update any load extensions for pages like: taxonomy, 404, search, date etc.
411
- do_action( 'wpacu_pro_update_load_exceptions', $jsonLoadExceptions );
412
- } /* [/wpacu_pro] */
413
- }
414
}
415
416
/**
76
}
77
78
/**
79
* Priority: 9 (AFTER current post ID is correctly retrieved and BEFORE the data from the database is fetched)
80
* Form was submitted in the frontend view (not Dashboard) from a singular page, front-page etc.
81
*/
134
return;
135
}
136
137
+ }
138
139
/**
140
*
310
/**
311
* Lite: For Singular Page (Post, Page, Custom Post Type) and Front Page (Home Page)
312
* Pro: 'for_pro' would trigger the actions from the premium extension (if available)
313
+ * UPDATE: Since v1.2.9.5, no fallback for both the lite and pro version activated at the same time would work anymore
314
+ * Users need to only keep the PRO version since it's standalone since v1.0.3
315
*
316
* This is the function that clears and updates the load exceptions for any of the requested pages
317
*
338
delete_post_meta($postId, '_' . WPACU_PLUGIN_ID . '_load_exceptions');
339
} elseif ($type === 'front_page') {
340
delete_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions');
341
+ }
342
343
if (! $isPostOptionStyles && ! $isPostOptionScripts) {
344
return;
400
}
401
} elseif ($type === 'front_page') {
402
update_option( WPACU_PLUGIN_ID . '_front_page_load_exceptions', $jsonLoadExceptions);
403
+ }
404
+
405
+ }
406
}
407
408
/**
freemius/assets/css/admin/account.css CHANGED
File without changes
freemius/assets/css/admin/add-ons.css CHANGED
File without changes
freemius/assets/css/admin/affiliation.css CHANGED
File without changes
freemius/assets/css/admin/checkout.css CHANGED
File without changes
freemius/assets/css/admin/common.css CHANGED
File without changes
freemius/assets/css/admin/connect.css CHANGED
File without changes
freemius/assets/css/admin/debug.css CHANGED
File without changes
freemius/assets/css/admin/dialog-boxes.css CHANGED
File without changes
freemius/assets/css/admin/gdpr-optin-notice.css CHANGED
File without changes
freemius/assets/css/admin/index.php CHANGED
File without changes
freemius/assets/css/customizer.css CHANGED
File without changes
freemius/assets/css/index.php CHANGED
File without changes
freemius/assets/img/index.php CHANGED
File without changes
freemius/assets/img/plugin-icon.png CHANGED
File without changes
freemius/assets/img/theme-icon.png CHANGED
File without changes