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(
'%s ',
[
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 @@
?>
-
- =
// phpcs:ignore, WordPress.Security.EscapeOutput -- Already escaped.
- echo $this->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 @@
?>
-
- =
// phpcs:ignore, WordPress.Security.EscapeOutput.OutputNotEscaped -- get_save_all_button() escapes.
- echo $this->get_save_all_button();
- ?>
-
+ $this->get_save_all_button();
+?>