diff --git a/bootstrap/upgrader.class.php b/bootstrap/upgrader.class.php index bc36ece6..3e279181 100644 --- a/bootstrap/upgrader.class.php +++ b/bootstrap/upgrader.class.php @@ -364,7 +364,7 @@ public function _parse() { * @param \stdClass $upgrade The upgrade iterator object. * @yield array { $member => $version } */ - private function yield_runs( \$upgrade ) { + private function yield_runs( $upgrade ) { foreach ( $upgrade as $member => $versions ) { foreach ( $versions as $version => $callbacks ) { foreach ( $callbacks as $callback ) { diff --git a/extensions/free/transport/trunk/inc/classes/admin.class.php b/extensions/free/transport/trunk/inc/classes/admin.class.php index ed18ac15..ca323557 100644 --- a/extensions/free/transport/trunk/inc/classes/admin.class.php +++ b/extensions/free/transport/trunk/inc/classes/admin.class.php @@ -61,19 +61,19 @@ final class Admin { * @since 1.0.0 * @var string The validation nonce name. */ - protected $ajax_nonce_action; + private $ajax_nonce_action; /** * @since 1.0.0 * @var string Page hook name */ - protected $transport_menu_page_hook; + private $transport_menu_page_hook; /** * @since 1.0.0 * @var string Page ID/Slug */ - protected $transport_page_slug; + private $transport_page_slug; /** * Constructor, initializes WordPress actions. @@ -89,7 +89,37 @@ private function construct() { $this->ajax_nonce_action = 'tsfem_e_transport_ajax'; - $this->importers = [ + $this->transport_page_slug = 'theseoframework-transport'; + + /** + * Set error notice option. + * + * @see trait TSF_Extension_Manager\Error + */ + $this->error_notice_option = 'tsfem_e_transport_error_notice_option'; + + // Nothing to do here... + if ( \tsf()->is_headless['settings'] ) return; + + // Initialize menu links + \add_action( 'admin_menu', [ $this, '_init_menu' ] ); + + // Initialize Transport page actions. + \add_action( 'admin_init', [ $this, '_load_transport_admin_actions' ] ); + + // Update POST listener. + \add_action( 'wp_ajax_tsfem_e_transport', [ $this, '_wp_ajax_transport' ] ); + } + + /** + * Returns a list of supported importers. + * + * @since 1.0.0 + * + * @return array A list of supported importers. + */ + private function get_importers() { + return [ '' => [ 'title' => sprintf( '— %s —', @@ -219,27 +249,6 @@ private function construct() { // 'title' => 'All In One SEO', // ], ]; - - $this->transport_page_slug = 'theseoframework-transport'; - - /** - * Set error notice option. - * - * @see trait TSF_Extension_Manager\Error - */ - $this->error_notice_option = 'tsfem_e_transport_error_notice_option'; - - // Nothing to do here... - if ( \tsf()->is_headless['settings'] ) return; - - // Initialize menu links - \add_action( 'admin_menu', [ $this, '_init_menu' ] ); - - // Initialize Transport page actions. - \add_action( 'admin_init', [ $this, '_load_transport_admin_actions' ] ); - - // Update POST listener. - \add_action( 'wp_ajax_tsfem_e_transport', [ $this, '_wp_ajax_transport' ] ); } /** @@ -301,7 +310,7 @@ public function _wp_ajax_transport() { switch ( $_REQUEST['handle'] ?? null ) : case 'import': - ( new Handler )->_import( $this->importers ); + ( new Handler )->_import( $this->get_importers() ); break; default: diff --git a/extensions/free/transport/trunk/inc/classes/importers/termmeta/seo-by-rank-math.class.php b/extensions/free/transport/trunk/inc/classes/importers/termmeta/seo-by-rank-math.class.php index 6d28d772..723b3c89 100644 --- a/extensions/free/transport/trunk/inc/classes/importers/termmeta/seo-by-rank-math.class.php +++ b/extensions/free/transport/trunk/inc/classes/importers/termmeta/seo-by-rank-math.class.php @@ -334,16 +334,11 @@ protected function _rank_math_term_meta_transmuter( $data, &$actions, &$results } if ( isset( $data['to_data']['sanitizers'][ $from ] ) ) { - $_set_value = \call_user_func_array( - $data['to_data']['sanitizers'][ $from ], - [ - $_set_value, - $data['item_id'], - $this->type, - [ $from_table, $from_index ], - [ $to_table, $to_index ], - ] - ); + $_pre_sanitize_value = $_set_value; + + $_set_value = \call_user_func( $data['to_data']['sanitizers'][ $from ], $_set_value ); + + $results['sanitized'] += (int) ( $_pre_sanitize_value !== $set_value ); } if ( ! \in_array( $_set_value, $this->useless_data, true ) ) { diff --git a/extensions/free/transport/trunk/inc/classes/importers/termmeta/wordpress-seo.class.php b/extensions/free/transport/trunk/inc/classes/importers/termmeta/wordpress-seo.class.php index 314a54f9..c547c8d7 100644 --- a/extensions/free/transport/trunk/inc/classes/importers/termmeta/wordpress-seo.class.php +++ b/extensions/free/transport/trunk/inc/classes/importers/termmeta/wordpress-seo.class.php @@ -231,16 +231,11 @@ protected function _wpseo_term_meta_transmuter( $data, &$actions, &$results ) { } if ( isset( $data['to_data']['sanitizers'][ $from ] ) ) { - $_set_value = \call_user_func_array( - $data['to_data']['sanitizers'][ $from ], - [ - $_set_value, - $data['item_id'], - $this->type, - [ $from_table, $from_index ], - [ $to_table, $to_index ], - ] - ); + $_pre_sanitize_value = $_set_value; + + $_set_value = \call_user_func( $data['to_data']['sanitizers'][ $from ], $_set_value ); + + $results['sanitized'] += (int) ( $_pre_sanitize_value !== $set_value ); } if ( ! \in_array( $_set_value, $this->useless_data, true ) ) { diff --git a/extensions/free/transport/trunk/readme.md b/extensions/free/transport/trunk/readme.md index e863c4c7..3680fcc5 100644 --- a/extensions/free/transport/trunk/readme.md +++ b/extensions/free/transport/trunk/readme.md @@ -48,8 +48,8 @@ The importer keeps track of how many database items are found per data type; it The logger will display in real-time the progress of all data transactions. -Because webbrowsers become slow at about 32 000 characters, the logger trims chunks of old log data to stay beneath that number. -You can hit "Copy log" to grab what's in the logger. +Because webbrowsers become slow at about 32 000 characters (18 book pages), the logger trims chunks of old log data to stay beneath that number. +You can hit "Copy log" to grab what's present in the logger. If there's an issue, feel free to send us a [support email](https://theseoframework.com/support/) with the log attached. @@ -65,16 +65,16 @@ Yes. #### Really? -Yes. Transport can irreversibly alter and irretrievably delete metadata. +Yes. Transport will irreversibly alter and irretrievably delete metadata; both are intended features. We recommend transporting only when you're certain you want to stay with The SEO Framework. Otherwise, you should keep a backup ready in case you want to go back (we cannot comprehend why anyone would, though). ### What data is transformed? -All titles and descriptions pass through the transformer. This transformer takes syntax, such as `%archive_title%`, and transforms those accordingly. +All titles and descriptions pass through the transformer. This transformer takes syntax, such as `%archive_title%`, and transforms those as the plugin you're migrating from would. -After transformation, stray separators and spaces will be trimmed from either side of the title or description. +After transformation, repeating separators will coalesced (`text | | | text` becomes `text | text`), and stray separators and spaces will be trimmed from either side of the title or description. | Syntax | Becomes | |:----------------------- |:------------------------------------------------------------------------ | @@ -82,7 +82,7 @@ After transformation, stray separators and spaces will be trimmed from either si | `author_first_name` | The post author first name | | `author_last_name` | The post author last name | | `caption` | The post excerpt | -| `category` | All post category names, or the term title | +| `category` | All post category names or the term title | | `category_description` | The term description | | `category_title` | The term title | | `currentdate` | [tsfep-gimmick type="date" format="F j, Y"] | @@ -103,7 +103,7 @@ After transformation, stray separators and spaces will be trimmed from either si | `post_day` | The post publishing day (e.g., [tsfep-gimmick type="date" format="j"]) | | `pt_plural` | The current post type plural name (e.g., Posts) | | `pt_single` | The current post type singular name (e.g., Post) | -| `sep` | The title separator (·, |, >, etc.) | +| `sep` | The title separator (`·`, `|`, `>`, etc.) | | `sitedesc` | The blog description | | `sitename` | The blog name | | `tag` | All post tag names, or the term title | diff --git a/extensions/free/transport/trunk/views/layout/panes/importer.php b/extensions/free/transport/trunk/views/layout/panes/importer.php index 1deaba10..59d1287c 100644 --- a/extensions/free/transport/trunk/views/layout/panes/importer.php +++ b/extensions/free/transport/trunk/views/layout/panes/importer.php @@ -23,8 +23,8 @@ // phpcs:ignore, WordPress.Security.EscapeOutput.OutputNotEscaped -- tsf()->convert_markdown escapes. tsf()->convert_markdown( sprintf( - /* translators: %s = URL to backup documentation */ - esc_html__( 'This importer updates index keys in the meta databases of this WordPress installation. **Old data will be deleted** and some data may be transformed irreversibly. Although careful consideration was made, transaction errors can occur where **data can be lost permanently**. The Transport extension actively logs all transactions on your screen and will halt transportation on failure. Still, **always make a backup before importing**. [Learn about WordPress backups](%s).', 'the-seo-framework-extension-manager' ), + /* translators: %s = URL to backup documentation. Asterisks are markdown! */ + esc_html__( 'The importer updates index keys in the database of this WordPress installation. **Old data will be deleted** and some data will be transformed. The Transport extension actively logs all transactions on your screen and will halt transportation on failure. **Always make a backup before importing** in case you need to undo the transport. [Learn about WordPress backups](%s).', 'the-seo-framework-extension-manager' ), esc_url( _x( 'https://wordpress.org/support/article/wordpress-backups/', 'backup documentation', @@ -42,7 +42,7 @@ $_importer_options = ''; $_selected = true; $_available = true; - foreach ( $this->importers as $importer => $data ) { + foreach ( $this->get_importers() as $importer => $data ) { $_importer_options .= vsprintf( '', [ diff --git a/extensions/premium/local/trunk/inc/classes/settings.class.php b/extensions/premium/local/trunk/inc/classes/settings.class.php index b9b4ea12..ea127993 100644 --- a/extensions/premium/local/trunk/inc/classes/settings.class.php +++ b/extensions/premium/local/trunk/inc/classes/settings.class.php @@ -85,6 +85,12 @@ final class Settings { */ protected $slug = ''; + /** + * @since 1.0.0 + * @var array The settings form architectural arguments. + */ + protected $form_args = []; + /** * Initializes and outputs Settings page. * diff --git a/extensions/premium/local/trunk/views/layout/general/top.php b/extensions/premium/local/trunk/views/layout/general/top.php index 021a6129..564ca638 100644 --- a/extensions/premium/local/trunk/views/layout/general/top.php +++ b/extensions/premium/local/trunk/views/layout/general/top.php @@ -28,10 +28,8 @@ ?> -
- get_test_button(), $this->get_form()->_form_button( 'submit', __( 'Save', 'the-seo-framework-extension-manager' ), 'get' ); - ?> -
+ $this->get_test_button(), $this->get_form()->_form_button( 'submit', __( 'Save', 'the-seo-framework-extension-manager' ), 'get' ) +?> escape( $value, $schema->_handlers->_escape ); if ( isset( $schema->_handlers->_condition ) ) { - $this->condition[ $key ] = []; + $this->registered_conditions[ $key ] = []; $value = $this->condition( $key, $value, $schema->_handlers->_condition ); } @@ -535,19 +541,18 @@ private function escape( $value, $how ) { */ private function get_condition( $key ) { - if ( empty( $this->condition[ $key ] ) ) { - unset( $this->condition[ $key ] ); + if ( empty( $this->registered_conditions[ $key ] ) ) { + unset( $this->registered_conditions[ $key ] ); return -1; } - $c = $this->condition[ $key ]; - unset( $this->condition[ $key ] ); - $kill_this = $kill_sub = $kill_pack = 0; - - foreach ( $c as $v ) { + // Write to variables. TODO use array_flip/fill or eqv, which are safer? + // $this->registered_conditions[ $key ] = [ 'kill_pack', 'kill_sub', 'kill_this' ]; + foreach ( $this->registered_conditions[ $key ] as $v ) ${$v} = 1; - } + + unset( $this->registered_conditions[ $key ] ); // Returns in order of impact. if ( $kill_pack ) @@ -579,9 +584,9 @@ private function get_condition( $key ) { private function condition( $key, $value, $what ) { if ( \is_array( $what ) && \count( $what ) > 1 ) { - foreach ( $what as $w ) { + foreach ( $what as $w ) $value = $this->condition( $key, $value, $w ); - } + return $value; } @@ -674,7 +679,7 @@ private function condition( $key, $value, $what ) { case 'kill_this': case 'kill_sub': case 'kill_pack': - $this->condition[ $key ][] = $c->_do; + $this->registered_conditions[ $key ][] = $c->_do; return null; case 'set': diff --git a/inc/traits/core/ui.trait.php b/inc/traits/core/ui.trait.php index 99d87b3a..edc0ccfe 100644 --- a/inc/traits/core/ui.trait.php +++ b/inc/traits/core/ui.trait.php @@ -148,9 +148,9 @@ final public function panes_wrap() { * @since 1.5.0 */ final public function connect_wrap() { - echo '
'; + echo '
'; \do_action( 'tsfem_content' ); - echo '
'; + echo '
'; } /** diff --git a/lib/css/tsfem-ui.css b/lib/css/tsfem-ui.css index c994c129..94e2225a 100644 --- a/lib/css/tsfem-ui.css +++ b/lib/css/tsfem-ui.css @@ -190,14 +190,10 @@ body.tsfem.rtl .wrap { #tsfem-top-wrap { margin: 0 auto; - padding: 0 1.2vw; + padding: 1em 1.2vw; max-width: 1240px; } -#tsfem-top-wrap > * { - padding: 1em 0; -} - /* "padding: 0 0 1.4%" Edge/Firefox inline margins issue */ /* "margin: 0 1.4%;" Edge/Firefox inline margins issue */ .tsfem-footer-wrap { @@ -695,7 +691,7 @@ body.rtl .tsfem-button-loading:after { width: 100%; max-width: 690px; padding: 1em 1.5em; - margin: 0 auto 1.2vw; + margin-bottom: 1.2vw; box-sizing: border-box; background: #fff; border: 1px solid #ccd0d4; diff --git a/lib/css/tsfem-ui.min.css b/lib/css/tsfem-ui.min.css index 27bed19f..48fbd5ab 100644 --- a/lib/css/tsfem-ui.min.css +++ b/lib/css/tsfem-ui.min.css @@ -1 +1 @@ -#tsfem-page-wrap .error,#tsfem-page-wrap .notice,#tsfem-page-wrap .tsf-notice,#tsfem-page-wrap .warning{display:block;margin:1.2vw .6vw 0;box-shadow:0 .1em .4em rgba(0,0,0,.18);border-radius:3px}#tsfem-page-wrap #update-nag,#tsfem-page-wrap .update-nag,body.tsfem #update-nag,body.tsfem .update-nag{display:none}.tsfem-flex-status-loading>span{display:inline-block;font-size:30px;text-align:center}.tsfem-flex-status-loading>span:after{display:inline-block;width:1em;content:"\f463";font-size:1em;line-height:1em;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:middle;color:#0ebfe9;line-height:1em;font-size:1em;animation:tsfem-spin 1.5s linear infinite}.tsfem-disable-cursor{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-question-cursor{cursor:help}.tsfem-flex{box-sizing:border-box;display:flex;flex:1 1 auto;flex-wrap:wrap;flex-direction:column;justify-content:flex-start}.tsfem-flex-rtl{justify-content:flex-start}.tsfem-flex-row{flex-direction:row}.tsfem-flex-nowrap{flex-wrap:nowrap}.tsfem-flex-grow{flex-grow:1}.tsfem-flex-nogrow{flex:0 1 auto}.tsfem-flex-noshrink{flex:1 0 auto}.tsfem-flex-nogrowshrink{flex:0 0 auto}.tsfem-flex-space{justify-content:space-between}.tsfem-flex-center{justify-content:center}.tsfem-flex-end{justify-content:flex-end}body.tsfem #wpbody-content{padding-bottom:0}body.tsfem .wrap{display:grid;grid-auto-rows:max-content minmax(max-content,1fr) max-content;min-height:calc(100vh - 32px);padding:0;margin:0;margin-left:-20px}body.tsfem.rtl .wrap{margin-left:0;margin-right:-20px}#tsfem-notice-wrap{margin:0 auto;max-width:1240px}.tsfem-connect-wrap{flex:1 1 auto;margin:1.2vw}#tsfem-sticky-top{position:-webkit-sticky;position:sticky;margin-bottom:1.2vw;top:32px;z-index:9980;background:linear-gradient(to bottom,rgba(0,0,0,.3),rgba(0,0,0,0))}@media screen and (max-width:782px){body.tsfem .wrap{margin-left:-10px}#tsfem-sticky-top{top:46px}}@media screen and (max-width:600px){#tsfem-sticky-top{position:initial;background:0 0}}#tsfem-top-super-wrap{background-color:#fff;border-bottom:1px solid #ccd0d4;width:100%}#tsfem-top-wrap{margin:0 auto;padding:0 1.2vw;max-width:1240px}#tsfem-top-wrap>*{padding:1em 0}.tsfem-footer-wrap{padding:calc(1em + .6vw) 0;margin:0 1.2vw;overflow:hidden;white-space:nowrap;text-align:center}.tsfem-flex-textarea-wrap{flex-direction:row;min-width:100%;width:100%;flex:0 0 auto}.tsfem-flex-textarea-wrap textarea{display:block;min-width:100%}#tsfem-top-wrap .tsfem-title,.tsfem-top-about,.tsfem-top-actions{text-align:left;align-items:center}.tsfem-top-about,.tsfem-top-actions{justify-content:flex-end;min-width:200px}.tsfem-top-about{flex:1 1 50%}.tsfem-top-actions>div{display:inline-block;white-space:pre}.tsfem-top-actions>:nth-last-child(n+2){margin-right:1em}body.rtl .tsfem-top-actions>:nth-last-child(n+2){margin-right:0;margin-left:1em}.tsfem-top-about>div{display:inline-block;text-align:justify;max-width:calc(100% - 1.2em - 1em);color:#333;letter-spacing:.2px}#tsfem-top-wrap .tsfem-title h1{display:flex;font-family:Verdana,Geneva,sans-serif;word-break:break-word;font-size:1.9em;font-weight:400;line-height:1.1em;color:#333;margin:0;padding:0}#tsfem-top-wrap .tsfem-title .tsfem-logo>svg{padding:0;margin-right:.75ch;vertical-align:top}body.rtl #tsfem-top-wrap .tsfem-title .tsfem-logo>svg{margin-right:0;margin-left:.75ch}.tsfem-logger{display:block;padding:1em 1em .5em;margin:0;line-height:1.5;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:3px;overflow:auto;min-height:calc(2.5em * 1.5);height:calc(14em * 1.5);resize:vertical;white-space:pre-wrap;word-break:break-word;clear:both;will-change:contents,scroll-position}#tsfem-page-wrap input[type=checkbox]:focus,#tsfem-page-wrap input[type=color]:focus,#tsfem-page-wrap input[type=date]:focus,#tsfem-page-wrap input[type=datetime-local]:focus,#tsfem-page-wrap input[type=datetime]:focus,#tsfem-page-wrap input[type=email]:focus,#tsfem-page-wrap input[type=month]:focus,#tsfem-page-wrap input[type=number]:focus,#tsfem-page-wrap input[type=password]:focus,#tsfem-page-wrap input[type=radio]:focus,#tsfem-page-wrap input[type=search]:focus,#tsfem-page-wrap input[type=tel]:focus,#tsfem-page-wrap input[type=text]:focus,#tsfem-page-wrap input[type=time]:focus,#tsfem-page-wrap input[type=url]:focus,#tsfem-page-wrap input[type=week]:focus,#tsfem-page-wrap select:focus,#tsfem-page-wrap textarea:focus{border-color:#057f9c;box-shadow:0 0 2px rgba(66,144,183,.8)}#tsfem-page-wrap .tsf-remove-image-button,#tsfem-page-wrap .tsf-remove-image-button:active,#tsfem-page-wrap .tsf-remove-image-button:focus,#tsfem-page-wrap .tsf-remove-image-button:hover,#tsfem-page-wrap .tsf-set-image-button,#tsfem-page-wrap .tsf-set-image-button:active,#tsfem-page-wrap .tsf-set-image-button:focus,#tsfem-page-wrap .tsf-set-image-button:hover,.tsfem-button,.tsfem-button-primary,.tsfem-button-primary:active,.tsfem-button-primary:focus,.tsfem-button-primary:hover,.tsfem-button:active,.tsfem-button:focus,.tsfem-button:hover{display:inline-block;box-shadow:0 0 .3em transparent,0 0 0 transparent inset;filter:none;transition:box-shadow .125s,color .125s .0625s,background .0625s .125s;padding:.4em 1em .5em;font-size:1em;font-weight:400;line-height:1em;text-decoration:none;text-align:center;cursor:pointer;outline:0;color:#444;background:#f6f8f9;border:1px solid currentColor;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:3px}.tsfem-button,.tsfem-button:active,.tsfem-button:focus,.tsfem-button:hover{color:#666}.tsfem-button-red,.tsfem-button-red:focus,.tsfem-button-red:hover{color:#dd3811}#tsfem-page-wrap .tsf-set-image-button,#tsfem-page-wrap .tsf-set-image-button:active,#tsfem-page-wrap .tsf-set-image-button:focus,#tsfem-page-wrap .tsf-set-image-button:hover,.tsfem-button-primary,.tsfem-button-primary:active,.tsfem-button-primary:focus,.tsfem-button-primary:hover{background:#05809e;color:#fff}#tsfem-page-wrap .tsf-set-image-button:focus,#tsfem-page-wrap .tsf-set-image-button:hover,.tsfem-button-primary:focus,.tsfem-button-primary:hover,.tsfem-button:focus,.tsfem-button:hover{box-shadow:0 .1em .5em rgba(0,0,0,.3),0 0 0 transparent inset}#tsfem-page-wrap .tsf-set-image-button:active,.tsfem-button-primary:active,.tsfem-button:active{box-shadow:0 0 .3em transparent,0 0 .3em 0 rgba(0,0,0,.3) inset;transition-duration:.15s}.tsfem-button-small,.tsfem-button-small:active,.tsfem-button-small:focus,.tsfem-button-small:hover{font-size:.9em;padding:.5em 1em}.tsfem-button-primary-bright,.tsfem-button-primary-bright:focus,.tsfem-button-primary-bright:hover{background:#0ebfe9}.tsfem-button-primary-dark,.tsfem-button-primary-dark:focus,.tsfem-button-primary-dark:hover{background:#535353}.tsfem-button-clipboard:after,.tsfem-button-cloud:after,.tsfem-button-down:after,.tsfem-button-download:after,.tsfem-button-external:after,.tsfem-button-flag:after,.tsfem-button-image:after,.tsfem-button-index:after,.tsfem-button-loading:after,.tsfem-button-love:after,.tsfem-button-star:after,.tsfem-button-upload:after,.tsfem-button-warning:after{display:inline-block;width:1em;height:1em;line-height:1em;font-size:1em;content:"\f155";font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;margin-left:.5em}body.rtl .tsfem-button-clipboard:after,body.rtl .tsfem-button-cloud:after,body.rtl .tsfem-button-down:after,body.rtl .tsfem-button-download:after,body.rtl .tsfem-button-external:after,body.rtl .tsfem-button-flag:after,body.rtl .tsfem-button-image:after,body.rtl .tsfem-button-index:after,body.rtl .tsfem-button-loading:after,body.rtl .tsfem-button-love:after,body.rtl .tsfem-button-star:after,body.rtl .tsfem-button-upload:after,body.rtl .tsfem-button-warning:after{margin-left:0;margin-right:.5em}.tsfem-button-small:after{font-size:.9em}.tsfem-button-flag:after{content:"\f227"}.tsfem-button-warning:after{content:"\f534"}.tsfem-button-love:after{content:"\f487"}.tsfem-button-upload:after{content:"\f317"}.tsfem-button-download:after{content:"\f316"}.tsfem-button-clipboard:after{content:"\f481"}.tsfem-button-index:after{content:"\f510"}.tsfem-button-cloud:after{content:"\f176"}.tsfem-button-external:after{content:"\f504"}.tsfem-button-image:after{content:"\f128"}.tsfem-button-down:after{content:"\f347"}.tsfem-button-loading:after{content:"\f463";-moz-animation:tsfem-spin 1.5s linear infinite;-o-animation:tsfem-spin 1.5s linear infinite;animation:tsfem-spin 1.5s linear infinite}.tsfem-switch-button-container-wrap{display:inline-block;perspective:800px;perspective-origin:50%}.tsfem-switch-button-container{position:relative;margin:0;width:140px;height:2em;padding:0;display:block}.tsfem-switch-button-container input[type=checkbox]{position:absolute;width:0;height:0;opacity:0;margin:0;padding:0;border:0;z-index:-1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tsfem-switch-button-container button,.tsfem-switch-button-container label{position:absolute;left:0;top:0;text-align:center;transition:transform 1s,opacity .5s;z-index:1;width:100%;display:block;width:140px;box-sizing:border-box}.tsfem-switch-button-container input[type=checkbox]~button{visibility:hidden}.tsfem-switch-button-container input[type=checkbox]+label{z-index:2;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-switch-button-container input[type=checkbox]:focus+label{background:#eee;color:#666;box-shadow:0 .2em 1em rgba(0,0,0,.3),0 0 0 transparent inset}.tsfem-switch-button-container button{transform:rotateX(-90deg);transform-origin:0 100% 0;opacity:0;transition:transform 1.2s,opacity .6s}.tsfem-switch-button-container input[type=checkbox]:checked:before{content:none}.tsfem-switch-button-container input[type=checkbox]:checked+label{transform:rotateX(90deg) translateY(-100%);opacity:0;z-index:0;transition:transform 1.2s,opacity .6s}.tsfem-switch-button-container input[type=checkbox]:checked~button{transform:rotateX(0);opacity:1;z-index:2;transition:transform 1s,opacity .5s;visibility:visible}.tsfem-button-disabled,.tsfem-button-disabled:active,.tsfem-button-disabled:disabled,.tsfem-button-disabled:disabled:active,.tsfem-button-disabled:disabled:focus,.tsfem-button-disabled:disabled:hover,.tsfem-button-disabled:focus,.tsfem-button-disabled:hover,.tsfem-button-primary:disabled,.tsfem-button-primary:disabled:active,.tsfem-button-primary:disabled:focus,.tsfem-button-primary:disabled:hover,.tsfem-button:disabled,.tsfem-button:disabled:active,.tsfem-button:disabled:focus,.tsfem-button:disabled:hover{background:#ddd;color:#aaa;font-weight:400;box-shadow:none;cursor:not-allowed;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-about-activation:before{display:inline-block;color:#0ebfe9;content:"\f112";font-size:1.2em;line-height:1.2em;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;margin:0 7px;vertical-align:baseline;white-space:pre-wrap}.tsfem-connect-option{width:100%;max-width:690px;padding:1em 1.5em;margin:0 auto 1.2vw;box-sizing:border-box;background:#fff;border:1px solid #ccd0d4;border-radius:4px}.tsfem-connect-row{align-items:center;justify-content:space-between}.tsfem-connect-option:last-of-type{margin-bottom:0}.tsfem-connect-action,.tsfem-connect-text{margin:.5em 0;flex:1 1 49%;min-width:175px;padding:3px}.tsfem-connect-action form{margin:0;padding:0}.tsfem-connect-description>*{margin:0 0 1em;display:block}.tsfem-connect-description>:last-child{margin-bottom:0}.tsfem-connect-wrap h3{font-size:1.66em;color:#057f9c;font-weight:400}.tsfem-panes-super-wrap{width:100%;max-width:1240px;margin:0 auto}.tsfem-panes-wrap{padding:0;margin:0 1.2vw;display:grid;grid-template:repeat(auto-fit,minmax(auto,310px))/repeat(auto-fit,minmax(310px,1fr));grid-template:repeat(auto-fit,minmax(max-content,310px))/repeat(auto-fit,minmax(310px,1fr));grid-gap:1.2vw;grid-auto-flow:row dense;align-self:flex-start;align-self:start}.tsfem-pane-section{margin-bottom:2em}.tsfem-pane-section:last-of-type{margin-bottom:0}.tsfem-pane{height:100%;height:max-content;padding:0}@media screen and (min-width:660px){.tsfem-pane{grid-column:auto/1 span;grid-row:auto/1 span}.tsfem-pane-tall{grid-row:auto/2 span}.tsfem-pane-wide{grid-column:auto/2 span}.tsfem-pane-full{grid-row:auto/2 span;grid-column:auto/2 span}}.tsfem-pane-wrap{width:100%;height:max-content;background:#fff;border:1px solid #ccd0d4;border-radius:4px}.tsfem-pane-header{z-index:5}.tsfem-pane-content,.tsfem-pane-header{margin:0;padding:1em 1.5em}.tsfem-pane-content{padding:0;border-radius:4px;height:100%}.tsfem-pane-header>*{font-size:1em;line-height:1em;margin:0;padding:0;box-sizing:border-box;display:flex;flex:1 1 auto;flex-direction:row;align-items:center;justify-content:flex-end}.tsfem-pane-header .tsfem-ajax{max-width:initial;font-size:1em;word-break:break-word;text-align:right;flex:0 1 auto;margin-left:.5em}.tsfem-pane-header h3{font-size:1.33em;color:#057f9c;font-weight:400;justify-content:flex-start;width:max-content}.tsfem-pane-header img,.tsfem-pane-header svg{margin-right:.75ch}.tsfem-pane-content h4.tsfem-status-title,.tsfem-pane-content h5.tsfem-status-title,.tsfem-pane-content h6.tsfem-status-title{margin:0}.tsfem-pane-inner-wrap{background:#fff;box-sizing:border-box;padding:1.5em;height:auto;max-height:100%;width:100%;border-radius:4px}.tsfem-pane-inner-collapsable-settings-wrap{padding:0}.tsfem-pane-inner-pad{width:100%;padding:1.5em}.tsfem-pane-inner-pad+.tsfem-pane-inner-pad{padding-top:0}.tsfem-pane-footer-wrap{margin:0;padding:1em 1.5em;border-top:1px solid rgba(0,0,0,.18);z-index:5}.tsfem-pane-footer-wrap>:nth-last-child(n+2){margin-right:1em}body.rtl .tsfem-pane-footer-wrap>:nth-last-child(n+2){margin-right:0;margin-left:1em}.tsfem-flex-account-info-rows,.tsfem-flex-account-setting-rows{line-height:1.625em;max-width:400px}.tsfem-actions-account-info-title{font-weight:600}h4.tsfem-action-title,h4.tsfem-cp-title,h4.tsfem-form-title,h4.tsfem-info-title,h4.tsfem-status-title,h4.tsfem-support-title{padding:0;margin:0 0 1em;font-size:1.16em;font-weight:400;color:#057f9c}.tsfem-account-upgrade,.tsfem-cp-buttons,.tsfem-support-buttons{max-width:300px}.tsfem-cp-buttons,.tsfem-support-buttons{margin-bottom:.8em;flex-basis:50%}.tsfem-cp-buttons:last-of-type,.tsfem-support-buttons:last-of-type{margin-bottom:0}.tsfem-cp-buttons>a,.tsfem-cp-buttons>form,.tsfem-support-buttons>a{cursor:pointer;min-width:50%;display:inline-block}.tsfem-cp-buttons button{width:100%}.tsfem-description{font-size:.93em;font-style:oblique;text-indent:.5em}.tsfem-ajax:after,.tsfem-dashicon:after{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;width:1em;vertical-align:baseline;content:"";margin-left:.333em}.tsfem-ajax:after{font-size:1.225em;line-height:.816em}.tsfem-dashicon:after{font-size:1.2em;vertical-align:text-bottom;margin-left:2px}.tsfem-ajax.tsfem-loading:after{content:"\f463";color:#057c99;animation:tsfem-spin 1.5s linear infinite}.tsfem-dashicon-fadeout-3000:after{animation:tsfem-fadeout 3s linear 1}.tsfem-ajax.tsfem-error:after,.tsfem-dashicon.tsfem-error:after{content:"\f158";color:#dd3811}.tsfem-ajax.tsfem-success:after,.tsfem-dashicon.tsfem-success:after{content:"\f147";color:#0cc34b}.tsfem-ajax.tsfem-unknown:after,.tsfem-dashicon.tsfem-unknown:after{content:"\f223";color:#057c99}.tsfem-dashicon.tsfem-warning:after{content:"\f227";color:#ffa01b}.tsfem-dashicon.tsfem-edit:after{content:"\f464";color:#ffa01b}.tsfem-dashicon.tsfem-close:after{content:"\f158";color:#ffa01b}@keyframes tsfem-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tsfem-fadeout{100%{opacity:0}}#tsfem-page-wrap #wpfooter{z-index:-1;padding:0}.tsfem-footer-wrap .tsfem-footer-motto,.tsfem-footer-wrap .tsfem-footer-title{font-size:1em;margin:0;color:#646d78;font-weight:300;cursor:default}.tsfem-footer-wrap .tsfem-footer-title{font-weight:400;color:#555d66}.tsfem-modal-mask,.tsfem-modal-mask-noscroll{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483644;opacity:0}.tsfem-modal-mask-noscroll{position:absolute;z-index:2147483645}.tsfem-modal-buttons,.tsfem-modal-container,.tsfem-modal-dialog,.tsfem-modal-dialog-wrap,.tsfem-modal-select,.tsfem-modal-select-option,.tsfem-modal-title{display:flex}.tsfem-modal-container{position:fixed;top:0;left:0;overflow:hidden;width:100%;height:100%;background:rgba(33,33,33,.15);opacity:0;z-index:2147483646}.tsfem-modal-dialog-wrap{position:absolute;top:0;right:0;left:0;bottom:0;justify-content:center;align-items:center}.tsfem-modal-dialog{flex-direction:column;background:#fff;border-radius:3px;min-width:240px;max-width:calc(90% - 240px);max-height:80%;position:relative;overflow:hidden;box-shadow:0 0 4px 2px #aaa;z-index:2147483647}.tsfem-modal-buttons,.tsfem-modal-title{margin:0;padding:1em calc(1em + .6vw);box-shadow:0 1px 3px 0 #ccc;z-index:5;flex-shrink:0}.tsfem-modal-buttons{box-shadow:0 -1px 3px 0 #ccc;justify-content:flex-end}.tsfem-modal-title h4{margin:0;padding:0;font-size:1.4em;line-height:1.2em;color:#057f9c;font-weight:400}.tsfem-modal-inner{padding:calc(1em + .6vw);max-width:640px;overflow:auto;overflow-x:hidden}.tsfem-modal-text p:first-of-type{margin:0}.tsfem-modal-text p:last-of-type{margin-bottom:0}.tsfem-modal-text+.tsfem-modal-select{margin-top:calc(1em + .6vw)}.tsfem-modal-select{flex-wrap:wrap;align-items:flex-start}.tsfem-modal-select-option{margin-bottom:1em;padding:0 .5em;flex-basis:140px;max-width:calc(50% - 1em);flex-grow:1}.tsfem-modal-select-option:first-of-type:last-of-type{max-width:none}.tsfem-modal-select-option input{position:absolute;width:0;height:0;opacity:0;margin:0!important;padding:0!important;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tsfem-modal-select-option label{font-weight:600;border:1px solid transparent;background:#fefefe;box-shadow:0 1px 3px 1px #ccc;cursor:pointer;padding:1em;width:100%;transition:all .33s;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-modal-select-option:hover input:not(:checked)+label{filter:brightness(.95)}.tsfem-modal-select-option>input:checked+label{border-color:#05809e}.tsfem-modal-select-option input:active+label,.tsfem-modal-select-option input:focus+label,.tsfem-modal-select-option:hover input:checked+label{box-shadow:0 1px 3px 1px #05809e}.tsfem-modal-buttons button:nth-child(n+2){margin-left:1em}body.rtl .tsfem-modal-buttons button:nth-child(n+2){margin-left:initial;margin-right:1em}.tsfem-modal-dismiss{position:absolute;top:0;right:0;border:none;margin:7px;padding:7px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none;z-index:6;transition:color .15s}body.rtl .tsfem-modal-dismiss{right:initial;left:0}.tsfem-modal-dismiss:hover{color:#d14b44}.tsfem-modal-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tsfem-hidden{display:none}.tsfem-has-hover-balloon{position:relative;cursor:help}.tsfem-ltr{direction:ltr} +#tsfem-page-wrap .error,#tsfem-page-wrap .notice,#tsfem-page-wrap .tsf-notice,#tsfem-page-wrap .warning{display:block;margin:1.2vw .6vw 0;box-shadow:0 .1em .4em rgba(0,0,0,.18);border-radius:3px}#tsfem-page-wrap #update-nag,#tsfem-page-wrap .update-nag,body.tsfem #update-nag,body.tsfem .update-nag{display:none}.tsfem-flex-status-loading>span{display:inline-block;font-size:30px;text-align:center}.tsfem-flex-status-loading>span:after{display:inline-block;width:1em;content:"\f463";font-size:1em;line-height:1em;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:middle;color:#0ebfe9;line-height:1em;font-size:1em;animation:tsfem-spin 1.5s linear infinite}.tsfem-disable-cursor{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-question-cursor{cursor:help}.tsfem-flex{box-sizing:border-box;display:flex;flex:1 1 auto;flex-wrap:wrap;flex-direction:column;justify-content:flex-start}.tsfem-flex-rtl{justify-content:flex-start}.tsfem-flex-row{flex-direction:row}.tsfem-flex-nowrap{flex-wrap:nowrap}.tsfem-flex-grow{flex-grow:1}.tsfem-flex-nogrow{flex:0 1 auto}.tsfem-flex-noshrink{flex:1 0 auto}.tsfem-flex-nogrowshrink{flex:0 0 auto}.tsfem-flex-space{justify-content:space-between}.tsfem-flex-center{justify-content:center}.tsfem-flex-end{justify-content:flex-end}body.tsfem #wpbody-content{padding-bottom:0}body.tsfem .wrap{display:grid;grid-auto-rows:max-content minmax(max-content,1fr) max-content;min-height:calc(100vh - 32px);padding:0;margin:0;margin-left:-20px}body.tsfem.rtl .wrap{margin-left:0;margin-right:-20px}#tsfem-notice-wrap{margin:0 auto;max-width:1240px}.tsfem-connect-wrap{flex:1 1 auto;margin:1.2vw}#tsfem-sticky-top{position:-webkit-sticky;position:sticky;margin-bottom:1.2vw;top:32px;z-index:9980;background:linear-gradient(to bottom,rgba(0,0,0,.3),rgba(0,0,0,0))}@media screen and (max-width:782px){body.tsfem .wrap{margin-left:-10px}#tsfem-sticky-top{top:46px}}@media screen and (max-width:600px){#tsfem-sticky-top{position:initial;background:0 0}}#tsfem-top-super-wrap{background-color:#fff;border-bottom:1px solid #ccd0d4;width:100%}#tsfem-top-wrap{margin:0 auto;padding:1em 1.2vw;max-width:1240px}.tsfem-footer-wrap{padding:calc(1em + .6vw) 0;margin:0 1.2vw;overflow:hidden;white-space:nowrap;text-align:center}.tsfem-flex-textarea-wrap{flex-direction:row;min-width:100%;width:100%;flex:0 0 auto}.tsfem-flex-textarea-wrap textarea{display:block;min-width:100%}#tsfem-top-wrap .tsfem-title,.tsfem-top-about,.tsfem-top-actions{text-align:left;align-items:center}.tsfem-top-about,.tsfem-top-actions{justify-content:flex-end;min-width:200px}.tsfem-top-about{flex:1 1 50%}.tsfem-top-actions>div{display:inline-block;white-space:pre}.tsfem-top-actions>:nth-last-child(n+2){margin-right:1em}body.rtl .tsfem-top-actions>:nth-last-child(n+2){margin-right:0;margin-left:1em}.tsfem-top-about>div{display:inline-block;text-align:justify;max-width:calc(100% - 1.2em - 1em);color:#333;letter-spacing:.2px}#tsfem-top-wrap .tsfem-title h1{display:flex;font-family:Verdana,Geneva,sans-serif;word-break:break-word;font-size:1.9em;font-weight:400;line-height:1.1em;color:#333;margin:0;padding:0}#tsfem-top-wrap .tsfem-title .tsfem-logo>svg{padding:0;margin-right:.75ch;vertical-align:top}body.rtl #tsfem-top-wrap .tsfem-title .tsfem-logo>svg{margin-right:0;margin-left:.75ch}.tsfem-logger{display:block;padding:1em 1em .5em;margin:0;line-height:1.5;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:3px;overflow:auto;min-height:calc(2.5em * 1.5);height:calc(14em * 1.5);resize:vertical;white-space:pre-wrap;word-break:break-word;clear:both;will-change:contents,scroll-position}#tsfem-page-wrap input[type=checkbox]:focus,#tsfem-page-wrap input[type=color]:focus,#tsfem-page-wrap input[type=date]:focus,#tsfem-page-wrap input[type=datetime-local]:focus,#tsfem-page-wrap input[type=datetime]:focus,#tsfem-page-wrap input[type=email]:focus,#tsfem-page-wrap input[type=month]:focus,#tsfem-page-wrap input[type=number]:focus,#tsfem-page-wrap input[type=password]:focus,#tsfem-page-wrap input[type=radio]:focus,#tsfem-page-wrap input[type=search]:focus,#tsfem-page-wrap input[type=tel]:focus,#tsfem-page-wrap input[type=text]:focus,#tsfem-page-wrap input[type=time]:focus,#tsfem-page-wrap input[type=url]:focus,#tsfem-page-wrap input[type=week]:focus,#tsfem-page-wrap select:focus,#tsfem-page-wrap textarea:focus{border-color:#057f9c;box-shadow:0 0 2px rgba(66,144,183,.8)}#tsfem-page-wrap .tsf-remove-image-button,#tsfem-page-wrap .tsf-remove-image-button:active,#tsfem-page-wrap .tsf-remove-image-button:focus,#tsfem-page-wrap .tsf-remove-image-button:hover,#tsfem-page-wrap .tsf-set-image-button,#tsfem-page-wrap .tsf-set-image-button:active,#tsfem-page-wrap .tsf-set-image-button:focus,#tsfem-page-wrap .tsf-set-image-button:hover,.tsfem-button,.tsfem-button-primary,.tsfem-button-primary:active,.tsfem-button-primary:focus,.tsfem-button-primary:hover,.tsfem-button:active,.tsfem-button:focus,.tsfem-button:hover{display:inline-block;box-shadow:0 0 .3em transparent,0 0 0 transparent inset;filter:none;transition:box-shadow .125s,color .125s .0625s,background .0625s .125s;padding:.4em 1em .5em;font-size:1em;font-weight:400;line-height:1em;text-decoration:none;text-align:center;cursor:pointer;outline:0;color:#444;background:#f6f8f9;border:1px solid currentColor;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:3px}.tsfem-button,.tsfem-button:active,.tsfem-button:focus,.tsfem-button:hover{color:#666}.tsfem-button-red,.tsfem-button-red:focus,.tsfem-button-red:hover{color:#dd3811}#tsfem-page-wrap .tsf-set-image-button,#tsfem-page-wrap .tsf-set-image-button:active,#tsfem-page-wrap .tsf-set-image-button:focus,#tsfem-page-wrap .tsf-set-image-button:hover,.tsfem-button-primary,.tsfem-button-primary:active,.tsfem-button-primary:focus,.tsfem-button-primary:hover{background:#05809e;color:#fff}#tsfem-page-wrap .tsf-set-image-button:focus,#tsfem-page-wrap .tsf-set-image-button:hover,.tsfem-button-primary:focus,.tsfem-button-primary:hover,.tsfem-button:focus,.tsfem-button:hover{box-shadow:0 .1em .5em rgba(0,0,0,.3),0 0 0 transparent inset}#tsfem-page-wrap .tsf-set-image-button:active,.tsfem-button-primary:active,.tsfem-button:active{box-shadow:0 0 .3em transparent,0 0 .3em 0 rgba(0,0,0,.3) inset;transition-duration:.15s}.tsfem-button-small,.tsfem-button-small:active,.tsfem-button-small:focus,.tsfem-button-small:hover{font-size:.9em;padding:.5em 1em}.tsfem-button-primary-bright,.tsfem-button-primary-bright:focus,.tsfem-button-primary-bright:hover{background:#0ebfe9}.tsfem-button-primary-dark,.tsfem-button-primary-dark:focus,.tsfem-button-primary-dark:hover{background:#535353}.tsfem-button-clipboard:after,.tsfem-button-cloud:after,.tsfem-button-down:after,.tsfem-button-download:after,.tsfem-button-external:after,.tsfem-button-flag:after,.tsfem-button-image:after,.tsfem-button-index:after,.tsfem-button-loading:after,.tsfem-button-love:after,.tsfem-button-star:after,.tsfem-button-upload:after,.tsfem-button-warning:after{display:inline-block;width:1em;height:1em;line-height:1em;font-size:1em;content:"\f155";font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;margin-left:.5em}body.rtl .tsfem-button-clipboard:after,body.rtl .tsfem-button-cloud:after,body.rtl .tsfem-button-down:after,body.rtl .tsfem-button-download:after,body.rtl .tsfem-button-external:after,body.rtl .tsfem-button-flag:after,body.rtl .tsfem-button-image:after,body.rtl .tsfem-button-index:after,body.rtl .tsfem-button-loading:after,body.rtl .tsfem-button-love:after,body.rtl .tsfem-button-star:after,body.rtl .tsfem-button-upload:after,body.rtl .tsfem-button-warning:after{margin-left:0;margin-right:.5em}.tsfem-button-small:after{font-size:.9em}.tsfem-button-flag:after{content:"\f227"}.tsfem-button-warning:after{content:"\f534"}.tsfem-button-love:after{content:"\f487"}.tsfem-button-upload:after{content:"\f317"}.tsfem-button-download:after{content:"\f316"}.tsfem-button-clipboard:after{content:"\f481"}.tsfem-button-index:after{content:"\f510"}.tsfem-button-cloud:after{content:"\f176"}.tsfem-button-external:after{content:"\f504"}.tsfem-button-image:after{content:"\f128"}.tsfem-button-down:after{content:"\f347"}.tsfem-button-loading:after{content:"\f463";-moz-animation:tsfem-spin 1.5s linear infinite;-o-animation:tsfem-spin 1.5s linear infinite;animation:tsfem-spin 1.5s linear infinite}.tsfem-switch-button-container-wrap{display:inline-block;perspective:800px;perspective-origin:50%}.tsfem-switch-button-container{position:relative;margin:0;width:140px;height:2em;padding:0;display:block}.tsfem-switch-button-container input[type=checkbox]{position:absolute;width:0;height:0;opacity:0;margin:0;padding:0;border:0;z-index:-1;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tsfem-switch-button-container button,.tsfem-switch-button-container label{position:absolute;left:0;top:0;text-align:center;transition:transform 1s,opacity .5s;z-index:1;width:100%;display:block;width:140px;box-sizing:border-box}.tsfem-switch-button-container input[type=checkbox]~button{visibility:hidden}.tsfem-switch-button-container input[type=checkbox]+label{z-index:2;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-switch-button-container input[type=checkbox]:focus+label{background:#eee;color:#666;box-shadow:0 .2em 1em rgba(0,0,0,.3),0 0 0 transparent inset}.tsfem-switch-button-container button{transform:rotateX(-90deg);transform-origin:0 100% 0;opacity:0;transition:transform 1.2s,opacity .6s}.tsfem-switch-button-container input[type=checkbox]:checked:before{content:none}.tsfem-switch-button-container input[type=checkbox]:checked+label{transform:rotateX(90deg) translateY(-100%);opacity:0;z-index:0;transition:transform 1.2s,opacity .6s}.tsfem-switch-button-container input[type=checkbox]:checked~button{transform:rotateX(0);opacity:1;z-index:2;transition:transform 1s,opacity .5s;visibility:visible}.tsfem-button-disabled,.tsfem-button-disabled:active,.tsfem-button-disabled:disabled,.tsfem-button-disabled:disabled:active,.tsfem-button-disabled:disabled:focus,.tsfem-button-disabled:disabled:hover,.tsfem-button-disabled:focus,.tsfem-button-disabled:hover,.tsfem-button-primary:disabled,.tsfem-button-primary:disabled:active,.tsfem-button-primary:disabled:focus,.tsfem-button-primary:disabled:hover,.tsfem-button:disabled,.tsfem-button:disabled:active,.tsfem-button:disabled:focus,.tsfem-button:disabled:hover{background:#ddd;color:#aaa;font-weight:400;box-shadow:none;cursor:not-allowed;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-about-activation:before{display:inline-block;color:#0ebfe9;content:"\f112";font-size:1.2em;line-height:1.2em;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;margin:0 7px;vertical-align:baseline;white-space:pre-wrap}.tsfem-connect-option{width:100%;max-width:690px;padding:1em 1.5em;margin-bottom:1.2vw;box-sizing:border-box;background:#fff;border:1px solid #ccd0d4;border-radius:4px}.tsfem-connect-row{align-items:center;justify-content:space-between}.tsfem-connect-option:last-of-type{margin-bottom:0}.tsfem-connect-action,.tsfem-connect-text{margin:.5em 0;flex:1 1 49%;min-width:175px;padding:3px}.tsfem-connect-action form{margin:0;padding:0}.tsfem-connect-description>*{margin:0 0 1em;display:block}.tsfem-connect-description>:last-child{margin-bottom:0}.tsfem-connect-wrap h3{font-size:1.66em;color:#057f9c;font-weight:400}.tsfem-panes-super-wrap{width:100%;max-width:1240px;margin:0 auto}.tsfem-panes-wrap{padding:0;margin:0 1.2vw;display:grid;grid-template:repeat(auto-fit,minmax(auto,310px))/repeat(auto-fit,minmax(310px,1fr));grid-template:repeat(auto-fit,minmax(max-content,310px))/repeat(auto-fit,minmax(310px,1fr));grid-gap:1.2vw;grid-auto-flow:row dense;align-self:flex-start;align-self:start}.tsfem-pane-section{margin-bottom:2em}.tsfem-pane-section:last-of-type{margin-bottom:0}.tsfem-pane{height:100%;height:max-content;padding:0}@media screen and (min-width:660px){.tsfem-pane{grid-column:auto/1 span;grid-row:auto/1 span}.tsfem-pane-tall{grid-row:auto/2 span}.tsfem-pane-wide{grid-column:auto/2 span}.tsfem-pane-full{grid-row:auto/2 span;grid-column:auto/2 span}}.tsfem-pane-wrap{width:100%;height:max-content;background:#fff;border:1px solid #ccd0d4;border-radius:4px}.tsfem-pane-header{z-index:5}.tsfem-pane-content,.tsfem-pane-header{margin:0;padding:1em 1.5em}.tsfem-pane-content{padding:0;border-radius:4px;height:100%}.tsfem-pane-header>*{font-size:1em;line-height:1em;margin:0;padding:0;box-sizing:border-box;display:flex;flex:1 1 auto;flex-direction:row;align-items:center;justify-content:flex-end}.tsfem-pane-header .tsfem-ajax{max-width:initial;font-size:1em;word-break:break-word;text-align:right;flex:0 1 auto;margin-left:.5em}.tsfem-pane-header h3{font-size:1.33em;color:#057f9c;font-weight:400;justify-content:flex-start;width:max-content}.tsfem-pane-header img,.tsfem-pane-header svg{margin-right:.75ch}.tsfem-pane-content h4.tsfem-status-title,.tsfem-pane-content h5.tsfem-status-title,.tsfem-pane-content h6.tsfem-status-title{margin:0}.tsfem-pane-inner-wrap{background:#fff;box-sizing:border-box;padding:1.5em;height:auto;max-height:100%;width:100%;border-radius:4px}.tsfem-pane-inner-collapsable-settings-wrap{padding:0}.tsfem-pane-inner-pad{width:100%;padding:1.5em}.tsfem-pane-inner-pad+.tsfem-pane-inner-pad{padding-top:0}.tsfem-pane-footer-wrap{margin:0;padding:1em 1.5em;border-top:1px solid rgba(0,0,0,.18);z-index:5}.tsfem-pane-footer-wrap>:nth-last-child(n+2){margin-right:1em}body.rtl .tsfem-pane-footer-wrap>:nth-last-child(n+2){margin-right:0;margin-left:1em}.tsfem-flex-account-info-rows,.tsfem-flex-account-setting-rows{line-height:1.625em;max-width:400px}.tsfem-actions-account-info-title{font-weight:600}h4.tsfem-action-title,h4.tsfem-cp-title,h4.tsfem-form-title,h4.tsfem-info-title,h4.tsfem-status-title,h4.tsfem-support-title{padding:0;margin:0 0 1em;font-size:1.16em;font-weight:400;color:#057f9c}.tsfem-account-upgrade,.tsfem-cp-buttons,.tsfem-support-buttons{max-width:300px}.tsfem-cp-buttons,.tsfem-support-buttons{margin-bottom:.8em;flex-basis:50%}.tsfem-cp-buttons:last-of-type,.tsfem-support-buttons:last-of-type{margin-bottom:0}.tsfem-cp-buttons>a,.tsfem-cp-buttons>form,.tsfem-support-buttons>a{cursor:pointer;min-width:50%;display:inline-block}.tsfem-cp-buttons button{width:100%}.tsfem-description{font-size:.93em;font-style:oblique;text-indent:.5em}.tsfem-ajax:after,.tsfem-dashicon:after{display:inline-block;line-height:1;font-family:dashicons;font-style:normal;font-weight:400;width:1em;vertical-align:baseline;content:"";margin-left:.333em}.tsfem-ajax:after{font-size:1.225em;line-height:.816em}.tsfem-dashicon:after{font-size:1.2em;vertical-align:text-bottom;margin-left:2px}.tsfem-ajax.tsfem-loading:after{content:"\f463";color:#057c99;animation:tsfem-spin 1.5s linear infinite}.tsfem-dashicon-fadeout-3000:after{animation:tsfem-fadeout 3s linear 1}.tsfem-ajax.tsfem-error:after,.tsfem-dashicon.tsfem-error:after{content:"\f158";color:#dd3811}.tsfem-ajax.tsfem-success:after,.tsfem-dashicon.tsfem-success:after{content:"\f147";color:#0cc34b}.tsfem-ajax.tsfem-unknown:after,.tsfem-dashicon.tsfem-unknown:after{content:"\f223";color:#057c99}.tsfem-dashicon.tsfem-warning:after{content:"\f227";color:#ffa01b}.tsfem-dashicon.tsfem-edit:after{content:"\f464";color:#ffa01b}.tsfem-dashicon.tsfem-close:after{content:"\f158";color:#ffa01b}@keyframes tsfem-spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes tsfem-fadeout{100%{opacity:0}}#tsfem-page-wrap #wpfooter{z-index:-1;padding:0}.tsfem-footer-wrap .tsfem-footer-motto,.tsfem-footer-wrap .tsfem-footer-title{font-size:1em;margin:0;color:#646d78;font-weight:300;cursor:default}.tsfem-footer-wrap .tsfem-footer-title{font-weight:400;color:#555d66}.tsfem-modal-mask,.tsfem-modal-mask-noscroll{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483644;opacity:0}.tsfem-modal-mask-noscroll{position:absolute;z-index:2147483645}.tsfem-modal-buttons,.tsfem-modal-container,.tsfem-modal-dialog,.tsfem-modal-dialog-wrap,.tsfem-modal-select,.tsfem-modal-select-option,.tsfem-modal-title{display:flex}.tsfem-modal-container{position:fixed;top:0;left:0;overflow:hidden;width:100%;height:100%;background:rgba(33,33,33,.15);opacity:0;z-index:2147483646}.tsfem-modal-dialog-wrap{position:absolute;top:0;right:0;left:0;bottom:0;justify-content:center;align-items:center}.tsfem-modal-dialog{flex-direction:column;background:#fff;border-radius:3px;min-width:240px;max-width:calc(90% - 240px);max-height:80%;position:relative;overflow:hidden;box-shadow:0 0 4px 2px #aaa;z-index:2147483647}.tsfem-modal-buttons,.tsfem-modal-title{margin:0;padding:1em calc(1em + .6vw);box-shadow:0 1px 3px 0 #ccc;z-index:5;flex-shrink:0}.tsfem-modal-buttons{box-shadow:0 -1px 3px 0 #ccc;justify-content:flex-end}.tsfem-modal-title h4{margin:0;padding:0;font-size:1.4em;line-height:1.2em;color:#057f9c;font-weight:400}.tsfem-modal-inner{padding:calc(1em + .6vw);max-width:640px;overflow:auto;overflow-x:hidden}.tsfem-modal-text p:first-of-type{margin:0}.tsfem-modal-text p:last-of-type{margin-bottom:0}.tsfem-modal-text+.tsfem-modal-select{margin-top:calc(1em + .6vw)}.tsfem-modal-select{flex-wrap:wrap;align-items:flex-start}.tsfem-modal-select-option{margin-bottom:1em;padding:0 .5em;flex-basis:140px;max-width:calc(50% - 1em);flex-grow:1}.tsfem-modal-select-option:first-of-type:last-of-type{max-width:none}.tsfem-modal-select-option input{position:absolute;width:0;height:0;opacity:0;margin:0!important;padding:0!important;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.tsfem-modal-select-option label{font-weight:600;border:1px solid transparent;background:#fefefe;box-shadow:0 1px 3px 1px #ccc;cursor:pointer;padding:1em;width:100%;transition:all .33s;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tsfem-modal-select-option:hover input:not(:checked)+label{filter:brightness(.95)}.tsfem-modal-select-option>input:checked+label{border-color:#05809e}.tsfem-modal-select-option input:active+label,.tsfem-modal-select-option input:focus+label,.tsfem-modal-select-option:hover input:checked+label{box-shadow:0 1px 3px 1px #05809e}.tsfem-modal-buttons button:nth-child(n+2){margin-left:1em}body.rtl .tsfem-modal-buttons button:nth-child(n+2){margin-left:initial;margin-right:1em}.tsfem-modal-dismiss{position:absolute;top:0;right:0;border:none;margin:7px;padding:7px;background:0 0;color:#b4b9be;cursor:pointer;text-decoration:none;z-index:6;transition:color .15s}body.rtl .tsfem-modal-dismiss{right:initial;left:0}.tsfem-modal-dismiss:hover{color:#d14b44}.tsfem-modal-dismiss:before{background:0 0;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tsfem-hidden{display:none}.tsfem-has-hover-balloon{position:relative;cursor:help}.tsfem-ltr{direction:ltr} diff --git a/readme.txt b/readme.txt index 3badd387..260ee948 100644 --- a/readme.txt +++ b/readme.txt @@ -54,6 +54,7 @@ Please refer to [the installation instructions on our website](https://kb.theseo * TODO Use `` like on TSF site for improved painting performance? * Introduced a new API alias for `tsf_extension_manager()`: `tsfem()`. * With this update we hit a new milestone: 2 million characters of amazing code. +* The plugin and its extensions now support PHP 8.2 flawlessly. TODO POT file. (also update related github) TODO readme: Add pictures, create share logo, diff --git a/the-seo-framework-extension-manager.php b/the-seo-framework-extension-manager.php index 7948b765..3c80ba10 100644 --- a/the-seo-framework-extension-manager.php +++ b/the-seo-framework-extension-manager.php @@ -3,7 +3,7 @@ * Plugin Name: The SEO Framework - Extension Manager * Plugin URI: https://theseoframework.com/extension-manager/ * Description: Add more powerful SEO features to The SEO Framework. Right from your WordPress dashboard. - * Version: 2.6.0-beta-4 + * Version: 2.6.0-beta-5 * Author: The SEO Framework Team * Author URI: https://theseoframework.com/ * License: GPLv3 diff --git a/views/layout/extension/top.php b/views/layout/extension/top.php index 18180ed7..8f4abbcb 100644 --- a/views/layout/extension/top.php +++ b/views/layout/extension/top.php @@ -30,10 +30,11 @@ ?> -
- get_save_all_button(); - ?> -
+ $this->get_save_all_button(); +?>