Email Subscribers & Newsletters - Version 4.6.2

Version Description

Download this release

Release Info

Developer Icegram
Plugin Icon 128x128 Email Subscribers & Newsletters
Version 4.6.2
Comparing to
See all releases

Code changes from version 4.6.1 to 4.6.2

Files changed (29) hide show
  1. email-subscribers.php +2 -2
  2. lite/admin/class-email-subscribers-admin.php +144 -11
  3. lite/admin/css/email-subscribers-admin.css +32 -2
  4. lite/admin/dist/main.css +1 -1
  5. lite/admin/images/halloween_2020.png +0 -0
  6. lite/admin/images/premium-icon.svg +1 -0
  7. lite/admin/js/email-subscribers-admin.js +14 -0
  8. lite/admin/partials/onboarding.php +6 -4
  9. lite/includes/class-email-subscribers.php +28 -21
  10. lite/includes/class-es-common.php +68 -0
  11. lite/includes/classes/class-es-admin-settings.php +13 -23
  12. lite/includes/classes/class-es-contacts-table.php +2 -0
  13. lite/includes/classes/class-es-mailer.php +15 -0
  14. lite/includes/classes/class-es-newsletters.php +1 -1
  15. lite/includes/classes/class-es-post-notifications.php +23 -20
  16. lite/includes/classes/class-ig-es-trial.php +234 -0
  17. lite/includes/es-core-functions.php +10 -8
  18. lite/includes/notices/class-es-admin-notices.php +25 -5
  19. lite/includes/notices/views/ig-es-halloween-offer.php +17 -0
  20. lite/includes/notices/views/{trial-optin.php → trial-consent.php} +1 -1
  21. lite/includes/notices/views/trial-to-premium-offer.php +114 -0
  22. lite/includes/premium-services-ui/class-ig-es-premium-services-ui.php +118 -0
  23. lite/includes/pro-features.php +268 -255
  24. lite/includes/services/class-es-service-css-inliner.php +0 -57
  25. lite/includes/services/{class-es-service-send-cron-data.php → class-es-service-handle-cron-data.php} +29 -10
  26. lite/includes/services/class-es-service-process-email-content.php +53 -0
  27. lite/includes/services/class-es-services.php +8 -2
  28. lite/includes/workflows/admin/class-es-workflow-admin-edit.php +9 -4
  29. readme.txt +5 -1
email-subscribers.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Email Subscribers & Newsletters
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
6
- * Version: 4.6.1
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
@@ -175,7 +175,7 @@ if ( 'premium' === $ig_es_plan ) {
175
  /* ***************************** Initial Compatibility Work (End) ******************* */
176
 
177
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
178
- define( 'ES_PLUGIN_VERSION', '4.6.1' );
179
  }
180
 
181
  // Plugin Folder Path.
3
  * Plugin Name: Email Subscribers & Newsletters
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
6
+ * Version: 4.6.2
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
175
  /* ***************************** Initial Compatibility Work (End) ******************* */
176
 
177
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
178
+ define( 'ES_PLUGIN_VERSION', '4.6.2' );
179
  }
180
 
181
  // Plugin Folder Path.
lite/admin/class-email-subscribers-admin.php CHANGED
@@ -83,11 +83,20 @@ class Email_Subscribers_Admin {
83
  add_action( 'ig_es_after_settings_save', array( $this, 'send_cron_data' ) );
84
 
85
 
86
- // Convert embedded css to inline css.
87
- add_filter( 'es_after_process_template_body', array( $this, 'apply_inline_css') );
 
 
 
 
 
 
88
 
89
  // Disable Icegram server cron when plugin is deactivated.
90
  add_action( 'ig_es_plugin_deactivate', array( $this, 'disable_server_cron' ) );
 
 
 
91
 
92
  if ( class_exists( 'IG_ES_Premium_Services_UI' ) ) {
93
  IG_ES_Premium_Services_UI::instance();
@@ -944,26 +953,113 @@ class Email_Subscribers_Admin {
944
  return;
945
  }
946
 
947
- $send_cron_data_service = new ES_Service_Send_Cron_Data();
948
 
949
  // Send cron data to server
950
- $send_cron_data_service->maybe_send_cron_data( $options );
951
  }
952
 
953
  /**
954
- * Method to send cron data to our server if not already sent.
955
  *
956
- * @since 4.6.1
 
 
 
 
957
  */
958
- public function apply_inline_css( $data = array() ) {
959
 
960
- $css_inliner_service = new ES_Service_CSS_Inliner();
961
 
962
- $data = $css_inliner_service->get_inline_css( $data );
963
 
964
  return $data;
965
  }
966
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
967
  /**
968
  * Method to disable Icegram server cron.
969
  *
@@ -971,7 +1067,44 @@ class Email_Subscribers_Admin {
971
  */
972
  public function disable_server_cron() {
973
 
974
- $send_cron_data_service = new ES_Service_Send_Cron_Data();
975
- $send_cron_data_service->delete_cron_data();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
976
  }
977
  }
83
  add_action( 'ig_es_after_settings_save', array( $this, 'send_cron_data' ) );
84
 
85
 
86
+ // Process and add premium service data(Inline CSS, UTM Tracking etc) to template body.
87
+ add_filter( 'es_after_process_template_body', array( $this, 'add_premium_services_data') );
88
+
89
+ // Filter to add premium service request data.
90
+ add_filter( 'ig_es_util_data', array( $this, 'add_util_data') );
91
+
92
+ // Filter to check if utm tracking is enabled.
93
+ add_filter( 'ig_es_track_utm', array( $this, 'is_utm_tracking_enabled'), 10, 2 );
94
 
95
  // Disable Icegram server cron when plugin is deactivated.
96
  add_action( 'ig_es_plugin_deactivate', array( $this, 'disable_server_cron' ) );
97
+
98
+ // Filter to hook custom validation for specific service request.
99
+ add_filter( 'ig_es_service_request_custom_validation', array( $this, 'maybe_override_service_validation' ), 10, 2 );
100
 
101
  if ( class_exists( 'IG_ES_Premium_Services_UI' ) ) {
102
  IG_ES_Premium_Services_UI::instance();
953
  return;
954
  }
955
 
956
+ $handle_cron_data_service = new ES_Service_Handle_Cron_Data();
957
 
958
  // Send cron data to server
959
+ $handle_cron_data_service->handle_es_cron_data( $options );
960
  }
961
 
962
  /**
963
+ * Method to add ES service data(Inline CSS, UTM tracking to links etc) to email content
964
  *
965
+ * @param array $data
966
+ *
967
+ * @return array $data
968
+ *
969
+ * @since 4.6.2
970
  */
971
+ public function add_premium_services_data( $data = array() ) {
972
 
973
+ $process_email_content_service = new ES_Service_Process_Email_Content();
974
 
975
+ $data = $process_email_content_service->process_email_content( $data );
976
 
977
  return $data;
978
  }
979
 
980
+ /**
981
+ * Method to add ES service data(Inline CSS, UTM tracking to links etc) to email content
982
+ *
983
+ * @param array $data
984
+ *
985
+ * @return array $data
986
+ *
987
+ * @since 4.6.2
988
+ */
989
+ public function add_util_data( $data = array() ) {
990
+
991
+ // Add CSS inliner task data to request if valid request.
992
+ if ( ES()->validate_service_request( array( 'css_inliner' ) ) ) {
993
+
994
+ $meta = ! empty( $data['campaign_id'] ) ? ES()->campaigns_db->get_campaign_meta_by_id( $data['campaign_id'] ) : '';
995
+ $data['html'] = $data['content'];
996
+ $data['css'] = ! empty( $meta['es_custom_css'] ) ? $meta['es_custom_css'] : get_post_meta( $data['tmpl_id'], 'es_custom_css', true );
997
+ $data['tasks'][] = 'css-inliner';
998
+ }
999
+
1000
+ // Add utm tracking task data to request if valid request.
1001
+ if ( ES()->validate_service_request( array( 'utm_tracking' ) ) ) {
1002
+
1003
+ if ( ! empty( $data['campaign_id'] ) ) {
1004
+ $campaign_id = $data['campaign_id'];
1005
+ $can_track_utm = ES()->mailer->can_track_utm( $data );
1006
+ if ( $can_track_utm ) {
1007
+ $meta = ES()->campaigns_db->get_campaign_meta_by_id( $campaign_id );
1008
+ $data['html'] = $data['content'];
1009
+ $data['utm_params']['utm_source'] = 'es';
1010
+ $data['utm_params']['utm_medium'] = 'email';
1011
+ $data['tasks'][] = 'utm-tracking';
1012
+ // For broadcast campaign, utm campaign name is saved in campaign meta for other campaigns, it is saved in related template.
1013
+ if ( ! empty( $meta['es_utm_campaign'] ) ) {
1014
+ $data['utm_params']['utm_campaign'] = $meta['es_utm_campaign'];
1015
+ } else if ( ! empty( $data['tmpl_id'] ) ) {
1016
+ $data['utm_params']['utm_campaign'] = get_post_meta( $data['tmpl_id'], 'es_utm_campaign', true );
1017
+ }
1018
+ }
1019
+ }
1020
+
1021
+ }
1022
+
1023
+ return $data;
1024
+ }
1025
+
1026
+ /**
1027
+ * Method to check if utm tracking is enabled.
1028
+ *
1029
+ * @param array $data
1030
+ *
1031
+ * @return array $data
1032
+ *
1033
+ * @since 4.6.2
1034
+ */
1035
+ public function is_utm_tracking_enabled( $tracking_enabled = false, $data = array() ) {
1036
+ $ig_es_track_utm = get_option( 'ig_es_track_utm', 'no' );
1037
+
1038
+ if ( ! empty( $data ) ) {
1039
+ $campaign_id = ! empty( $data['campaign_id'] ) ? $data['campaign_id'] : 0;
1040
+ if ( ! empty( $campaign_id ) ) {
1041
+ /**
1042
+ * For newsletter campaign, utm tracking can be enabled/disabled at campaign level therefore check if it is enabled at campaign level or not
1043
+ * For other type of campaigns, global utm tracking option is used.
1044
+ */
1045
+ $campaign = ES()->campaigns_db->get( $campaign_id );
1046
+ if ( ! empty( $campaign ) ) {
1047
+ $campaign_type = $campaign['type'];
1048
+ if ( 'newsletter' === $campaign_type ) {
1049
+ $campaign_meta = maybe_unserialize( $campaign['meta'] );
1050
+ $ig_es_track_utm = ! empty( $campaign_meta['enable_utm_tracking'] ) ? $campaign_meta['enable_utm_tracking']: $ig_es_track_utm;
1051
+ }
1052
+ }
1053
+ }
1054
+ }
1055
+
1056
+ if ( 'yes' === $ig_es_track_utm ) {
1057
+ $tracking_enabled = true;
1058
+ }
1059
+
1060
+ return $tracking_enabled;
1061
+ }
1062
+
1063
  /**
1064
  * Method to disable Icegram server cron.
1065
  *
1067
  */
1068
  public function disable_server_cron() {
1069
 
1070
+ $handle_cron_data_service = new ES_Service_Handle_Cron_Data();
1071
+ $handle_cron_data_service->delete_cron_data();
1072
+ }
1073
+
1074
+ /**
1075
+ * Method to override service validation for some specific request
1076
+ *
1077
+ * @param bool $is_request_valid Is request valid.
1078
+ * @param array $request_data Request data.
1079
+ *
1080
+ * @return bool $is_request_valid Is request valid.
1081
+ *
1082
+ * @since 4.6.2
1083
+ */
1084
+ public function maybe_override_service_validation( $is_request_valid, $request_data = array() ) {
1085
+
1086
+ if ( empty( $request_data ) ) {
1087
+ return $is_request_valid;
1088
+ }
1089
+
1090
+ $request_body = ! empty( $request_data['body'] ) ? $request_data['body'] : array();
1091
+
1092
+ // Check if there are any request related tasks present.
1093
+ if ( empty( $request_body ) || empty( $request_body['tasks'] ) ) {
1094
+ return $is_request_valid;
1095
+ }
1096
+
1097
+ $request_tasks = $request_body['tasks'];
1098
+
1099
+ // Check if request request is for storing es cron data.
1100
+ if ( in_array( 'store-cron', $request_tasks, true ) ) {
1101
+ // If request is for disable es cron.
1102
+ $is_disable_cron_request = empty( $request_body['es_enable_background'] ) ? true : false;
1103
+ if ( $is_disable_cron_request ) {
1104
+ $is_request_valid = true;
1105
+ }
1106
+ }
1107
+
1108
+ return $is_request_valid;
1109
  }
1110
  }
lite/admin/css/email-subscribers-admin.css CHANGED
@@ -847,7 +847,6 @@ h5.es-badge {
847
  margin: 0.2em 0;
848
  }
849
 
850
-
851
  /**** Dashboard : end ***/
852
 
853
  .es_list_contact_status:before {
@@ -1742,4 +1741,35 @@ div.broadcast_side_content{
1742
  padding-top: 18px;
1743
  }
1744
 
1745
- /* Template Page : end */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
847
  margin: 0.2em 0;
848
  }
849
 
 
850
  /**** Dashboard : end ***/
851
 
852
  .es_list_contact_status:before {
1741
  padding-top: 18px;
1742
  }
1743
 
1744
+ /* Template Page : end */
1745
+
1746
+ /* Upselling css: end */
1747
+
1748
+ #ig_es_workflow_integration_information .postbox-header{
1749
+ display: none;
1750
+ }
1751
+ #ig_es_workflow_integration_information {
1752
+ border:none;
1753
+ border-radius: 5px;
1754
+ }
1755
+ #ig_es_workflow_integration_information .inside div{
1756
+ margin-top : 0px;
1757
+ margin-bottom : 0px;
1758
+ }
1759
+
1760
+ .premium-icon {
1761
+ display: inline-block;
1762
+ vertical-align: middle;
1763
+ color: #319795;
1764
+ width: 20px;
1765
+ height: 21px;
1766
+ padding-top: 0.25rem;
1767
+ background: url('../images/premium-icon.svg');
1768
+ }
1769
+
1770
+ #ig-es-trial-to-premium-notice p {
1771
+ line-height: 2em;
1772
+ }
1773
+
1774
+ /* Upselling css : end */
1775
+
lite/admin/dist/main.css CHANGED
@@ -1 +1 @@
1
- /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #d2d6dc}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}a{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}img{border-width:0}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-input::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-input::-moz-placeholder{color:#9fa6b2;opacity:1}.form-input::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-input::placeholder{color:#9fa6b2;opacity:1}.form-input:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-textarea::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-moz-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::placeholder{color:#9fa6b2;opacity:1}.form-textarea:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-multiselect:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;background-repeat:no-repeat;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem 2.5rem .5rem .75rem;font-size:1rem;line-height:1.5;background-position:right .5rem center;background-size:1.5em 1.5em}.form-select::-ms-expand{color:#9fa6b2;border:none}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.25rem}.form-checkbox:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-checkbox::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-checkbox:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox:checked:focus{border-color:transparent}.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;border-radius:100%;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px}.form-radio:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-radio:checked:focus{border-color:transparent}.ig-es-primary-button,.ig-es-send-queue-emails{border-color:transparent;padding:.5rem 1rem;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));color:#fff;color:rgba(255,255,255,var(--text-opacity));background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.ig-es-primary-button,.ig-es-send-queue-emails,.ig-es-title-button,.wp-heading-inline+.page-title-action{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;font-size:.875rem;line-height:1.25rem;font-weight:500;--text-opacity:1;--bg-opacity:1;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-title-button,.wp-heading-inline+.page-title-action{--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-opacity));color:#374151;color:rgba(55,65,81,var(--text-opacity));background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));padding:.25rem .75rem}.wrap .wp-heading-inline+.page-title-action{margin-left:.5rem}.ig-es-title-button:hover,.wp-heading-inline+.page-title-action:hover{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity));--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity))}.ig-es-title-button:focus,.wp-heading-inline+.page-title-action:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45);--border-opacity:1;border-color:#a4cafe;border-color:rgba(164,202,254,var(--border-opacity))}.ig-es-primary-button:hover{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.ig-es-primary-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.ig-es-imp-button{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;border-radius:.375rem!important;border-width:1px!important;border-color:transparent!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important;font-size:.875rem!important;line-height:1.25rem!important;font-weight:500!important;background-color:#0e9f6e!important;background-color:rgba(14,159,110,var(--bg-opacity))!important;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform!important;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;-webkit-transition-duration:.15s!important;transition-duration:.15s!important}.ig-es-imp-button,.ig-es-imp-button:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important;--bg-opacity:1!important}.ig-es-imp-button:hover{background-color:#31c48d!important;background-color:rgba(49,196,141,var(--bg-opacity))!important}.ig-es-imp-button:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(132,225,188,.45)!important;box-shadow:0 0 0 3px rgba(132,225,188,.45)!important}.ig-es-link-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;border-color:transparent;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;background-color:#ff5a1f;background-color:rgba(255,90,31,var(--bg-opacity));-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-link-button,.ig-es-link-button:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity));--bg-opacity:1}.ig-es-link-button:hover{background-color:#ff8a4c;background-color:rgba(255,138,76,var(--bg-opacity))}.ig-es-link-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(253,186,140,.45);box-shadow:0 0 0 3px rgba(253,186,140,.45)}.ig-es-action.js-open .ig-es-action__header{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.form-input{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important;border-width:1px!important;border-radius:.375rem!important;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;--border-opacity:1!important;border-color:#d2d6dc!important;border-color:rgba(210,214,220,var(--border-opacity))!important}.form-input:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important}.form-checkbox{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E")}.form-radio{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}.form-checkbox:checked,.form-radio:checked{--text-opacity:1!important;color:#5850ec!important;color:rgba(88,80,236,var(--text-opacity))!important}.form-select{font-size:.875rem!important;--border-opacity:1!important;border-color:#9fa6b2!important;border-color:rgba(159,166,178,var(--border-opacity))!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important}.form-select:focus,input[type=number]:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;--border-opacity:1!important;border-color:#a4cafe!important;border-color:rgba(164,202,254,var(--border-opacity))!important}.es-check-toggle:checked~.es-mail-toggle-line{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.es-check-toggle:checked~.es-mail-toggle-dot{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-translate-x:100%}.es-mail-toggle-line{width:2.25rem;height:1.25rem;background-color:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity));-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.es-mail-toggle-dot,.es-mail-toggle-line{display:block;--bg-opacity:1;border-radius:9999px}.es-mail-toggle-dot{width:1rem;height:1rem;margin-top:.125rem;margin-left:.125rem;position:absolute;top:0;bottom:0;-webkit-transition-property:all;transition-property:all;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.es-mail-toggle-dot:focus-within{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}[type=radio]:checked+.es-mailer-logo{-webkit-transition-property:all;transition-property:all;-webkit-transition-duration:.1s;transition-duration:.1s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-scale-x:1.1;--transform-scale-y:1.1;-webkit-box-shadow:0 0 3px 1px #5a67d8;box-shadow:0 0 3px 1px #5a67d8}[type=radio]:checked+.es-mailer-logo:hover{border-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.wp-core-ui .button,.wp-core-ui .button-secondary{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{font-size:.875rem;border-radius:.375rem;border-width:1px;line-height:1.25rem;font-weight:500;--text-opacity:1}.wp-core-ui .button-primary{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));color:#fff;color:rgba(255,255,255,var(--text-opacity));-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.wp-core-ui .button-primary:hover,.wp-core-ui .button:hover{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.wp-core-ui .search-box input[name=s],.wp-core-ui select{border-radius:.375rem}.wp-core-ui #bulk-action-selector-top,.wp-core-ui #doaction,.wp-core-ui #doaction2,.wp-core-ui #filter-by-date,.wp-core-ui #post-query-submit,.wp-core-ui #poststuff select,.wp-core-ui #search-submit{cursor:pointer;line-height:1.25rem;--text-opacity:1;color:#4b5563;color:rgba(75,85,99,var(--text-opacity));background-color:transparent;font-size:.875rem}.wp-core-ui #search-submit{margin-left:.375rem}.wp-core-ui #doaction2:hover .wp-core-ui #post-query-submit:hover,.wp-core-ui #doaction:hover,.wp-core-ui #search-submit:hover{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity));--border-opacity:1;border-color:#6b7280;border-color:rgba(107,114,128,var(--border-opacity))}.wp-core-ui #doaction2:focus .wp-core-ui #post-query-submit:focus,.wp-core-ui #doaction:focus,.wp-core-ui #search-submit:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(159,166,178,.45);box-shadow:0 0 0 3px rgba(159,166,178,.45)}.es-items-lists table.fixed,.post-type-es_template table.fixed{margin-top:1.5rem;margin-bottom:1rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);border-radius:.5rem;overflow:hidden}.es-items-lists table.fixed tfoot td,.es-items-lists table.fixed tfoot th,.es-items-lists table.fixed thead td,.es-items-lists table.fixed thead th,.post-type-es_template table.fixed tfoot th,.post-type-es_template table.fixed thead td,.post-type-es_template table.fixed thead th{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity));border-bottom-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity));--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity));font-weight:500;letter-spacing:.05em}.es-items-lists table.fixed tfoot th,.es-items-lists table.fixed thead th,.post-type-es_template table.fixed tfoot th,.post-type-es_template table.fixed thead th{padding-top:.5rem;padding-bottom:.5rem}.es-items-lists .widefat thead td input,.post-type-es_template .widefat thead td input{margin-right:1.5rem}.post-type-es_template .wrap{padding-top:1rem;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.post-type-es_template .wrap>h1{padding-top:0;font-weight:600;--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity));line-height:2.25rem}.es-items-lists .striped>tbody tr,.post-type-es_template .striped>tbody tr{border-bottom-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity));padding-top:.5rem;padding-bottom:.5rem}.es-items-lists .striped>tbody>:nth-child(odd),.post-type-es_template .striped>tbody>:nth-child(odd){--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.es_onboard_email{padding:.25rem .75rem!important}.es_reports_table_header{border-bottom-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity));--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity));text-align:left;font-size:.875rem;line-height:1rem;font-weight:500;--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity));letter-spacing:.05em}.space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-50{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.bg-gray-200{--bg-opacity:1;background-color:#e5e7eb;background-color:rgba(229,231,235,var(--bg-opacity))}.bg-gray-300{--bg-opacity:1;background-color:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity))}.bg-red-50{--bg-opacity:1;background-color:#fdf2f2;background-color:rgba(253,242,242,var(--bg-opacity))}.bg-red-100{--bg-opacity:1;background-color:#fde8e8;background-color:rgba(253,232,232,var(--bg-opacity))}.bg-green-100{--bg-opacity:1;background-color:#def7ec;background-color:rgba(222,247,236,var(--bg-opacity))}.bg-green-300{--bg-opacity:1;background-color:#84e1bc;background-color:rgba(132,225,188,var(--bg-opacity))}.bg-green-600{--bg-opacity:1;background-color:#057a55;background-color:rgba(5,122,85,var(--bg-opacity))}.bg-teal-50{--bg-opacity:1;background-color:#edfafa;background-color:rgba(237,250,250,var(--bg-opacity))}.bg-teal-100{--bg-opacity:1;background-color:#d5f5f6;background-color:rgba(213,245,246,var(--bg-opacity))}.bg-blue-50{--bg-opacity:1;background-color:#ebf5ff;background-color:rgba(235,245,255,var(--bg-opacity))}.bg-blue-300{--bg-opacity:1;background-color:#a4cafe;background-color:rgba(164,202,254,var(--bg-opacity))}.bg-indigo-200{--bg-opacity:1;background-color:#cddbfe;background-color:rgba(205,219,254,var(--bg-opacity))}.bg-indigo-500{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity))}.bg-indigo-600{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.bg-indigo-700{--bg-opacity:1;background-color:#5145cd;background-color:rgba(81,69,205,var(--bg-opacity))}.bg-indigo-800{--bg-opacity:1;background-color:#42389d;background-color:rgba(66,56,157,var(--bg-opacity))}.bg-pink-200{--bg-opacity:1;background-color:#fad1e8;background-color:rgba(250,209,232,var(--bg-opacity))}.group:focus .group-focus\:bg-gray-400,.group:hover .group-hover\:bg-gray-400{--bg-opacity:1;background-color:#9fa6b2;background-color:rgba(159,166,178,var(--bg-opacity))}.hover\:bg-gray-50:hover{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.hover\:bg-green-500:hover{--bg-opacity:1;background-color:#0e9f6e;background-color:rgba(14,159,110,var(--bg-opacity))}.hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity))}.hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.focus\:bg-gray-50:focus{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{--border-opacity:1;border-color:#f4f5f7;border-color:rgba(244,245,247,var(--border-opacity))}.border-gray-200{--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.border-gray-300{--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#9fa6b2;border-color:rgba(159,166,178,var(--border-opacity))}.border-indigo-500{--border-opacity:1;border-color:#6875f5;border-color:rgba(104,117,245,var(--border-opacity))}.border-indigo-600{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity))}.hover\:border-gray-200:hover{--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.hover\:border-gray-500:hover{--border-opacity:1;border-color:#6b7280;border-color:rgba(107,114,128,var(--border-opacity))}.hover\:border-red-400:hover{--border-opacity:1;border-color:#f98080;border-color:rgba(249,128,128,var(--border-opacity))}.hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity))}.focus\:border-blue-300:focus{--border-opacity:1;border-color:#a4cafe;border-color:rgba(164,202,254,var(--border-opacity))}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.border-dashed{border-style:dashed}.border-0{border-width:0}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.grid{display:grid}.contents{display:contents}.hidden{display:none}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-col,.flex-row{-webkit-box-direction:normal}.flex-col{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.self-start{-ms-flex-item-align:start;align-self:flex-start}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.float-right{float:right}.float-left{float:left}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-thin{font-weight:200}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.h-0{height:0}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-15{height:3.75rem}.h-20{height:5rem}.h-48{height:12rem}.h-auto{height:auto}.h-2\.5{height:.625rem}.h-full{height:100%}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-9{line-height:2.25rem}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-4{margin:1rem}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-7{margin-top:1.75rem}.mb-7{margin-bottom:1.75rem}.ml-7{margin-left:1.75rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.mr-10{margin-right:2.5rem}.mt-12{margin-top:3rem}.ml-12{margin-left:3rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.ml-16{margin-left:4rem}.mt-0\.5{margin-top:.125rem}.mt-1\.5{margin-top:.375rem}.mr-1\.5{margin-right:.375rem}.mt-3\.5{margin-top:.875rem}.mb-3\.5{margin-bottom:.875rem}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-mb-2{margin-bottom:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-5{margin-top:-1.25rem}.-mb-0\.5{margin-bottom:-.125rem}.-mt-1\.5{margin-top:-.375rem}.max-h-full{max-height:100%}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.object-cover{-o-object-fit:cover;object-fit:cover}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.focus\:outline-none:focus{outline:0}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-13{padding:3.25rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pl-10{padding-left:2.5rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-16{padding-left:4rem}.pt-0\.5{padding-top:.125rem}.pl-0\.5{padding-left:.125rem}.pt-1\.5{padding-top:.375rem}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{right:0;left:0}.inset-0,.inset-y-0{top:0;bottom:0}.top-0{top:0}.right-0{right:0}.left-0{left:0}.bottom-2{bottom:.5rem}.top-8{top:2rem}.resize{resize:both}.shadow-xs{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05);box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-xl{-webkit-box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow-md:hover{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.focus\:shadow-lg:focus{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}.focus\:shadow-outline-blue:focus{-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.focus\:shadow-outline-red:focus{-webkit-box-shadow:0 0 0 3px rgba(248,180,180,.45);box-shadow:0 0 0 3px rgba(248,180,180,.45)}.focus\:shadow-outline-indigo:focus{-webkit-box-shadow:0 0 0 3px rgba(180,198,252,.45);box-shadow:0 0 0 3px rgba(180,198,252,.45)}.fill-current{fill:currentColor}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#9fa6b2;color:rgba(159,166,178,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#4b5563;color:rgba(75,85,99,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity))}.text-gray-800{--text-opacity:1;color:#252f3f;color:rgba(37,47,63,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.text-red-400{--text-opacity:1;color:#f98080;color:rgba(249,128,128,var(--text-opacity))}.text-red-500{--text-opacity:1;color:#f05252;color:rgba(240,82,82,var(--text-opacity))}.text-red-600{--text-opacity:1;color:#e02424;color:rgba(224,36,36,var(--text-opacity))}.text-red-800{--text-opacity:1;color:#9b1c1c;color:rgba(155,28,28,var(--text-opacity))}.text-orange-400{--text-opacity:1;color:#ff8a4c;color:rgba(255,138,76,var(--text-opacity))}.text-orange-500{--text-opacity:1;color:#ff5a1f;color:rgba(255,90,31,var(--text-opacity))}.text-yellow-400{--text-opacity:1;color:#e3a008;color:rgba(227,160,8,var(--text-opacity))}.text-green-400{--text-opacity:1;color:#31c48d;color:rgba(49,196,141,var(--text-opacity))}.text-green-600{--text-opacity:1;color:#057a55;color:rgba(5,122,85,var(--text-opacity))}.text-green-800{--text-opacity:1;color:#03543f;color:rgba(3,84,63,var(--text-opacity))}.text-teal-400{--text-opacity:1;color:#16bdca;color:rgba(22,189,202,var(--text-opacity))}.text-teal-500{--text-opacity:1;color:#0694a2;color:rgba(6,148,162,var(--text-opacity))}.text-teal-700{--text-opacity:1;color:#036672;color:rgba(3,102,114,var(--text-opacity))}.text-blue-400{--text-opacity:1;color:#76a9fa;color:rgba(118,169,250,var(--text-opacity))}.text-blue-500{--text-opacity:1;color:#3f83f8;color:rgba(63,131,248,var(--text-opacity))}.text-blue-700{--text-opacity:1;color:#1a56db;color:rgba(26,86,219,var(--text-opacity))}.text-blue-800{--text-opacity:1;color:#1e429f;color:rgba(30,66,159,var(--text-opacity))}.text-indigo-100{--text-opacity:1;color:#e5edff;color:rgba(229,237,255,var(--text-opacity))}.text-indigo-400{--text-opacity:1;color:#8da2fb;color:rgba(141,162,251,var(--text-opacity))}.text-indigo-500{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.text-indigo-600{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.text-indigo-700{--text-opacity:1;color:#5145cd;color:rgba(81,69,205,var(--text-opacity))}.group:focus .group-focus\:text-indigo-800,.group:hover .group-hover\:text-indigo-800,.text-indigo-800{--text-opacity:1;color:#42389d;color:rgba(66,56,157,var(--text-opacity))}.hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.hover\:text-gray-800:hover{--text-opacity:1;color:#252f3f;color:rgba(37,47,63,var(--text-opacity))}.hover\:text-gray-900:hover{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.hover\:text-blue-700:hover{--text-opacity:1;color:#1a56db;color:rgba(26,86,219,var(--text-opacity))}.hover\:text-indigo-500:hover{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.focus\:text-gray-900:focus{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.active\:text-indigo-600:active{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.text-opacity-75{--text-opacity:0.75}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.underline{text-decoration:underline}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.visible{visibility:visible}.whitespace-no-wrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-0{width:0}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-12{width:3rem}.w-40{width:10rem}.w-56{width:14rem}.w-auto{width:auto}.w-2\.5{width:.625rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-9\/12{width:75%}.w-11\/12{width:91.666667%}.w-full{width:100%}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.gap-8{grid-gap:2rem;gap:2rem}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.transition-all{-webkit-transition-property:all;transition-property:all}.transition{-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform}.ease-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{-webkit-transition-duration:75ms;transition-duration:75ms}.duration-100{-webkit-transition-duration:.1s;transition-duration:.1s}.duration-150{-webkit-transition-duration:.15s;transition-duration:.15s}.duration-300{-webkit-transition-duration:.3s;transition-duration:.3s}@-webkit-keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes ping{75%,to{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{-webkit-transform:translateY(-25%);transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{-webkit-transform:none;transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media (min-width:640px){.sm\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.sm\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.sm\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.sm\:grid{display:grid}.sm\:flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.sm\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.sm\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sm\:h-10{height:2.5rem}.sm\:text-sm{font-size:.875rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:leading-5{line-height:1.25rem}.sm\:leading-7{line-height:1.75rem}.sm\:leading-9{line-height:2.25rem}.sm\:my-0{margin-top:0;margin-bottom:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-7{margin-top:1.75rem;margin-bottom:1.75rem}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\:mt-0{margin-top:0}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-5{margin-top:1.25rem}.sm\:max-w-lg{max-width:32rem}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-10{width:2.5rem}.sm\:w-32{width:8rem}.sm\:w-auto{width:auto}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.333333%}.sm\:w-2\/3{width:66.666667%}.sm\:w-full{width:100%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:rounded-lg{border-radius:.5rem}.md\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\:text-base{font-size:1rem}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:mt-0{margin-top:0}.md\:ml-2{margin-left:.5rem}.md\:ml-4{margin-left:1rem}.md\:ml-8{margin-left:2rem}.md\:-mr-8{margin-right:-2rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-5xl{max-width:64rem}.md\:p-2{padding:.5rem}.md\:p-6{padding:1.5rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:pb-2{padding-bottom:.5rem}.md\:pr-4{padding-right:1rem}.md\:pt-6{padding-top:1.5rem}.md\:shadow-xl{-webkit-box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:w-3\/5{width:60%}}@media (min-width:1024px){.lg\:bg-transparent{background-color:transparent}.lg\:border-transparent{border-color:transparent}.lg\:rounded-full{border-radius:9999px}.lg\:block{display:block}.lg\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.lg\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:ml-16{margin-left:4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:max-w-3xl{max-width:48rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:top-1\/2{top:50%}.lg\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.lg\:w-40{width:10rem}.lg\:w-48{width:12rem}.lg\:w-1\/2{width:50%}.lg\:w-3\/5{width:60%}.lg\:w-3\/12{width:25%}.lg\:w-7\/12{width:58.333333%}}@media (min-width:1280px){.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:mr-0{margin-right:0}.xl\:ml-3{margin-left:.75rem}.xl\:ml-4{margin-left:1rem}.xl\:ml-20{margin-left:5rem}.xl\:max-w-4xl{max-width:56rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:top-1\/3{top:33.333333%}.xl\:w-1\/4{width:25%}.xl\:w-2\/5{width:40%}.xl\:w-3\/5{width:60%}.xl\:w-2\/12{width:16.666667%}.xl\:w-7\/12{width:58.333333%}}
1
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #d2d6dc}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}a{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}img{border-width:0}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-input::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-input::-moz-placeholder{color:#9fa6b2;opacity:1}.form-input::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-input::placeholder{color:#9fa6b2;opacity:1}.form-input:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-textarea::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-moz-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::placeholder{color:#9fa6b2;opacity:1}.form-textarea:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-multiselect:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;background-repeat:no-repeat;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem 2.5rem .5rem .75rem;font-size:1rem;line-height:1.5;background-position:right .5rem center;background-size:1.5em 1.5em}.form-select::-ms-expand{color:#9fa6b2;border:none}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.25rem}.form-checkbox:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-checkbox::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-checkbox:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox:checked:focus{border-color:transparent}.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;border-radius:100%;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px}.form-radio:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-radio:checked:focus{border-color:transparent}.ig-es-primary-button,.ig-es-send-queue-emails{border-color:transparent;padding:.5rem 1rem;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));color:#fff;color:rgba(255,255,255,var(--text-opacity));background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.ig-es-primary-button,.ig-es-send-queue-emails,.ig-es-title-button,.wp-heading-inline+.page-title-action{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;font-size:.875rem;line-height:1.25rem;font-weight:500;--text-opacity:1;--bg-opacity:1;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-title-button,.wp-heading-inline+.page-title-action{--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-opacity));color:#374151;color:rgba(55,65,81,var(--text-opacity));background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));padding:.25rem .75rem}.wrap .wp-heading-inline+.page-title-action{margin-left:.5rem}.ig-es-title-button:hover,.wp-heading-inline+.page-title-action:hover{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity));--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity))}.ig-es-title-button:focus,.wp-heading-inline+.page-title-action:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45);--border-opacity:1;border-color:#a4cafe;border-color:rgba(164,202,254,var(--border-opacity))}.ig-es-primary-button:hover{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.ig-es-primary-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.ig-es-imp-button{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important;border-radius:.375rem!important;border-width:1px!important;border-color:transparent!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important;font-size:.875rem!important;line-height:1.25rem!important;font-weight:500!important;background-color:#0e9f6e!important;background-color:rgba(14,159,110,var(--bg-opacity))!important;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform!important;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;-webkit-transition-duration:.15s!important;transition-duration:.15s!important}.ig-es-imp-button,.ig-es-imp-button:hover{--text-opacity:1!important;color:#fff!important;color:rgba(255,255,255,var(--text-opacity))!important;--bg-opacity:1!important}.ig-es-imp-button:hover{background-color:#31c48d!important;background-color:rgba(49,196,141,var(--bg-opacity))!important}.ig-es-imp-button:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(132,225,188,.45)!important;box-shadow:0 0 0 3px rgba(132,225,188,.45)!important}.ig-es-link-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;border-color:transparent;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));font-size:.875rem;line-height:1.25rem;font-weight:500;background-color:#ff5a1f;background-color:rgba(255,90,31,var(--bg-opacity));-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-link-button,.ig-es-link-button:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity));--bg-opacity:1}.ig-es-link-button:hover{background-color:#ff8a4c;background-color:rgba(255,138,76,var(--bg-opacity))}.ig-es-link-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(253,186,140,.45);box-shadow:0 0 0 3px rgba(253,186,140,.45)}.ig-es-action.js-open .ig-es-action__header{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.form-input{--bg-opacity:1!important;background-color:#fff!important;background-color:rgba(255,255,255,var(--bg-opacity))!important;border-width:1px!important;border-radius:.375rem!important;-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)!important;--border-opacity:1!important;border-color:#d2d6dc!important;border-color:rgba(210,214,220,var(--border-opacity))!important}.form-input:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important}.form-checkbox{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E")}.form-radio{content:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}.form-checkbox:checked,.form-radio:checked{--text-opacity:1!important;color:#5850ec!important;color:rgba(88,80,236,var(--text-opacity))!important}.form-select{font-size:.875rem!important;--border-opacity:1!important;border-color:#9fa6b2!important;border-color:rgba(159,166,178,var(--border-opacity))!important;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")!important}.form-select:focus,input[type=number]:focus{outline:0!important;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;--border-opacity:1!important;border-color:#a4cafe!important;border-color:rgba(164,202,254,var(--border-opacity))!important}.es-check-toggle:checked~.es-mail-toggle-line{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.es-check-toggle:checked~.es-mail-toggle-dot{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-translate-x:100%}.es-mail-toggle-line{width:2.25rem;height:1.25rem;background-color:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity));-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.es-mail-toggle-dot,.es-mail-toggle-line{display:block;--bg-opacity:1;border-radius:9999px}.es-mail-toggle-dot{width:1rem;height:1rem;margin-top:.125rem;margin-left:.125rem;position:absolute;top:0;bottom:0;-webkit-transition-property:all;transition-property:all;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity));-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.es-mail-toggle-dot:focus-within{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}[type=radio]:checked+.es-mailer-logo{-webkit-transition-property:all;transition-property:all;-webkit-transition-duration:.1s;transition-duration:.1s;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));--transform-scale-x:1.1;--transform-scale-y:1.1;-webkit-box-shadow:0 0 3px 1px #5a67d8;box-shadow:0 0 3px 1px #5a67d8}[type=radio]:checked+.es-mailer-logo:hover{border-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.wp-core-ui .button,.wp-core-ui .button-secondary{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{font-size:.875rem;border-radius:.375rem;border-width:1px;line-height:1.25rem;font-weight:500;--text-opacity:1}.wp-core-ui .button-primary{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity));color:#fff;color:rgba(255,255,255,var(--text-opacity));-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.wp-core-ui .button-primary:hover,.wp-core-ui .button:hover{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity));--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.wp-core-ui .search-box input[name=s],.wp-core-ui select{border-radius:.375rem}.wp-core-ui #bulk-action-selector-top,.wp-core-ui #doaction,.wp-core-ui #doaction2,.wp-core-ui #filter-by-date,.wp-core-ui #post-query-submit,.wp-core-ui #poststuff select,.wp-core-ui #search-submit{cursor:pointer;line-height:1.25rem;--text-opacity:1;color:#4b5563;color:rgba(75,85,99,var(--text-opacity));background-color:transparent;font-size:.875rem}.wp-core-ui #search-submit{margin-left:.375rem}.wp-core-ui #doaction2:hover .wp-core-ui #post-query-submit:hover,.wp-core-ui #doaction:hover,.wp-core-ui #search-submit:hover{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity));--border-opacity:1;border-color:#6b7280;border-color:rgba(107,114,128,var(--border-opacity))}.wp-core-ui #doaction2:focus .wp-core-ui #post-query-submit:focus,.wp-core-ui #doaction:focus,.wp-core-ui #search-submit:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(159,166,178,.45);box-shadow:0 0 0 3px rgba(159,166,178,.45)}.es-items-lists table.fixed,.post-type-es_template table.fixed{margin-top:1.5rem;margin-bottom:1rem;-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);border-radius:.5rem;overflow:hidden}.es-items-lists table.fixed tfoot td,.es-items-lists table.fixed tfoot th,.es-items-lists table.fixed thead td,.es-items-lists table.fixed thead th,.post-type-es_template table.fixed tfoot th,.post-type-es_template table.fixed thead td,.post-type-es_template table.fixed thead th{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity));border-bottom-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity));--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity));font-weight:500;letter-spacing:.05em}.es-items-lists table.fixed tfoot th,.es-items-lists table.fixed thead th,.post-type-es_template table.fixed tfoot th,.post-type-es_template table.fixed thead th{padding-top:.5rem;padding-bottom:.5rem}.es-items-lists .widefat thead td input,.post-type-es_template .widefat thead td input{margin-right:1.5rem}.post-type-es_template .wrap{padding-top:1rem;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.post-type-es_template .wrap>h1{padding-top:0;font-weight:600;--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity));line-height:2.25rem}.es-items-lists .striped>tbody tr,.post-type-es_template .striped>tbody tr{border-bottom-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity));padding-top:.5rem;padding-bottom:.5rem}.es-items-lists .striped>tbody>:nth-child(odd),.post-type-es_template .striped>tbody>:nth-child(odd){--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.es_onboard_email{padding:.25rem .75rem!important}.es_reports_table_header{border-bottom-width:1px;--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity));--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity));text-align:left;font-size:.875rem;line-height:1rem;font-weight:500;--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity));letter-spacing:.05em}.space-y-1>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.25rem*var(--space-y-reverse))}.space-y-2>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.5rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.5rem*var(--space-y-reverse))}.space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.space-x-3>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(0.75rem*var(--space-x-reverse));margin-left:calc(0.75rem*(1 - var(--space-x-reverse)))}.space-y-4>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1rem*var(--space-y-reverse))}.space-y-5>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--space-y-reverse)));margin-bottom:calc(1.25rem*var(--space-y-reverse))}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-50{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.bg-gray-200{--bg-opacity:1;background-color:#e5e7eb;background-color:rgba(229,231,235,var(--bg-opacity))}.bg-gray-300{--bg-opacity:1;background-color:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity))}.bg-red-50{--bg-opacity:1;background-color:#fdf2f2;background-color:rgba(253,242,242,var(--bg-opacity))}.bg-red-100{--bg-opacity:1;background-color:#fde8e8;background-color:rgba(253,232,232,var(--bg-opacity))}.bg-yellow-100{--bg-opacity:1;background-color:#fdf6b2;background-color:rgba(253,246,178,var(--bg-opacity))}.bg-green-100{--bg-opacity:1;background-color:#def7ec;background-color:rgba(222,247,236,var(--bg-opacity))}.bg-green-300{--bg-opacity:1;background-color:#84e1bc;background-color:rgba(132,225,188,var(--bg-opacity))}.bg-green-600{--bg-opacity:1;background-color:#057a55;background-color:rgba(5,122,85,var(--bg-opacity))}.bg-teal-50{--bg-opacity:1;background-color:#edfafa;background-color:rgba(237,250,250,var(--bg-opacity))}.bg-blue-50{--bg-opacity:1;background-color:#ebf5ff;background-color:rgba(235,245,255,var(--bg-opacity))}.bg-blue-300{--bg-opacity:1;background-color:#a4cafe;background-color:rgba(164,202,254,var(--bg-opacity))}.bg-indigo-200{--bg-opacity:1;background-color:#cddbfe;background-color:rgba(205,219,254,var(--bg-opacity))}.bg-indigo-500{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity))}.bg-indigo-600{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.bg-indigo-700{--bg-opacity:1;background-color:#5145cd;background-color:rgba(81,69,205,var(--bg-opacity))}.bg-indigo-800{--bg-opacity:1;background-color:#42389d;background-color:rgba(66,56,157,var(--bg-opacity))}.bg-pink-200{--bg-opacity:1;background-color:#fad1e8;background-color:rgba(250,209,232,var(--bg-opacity))}.group:focus .group-focus\:bg-gray-400,.group:hover .group-hover\:bg-gray-400{--bg-opacity:1;background-color:#9fa6b2;background-color:rgba(159,166,178,var(--bg-opacity))}.hover\:bg-gray-50:hover{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.hover\:bg-gray-100:hover{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.hover\:bg-green-500:hover{--bg-opacity:1;background-color:#0e9f6e;background-color:rgba(14,159,110,var(--bg-opacity))}.hover\:bg-indigo-500:hover{--bg-opacity:1;background-color:#6875f5;background-color:rgba(104,117,245,var(--bg-opacity))}.hover\:bg-indigo-600:hover{--bg-opacity:1;background-color:#5850ec;background-color:rgba(88,80,236,var(--bg-opacity))}.focus\:bg-gray-50:focus{--bg-opacity:1;background-color:#f9fafb;background-color:rgba(249,250,251,var(--bg-opacity))}.focus\:bg-gray-100:focus{--bg-opacity:1;background-color:#f4f5f7;background-color:rgba(244,245,247,var(--bg-opacity))}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{--border-opacity:1;border-color:#f4f5f7;border-color:rgba(244,245,247,var(--border-opacity))}.border-gray-200{--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.border-gray-300{--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-opacity))}.border-gray-400{--border-opacity:1;border-color:#9fa6b2;border-color:rgba(159,166,178,var(--border-opacity))}.border-indigo-300{--border-opacity:1;border-color:#b4c6fc;border-color:rgba(180,198,252,var(--border-opacity))}.border-indigo-500{--border-opacity:1;border-color:#6875f5;border-color:rgba(104,117,245,var(--border-opacity))}.border-indigo-600{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity))}.hover\:border-gray-200:hover{--border-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--border-opacity))}.hover\:border-gray-500:hover{--border-opacity:1;border-color:#6b7280;border-color:rgba(107,114,128,var(--border-opacity))}.hover\:border-red-400:hover{--border-opacity:1;border-color:#f98080;border-color:rgba(249,128,128,var(--border-opacity))}.hover\:border-indigo-600:hover{--border-opacity:1;border-color:#5850ec;border-color:rgba(88,80,236,var(--border-opacity))}.focus\:border-blue-300:focus{--border-opacity:1;border-color:#a4cafe;border-color:rgba(164,202,254,var(--border-opacity))}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-0{border-width:0}.border-2{border-width:2px}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.grid{display:grid}.contents{display:contents}.hidden{display:none}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-col,.flex-row{-webkit-box-direction:normal}.flex-col{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.self-start{-ms-flex-item-align:start;align-self:flex-start}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-none{-webkit-box-flex:0;-ms-flex:none;flex:none}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.float-right{float:right}.float-left{float:left}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-thin{font-weight:200}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.h-0{height:0}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-15{height:3.75rem}.h-20{height:5rem}.h-48{height:12rem}.h-auto{height:auto}.h-1\.5{height:.375rem}.h-2\.5{height:.625rem}.h-full{height:100%}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-9{line-height:2.25rem}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.m-4{margin:1rem}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.my-12{margin-top:3rem;margin-bottom:3rem}.mx-auto{margin-left:auto;margin-right:auto}.-my-4{margin-top:-1rem;margin-bottom:-1rem}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.mt-1{margin-top:.25rem}.mr-1{margin-right:.25rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mb-4{margin-bottom:1rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.ml-5{margin-left:1.25rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mt-7{margin-top:1.75rem}.mb-7{margin-bottom:1.75rem}.ml-7{margin-left:1.75rem}.mt-8{margin-top:2rem}.mr-8{margin-right:2rem}.ml-8{margin-left:2rem}.mr-10{margin-right:2.5rem}.mt-12{margin-top:3rem}.ml-12{margin-left:3rem}.ml-14{margin-left:3.5rem}.mt-16{margin-top:4rem}.mr-16{margin-right:4rem}.ml-16{margin-left:4rem}.mt-0\.5{margin-top:.125rem}.mt-1\.5{margin-top:.375rem}.mr-1\.5{margin-right:.375rem}.mt-2\.5{margin-top:.625rem}.-mt-1{margin-top:-.25rem}.-mr-1{margin-right:-.25rem}.-mb-1{margin-bottom:-.25rem}.-mb-2{margin-bottom:-.5rem}.-mt-3{margin-top:-.75rem}.-mt-5{margin-top:-1.25rem}.-ml-6{margin-left:-1.5rem}.-ml-8{margin-left:-2rem}.-mb-0\.5{margin-bottom:-.125rem}.-mt-1\.5{margin-top:-.375rem}.max-h-full{max-height:100%}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.min-h-screen{min-height:100vh}.min-w-0{min-width:0}.min-w-full{min-width:100%}.object-cover{-o-object-fit:cover;object-fit:cover}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.focus\:outline-none:focus{outline:0}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-13{padding:3.25rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-12{padding-left:3rem;padding-right:3rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.pt-1{padding-top:.25rem}.pr-1{padding-right:.25rem}.pb-1{padding-bottom:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pr-2{padding-right:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pr-3{padding-right:.75rem}.pb-3{padding-bottom:.75rem}.pl-3{padding-left:.75rem}.pt-4{padding-top:1rem}.pr-4{padding-right:1rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pt-5{padding-top:1.25rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-6{padding-top:1.5rem}.pr-6{padding-right:1.5rem}.pb-6{padding-bottom:1.5rem}.pl-6{padding-left:1.5rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.pb-8{padding-bottom:2rem}.pl-8{padding-left:2rem}.pt-10{padding-top:2.5rem}.pl-10{padding-left:2.5rem}.pr-12{padding-right:3rem}.pb-12{padding-bottom:3rem}.pl-16{padding-left:4rem}.pt-0\.5{padding-top:.125rem}.pl-0\.5{padding-left:.125rem}.pt-1\.5{padding-top:.375rem}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{right:0;left:0}.inset-0,.inset-y-0{top:0;bottom:0}.top-0{top:0}.right-0{right:0}.left-0{left:0}.bottom-2{bottom:.5rem}.top-8{top:2rem}.resize{resize:both}.shadow-xs{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05);box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-md{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.shadow-lg{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.shadow-xl{-webkit-box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.shadow-inner{-webkit-box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06);box-shadow:inset 0 2px 4px 0 rgba(0,0,0,.06)}.hover\:shadow-md:hover{-webkit-box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06)}.focus\:shadow-lg:focus{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}.focus\:shadow-outline-blue:focus{-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.focus\:shadow-outline-red:focus{-webkit-box-shadow:0 0 0 3px rgba(248,180,180,.45);box-shadow:0 0 0 3px rgba(248,180,180,.45)}.focus\:shadow-outline-indigo:focus{-webkit-box-shadow:0 0 0 3px rgba(180,198,252,.45);box-shadow:0 0 0 3px rgba(180,198,252,.45)}.fill-current{fill:currentColor}.table-fixed{table-layout:fixed}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.text-black{--text-opacity:1;color:#000;color:rgba(0,0,0,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#9fa6b2;color:rgba(159,166,178,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#6b7280;color:rgba(107,114,128,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#4b5563;color:rgba(75,85,99,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity))}.text-gray-800{--text-opacity:1;color:#252f3f;color:rgba(37,47,63,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.text-red-400{--text-opacity:1;color:#f98080;color:rgba(249,128,128,var(--text-opacity))}.text-red-500{--text-opacity:1;color:#f05252;color:rgba(240,82,82,var(--text-opacity))}.text-red-600{--text-opacity:1;color:#e02424;color:rgba(224,36,36,var(--text-opacity))}.text-red-800{--text-opacity:1;color:#9b1c1c;color:rgba(155,28,28,var(--text-opacity))}.text-orange-400{--text-opacity:1;color:#ff8a4c;color:rgba(255,138,76,var(--text-opacity))}.text-orange-500{--text-opacity:1;color:#ff5a1f;color:rgba(255,90,31,var(--text-opacity))}.text-yellow-400{--text-opacity:1;color:#e3a008;color:rgba(227,160,8,var(--text-opacity))}.text-green-400{--text-opacity:1;color:#31c48d;color:rgba(49,196,141,var(--text-opacity))}.text-green-600{--text-opacity:1;color:#057a55;color:rgba(5,122,85,var(--text-opacity))}.text-green-800{--text-opacity:1;color:#03543f;color:rgba(3,84,63,var(--text-opacity))}.text-teal-400{--text-opacity:1;color:#16bdca;color:rgba(22,189,202,var(--text-opacity))}.text-teal-700{--text-opacity:1;color:#036672;color:rgba(3,102,114,var(--text-opacity))}.text-teal-800{--text-opacity:1;color:#05505c;color:rgba(5,80,92,var(--text-opacity))}.text-blue-400{--text-opacity:1;color:#76a9fa;color:rgba(118,169,250,var(--text-opacity))}.text-blue-500{--text-opacity:1;color:#3f83f8;color:rgba(63,131,248,var(--text-opacity))}.text-blue-700{--text-opacity:1;color:#1a56db;color:rgba(26,86,219,var(--text-opacity))}.text-blue-800{--text-opacity:1;color:#1e429f;color:rgba(30,66,159,var(--text-opacity))}.text-indigo-100{--text-opacity:1;color:#e5edff;color:rgba(229,237,255,var(--text-opacity))}.text-indigo-400{--text-opacity:1;color:#8da2fb;color:rgba(141,162,251,var(--text-opacity))}.text-indigo-500{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.text-indigo-600{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.text-indigo-700{--text-opacity:1;color:#5145cd;color:rgba(81,69,205,var(--text-opacity))}.text-indigo-800{--text-opacity:1;color:#42389d;color:rgba(66,56,157,var(--text-opacity))}.group:hover .group-hover\:text-gray-900{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.group:hover .group-hover\:text-indigo-800{--text-opacity:1;color:#42389d;color:rgba(66,56,157,var(--text-opacity))}.group:focus .group-focus\:text-gray-900{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.group:focus .group-focus\:text-indigo-800{--text-opacity:1;color:#42389d;color:rgba(66,56,157,var(--text-opacity))}.hover\:text-white:hover{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.hover\:text-gray-800:hover{--text-opacity:1;color:#252f3f;color:rgba(37,47,63,var(--text-opacity))}.hover\:text-gray-900:hover{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.hover\:text-blue-700:hover{--text-opacity:1;color:#1a56db;color:rgba(26,86,219,var(--text-opacity))}.hover\:text-indigo-500:hover{--text-opacity:1;color:#6875f5;color:rgba(104,117,245,var(--text-opacity))}.focus\:text-gray-900:focus{--text-opacity:1;color:#161e2e;color:rgba(22,30,46,var(--text-opacity))}.active\:text-indigo-600:active{--text-opacity:1;color:#5850ec;color:rgba(88,80,236,var(--text-opacity))}.text-opacity-75{--text-opacity:0.75}.italic{font-style:italic}.not-italic{font-style:normal}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.underline{text-decoration:underline}.no-underline{text-decoration:none}.hover\:underline:hover{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.visible{visibility:visible}.whitespace-no-wrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.w-0{width:0}.w-2{width:.5rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-12{width:3rem}.w-40{width:10rem}.w-56{width:14rem}.w-auto{width:auto}.w-1\.5{width:.375rem}.w-2\.5{width:.625rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-2\/4{width:50%}.w-3\/4{width:75%}.w-1\/5{width:20%}.w-2\/5{width:40%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-3\/6{width:50%}.w-4\/6{width:66.666667%}.w-5\/6{width:83.333333%}.w-1\/12{width:8.333333%}.w-2\/12{width:16.666667%}.w-3\/12{width:25%}.w-4\/12{width:33.333333%}.w-5\/12{width:41.666667%}.w-9\/12{width:75%}.w-11\/12{width:91.666667%}.w-full{width:100%}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.gap-8{grid-gap:2rem;gap:2rem}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.transition-all{-webkit-transition-property:all;transition-property:all}.transition{-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform}.ease-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{-webkit-transition-duration:75ms;transition-duration:75ms}.duration-100{-webkit-transition-duration:.1s;transition-duration:.1s}.duration-150{-webkit-transition-duration:.15s;transition-duration:.15s}.duration-300{-webkit-transition-duration:.3s;transition-duration:.3s}@-webkit-keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes ping{75%,to{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{-webkit-transform:translateY(-25%);transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{-webkit-transform:none;transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-ping{-webkit-animation:ping 1s cubic-bezier(0,0,.2,1) infinite;animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.animate-pulse{-webkit-animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite;animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@media (min-width:640px){.sm\:space-y-0>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0px*(1 - var(--space-y-reverse)));margin-bottom:calc(0px*var(--space-y-reverse))}.sm\:space-y-3>:not(template)~:not(template){--space-y-reverse:0;margin-top:calc(0.75rem*(1 - var(--space-y-reverse)));margin-bottom:calc(0.75rem*var(--space-y-reverse))}.sm\:space-x-4>:not(template)~:not(template){--space-x-reverse:0;margin-right:calc(1rem*var(--space-x-reverse));margin-left:calc(1rem*(1 - var(--space-x-reverse)))}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.sm\:grid{display:grid}.sm\:flex-row-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.sm\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.sm\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.sm\:h-10{height:2.5rem}.sm\:text-sm{font-size:.875rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:leading-5{line-height:1.25rem}.sm\:leading-7{line-height:1.75rem}.sm\:leading-9{line-height:2.25rem}.sm\:my-0{margin-top:0;margin-bottom:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-7{margin-top:1.75rem;margin-bottom:1.75rem}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:my-12{margin-top:3rem;margin-bottom:3rem}.sm\:mt-0{margin-top:0}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:mt-5{margin-top:1.25rem}.sm\:max-w-lg{max-width:32rem}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:w-10{width:2.5rem}.sm\:w-32{width:8rem}.sm\:w-auto{width:auto}.sm\:w-1\/2{width:50%}.sm\:w-1\/3{width:33.333333%}.sm\:w-2\/3{width:66.666667%}.sm\:w-full{width:100%}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:rounded-lg{border-radius:.5rem}.md\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\:text-base{font-size:1rem}.md\:mx-0{margin-left:0;margin-right:0}.md\:my-2{margin-top:.5rem;margin-bottom:.5rem}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:mt-0{margin-top:0}.md\:ml-2{margin-left:.5rem}.md\:ml-4{margin-left:1rem}.md\:ml-8{margin-left:2rem}.md\:-mr-8{margin-right:-2rem}.md\:max-w-xl{max-width:36rem}.md\:max-w-5xl{max-width:64rem}.md\:p-2{padding:.5rem}.md\:p-6{padding:1.5rem}.md\:py-0{padding-top:0;padding-bottom:0}.md\:px-1{padding-left:.25rem;padding-right:.25rem}.md\:px-2{padding-left:.5rem;padding-right:.5rem}.md\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:pb-2{padding-bottom:.5rem}.md\:pr-4{padding-right:1rem}.md\:pt-6{padding-top:1.5rem}.md\:shadow-xl{-webkit-box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.md\:w-3\/5{width:60%}}@media (min-width:1024px){.lg\:bg-transparent{background-color:transparent}.lg\:border-transparent{border-color:transparent}.lg\:rounded-full{border-radius:9999px}.lg\:block{display:block}.lg\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.lg\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}.lg\:my-0{margin-top:0;margin-bottom:0}.lg\:mx-5{margin-left:1.25rem;margin-right:1.25rem}.lg\:my-24{margin-top:6rem;margin-bottom:6rem}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:ml-16{margin-left:4rem}.lg\:-mr-16{margin-right:-4rem}.lg\:max-w-3xl{max-width:48rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:px-3{padding-left:.75rem;padding-right:.75rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:pl-2{padding-left:.5rem}.lg\:top-1\/2{top:50%}.lg\:shadow-none{-webkit-box-shadow:none;box-shadow:none}.lg\:w-40{width:10rem}.lg\:w-48{width:12rem}.lg\:w-1\/2{width:50%}.lg\:w-3\/5{width:60%}.lg\:w-3\/12{width:25%}.lg\:w-7\/12{width:58.333333%}}@media (min-width:1280px){.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:mr-0{margin-right:0}.xl\:ml-3{margin-left:.75rem}.xl\:ml-4{margin-left:1rem}.xl\:ml-20{margin-left:5rem}.xl\:max-w-4xl{max-width:56rem}.xl\:px-4{padding-left:1rem;padding-right:1rem}.xl\:pb-4{padding-bottom:1rem}.xl\:top-1\/3{top:33.333333%}.xl\:w-1\/4{width:25%}.xl\:w-2\/5{width:40%}.xl\:w-3\/5{width:60%}.xl\:w-2\/12{width:16.666667%}.xl\:w-7\/12{width:58.333333%}}
lite/admin/images/halloween_2020.png ADDED
Binary file
lite/admin/images/premium-icon.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg style="color: #2c7a7b;" class="w-6 h-5 -mt-0.5 inline text-teal-600" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path></svg>
lite/admin/js/email-subscribers-admin.js CHANGED
@@ -626,6 +626,20 @@
626
  jQuery('#spam_score_modal').hide();
627
  });
628
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
629
  });
630
 
631
  })(jQuery);
626
  jQuery('#spam_score_modal').hide();
627
  });
628
 
629
+ // Show/hide utm campaign name field.
630
+ jQuery('#enable_utm_tracking').on('change', function() {
631
+ let enable_utm_tracking = jQuery(this).prop('checked') ? 'yes' : 'no';
632
+ if( 'yes' === enable_utm_tracking ) {
633
+ jQuery('.ig_es_broadcast_campaign_name_wrapper').removeClass('hidden');
634
+ } else {
635
+ jQuery('.ig_es_broadcast_campaign_name_wrapper').addClass('hidden');
636
+ }
637
+ });
638
+
639
+ // Hide trial to premium offer notice when accepted. This function just hide it from frontend, actual notice gets hidden when reloading page in new tab.
640
+ jQuery('#ig-es-optin-trial-to-premium-offer').on('click', function(){
641
+ jQuery(this).closest('.notice').hide('slow');
642
+ });
643
  });
644
 
645
  })(jQuery);
lite/admin/partials/onboarding.php CHANGED
@@ -123,8 +123,9 @@
123
  </div>
124
  <div class="pl-3">
125
  <label for="es_free_trial_preference" class="text-sm">
126
- <?php
127
- echo esc_html__( 'Enable 14 day free trial of premium features - email delivery testing, automatic background sending, spam protection and more', 'email-subscribers');
 
128
  ?>
129
  </label>
130
  </div>
@@ -469,10 +470,11 @@
469
 
470
  <p class="text-sm leading-6 pt-1">
471
  <?php
472
- echo esc_html__('Get 14 day free trial of managed email sending, advance spam
 
473
  protection, security, email deliverability checks and more. No
474
  credit card required. Premium features will be disabled
475
- automatically after the trial if you don\'t continue.', 'email-subscribers');
476
  ?>
477
  </p>
478
  <div class="flex my-2 sm:my-0 pt-1">
123
  </div>
124
  <div class="pl-3">
125
  <label for="es_free_trial_preference" class="text-sm">
126
+ <?php
127
+ /* translators: 1: Trial period in days. */
128
+ echo esc_html__( sprintf( 'Enable %s days free trial of premium features - email delivery testing, automatic background sending, spam protection and more', ES()->trial->get_trial_period( 'in_days' ) ), 'email-subscribers' );
129
  ?>
130
  </label>
131
  </div>
470
 
471
  <p class="text-sm leading-6 pt-1">
472
  <?php
473
+ /* translators: 1: Trial period in days. */
474
+ echo esc_html__( sprintf( 'Get %s days free trial of managed email sending, advance spam
475
  protection, security, email deliverability checks and more. No
476
  credit card required. Premium features will be disabled
477
+ automatically after the trial if you don\'t continue.', ES()->trial->get_trial_period( 'in_days' ) ), 'email-subscribers' );
478
  ?>
479
  </p>
480
  <div class="flex my-2 sm:my-0 pt-1">
lite/includes/class-email-subscribers.php CHANGED
@@ -303,17 +303,28 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
303
  * @since 4.0.0
304
  */
305
  public function add_admin_notice() {
306
- /*
307
- // Disable Covid-19 Notice
308
- // Keeping the code here for future reference if we want to add
309
- // offer later.
 
 
 
 
 
 
 
 
 
 
310
 
311
- if ( ! ES()->is_premium() ) {
312
  $args['url'] = 'https://www.icegram.com/';
313
- $args['include'] = ES_PLUGIN_DIR . 'lite/includes/notices/views/ig-es-offer.php';
314
- ES_Admin_Notices::add_custom_notice( 'covid_19', $args );
 
 
315
  }
316
- */
317
 
318
  $screen_id = $this->get_current_screen_id();
319
  // Don't show admin notices on Dashboard if onboarding is not yet completed.
@@ -353,16 +364,6 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
353
  ES_Admin_Notices::remove_notice( 'show_wp_cron' );
354
  }
355
 
356
- if ( 'yes' === $is_onboarding_complete ) {
357
- // Show opt to trial notice if user has not already opted for it or is not a premium user.
358
- if ( ! ( ES()->is_trial() || ES()->is_premium() ) ) {
359
- // Check whether user has performed any action(accept/reject) on consent notice for trial. 'yes' if performed.
360
- $trial_consent_given = get_option( 'ig_es_trial_consent', 'no' );
361
- if ( 'yes' !== $trial_consent_given ) {
362
- ES_Admin_Notices::add_notice( 'trial_consent' );
363
- }
364
- }
365
- }
366
  }
367
 
368
  /**
@@ -578,6 +579,10 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
578
  if ( ! defined( 'IG_ES_WORKFLOW_STATUS_ACTIVE' ) ) {
579
  define( 'IG_ES_WORKFLOW_STATUS_ACTIVE', 1 );
580
  }
 
 
 
 
581
  }
582
 
583
  /**
@@ -657,8 +662,8 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
657
  'lite/includes/services/class-es-email-delivery-check.php',
658
  'lite/includes/services/class-es-send-test-email.php',
659
  'lite/includes/services/class-es-service-spam-score-check.php',
660
- 'lite/includes/services/class-es-service-css-inliner.php',
661
- 'lite/includes/services/class-es-service-send-cron-data.php',
662
 
663
  // Classes
664
  'lite/includes/classes/class-es-list-table.php',
@@ -694,6 +699,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
694
  'lite/includes/classes/class-es-ig-redirect.php',
695
  'lite/includes/classes/class-es-geolocation.php',
696
  'lite/includes/classes/class-es-browser.php',
 
697
 
698
  // Core Functions
699
  'lite/includes/es-core-functions.php',
@@ -998,7 +1004,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
998
  $current_time = time();
999
 
1000
  // Get the timestamp when trial will expire.
1001
- $trial_expires_at = $trial_started_at + 14 * DAY_IN_SECONDS;
1002
 
1003
  // Check if current time is greater than expiry time.
1004
  if ( $current_time > $trial_expires_at ) {
@@ -1312,6 +1318,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
1312
  self::$instance->cron = new ES_Cron();
1313
  self::$instance->compatibiloty = new ES_Compatibility();
1314
  self::$instance->workflows_db = new ES_DB_Workflows();
 
1315
 
1316
  if ( is_admin() ) {
1317
  $ig_es_feedback_class = 'IG_Feedback_V_' . str_replace( '.', '_', IG_ES_FEEDBACK_TRACKER_VERSION );
303
  * @since 4.0.0
304
  */
305
  public function add_admin_notice() {
306
+ ///Halloween offer
307
+ $show_offer = false;
308
+ $current_page = ig_es_get_request_data( 'page' );
309
+
310
+ if ( $this->can_upsell_features( array( 'lite', 'trial', 'starter' ) ) && IG_ES_Onboarding::is_onboarding_completed() ) {
311
+ if ( 'es_reports' === $current_page ) {
312
+ $report_insight = ig_es_get_request_data( 'insight' );
313
+ if ( ! $report_insight ) {
314
+ $show_offer = true;
315
+ }
316
+ } else {
317
+ $show_offer = true;
318
+ }
319
+ }
320
 
321
+ if ( $show_offer ) {
322
  $args['url'] = 'https://www.icegram.com/';
323
+ $args['include'] = ES_PLUGIN_DIR . 'lite/includes/notices/views/ig-es-halloween-offer.php';
324
+ ES_Admin_Notices::add_custom_notice( 'halloween_offer_2020', $args );
325
+ } else {
326
+ ES_Admin_Notices::remove_notice( 'halloween_offer_2020' );
327
  }
 
328
 
329
  $screen_id = $this->get_current_screen_id();
330
  // Don't show admin notices on Dashboard if onboarding is not yet completed.
364
  ES_Admin_Notices::remove_notice( 'show_wp_cron' );
365
  }
366
 
 
 
 
 
 
 
 
 
 
 
367
  }
368
 
369
  /**
579
  if ( ! defined( 'IG_ES_WORKFLOW_STATUS_ACTIVE' ) ) {
580
  define( 'IG_ES_WORKFLOW_STATUS_ACTIVE', 1 );
581
  }
582
+
583
+ if ( ! defined( 'IG_ES_TRIAL_PERIOD_IN_DAYS' ) ) {
584
+ define( 'IG_ES_TRIAL_PERIOD_IN_DAYS', 14 );
585
+ }
586
  }
587
 
588
  /**
662
  'lite/includes/services/class-es-email-delivery-check.php',
663
  'lite/includes/services/class-es-send-test-email.php',
664
  'lite/includes/services/class-es-service-spam-score-check.php',
665
+ 'lite/includes/services/class-es-service-handle-cron-data.php',
666
+ 'lite/includes/services/class-es-service-process-email-content.php',
667
 
668
  // Classes
669
  'lite/includes/classes/class-es-list-table.php',
699
  'lite/includes/classes/class-es-ig-redirect.php',
700
  'lite/includes/classes/class-es-geolocation.php',
701
  'lite/includes/classes/class-es-browser.php',
702
+ 'lite/includes/classes/class-ig-es-trial.php',
703
 
704
  // Core Functions
705
  'lite/includes/es-core-functions.php',
1004
  $current_time = time();
1005
 
1006
  // Get the timestamp when trial will expire.
1007
+ $trial_expires_at = $trial_started_at + ES()->trial->get_trial_period();
1008
 
1009
  // Check if current time is greater than expiry time.
1010
  if ( $current_time > $trial_expires_at ) {
1318
  self::$instance->cron = new ES_Cron();
1319
  self::$instance->compatibiloty = new ES_Compatibility();
1320
  self::$instance->workflows_db = new ES_DB_Workflows();
1321
+ self::$instance->trial = new IG_ES_Trial();
1322
 
1323
  if ( is_admin() ) {
1324
  $ig_es_feedback_class = 'IG_Feedback_V_' . str_replace( '.', '_', IG_ES_FEEDBACK_TRACKER_VERSION );
lite/includes/class-es-common.php CHANGED
@@ -1748,4 +1748,72 @@ class ES_Common {
1748
 
1749
  return $mailbox_user . '@box.icegram.com';
1750
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1751
  }
 
1748
 
1749
  return $mailbox_user . '@box.icegram.com';
1750
  }
1751
+
1752
+ /**
1753
+ * Get upselling information box
1754
+ *
1755
+ * @since 4.6.2
1756
+ */
1757
+ public static function upsell_description_message_box( $upsell_info = array(), $echo = true ) {
1758
+ ob_start();
1759
+ ?>
1760
+ <div class="inline-flex rounded-md shadow bg-teal-50 px-2 pt-1 my-2 w-full font-sans">
1761
+ <div class="px-2 pt-2 pb-2">
1762
+ <div class="flex">
1763
+ <div class="flex-shrink-0">
1764
+ <svg class='h-5 w-5 text-teal-400' fill='currentColor' viewBox='0 0 20 20'>
1765
+ <path fill-rule='evenodd' d='M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z' clip-rule='evenodd'/>
1766
+ </svg>
1767
+ </div>
1768
+ <div class="ml-3">
1769
+ <h3 class="text-sm leading-5 font-medium text-blue-800 hover:underline">
1770
+ <?php
1771
+ /* translators: 1: Anchor opening tag with href attribute 2: Target attribute 3: Anchor closing tag */
1772
+ echo sprintf( esc_html__('%1$s' . esc_url( $upsell_info[ 'pricing_url' ] ) . '%2$s' . esc_html( $upsell_info['upgrade_title'] ) . '%3$s', 'email-subscribers' ) , '<a href="', '" target="_blank">', '</a>' );
1773
+ ?>
1774
+ </h3>
1775
+ </div>
1776
+ </div>
1777
+ <div class="mt-2 ml-8 text-sm leading-5 text-teal-700">
1778
+ <p>
1779
+ <?php
1780
+ $allowed_html_tags = ig_es_allowed_html_tags_in_esc();
1781
+ if ( ! empty( $upsell_info[ 'upsell_message' ] ) ) {
1782
+ echo wp_kses( $upsell_info[ 'upsell_message' ] , $allowed_html_tags );
1783
+ }
1784
+
1785
+ $timezone_format = _x( 'Y-m-d', 'timezone date format' );
1786
+ $ig_current_date = strtotime( date_i18n( $timezone_format ) ) ;
1787
+ if ( ( ( $ig_current_date < strtotime( '2020-10-30' ) ) || ( $ig_current_date > strtotime( '2020-11-02' ) ) ) && self::can_show_coupon('PREMIUM10')) {
1788
+ ?>
1789
+ <p class="mb-1 mt-3">
1790
+ <?php
1791
+ echo wp_kses_post( 'Upgrade now & get <b> 10% discount!</b> <br/><br/>Use coupon code:');
1792
+ ?>
1793
+
1794
+ <span class="ml-2 px-1.5 py-1 font-medium bg-yellow-100 rounded-md border-2 border-dotted border-indigo-300 select-all"><?php esc_html_e( 'PREMIUM10', 'email-subscribers' ); ?> </span>
1795
+ </p>
1796
+ <?php
1797
+ }
1798
+ if ( $upsell_info[ 'cta_html' ] ) {
1799
+ ?>
1800
+ <div class="pt-6 text-center -ml-6 pb-2">
1801
+ <a href="<?php echo esc_url( $upsell_info[ 'pricing_url' ] ); ?>" target="_blank" class="rounded-md border border-transparent px-3 py-2 bg-white text-sm leading-7 font-medium text-white bg-indigo-600 hover:text-white hover:bg-indigo-500 transition ease-in-out duration-150 mt-2"><?php esc_html_e('Upgrade', 'email-subscribers'); ?></a>
1802
+ </div>
1803
+ <?php
1804
+ }
1805
+ ?>
1806
+ </div>
1807
+ </div>
1808
+ </div>
1809
+
1810
+ <?php
1811
+ $message_html = ob_get_clean();
1812
+ if ( $echo ) {
1813
+ echo wp_kses( $message_html , $allowed_html_tags );
1814
+ } else {
1815
+ return $message_html;
1816
+ }
1817
+ }
1818
  }
1819
+
lite/includes/classes/class-es-admin-settings.php CHANGED
@@ -132,7 +132,7 @@ class ES_Admin_Settings {
132
  'name' => __( 'General', 'email-subscribers' ),
133
  ),
134
  'signup_confirmation' => array(
135
- 'icon' => '<svg class="w-6 h-6 inline -mt-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z"></path></svg>',
136
  'name' => __( 'Notifications', 'email-subscribers' ),
137
  ),
138
  'email_sending' => array(
@@ -153,7 +153,7 @@ class ES_Admin_Settings {
153
  foreach ( $es_settings_tabs as $key => $value ) {
154
  ?>
155
  <li id="menu-content" class="h-10 py-1 mx-2 border border-transparent rounded settings-menu-change md:my-2 hover:rounded-lg hover:border-gray-200">
156
- <a href="#tabs-<?php echo esc_attr( $key ); ?>" id="menu-content-change" class="block px-4 pt-1 text-base font-medium text-gray-700 no-underline align-middle hover:text-gray-800"><?php echo wp_kses( $value['icon'], $allowedtags ); ?>&nbsp;<span class="pl-0.5"><?php echo esc_html( $value['name'] ); ?></span></a></li>
157
  <?php
158
  }
159
  ?>
@@ -736,7 +736,7 @@ class ES_Admin_Settings {
736
  $html .= $field['name'];
737
 
738
  if ( ! empty( $field['is_premium'] ) ) {
739
- $html .= '<a href="' . $field['link'] . '" target="_blank"><span class="ml-2 inline-flex px-2 text-xs font-semibold leading-5 text-green-800 bg-green-100 rounded-full">' . __( 'Premium', 'email-subscribers' ) . '</span></a>';
740
  }
741
 
742
  // If there is help text
@@ -776,25 +776,15 @@ class ES_Admin_Settings {
776
  }
777
 
778
  if ( ! empty( $field['upgrade_desc'] ) ) {
779
- $html .= "</div>
780
- <div class='w-3/5'>
781
- <div class='px-3 py-2 mr-2 rounded-md bg-teal-50'>
782
- <div class='flex'>
783
- <div class='flex-shrink-0'>
784
- <svg class='w-5 h-5 text-teal-400' fill='currentColor' viewBox='0 0 20 20'>
785
- <path fill-rule='evenodd' d='M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z' clip-rule='evenodd'/>
786
- </svg>
787
- </div>
788
- <div class='ml-3'>
789
- <h3 class='text-sm font-medium leading-5 text-teal-700'>";
790
- $html .= $field['upgrade_title'] . '</h3>';
791
- $html .= "<div class='mt-2 text-sm leading-5 text-teal-500'>
792
- <p>" . $field['upgrade_desc'] . '</p>
793
- </div>
794
- </div>
795
- </div>
796
- </div>
797
- </div>';
798
  }
799
 
800
  $html .= '</td></tr>';
@@ -881,7 +871,7 @@ class ES_Admin_Settings {
881
  . $mailer['name'] . '</p>';
882
 
883
  if ( ! empty( $mailer['is_premium'] ) ) {
884
- $html .= '<span class="inline-flex ml-2 px-2 text-xs font-semibold leading-5 text-green-800 bg-green-100 rounded-full">Premium</span></a>';
885
  }
886
  $html .= '</div></label>';
887
  }
132
  'name' => __( 'General', 'email-subscribers' ),
133
  ),
134
  'signup_confirmation' => array(
135
+ 'icon' => '<svg class="w-6 h-6 inline -mt-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z"></path></svg>',
136
  'name' => __( 'Notifications', 'email-subscribers' ),
137
  ),
138
  'email_sending' => array(
153
  foreach ( $es_settings_tabs as $key => $value ) {
154
  ?>
155
  <li id="menu-content" class="h-10 py-1 mx-2 border border-transparent rounded settings-menu-change md:my-2 hover:rounded-lg hover:border-gray-200">
156
+ <a href="#tabs-<?php echo esc_attr( $key ); ?>" id="menu-content-change" class="block px-4 pt-1 text-base font-medium text-gray-600 no-underline align-middle hover:text-gray-800"><?php echo wp_kses( $value['icon'], $allowedtags ); ?>&nbsp;<span class="pl-0.5"><?php echo esc_html( $value['name'] ); ?></span></a></li>
157
  <?php
158
  }
159
  ?>
736
  $html .= $field['name'];
737
 
738
  if ( ! empty( $field['is_premium'] ) ) {
739
+ $html .= '</span><a class="ml-1" href="' . $field['link'] . '" target="_blank"><span class="premium-icon"></span></a>';
740
  }
741
 
742
  // If there is help text
776
  }
777
 
778
  if ( ! empty( $field['upgrade_desc'] ) ) {
779
+ $upsell_info = array(
780
+ 'upgrade_title' => $field[ 'upgrade_title' ],
781
+ 'pricing_url' => $field[ 'link' ],
782
+ 'upsell_message' => $field[ 'upgrade_desc' ],
783
+ 'cta_html' => false,
784
+ );
785
+ $html .= '</div> <div class="w-3/5">';
786
+ $html .= ES_Common::upsell_description_message_box( $upsell_info, false );
787
+ $html .= '</div>';
 
 
 
 
 
 
 
 
 
 
788
  }
789
 
790
  $html .= '</td></tr>';
871
  . $mailer['name'] . '</p>';
872
 
873
  if ( ! empty( $mailer['is_premium'] ) ) {
874
+ $html .= '<span class="premium-icon"></span>';
875
  }
876
  $html .= '</div></label>';
877
  }
lite/includes/classes/class-es-contacts-table.php CHANGED
@@ -143,6 +143,7 @@ class ES_Contacts_Table extends WP_List_Table {
143
  'url' => add_query_arg( 'action', 'export', 'admin.php?page=es_subscribers' ),
144
  ),
145
  // Start-IG-Code.
 
146
  'sync' => array(
147
  'label' => __( 'Sync', 'email-subscribers' ),
148
  'indicator_option' => 'ig_es_show_sync_tab',
@@ -151,6 +152,7 @@ class ES_Contacts_Table extends WP_List_Table {
151
  'action' => 'sync',
152
  'url' => add_query_arg( 'action', 'sync', 'admin.php?page=es_subscribers' ),
153
  ),
 
154
  // End-IG-Code.
155
  'manage_lists' => array(
156
  'label' => __( 'Manage Lists', 'email-subscribers' ),
143
  'url' => add_query_arg( 'action', 'export', 'admin.php?page=es_subscribers' ),
144
  ),
145
  // Start-IG-Code.
146
+ /*
147
  'sync' => array(
148
  'label' => __( 'Sync', 'email-subscribers' ),
149
  'indicator_option' => 'ig_es_show_sync_tab',
152
  'action' => 'sync',
153
  'url' => add_query_arg( 'action', 'sync', 'admin.php?page=es_subscribers' ),
154
  ),
155
+ */
156
  // End-IG-Code.
157
  'manage_lists' => array(
158
  'label' => __( 'Manage Lists', 'email-subscribers' ),
lite/includes/classes/class-es-mailer.php CHANGED
@@ -1129,6 +1129,21 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
1129
  return apply_filters( 'ig_es_track_clicks', $is_track_clicks, $contact_id, $campaign_id, $this->link_data );
1130
  }
1131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1132
  /**
1133
  * Allow tracking email open?
1134
  *
1129
  return apply_filters( 'ig_es_track_clicks', $is_track_clicks, $contact_id, $campaign_id, $this->link_data );
1130
  }
1131
 
1132
+ /**
1133
+ * Allow utm tracking?
1134
+ *
1135
+ * @param array $data
1136
+ *
1137
+ * @return bool $
1138
+ *
1139
+ * @since 4.3.2
1140
+ */
1141
+ public function can_track_utm( $data = array() ) {
1142
+ $is_track_utm = apply_filters( 'ig_es_track_utm', false, $data );
1143
+
1144
+ return $is_track_utm;
1145
+ }
1146
+
1147
  /**
1148
  * Allow tracking email open?
1149
  *
lite/includes/classes/class-es-newsletters.php CHANGED
@@ -486,7 +486,7 @@ class ES_Newsletters {
486
 
487
  <?php do_action( 'ig_es_after_broadcast_right_pan_settings', $broadcast_data ); ?>
488
 
489
- <div class="block w-full px-4 py-2">
490
  <?php
491
  $enable_open_tracking = ! empty( $broadcast_data['meta']['enable_open_tracking'] ) ? $broadcast_data['meta']['enable_open_tracking'] : get_option( 'ig_es_track_email_opens', 'yes' );
492
  ?>
486
 
487
  <?php do_action( 'ig_es_after_broadcast_right_pan_settings', $broadcast_data ); ?>
488
 
489
+ <div class="block w-full px-4 py-2 mt-2">
490
  <?php
491
  $enable_open_tracking = ! empty( $broadcast_data['meta']['enable_open_tracking'] ) ? $broadcast_data['meta']['enable_open_tracking'] : get_option( 'ig_es_track_email_opens', 'yes' );
492
  ?>
lite/includes/classes/class-es-post-notifications.php CHANGED
@@ -321,27 +321,30 @@ class ES_Post_Notifications_Table {
321
 
322
  <?php do_action( 'es_before_post_notification_settings', $id ); ?>
323
 
324
- <tr class="border-b border-gray-100">
325
- <th scope="row" class="w-3/12 pt-3 pb-8 text-left">
326
- <label for="tag-link"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-2">
327
- <?php esc_html_e( 'Select list', 'email-subscribers' ); ?></span>
328
- <p class="italic text-xs font-normal text-gray-400 mt-2 ml-6 leading-snug"><?php esc_html_e( 'Contacts from the selected list will be notified about new post notification.', 'email-subscribers' ); ?></p></label>
329
- </th>
330
- <td class="w-9/12 pb-3 ">
331
- <div class="flex">
332
- <div class="w-2/4 inline-flex ml-12 relative">
333
- <select <?php echo esc_attr( $select_list_attr ); ?> class="absolute shadow-sm border border-gray-400 w-2/3 <?php echo esc_attr( $select_list_class ); ?>" name="<?php echo esc_attr( $select_list_name ); ?>" id="ig_es_post_notification_list_ids">
334
- <?php
335
- $lists_dropdown = ES_Common::prepare_list_dropdown_options( $list_id );
336
- echo wp_kses( $lists_dropdown, $allowedtags );
337
- ?>
338
- </select>
 
339
  </div>
340
-
341
- <?php do_action( 'ig_es_add_multilist_options' ); ?>
342
- </div>
343
- </td>
344
- </tr>
 
 
345
  <tr class="border-b border-gray-100">
346
  <th scope="row" class="w-3/12 pt-3 pb-8 text-left">
347
  <label for="tag-link"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-2">
321
 
322
  <?php do_action( 'es_before_post_notification_settings', $id ); ?>
323
 
324
+ <tr class="border-b border-gray-100">
325
+ <th scope="row" class="w-3/12 pt-3 pb-8 text-left">
326
+ <label for="tag-link"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-2">
327
+ <?php esc_html_e( 'Select list', 'email-subscribers' ); ?></span>
328
+ <p class="italic text-xs font-normal text-gray-400 mt-2 ml-6 leading-snug"><?php esc_html_e( 'Contacts from the selected list will be notified about new post notification.', 'email-subscribers' ); ?></p></label>
329
+ </th>
330
+ <td class="w-9/12 pb-3 ">
331
+ <div class="flex">
332
+ <div class="w-2/4 inline-flex ml-12 relative">
333
+ <select <?php echo esc_attr( $select_list_attr ); ?> class="absolute shadow-sm border border-gray-400 w-2/3 <?php echo esc_attr( $select_list_class ); ?>" name="<?php echo esc_attr( $select_list_name ); ?>" id="ig_es_post_notification_list_ids">
334
+ <?php
335
+ $lists_dropdown = ES_Common::prepare_list_dropdown_options( $list_id );
336
+ echo wp_kses( $lists_dropdown, $allowedtags );
337
+ ?>
338
+ </select>
339
+ </div>
340
  </div>
341
+ </td>
342
+ </tr>
343
+ </tbody>
344
+ </table>
345
+ <?php do_action( 'ig_es_add_multilist_options' ); ?>
346
+ <table class="max-w-full form-table">
347
+ <tbody>
348
  <tr class="border-b border-gray-100">
349
  <th scope="row" class="w-3/12 pt-3 pb-8 text-left">
350
  <label for="tag-link"><span class="block ml-6 pr-4 text-sm font-medium text-gray-600 pb-2">
lite/includes/classes/class-ig-es-trial.php ADDED
@@ -0,0 +1,234 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
+
8
+ /**
9
+ * The trial-specific functionality of the plugin.
10
+ *
11
+ */
12
+ class IG_ES_Trial {
13
+
14
+ /**
15
+ * Class instance.
16
+ *
17
+ * @var IG_ES_Trial $instance
18
+ */
19
+ public static $instance;
20
+
21
+ /**
22
+ * Initialize the class.
23
+ *
24
+ * @since 4.6.2
25
+ */
26
+ public function __construct() {
27
+ add_action( 'admin_init', array( $this, 'show_trial_notices' ) );
28
+ }
29
+
30
+ /**
31
+ * Get class instance.
32
+ *
33
+ * @since 4.6.2
34
+ */
35
+ public static function get_instance() {
36
+
37
+ if ( ! isset( self::$instance ) ) {
38
+ self::$instance = new self();
39
+ }
40
+
41
+ return self::$instance;
42
+ }
43
+
44
+ /**
45
+ * Method to get trial period
46
+ *
47
+ * @param string $period_in Period unit.
48
+ *
49
+ * @return int Trial period in second.
50
+ *
51
+ * @since 4.6.2
52
+ */
53
+ public function get_trial_period( $period_in = 'in_seconds' ) {
54
+
55
+ $trial_period = 0;
56
+
57
+ switch ( $period_in ) {
58
+ case 'in_days':
59
+ $trial_period = IG_ES_TRIAL_PERIOD_IN_DAYS;
60
+ break;
61
+ case 'in_seconds':
62
+ default:
63
+ $trial_period = IG_ES_TRIAL_PERIOD_IN_DAYS * DAY_IN_SECONDS;
64
+ }
65
+
66
+ return $trial_period;
67
+ }
68
+
69
+ /**
70
+ * Method to get total days since trial start date/time
71
+ *
72
+ * @return int $trial_time_in_days Trial period passed in days.
73
+ *
74
+ * @since 4.6.2
75
+ */
76
+ public function get_days_since_trial_started() {
77
+
78
+ $current_time = time();
79
+ $trial_time_in_days = 0;
80
+ $trial_started_at = get_option( 'ig_es_trial_started_at' );
81
+
82
+ if ( ! empty( $trial_started_at ) ) {
83
+ $trial_time_in_seconds = $current_time - $trial_started_at;
84
+ $trial_time_in_days = floor( $trial_time_in_seconds / DAY_IN_SECONDS );
85
+ }
86
+
87
+ return $trial_time_in_days;
88
+ }
89
+
90
+ /**
91
+ * Method to get total remaining days in trial expiration.
92
+ *
93
+ * @return int $remaining_trial_days Remaining trial days.
94
+ *
95
+ * @since 4.6.2
96
+ */
97
+ public function get_remaining_trial_days() {
98
+
99
+ $total_days_since_trial = $this->get_days_since_trial_started();
100
+ $trial_period_in_days = $this->get_trial_period( 'in_days' );
101
+ $remaining_trial_days = $trial_period_in_days - $total_days_since_trial;
102
+
103
+ return $remaining_trial_days;
104
+ }
105
+
106
+ /**
107
+ * Method to get trial expiry date
108
+ *
109
+ * @param string $date_format Date formate
110
+ *
111
+ * @return string $trial_expriy_date Trial expiry date.
112
+ *
113
+ * @since 4.6.2
114
+ */
115
+ public function get_trial_expiry_date( $date_format = 'Y-m-d H:i:s' ) {
116
+
117
+ $trial_expriy_date = '';
118
+ $trial_started_at = $this->get_trial_started_at();
119
+
120
+ if ( ! empty( $trial_started_at ) ) {
121
+ $trial_expires_at = $trial_started_at + $this->get_trial_period();
122
+ $trial_expriy_date = gmdate( $date_format, $trial_expires_at );
123
+ }
124
+
125
+ return $trial_expriy_date;
126
+ }
127
+
128
+ /**
129
+ * Method to get trial started at timestamp.
130
+ *
131
+ * @return int $trial_started_at Trial started at timestamp.
132
+ *
133
+ * @since 4.6.2
134
+ */
135
+ public function get_trial_started_at() {
136
+ $trial_started_at = get_option( 'ig_es_trial_started_at', 0 );
137
+ return $trial_started_at;
138
+ }
139
+
140
+ /**
141
+ * Method to show trial related notices to user.
142
+ *
143
+ * @since 4.6.2
144
+ */
145
+ public function show_trial_notices() {
146
+
147
+ // Don't show trial notices untill onboarding is completed.
148
+ if ( ! IG_ES_Onboarding::is_onboarding_completed() ) {
149
+ return;
150
+ }
151
+
152
+ $is_trial = ES()->is_trial();
153
+ $is_premium = ES()->is_premium();
154
+ $is_premium_installed = ES()->is_premium_installed();
155
+ $current_page = ig_es_get_request_data( 'page' );
156
+
157
+ $show_trial_consent_notice = false;
158
+
159
+ // Add opt to trial notice if user has not already opted for it and is not a premium user and is not dashboard page.
160
+ if ( ! $is_trial && ! $is_premium && 'es_dashboard' !== $current_page ) {
161
+ // Check whether user has performed any action(accept/reject) on consent notice for trial. 'yes' if performed.
162
+ $trial_consent_given = get_option( 'ig_es_trial_consent', 'no' );
163
+ if ( 'yes' !== $trial_consent_given ) {
164
+ $show_trial_consent_notice = true;
165
+ }
166
+ }
167
+
168
+ if ( $show_trial_consent_notice ) {
169
+ ES_Admin_Notices::add_notice( 'trial_consent' );
170
+ } else {
171
+ ES_Admin_Notices::remove_notice( 'trial_consent' );
172
+ }
173
+
174
+ $show_offer_notice = false;
175
+
176
+ // Add upgrade to premium nudging notice if user has opted for trial and is not a premium user and premium plugin is not installed on site and is not dashboard page.
177
+ if ( $is_trial && ! $is_premium && ! $is_premium_installed && 'es_dashboard' !== $current_page ) {
178
+
179
+ // Start nudging the user on following days before trial expiration.
180
+ $nudging_days = array( 1, 3, 5 );
181
+ $min_nudging_day = min( $nudging_days );
182
+ $max_nudging_day = max( $nudging_days );
183
+
184
+ // Current day's number from start of trial.
185
+ $remaining_trial_days = ES()->trial->get_remaining_trial_days();
186
+
187
+ // User is in nudging period if remaining trial days are between minmum and maximum nudging days.
188
+ $is_in_nudging_period = $remaining_trial_days >= $min_nudging_day && $remaining_trial_days <= $max_nudging_day ? true : false;
189
+
190
+ // Start nudging the user if peried fall into nudging period.
191
+ if ( $is_in_nudging_period ) {
192
+ $current_nudging_day = 0;
193
+
194
+ foreach ( $nudging_days as $day ) {
195
+ if ( $remaining_trial_days <= $day ) {
196
+ // Get current nudging day i.e. 1 or 3 or 5
197
+ $current_nudging_day = $day;
198
+ break;
199
+ }
200
+ }
201
+
202
+ // Check if we have a nudging day.
203
+ if ( ! empty( $current_nudging_day ) ) {
204
+ $notice_last_dismiss_date = get_option( 'ig_es_trial_to_premium_notice_date' );
205
+ // Always show notice if not already dismissed before.
206
+ if ( empty( $notice_last_dismiss_date ) ) {
207
+ $show_offer_notice = true;
208
+ } else {
209
+ $trial_expiry_date = ES()->trial->get_trial_expiry_date();
210
+ $date_diff_in_seconds = strtotime( $trial_expiry_date ) - strtotime( $notice_last_dismiss_date );
211
+
212
+ // Ceil function is used to round off to nearest upper limit integer, 4.1 would be 5.
213
+ $date_diff_in_days = ceil( $date_diff_in_seconds / DAY_IN_SECONDS );
214
+
215
+ // Check if current nudging day is after last dismissed date.
216
+ if ( $current_nudging_day < $date_diff_in_days ) {
217
+ $show_offer_notice = true;
218
+ }
219
+ }
220
+ }
221
+ }
222
+
223
+ }
224
+
225
+ if ( $show_offer_notice ) {
226
+ $notice_args = array(
227
+ 'include' => ES_PLUGIN_DIR . 'lite/includes/notices/views/trial-to-premium-offer.php',
228
+ );
229
+ ES_Admin_Notices::add_custom_notice( 'trial_to_premium', $notice_args );
230
+ } else {
231
+ ES_Admin_Notices::remove_notice( 'trial_to_premium' );
232
+ }
233
+ }
234
+ }
lite/includes/es-core-functions.php CHANGED
@@ -790,18 +790,20 @@ if ( ! function_exists( 'ig_es_allowed_html_tags_in_esc' ) ) {
790
  'viewbox' => true,
791
  'xmlns' => true,
792
  'class' => true,
793
- 'stroke-*' => true,
794
  'fill' => true,
795
  'stroke' => true,
796
  ),
797
  'path' => array(
798
- 'd' => true,
799
- 'fill' => true,
800
- 'class' => true,
801
- 'fill-*' => true,
802
- 'clip-*' => true,
803
- 'stroke-*' => true,
804
- 'fill-rule' => true,
 
 
805
  ),
806
 
807
  'main' => array(
790
  'viewbox' => true,
791
  'xmlns' => true,
792
  'class' => true,
793
+ 'stroke-*' => true,
794
  'fill' => true,
795
  'stroke' => true,
796
  ),
797
  'path' => array(
798
+ 'd' => true,
799
+ 'fill' => true,
800
+ 'class' => true,
801
+ 'fill-*' => true,
802
+ 'clip-*' => true,
803
+ 'stroke-linecap' => true,
804
+ 'stroke-linejoin' => true,
805
+ 'stroke-width' => true,
806
+ 'fill-rule' => true,
807
  ),
808
 
809
  'main' => array(
lite/includes/notices/class-es-admin-notices.php CHANGED
@@ -21,7 +21,7 @@ class ES_Admin_Notices {
21
  */
22
  private static $core_notices = array(
23
  'update' => 'update_notice',
24
- 'trial_consent' => 'trial_consent_notice',
25
  );
26
 
27
  /**
@@ -192,11 +192,16 @@ class ES_Admin_Notices {
192
 
193
  /**
194
  * Show trial optin notice.
 
 
 
 
195
  */
196
- public static function trial_consent_notice() {
197
 
198
- if ( IG_ES_Onboarding::is_onboarding_completed() ) {
199
- include dirname( __FILE__ ) . '/views/trial-optin.php';
 
200
  }
201
  }
202
 
@@ -209,7 +214,7 @@ class ES_Admin_Notices {
209
  $option_name = ig_es_get_request_data( 'option_name' );
210
  if ( '1' == $es_dismiss_admin_notice && ! empty( $option_name ) ) {
211
  update_option( 'ig_es_' . $option_name, 'yes', false );
212
- if ( in_array( $option_name, array( 'redirect_upsale_notice', 'dismiss_upsale_notice', 'dismiss_star_notice', 'star_notice_done' ) ) ) {
213
  update_option( 'ig_es_' . $option_name . '_date', ig_get_current_date_time(), false );
214
  }
215
 
@@ -228,10 +233,25 @@ class ES_Admin_Notices {
228
  header( 'Location: https://www.icegram.com/email-subscribers-starter-plan-pricing/?utm_source=es&utm_medium=es_upsale_banner&utm_campaign=es_upsell' );
229
  exit();
230
  }
 
 
 
 
 
 
 
 
 
 
231
  if ( 'offer_bfcm_done_2019' === $option_name || 'offer_last_day_bfcm_done_2019' === $option_name ) {
232
  $url = 'https://www.icegram.com/?utm_source=in_app&utm_medium=es_banner&utm_campaign=' . $option_name;
233
  header( "Location: {$url}" );
234
  exit();
 
 
 
 
 
235
  } else {
236
 
237
  // Remove wp cron notice if user have acknowledged it.
21
  */
22
  private static $core_notices = array(
23
  'update' => 'update_notice',
24
+ 'trial_consent' => 'show_trial_consent_notice',
25
  );
26
 
27
  /**
192
 
193
  /**
194
  * Show trial optin notice.
195
+ *
196
+ * @since 4.6.1
197
+ *
198
+ * @modified 4.6.2 Added not is_premium condition to disable notice when the user activates premium plugin after using the lite version.
199
  */
200
+ public static function show_trial_consent_notice() {
201
 
202
+ // Show notice only when onboarding is complete and plan is not premium.
203
+ if ( IG_ES_Onboarding::is_onboarding_completed() && ! ES()->is_premium() ) {
204
+ include dirname( __FILE__ ) . '/views/trial-consent.php';
205
  }
206
  }
207
 
214
  $option_name = ig_es_get_request_data( 'option_name' );
215
  if ( '1' == $es_dismiss_admin_notice && ! empty( $option_name ) ) {
216
  update_option( 'ig_es_' . $option_name, 'yes', false );
217
+ if ( in_array( $option_name, array( 'redirect_upsale_notice', 'dismiss_upsale_notice', 'dismiss_star_notice', 'star_notice_done', 'trial_to_premium_notice' ) ) ) {
218
  update_option( 'ig_es_' . $option_name . '_date', ig_get_current_date_time(), false );
219
  }
220
 
233
  header( 'Location: https://www.icegram.com/email-subscribers-starter-plan-pricing/?utm_source=es&utm_medium=es_upsale_banner&utm_campaign=es_upsell' );
234
  exit();
235
  }
236
+
237
+ if ( 'trial_to_premium_notice' === $option_name ) {
238
+ self::remove_notice( 'trial_to_premium' );
239
+ $action = ig_es_get_request_data( 'action' );
240
+ if ( 'ig_es_trial_to_premium_redirect' === $action ) {
241
+ header( 'Location: https://www.icegram.com/email-subscribers-starter-plan-pricing/?utm_source=in_app&utm_medium=es_trial_to_premium_notice&utm_campaign=es_trial_to_premium_notice' );
242
+ exit();
243
+ }
244
+ }
245
+
246
  if ( 'offer_bfcm_done_2019' === $option_name || 'offer_last_day_bfcm_done_2019' === $option_name ) {
247
  $url = 'https://www.icegram.com/?utm_source=in_app&utm_medium=es_banner&utm_campaign=' . $option_name;
248
  header( "Location: {$url}" );
249
  exit();
250
+ }
251
+ if ( 'offer_halloween_2020' === $option_name ) {
252
+ $url = 'https://www.icegram.com/?utm_source=in_app&utm_medium=es_banner&utm_campaign=' . $option_name;
253
+ header( "Location: {$url}" );
254
+ exit();
255
  } else {
256
 
257
  // Remove wp cron notice if user have acknowledged it.
lite/includes/notices/views/ig-es-halloween-offer.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style type="text/css">
2
+ .ig_es_offer {
3
+ width:55%;
4
+ margin: 0 auto;
5
+ text-align: center;
6
+ padding-top: 1.2em;
7
+ }
8
+
9
+ </style>
10
+ <?php
11
+
12
+ if ( ( get_option( 'ig_es_offer_halloween_2020' ) !== 'yes' ) && ( $ig_current_date >= strtotime( '2020-10-30' ) ) && ( $ig_current_date <= strtotime( '2020-11-02' ) )) { ?>
13
+ <div class="ig_es_offer">
14
+ <a target="_blank" href="?es_dismiss_admin_notice=1&option_name=offer_halloween_2020"><img src="<?php echo esc_url ( ES_PLUGIN_URL ); ?>/lite/admin/images/halloween_2020.png"/></a>
15
+ </div>
16
+
17
+ <?php } ?>
lite/includes/notices/views/{trial-optin.php → trial-consent.php} RENAMED
@@ -27,7 +27,7 @@ $optout_url = wp_nonce_url(
27
  <div class="notice notice-success">
28
  <p>
29
  <?php
30
- echo esc_html( 'Start your 14 days free trial of Email Subscribers’ premium services like email delivery check, spam protection, cron handling & lot more..', 'email-subscribers' );
31
  ?>
32
  <br/>
33
  <a href="<?php echo esc_url( $optin_url ); ?>" class="ig-es-primary-button px-3 py-1 mt-2 align-middle">
27
  <div class="notice notice-success">
28
  <p>
29
  <?php
30
+ echo esc_html( sprintf( 'Start your %s days free trial of Email Subscribers’ premium services like email delivery check, spam protection, cron handling & lot more..', ES()->trial->get_trial_period( 'in_days' ) ), 'email-subscribers' );
31
  ?>
32
  <br/>
33
  <a href="<?php echo esc_url( $optin_url ); ?>" class="ig-es-primary-button px-3 py-1 mt-2 align-middle">
lite/includes/notices/views/trial-to-premium-offer.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Admin View: Notice - Trial To Premium Offer
4
+ */
5
+
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ $referer = wp_get_referer();
11
+
12
+ $notice_optin_action = 'ig_es_trial_to_premium_redirect';
13
+
14
+ $optin_url = wp_nonce_url(
15
+ add_query_arg(
16
+ array(
17
+ 'es_dismiss_admin_notice' => 1,
18
+ 'option_name' => 'trial_to_premium_notice',
19
+ 'action' => $notice_optin_action,
20
+ ),
21
+ $referer
22
+ ),
23
+ $notice_optin_action
24
+ );
25
+
26
+ $notice_optout_action = 'ig_es_trial_to_premium_dismiss';
27
+
28
+ $optout_url = wp_nonce_url(
29
+ add_query_arg(
30
+ array(
31
+ 'es_dismiss_admin_notice' => 1,
32
+ 'option_name' => 'trial_to_premium_notice',
33
+ 'action' => $notice_optout_action,
34
+ ),
35
+ $referer
36
+ ),
37
+ $notice_optout_action
38
+ );
39
+
40
+ $remaining_trial_days = ES()->trial->get_remaining_trial_days();
41
+ $day_or_days = _n( 'day', 'days', $remaining_trial_days, 'email-subscribers' );
42
+
43
+ $discount_messages = array(
44
+ 'halloween' => array(
45
+ 'message' => __( 'Get flat <strong>20%</strong> discount on annual plan and <strong>35%</strong> discount on lifetime plan if you upgrade now!<br/><strong>No coupon code</strong> required. Discount will be applied automatically.', 'email-subscribers' ),
46
+ ),
47
+ 'bfcm' => array(
48
+ 'message' => __( 'Get flat <strong>20%</strong> discount on annual plan and <strong>35%</strong> discount on lifetime plan if you upgrade now!<br/><strong>No coupon code</strong> required. Discount will be applied automatically.', 'email-subscribers' ),
49
+ ),
50
+ );
51
+
52
+ $offer_type_to_show = 'trial';
53
+
54
+ $offers_date_ranges = array(
55
+ 'halloween' => array(
56
+ 'start_date' => '2020-10-30',
57
+ 'end_date' => '2020-11-02',
58
+ ),
59
+ 'bfcm' => array(
60
+ 'start_date' => '2020-11-25',
61
+ 'end_date' => '2020-12-02',
62
+ ),
63
+ );
64
+
65
+ foreach ( $offers_date_ranges as $offer_type => $offer_dates ) {
66
+ $offer_start_date = $offer_dates['start_date'];
67
+ $offer_end_date = $offer_dates['end_date'];
68
+
69
+ if ( ( $ig_current_date >= strtotime( $offer_start_date ) ) && ( $ig_current_date <= strtotime( $offer_end_date ) ) ) {
70
+ $offer_type_to_show = $offer_type;
71
+ break;
72
+ }
73
+ }
74
+
75
+ $trial_expiration_message = '';
76
+ if ( $remaining_trial_days > 1 ) {
77
+ /* translators: 1. Remaining trial days. 2. day or days text based on number of remaining trial days. */
78
+ $trial_expiration_message = sprintf( __( 'Your free trial is going to <strong>expire in %1$s %2$s</strong>.', 'email-subscribers' ), $remaining_trial_days, $day_or_days);
79
+ } else {
80
+ $trial_expiration_message = __( 'Today is the <strong>last day</strong> of your free trial.', 'email-subscribers' );
81
+ }
82
+
83
+ // Add default value to message.
84
+ $discount_message = __( 'Get flat <strong>10%</strong> discount if you upgrade now!<br/>Use coupon code <span class="ml-2 px-1.5 py-1 font-medium bg-yellow-100 rounded-md border-2 border-dotted border-indigo-300 select-all">PREMIUM10</span> during checkout.', 'email-subscribers' );
85
+ $offer_cta_optin_text = __( 'Upgrade now', 'email-subscribers' );
86
+ $offer_cta_optout_text = __( 'No, it\'s ok', 'email-subscribers' );
87
+
88
+ // Override offer message with current active offer message.
89
+ if ( ! empty( $discount_messages[ $offer_type_to_show ] ) ) {
90
+ $discount_message = ! empty( $discount_messages[ $offer_type_to_show ]['message'] ) ? $discount_messages[ $offer_type_to_show ]['message'] : $discount_message;
91
+ }
92
+
93
+ /* translators: 1. Trial expiration message. 2. Discount message. */
94
+ $offer_message = sprintf( __( 'Hi there,<br/>Hope you are enjoying <strong>Email Subscribers PRO trial</strong>.<br/>%1$s<br/>Upgrade now to continue uninterrupted use of premium features like <strong>block fake signups, prevent bot attacks, broadcast scheduling, automatic email sending, detailed campaign report, prevent emails from going to spam</strong> & lot more....<br/>%2$s', 'email-subscribers' ), $trial_expiration_message, $discount_message );
95
+
96
+ ?>
97
+ <div id="ig-es-trial-to-premium-notice" class="notice notice-success">
98
+ <p>
99
+ <?php
100
+ echo wp_kses_post( $offer_message );
101
+ ?>
102
+ <br/>
103
+ <a href="<?php echo esc_url( $optin_url ); ?>" target="_blank" id="ig-es-optin-trial-to-premium-offer" class="ig-es-primary-button px-3 py-1 mt-2 align-middle">
104
+ <?php
105
+ echo esc_html( $offer_cta_optin_text );
106
+ ?>
107
+ </a>
108
+ <a href="<?php echo esc_url( $optout_url ); ?>" class="ig-es-title-button px-3 py-1 mt-2 ml-2 align-middle">
109
+ <?php
110
+ echo esc_html( $offer_cta_optout_text );
111
+ ?>
112
+ </a>
113
+ </p>
114
+ </div>
lite/includes/premium-services-ui/class-ig-es-premium-services-ui.php CHANGED
@@ -70,6 +70,14 @@ if ( ! class_exists( 'IG_ES_Premium_Services_UI' ) ) {
70
  add_action( 'add_meta_boxes', array( &$this, 'add_metaboxes' ) );
71
  add_action( 'ig_es_after_broadcast_right_pan_settings', array( &$this, 'add_check_spam_score_button' ) );
72
  }
 
 
 
 
 
 
 
 
73
  }
74
  }
75
 
@@ -234,5 +242,115 @@ if ( ! class_exists( 'IG_ES_Premium_Services_UI' ) ) {
234
  </div>
235
  <?php
236
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  }
238
  }
70
  add_action( 'add_meta_boxes', array( &$this, 'add_metaboxes' ) );
71
  add_action( 'ig_es_after_broadcast_right_pan_settings', array( &$this, 'add_check_spam_score_button' ) );
72
  }
73
+
74
+ // Add UI for utm tracking only if service is valid.
75
+ if ( ES()->validate_service_request( array( 'utm_tracking' ) ) ) {
76
+ add_action( 'add_meta_boxes', array( &$this, 'register_utm_tracking_metabox' ) );
77
+ add_action( 'ig_es_save_template', array( &$this, 'save_utm_campaign' ), 10, 2 );
78
+ add_action( 'ig_es_after_broadcast_tracking_options_settings', array( &$this, 'add_broadcast_utm_tracking_option' ) );
79
+ add_filter( 'ig_es_registered_settings', array( &$this, 'add_utm_tracking_option_in_settings' ), 10, 2 );
80
+ }
81
  }
82
  }
83
 
242
  </div>
243
  <?php
244
  }
245
+
246
+ /**
247
+ * Method to show available tracking option in pro version
248
+ *
249
+ * @param array $broadcast_data
250
+ *
251
+ * @return void
252
+ */
253
+ public function add_broadcast_utm_tracking_option( $broadcast_data = array() ) {
254
+ $enable_utm_tracking = ! empty( $broadcast_data['meta']['enable_utm_tracking'] ) ? $broadcast_data['meta']['enable_utm_tracking'] : get_option( 'ig_es_track_utm', 'no' );
255
+
256
+ $campaign_name = ! empty( $broadcast_data['meta']['es_utm_campaign'] ) ? $broadcast_data['meta']['es_utm_campaign'] : '';
257
+
258
+ ?>
259
+
260
+ <div class="flex mt-3 pb-1 w-full">
261
+ <div class="w-11/12 text-sm font-normal text-gray-600"><?php echo esc_html__( 'UTM tracking', 'email-subscribers' ); ?>
262
+ </div>
263
+
264
+ <div>
265
+ <label for="enable_utm_tracking" class=" inline-flex items-center cursor-pointer">
266
+ <span class="relative">
267
+ <input id="enable_utm_tracking" name="broadcast_data[meta][enable_utm_tracking]" type="checkbox" class="absolute es-check-toggle opacity-0 w-0 h-0" value="yes" <?php checked( $enable_utm_tracking, 'yes' ); ?>
268
+ />
269
+ <span class="es-mail-toggle-line block w-8 h-5 bg-gray-300 rounded-full shadow-inner"></span>
270
+ <span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-3 h-3 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
271
+ </span>
272
+ </label>
273
+ </div>
274
+ </div>
275
+ <div class="py-1 ig_es_broadcast_campaign_name_wrapper <?php echo 'no' === $enable_utm_tracking ? esc_attr( 'hidden' ) : ''; ?>">
276
+ <input name="broadcast_data[meta][es_utm_campaign]" placeholder="<?php echo esc_html__( 'Campaign Name', 'email-subscribers' ); ?>" id="es_utm_campaign" class="form-input border-gray-400 text-sm relative rounded-md shadow-sm block w-2/4 sm:leading-5" value="<?php echo esc_attr( $campaign_name ); ?>">
277
+ </div>
278
+ <?php
279
+ }
280
+
281
+ /**
282
+ * Method to register UTM tracking side metabox on ES template page
283
+ *
284
+ * @since 4.6.2
285
+ */
286
+ public function register_utm_tracking_metabox() {
287
+ $meta_box_title_for_utm = __( 'Google Analytics link tracking', 'email-subscribers' );
288
+ add_meta_box( 'es_utm', $meta_box_title_for_utm, array( &$this, 'add_utm_tracking_metabox' ), 'es_template', 'side', 'default' );
289
+ }
290
+
291
+ /**
292
+ * Method to add UTM tracking metabox on ES template page
293
+ *
294
+ * @since 4.6.2
295
+ */
296
+ public function add_utm_tracking_metabox() {
297
+ global $post;
298
+ $es_utm_campaign = get_post_meta( $post->ID, 'es_utm_campaign', true );
299
+ $es_utm_campaign = ! empty( $es_utm_campaign ) ? $es_utm_campaign : '';
300
+ ?>
301
+ <label class="es_utm_label"><span class="font-medium text-sm text-gray-700"><?php echo esc_html__( 'Campaign Name', 'email-subscribers' ); ?></span><span class="help_tip es_help_tip"
302
+ data-tip="<?php echo sprintf( esc_html__( 'This will be appended to every URL in this template with parameters: utm_source=es&utm_medium=email&utm_campaign=campaign_name', 'email-subscribers' ) ); ?>"></span> </label><br>
303
+ <input style="margin: 0.20rem 0;" type="text" name="es_utm_campaign" value="<?php echo esc_attr( $es_utm_campaign ); ?>" placeholder="<?php echo esc_html__( 'Campaign Name', 'email-subscribers' ); ?>" id="es_utm_campaign"/><br/>
304
+ <?php
305
+ }
306
+
307
+ /**
308
+ * Method to save utm campaign name
309
+ *
310
+ * @param $post_id
311
+ * @param $post
312
+ *
313
+ * @since 4.6.2
314
+ */
315
+ public function save_utm_campaign( $post_id, $post ) {
316
+
317
+ if ( ! empty( $_POST['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'update-post_' . $post_id ) ) {
318
+
319
+ $es_utm_campaign = ig_es_get_data( $_POST, 'es_utm_campaign', false );
320
+ if ( false !== $es_utm_campaign ) {
321
+ update_post_meta( $post_id, 'es_utm_campaign', $es_utm_campaign );
322
+ }
323
+ }
324
+ }
325
+
326
+ /**
327
+ * Method to add UTM tracking option in settings.
328
+ *
329
+ * @param array $fields Setting fields
330
+ *
331
+ * @return array $fields Setting fields
332
+ *
333
+ * @since 4.6.2
334
+ */
335
+ public function add_utm_tracking_option_in_settings( $fields ) {
336
+
337
+ // UTM tracking option
338
+ $track_utm = array(
339
+ 'ig_es_track_utm' => array(
340
+ 'id' => 'ig_es_track_utm',
341
+ 'name' => __( 'UTM tracking', 'email-subscribers' ),
342
+ 'type' => 'checkbox',
343
+ 'default' => 'no'
344
+ )
345
+ );
346
+
347
+ $general_fields = $fields['general'];
348
+
349
+ $general_fields = ig_es_array_insert_after( $general_fields, 'ig_es_track_link_click', $track_utm );
350
+
351
+ $fields['general'] = $general_fields;
352
+
353
+ return $fields;
354
+ }
355
  }
356
  }
lite/includes/pro-features.php CHANGED
@@ -15,14 +15,17 @@ add_action( 'ig_es_sync_users_tabs_wpforms', 'ig_es_add_wpforms_tab_settings' );
15
  add_action( 'ig_es_sync_users_tabs_ninja_forms', 'ig_es_add_ninja_forms_tab_settings' );
16
  add_action( 'ig_es_sync_users_tabs_edd', 'ig_es_add_edd_tab_settings' );
17
 
 
 
 
18
  add_action( 'edit_form_advanced', 'add_spam_score_utm_link' );
19
 
20
  add_action( 'ig_es_add_additional_options', 'ig_es_add_captcha_option', 10, 1 );
21
  add_action( 'ig_es_after_broadcast_content_left_pan_settings', 'ig_es_additional_send_email_option');
22
- add_action( 'ig_es_after_broadcast_tracking_options_settings', 'ig_es_additional_track_option');
23
- add_action( 'ig_es_broadcast_scheduling_options_settings', 'ig_es_additional_schedule_option');
24
- add_action( 'ig_es_after_broadcast_right_pan_settings', 'ig_es_additional_spam_score_option');
25
- add_action( 'ig_es_add_multilist_options', 'ig_es_additional_multilist_option' );
26
  add_action( 'ig_es_view_report_data', 'ig_es_view_additional_reports_data');
27
 
28
  /**
@@ -36,7 +39,7 @@ add_action( 'ig_es_view_report_data', 'ig_es_view_additional_reports_data');
36
  */
37
  function ig_es_mailers_promo( $mailers ) {
38
 
39
- if ( ! ES()->is_premium() ) {
40
 
41
  $mailers['smtp'] = array(
42
  'name' => 'SMTP',
@@ -142,7 +145,7 @@ function render_user_permissions_settings_fields_premium() {
142
  */
143
  function ig_es_add_settings_tabs( $es_settings_tabs ) {
144
 
145
- if ( ! ES()->is_premium() ) {
146
  $es_settings_tabs['user_roles'] = array( 'icon' => '<svg class="w-6 h-6 inline -mt-1.5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"></path></svg>', 'name' => __( 'User Roles', 'email-subscribers' ) );
147
  }
148
 
@@ -158,12 +161,13 @@ function ig_es_add_settings_tabs( $es_settings_tabs ) {
158
  */
159
  function ig_es_add_upsale( $fields ) {
160
 
161
- if ( ! ES()->is_pro() ) {
162
 
163
  $utm_args = array(
164
  'utm_medium' => 'track_clicks'
165
  );
166
 
 
167
  $premium_url = ES_Common::get_utm_tracking_url( $utm_args );
168
  // General Settings
169
  $track_link_click = array(
@@ -176,18 +180,15 @@ function ig_es_add_upsale( $fields ) {
176
  'link' => $premium_url,
177
  'disabled' => true,
178
  /* translators: %s: Icegram Pricing page url with utm tracking */
179
- 'upgrade_title' => sprintf( __( "<a href='%s' target='_blank'>Upgrade to ES PRO</a>", 'email-subscribers' ), $premium_url ),
180
- 'upgrade_desc' => __( 'Get insights about link clicks. See who are clicking on which links?', 'email-subscribers' )
181
  )
182
  );
 
183
 
184
- $utm_args = array(
185
- 'utm_medium' => 'track_utm'
186
- );
187
-
188
- $premium_url = ES_Common::get_utm_tracking_url( $utm_args );
189
 
190
- $track_utm = array(
191
  'ig_es_track_utm' => array(
192
  'id' => 'ig_es_track_utm',
193
  'name' => __( 'UTM Tracking', 'email-subscribers' ),
@@ -196,22 +197,14 @@ function ig_es_add_upsale( $fields ) {
196
  'is_premium' => true,
197
  'link' => $premium_url,
198
  'disabled' => true,
199
- /* translators: %s: Icegram Pricing page url with utm tracking */
200
- 'upgrade_title' => sprintf( __( "<a href='%s' target='_blank'>Upgrade to ES PRO</a>", 'email-subscribers' ), $premium_url ),
201
- 'upgrade_desc' => __( 'Get insights about UTM tracking.', 'email-subscribers' )
202
-
203
  )
204
- );
205
-
206
- $general_fields = $fields['general'];
207
-
208
- $general_fields = ig_es_array_insert_after( $general_fields, 'ig_es_track_email_opens', $track_link_click );
209
- $general_fields = ig_es_array_insert_after( $general_fields, 'ig_es_track_link_click', $track_utm );
210
-
211
  $fields['general'] = $general_fields;
212
  }
213
 
214
- if ( ! ES()->is_premium_installed() ) {
215
 
216
  $utm_args = array(
217
  'utm_medium' => 'enable_captcha'
@@ -228,7 +221,10 @@ function ig_es_add_upsale( $fields ) {
228
  'default' => 'no',
229
  'is_premium' => true,
230
  'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'known_attackers' ) ),
231
- 'disabled' => true
 
 
 
232
  );
233
 
234
  $managed_blocked_domains['ig_es_enable_disposable_domains'] = array(
@@ -252,9 +248,6 @@ function ig_es_add_upsale( $fields ) {
252
  'is_premium' => true,
253
  'link' => $premium_url,
254
  'disabled' => true,
255
- /* translators: %s: Icegram Pricing page url with utm tracking */
256
- 'upgrade_title' => sprintf( __( "<a href='%s' target='_blank'>Upgrade to ES PRO</a>", 'email-subscribers' ), $premium_url ),
257
- 'upgrade_desc' => __( 'Secure your form and avoid spam signups with form Captcha', 'email-subscribers' ),
258
  );
259
 
260
  $fields['security_settings'] = array_merge( $fields['security_settings'], $fake_domains, $managed_blocked_domains, $field_captcha );
@@ -277,7 +270,7 @@ function ig_es_add_sync_users_tabs( $tabs ) {
277
  global $ig_es_tracker;
278
 
279
  // Show integrations only if ES Premium is not installed.
280
- if ( ! ES()->is_starter() ) {
281
 
282
  $tabs['comments'] = array(
283
  'name' => __( 'Comments', 'email-subscribers' ),
@@ -610,6 +603,63 @@ function ig_es_add_edd_tab_settings( $tab_options ) {
610
  <?php
611
  }
612
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
613
 
614
  function add_spam_score_utm_link() {
615
  global $post, $pagenow, $ig_es_tracker;
@@ -617,7 +667,7 @@ function add_spam_score_utm_link() {
617
  return;
618
  }
619
 
620
- if ( ! ES()->is_starter() ) {
621
  ?>
622
  <script>
623
  jQuery('#submitdiv').after('<div class="es_upsale"><a style="text-decoration:none;" target="_blank" href="https://www.icegram.com/documentation/how-ready-made-template-in-in-email-subscribers-look/?utm_source=in_app&utm_medium=es_template&utm_campaign=es_upsell"><img title="Get readymade templates" style="width:100%;border:0.3em #d46307 solid" src="<?php echo esc_url( ES_PLUGIN_URL ); ?>lite/admin/images/starter-tmpl.png"/><p style="background: #d46307; color: #FFF; padding: 4px; width: 100%; text-align:center">Get readymade beautiful email templates</p></a></div>');
@@ -635,28 +685,36 @@ function add_spam_score_utm_link() {
635
  */
636
  function ig_es_add_captcha_option( $form_data ) {
637
 
638
- if ( ! ES()->is_premium_installed() ) {
639
 
640
  $utm_args = array(
641
  'utm_medium' => 'es_form_captcha'
642
  );
643
 
644
- $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
645
 
 
 
 
 
 
 
 
646
  ?>
647
 
648
  <div class="flex border-b border-gray-100 ">
649
- <div class="w-2/5 mr-16">
650
  <div class="flex flex-row w-full">
651
  <div class="flex w-2/4">
652
  <div class="ml-4 mr-8 mr-4 pt-4 mb-2">
653
- <label for="tag-link"><span class="block ml-4 pr-4 text-sm font-medium text-gray-600 pb-2"><?php echo esc_html__( 'Enable Captcha' ); ?></span></label>
654
- <p class="italic text-xs text-gray-400 mt-2 ml-4 leading-snug pb-4"><?php esc_html_e( 'Show a captcha to protect from bot signups.', 'email-subscribers' ); ?></p>
 
 
655
  </div>
656
  </div>
657
  <div class="flex">
658
- <div class="ml-16 mb-4 mr-4 mt-12">
659
- <label for="captcha" class=" inline-flex items-center cursor-pointer">
660
  <span class="relative">
661
  <span class="es-mail-toggle-line"></span>
662
  <span class="es-mail-toggle-dot"></span>
@@ -667,90 +725,89 @@ function ig_es_add_captcha_option( $form_data ) {
667
  </div>
668
  </div>
669
 
670
- <div class="w-3/6 mt-3.5 pr-4">
671
- <div class="inline-flex rounded-md bg-teal-50 px-2 pt-1 mb-3.5 w-full">
672
- <div class="px-2 pt-2 pb-2">
673
- <div class="flex">
674
- <div class="flex-shrink-0">
675
- <svg class='h-5 w-5 text-teal-400' fill='currentColor' viewBox='0 0 20 20'>
676
- <path fill-rule='evenodd' d='M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z' clip-rule='evenodd'/>
677
- </svg>
678
- </div>
679
- <div class="ml-3">
680
- <h3 class="text-sm leading-5 font-medium text-blue-800">
681
- <?php
682
- /* translators: 1: Anchor opening tag with href attribute 2: Target attribute 3: Anchor closing tag */
683
- echo sprintf( esc_html__('%1$s' . esc_url( $pricing_url ) . '%2$s Upgrade to ES PRO %3$s', 'email-subscribers' ), '<a href=', ' target="_blank">', '</a>' );
684
- ?>
685
- </h3>
686
- <div class="mt-2 text-sm leading-5 text-teal-700">
687
- <p>
688
- <?php esc_html_e( 'Secure your form and avoid spam signups with form Captcha', 'email-subscribers' ); ?>
689
-
690
- <?php
691
- if (ES_Common::can_show_coupon('PREMIUM10')) {
692
- /* translators: 1: Bold opening tag 2: Percentage sign 3: Bold closing tag 4: Break Tags 5: Bold opening tag 6: Bold closing tag */
693
- echo sprintf( esc_html__( 'Get %1$s 10%2$s flat discount %3$s if you upgrade now!. %4$s Use coupon code %5$sPREMIUM10 %6$s', 'email-subscribers' ), '</b>', '&#37', '</b>', '<br/><br/>', '<b>', '</b>' );
694
- }
695
- ?>
696
- </p>
697
- </div>
698
- </div>
699
- </div>
700
- </div>
701
- </div>
702
  </div>
703
  </div>
704
  <?php
705
  }
706
  }
707
 
708
- function ig_es_additional_multilist_option() {
709
-
710
- if ( ! ES()->is_premium_installed() ) {
711
 
 
 
712
  $utm_args = array(
713
  'utm_medium' => 'post_notifications_multiple_lists'
714
  );
715
 
716
  $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
717
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
718
  ?>
719
- <div class="w-2/4 ml-2">
720
- <div class="inline-flex rounded-md bg-teal-50 px-2 pt-1 w-full">
721
- <div class="px-2 pt-2 pb-2">
722
- <div class="flex">
723
- <div class="flex-shrink-0">
724
- <svg class='h-5 w-5 text-teal-400' fill='currentColor' viewBox='0 0 20 20'>
725
- <path fill-rule='evenodd' d='M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z' clip-rule='evenodd'/>
726
- </svg>
727
- </div>
728
- <div class="ml-3">
729
- <h3 class="text-sm leading-5 font-medium text-blue-800">
730
- <?php
731
- /* translators: 1: Anchor opening tag with href attribute 2: Target attribute 3: Anchor closing tag */
732
- echo sprintf( esc_html__('%1$s' . esc_url( $pricing_url ) . '%2$s Upgrade to ES PRO %3$s', 'email-subscribers' ), '<a href=', ' target="_blank">', '</a>' );
733
- ?>
734
- </h3>
735
- <div class="mt-2 text-sm leading-5 text-teal-700">
736
- <p>
737
- <?php esc_html_e( 'Get rid of setting Post Notifications for each list and avoid chances of sending duplicate emails to your subscribers.', 'email-subscribers' ); ?>
738
- <br /><br />
739
- <?php esc_html_e( ' Upgrade to Email Subscribers PRO and select multiple lists.', 'email-subscribers' ); ?>
740
- <br /><br />
741
- <?php
742
- if (ES_Common::can_show_coupon('PREMIUM10')) {
743
- /* translators: 1: Bold opening tag 2: Percentage sign 3: Bold closing tag 4: Break Tags 5: Bold opening tag 6: Bold closing tag */
744
- echo sprintf( esc_html__( 'Get %1$s 10%2$s flat discount %3$s if you upgrade now!. %4$s Use coupon code %5$sPREMIUM10 %6$s', 'email-subscribers' ), '</b>', '&#37', '</b>', '<br/><br/>', '<b>', '</b>' );
745
- }
746
- ?>
747
- </p>
748
- </div>
749
- </div>
750
- </div>
751
  </div>
752
- </div>
753
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  <?php
755
  }
756
 
@@ -758,12 +815,14 @@ function ig_es_additional_multilist_option() {
758
 
759
  function ig_es_additional_send_email_option() {
760
 
761
- if ( ! ES()->is_pro() ) {
762
  ?>
763
 
764
  <div>
765
- <input type="radio" name="preview_option" disabled="disabled" class="form-radio" id="preview_in_email" value="" >
766
- <label class=" text-sm font-normal leading-5 text-gray-700"><?php echo esc_html__( 'Email', 'email-subscribers' ); ?><span class="cursor-auto mx-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"><?php esc_html_e('Premium', 'email-subscribers'); ?></span></label>
 
 
767
  <div id="preview_in_email" class="display_email_field px-4">
768
  <div class="flex py-2" >
769
  <div class="flex w-5/6">
@@ -775,144 +834,118 @@ function ig_es_additional_send_email_option() {
775
  }
776
  }
777
 
778
- function ig_es_additional_track_option() {
 
 
 
 
 
 
 
779
 
780
- if ( ! ES()->is_pro() ) {
 
 
 
 
 
 
781
  ?>
782
-
783
- <div class="flex w-full pt-3">
784
- <div class="w-11/12 text-sm font-normal text-gray-600"><?php echo esc_html__( 'Link tracking', 'email-subscribers' ); ?><span class="mx-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"><?php esc_html_e('Premium', 'email-subscribers'); ?></span>
785
- </div>
786
-
787
- <div>
788
- <label for="enable_link_tracking" class=" inline-flex items-center cursor-pointer">
789
- <span class="relative">
790
- <span class="es-mail-toggle-line block w-8 h-5 bg-gray-300 rounded-full shadow-inner"></span>
791
- <span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-3 h-3 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
792
- </span>
793
- </label>
794
- </div>
795
  </div>
796
 
797
- <div class="flex w-full pt-3 pb-3 border-b border-gray-200">
798
- <div class="w-11/12 text-sm font-normal text-gray-600"><?php echo esc_html__( 'UTM tracking', 'email-subscribers' ); ?><span class="mx-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"><?php esc_html_e('Premium', 'email-subscribers'); ?></span>
799
- </div>
800
-
801
- <div >
802
- <label for="enable_utm_tracking" class=" inline-flex items-center cursor-pointer">
803
- <span class="relative">
804
- <span class="es-mail-toggle-line block w-8 h-5 bg-gray-300 rounded-full shadow-inner"></span>
805
- <span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-3 h-3 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
806
- </span>
807
- </label>
808
- </div>
809
  </div>
 
810
 
811
-
812
  <?php
813
  }
814
 
815
- }
816
-
817
- function ig_es_additional_schedule_option() {
818
 
819
- if ( ! ES()->is_pro() ) {
 
 
 
 
820
 
821
- $utm_args = array(
822
- 'utm_medium' => 'broadcast_summary'
823
- );
 
 
 
 
 
 
824
 
825
- $premium_url = ES_Common::get_utm_tracking_url( $utm_args );
 
 
 
 
 
 
 
 
 
826
  ?>
827
-
828
- <div class="block w-full px-4 py-2">
829
- <span class="block text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Send options', 'email-subscribers' ); ?><span class=" mx-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"><?php esc_html_e('Premium', 'email-subscribers'); ?></span></span>
830
- <div class="py-2">
831
- <input type="radio" class="form-radio" id="schedule_later" checked disabled>
832
- <label for="schedule_later" class="text-sm font-normal text-gray-600"><?php echo esc_html__( 'Schedule for later', 'email-subscribers' ); ?>
833
- </label>
834
- <br>
835
- <div id="schedule_later" class="px-6">
836
- <div class="flex pt-4" >
837
- <div class="flex w-full w-11/12">
838
- <label class="text-sm font-normal leading-5 text-gray-700 pt-1"><?php echo esc_html__( 'Date', 'email-subscribers' ); ?></label>
839
- <input class="cursor-pointer font-normal text-sm py-1 ml-2 form-input" type="text" value="<?php echo esc_attr( date_i18n('Y-m-d') ); ?>" disabled>
840
- </div>
841
- <div>
842
- <svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="text-gray-600 w-5 h-5 my-1 ml-2"><path d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg>
843
- </div>
844
  </div>
845
- <div class="flex pt-3" >
846
- <div class="flex w-11/12">
847
- <label class="text-sm font-normal leading-5 text-gray-700 pt-1"><?php echo esc_html__( 'Time', 'email-subscribers' ); ?></label>
848
- <input class="cursor-pointer font-normal text-sm py-1 ml-2 form-input" type="text" value="<?php echo esc_attr( date_i18n('h:i A') ); ?>" disabled>
 
 
 
 
849
 
850
- </div>
851
- <div>
852
- <svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="text-gray-600 w-5 h-5 my-1 ml-2 float-right"><path d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
853
- </div>
854
  </div>
855
- <div class="pb-3">
856
- <div class="block px-2 py-2 mt-4 bg-gray-300 rounded-md ">
857
- <h3 class="text-gray-700 text-sm font-normal"><?php echo esc_html__( 'Local Time: ', 'email-subscribers' ); ?>&nbsp;&nbsp;
858
- <?php echo esc_attr( date_i18n('Y-m-d H:i A' ) ); ?>
859
- </h3>
860
- </div>
861
  </div>
862
  </div>
863
-
864
- <div class="block py-2 mt-2 ">
865
- <div class="inline-flex rounded-md bg-teal-100 px-2 pt-1 w-full">
866
- <div class="px-2 pt-2 pb-2">
867
- <div class="flex">
868
- <div class="flex-shrink-0">
869
- <svg class='h-5 w-5 text-teal-400' fill='currentColor' viewBox='0 0 20 20'>
870
- <path fill-rule='evenodd' d='M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z' clip-rule='evenodd'/>
871
- </svg>
872
- </div>
873
- <div class="ml-3">
874
- <h3 class="text-sm leading-5 font-medium text-blue-800">
875
- <?php
876
- /* translators: 1: Anchor opening tag with href attribute 2: Target attribute 3: Anchor closing tag */
877
- echo sprintf( esc_html__('%1$s' . esc_url( $premium_url ) . '%2$s Upgrade to ES PRO %3$s', 'email-subscribers' ), '<a href=', ' target="_blank">', '</a>' );
878
- ?>
879
- </h3>
880
- <div class="mt-2 text-sm leading-5 text-teal-700">
881
- <p>
882
- <?php esc_html_e( 'Link Tracking, UTM Tracking and Scheduling Options are part of Email Subscribers PRO', 'email-subscribers' ); ?>
883
- <?php
884
- if (ES_Common::can_show_coupon('PREMIUM10')) {
885
- echo '<br /><br />';
886
- /* translators: 1: Bold opening tag 2: Percentage sign 3: Bold closing tag 4: Break Tags 5: Bold opening tag 6: Bold closing tag */
887
- echo sprintf( esc_html__( 'Get %1$s 10%2$s flat discount %3$s if you upgrade now!. %4$s Use coupon code %5$sPREMIUM10 %6$s', 'email-subscribers' ), '</b>', '&#37', '</b>', '<br/><br/>', '<b>', '</b>' );
888
- }
889
- ?>
890
- </p>
891
- </div>
892
- </div>
893
- </div>
894
- </div>
895
- </div>
896
  </div>
897
  </div>
898
  </div>
 
 
 
 
 
899
  <?php
900
  }
901
  }
902
 
903
- function ig_es_additional_spam_score_option() {
904
- if ( ES()->can_upsell_features( array( 'lite', 'starter' ) ) ) {
905
- ?>
906
-
907
- <div class="block mx-4 my-3">
908
- <span class="pt-3 text-sm font-medium leading-5 text-gray-700"><?php echo esc_html__( 'Get spam score', 'email-subscribers'); ?><span class=" mx-2 px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"><?php esc_html_e('Premium', 'email-subscribers' ); ?></span></span>
909
- <button type="button" id="spam_score" disabled class="float-right es_spam rounded-md border text-indigo-600 border-indigo-500 text-sm leading-5 font-medium inline-flex justify-center px-3 py-1"><?php echo esc_html__( 'Check', 'email-subscribers' ); ?>
910
- </button>
911
- </div>
912
- <?php
913
- }
914
-
915
- }
916
 
917
  /**
918
  * Campaign reports data
@@ -921,43 +954,23 @@ function ig_es_additional_spam_score_option() {
921
  */
922
 
923
  function ig_es_view_additional_reports_data() {
924
- if ( ! ES()->is_pro() ) {
925
  $utm_args = array(
926
  'utm_medium' => 'campaign_insight'
927
  );
928
 
929
  $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
 
 
 
 
 
 
930
  ?>
931
  <div>
932
  <div class="campaign_open_overlay lg:w-3/5 xl:w-2/5 h-0 z-40 sticky">
933
- <div style="box-shadow: 0 0 25px 10px rgba(0,0,0,0.08);" class="rounded-md bg-teal-50 p-5 tracking-wide campaign-report">
934
- <div class="flex p-2">
935
- <div>
936
- <svg class='inline-block align-middle h-5 w-5 text-teal-400' fill='currentColor' viewBox='0 0 20 20'>
937
- <path fill-rule='evenodd' d='M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z' clip-rule='evenodd'/>
938
- </svg>
939
- <h3 class="inline-block align-middle ml-2 text-sm leading-5 font-medium text-blue-800">
940
- <?php
941
- /* translators: 1: Anchor opening tag with href attribute 2: Target attribute 3: Anchor closing tag */
942
- echo sprintf( esc_html__('%1$s' . esc_url( $pricing_url ) . '%2$s Upgrade to ES PRO %3$s', 'email-subscribers' ), '<a href=', ' target="_blank">', '</a>' );
943
- ?>
944
- </h3>
945
- <div class="mt-2 text-sm leading-5 text-teal-700">
946
- <p><?php esc_html_e( 'Get campaign insights like geo location, device info, email client info, open/ click activity etc with Email Subscribers PRO.', 'email-subscribers' ); ?>
947
- <br /><br />
948
- <?php
949
- if (ES_Common::can_show_coupon('PREMIUM10')) {
950
- /* translators: 1: Bold opening tag 2: Percentage sign 3: Bold closing tag 4: Break Tags 5: Bold opening tag 6: Bold closing tag */
951
- echo sprintf( esc_html__( 'Get %1$s 10%2$s flat discount %3$s if you upgrade now!. %4$s Use coupon code %5$sPREMIUM10 %6$s', 'email-subscribers' ), '</b>', '&#37', '</b>', '<br/><br/>', '<b>', '</b>' );
952
- }
953
- ?>
954
- </p>
955
- </div>
956
- </div>
957
- </div>
958
- <div class="pt-4 text-center">
959
- <a href="<?php echo esc_attr( $pricing_url ); ?>" target="_blank" class="rounded-md border border-transparent px-3 py-2 bg-white text-sm leading-7 font-medium text-white bg-indigo-600 transition ease-in-out duration-150 mt-2"><?php esc_html_e('Upgrade', 'email-subscribers'); ?></a>
960
- </div>
961
  </div>
962
  </div>
963
  <div class="wrap max-w-7xl cursor-default campaign_open_blur font-sans">
15
  add_action( 'ig_es_sync_users_tabs_ninja_forms', 'ig_es_add_ninja_forms_tab_settings' );
16
  add_action( 'ig_es_sync_users_tabs_edd', 'ig_es_add_edd_tab_settings' );
17
 
18
+ add_action( 'ig_es_workflows_integration', 'ig_es_workflows_integration_metabox', 10 , 1 );
19
+ add_filter( 'ig_es_display_hidden_workflow_metabox', 'ig_es_show_hidden_workflow_metabox', 10, 1 );
20
+
21
  add_action( 'edit_form_advanced', 'add_spam_score_utm_link' );
22
 
23
  add_action( 'ig_es_add_additional_options', 'ig_es_add_captcha_option', 10, 1 );
24
  add_action( 'ig_es_after_broadcast_content_left_pan_settings', 'ig_es_additional_send_email_option');
25
+ add_action( 'ig_es_after_broadcast_tracking_options_settings', 'ig_es_additional_options', 11 );
26
+ //add_action( 'ig_es_broadcast_scheduling_options_settings', 'ig_es_additional_schedule_option');
27
+ //add_action( 'ig_es_after_broadcast_right_pan_settings', 'ig_es_additional_spam_score_option');
28
+ add_action( 'ig_es_add_multilist_options', 'ig_es_additional_multilist_and_post_digest' );
29
  add_action( 'ig_es_view_report_data', 'ig_es_view_additional_reports_data');
30
 
31
  /**
39
  */
40
  function ig_es_mailers_promo( $mailers ) {
41
 
42
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
43
 
44
  $mailers['smtp'] = array(
45
  'name' => 'SMTP',
145
  */
146
  function ig_es_add_settings_tabs( $es_settings_tabs ) {
147
 
148
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
149
  $es_settings_tabs['user_roles'] = array( 'icon' => '<svg class="w-6 h-6 inline -mt-1.5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"></path></svg>', 'name' => __( 'User Roles', 'email-subscribers' ) );
150
  }
151
 
161
  */
162
  function ig_es_add_upsale( $fields ) {
163
 
164
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
165
 
166
  $utm_args = array(
167
  'utm_medium' => 'track_clicks'
168
  );
169
 
170
+ $general_fields = $fields['general'];
171
  $premium_url = ES_Common::get_utm_tracking_url( $utm_args );
172
  // General Settings
173
  $track_link_click = array(
180
  'link' => $premium_url,
181
  'disabled' => true,
182
  /* translators: %s: Icegram Pricing page url with utm tracking */
183
+ 'upgrade_title' => __( 'Track key insight behaviour with PRO', 'email-subscribers' ),
184
+ 'upgrade_desc' => __( 'Understand key insight into customer behavior with Link Tracking and UTM tracking in <b class="font-medium text-teal-800">Email Subscribers Pro</b>.', 'email-subscribers' )
185
  )
186
  );
187
+ $general_fields = ig_es_array_insert_after( $general_fields, 'ig_es_track_email_opens', $track_link_click );
188
 
189
+ if ( ES()->can_upsell_features( array( 'lite', 'starter' ) ) ) {
 
 
 
 
190
 
191
+ $track_utm = array(
192
  'ig_es_track_utm' => array(
193
  'id' => 'ig_es_track_utm',
194
  'name' => __( 'UTM Tracking', 'email-subscribers' ),
197
  'is_premium' => true,
198
  'link' => $premium_url,
199
  'disabled' => true,
 
 
 
 
200
  )
201
+ );
202
+ $general_fields = ig_es_array_insert_after( $general_fields, 'ig_es_track_link_click', $track_utm );
203
+ }
 
 
 
 
204
  $fields['general'] = $general_fields;
205
  }
206
 
207
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
208
 
209
  $utm_args = array(
210
  'utm_medium' => 'enable_captcha'
221
  'default' => 'no',
222
  'is_premium' => true,
223
  'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'known_attackers' ) ),
224
+ 'disabled' => true,
225
+ /* translators: %s: Icegram Pricing page url with utm tracking */
226
+ 'upgrade_title' => __( 'Prevent spam attacks with PRO', 'email-subscribers' ),
227
+ 'upgrade_desc' => __( 'Get a gatekeeper to secure your form and avoid spam signups with form Captcha <b class="font-medium text-teal-800">Email Subscribers PRO</b>.', 'email-subscribers' ),
228
  );
229
 
230
  $managed_blocked_domains['ig_es_enable_disposable_domains'] = array(
248
  'is_premium' => true,
249
  'link' => $premium_url,
250
  'disabled' => true,
 
 
 
251
  );
252
 
253
  $fields['security_settings'] = array_merge( $fields['security_settings'], $fake_domains, $managed_blocked_domains, $field_captcha );
270
  global $ig_es_tracker;
271
 
272
  // Show integrations only if ES Premium is not installed.
273
+ if ( ! ES()->is_starter() ) {
274
 
275
  $tabs['comments'] = array(
276
  'name' => __( 'Comments', 'email-subscribers' ),
603
  <?php
604
  }
605
 
606
+ function ig_es_workflows_integration_metabox( $page_prefix = '' ) {
607
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
608
+
609
+ add_meta_box( 'ig_es_workflow_integration_information', 'ES PRO Integrations', 'ig_es_workflows_integration_upsell', $page_prefix . 'es_workflows', 'side', 'default' );
610
+ }
611
+ }
612
+
613
+ function ig_es_show_hidden_workflow_metabox( $es_workflow_metaboxes ) {
614
+
615
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
616
+ $es_workflow_metaboxes = array(
617
+ 'ig_es_workflow_integration_description',
618
+ );
619
+ }
620
+
621
+ return $es_workflow_metaboxes;
622
+ }
623
+
624
+ function ig_es_workflows_integration_upsell () {
625
+
626
+ $utm_args = array(
627
+ 'utm_medium' => 'es_workflow_integration'
628
+ );
629
+
630
+ $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
631
+
632
+ $plugin_integrations = array(
633
+ 'WooCommerce',
634
+ 'Contact Form 7',
635
+ 'Easy Digital Downloads',
636
+ 'Ninja Forms',
637
+ 'Give WP',
638
+ 'Ninja Forms',
639
+ 'WPForms',
640
+ 'Gravity Forms',
641
+ 'Forminator',
642
+ );
643
+
644
+ $upsell_message = '<div class="pt-1.5">';
645
+ foreach ( $plugin_integrations as $plugin_name ) {
646
+ $upsell_message .= __('<div class="flex items-start space-x-3 -ml-8">
647
+ <div class="flex-shrink-0 h-5 w-5 relative flex justify-center">
648
+ <span class="block h-1.5 w-1.5 mt-1.5 bg-gray-300 rounded-full group-hover:bg-gray-400 group-focus:bg-gray-400 transition ease-in-out duration-150"></span>
649
+ </div>
650
+ <p class="text-sm leading-5 py-0.5 text-gray-500 group-hover:text-gray-900 group-focus:text-gray-900 transition ease-in-out duration-150">' . $plugin_name . '</p>
651
+ </div>', 'email-subscribers');
652
+ }
653
+ $upsell_message .= __('</div><br>Powerup by integrating popular WordPress plugins with Email Subscribers. We have made things simple and automated for you to avoid manual actions.', 'email-subscribers');
654
+ $upsell_info = array(
655
+ 'upgrade_title' => __('Unlock plugin integrations with PRO', 'email-subscribers' ),
656
+ 'pricing_url' => $pricing_url,
657
+ 'upsell_message' => $upsell_message,
658
+ 'cta_html' => false,
659
+ );
660
+ ES_Common::upsell_description_message_box( $upsell_info );
661
+ }
662
+
663
 
664
  function add_spam_score_utm_link() {
665
  global $post, $pagenow, $ig_es_tracker;
667
  return;
668
  }
669
 
670
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
671
  ?>
672
  <script>
673
  jQuery('#submitdiv').after('<div class="es_upsale"><a style="text-decoration:none;" target="_blank" href="https://www.icegram.com/documentation/how-ready-made-template-in-in-email-subscribers-look/?utm_source=in_app&utm_medium=es_template&utm_campaign=es_upsell"><img title="Get readymade templates" style="width:100%;border:0.3em #d46307 solid" src="<?php echo esc_url( ES_PLUGIN_URL ); ?>lite/admin/images/starter-tmpl.png"/><p style="background: #d46307; color: #FFF; padding: 4px; width: 100%; text-align:center">Get readymade beautiful email templates</p></a></div>');
685
  */
686
  function ig_es_add_captcha_option( $form_data ) {
687
 
688
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
689
 
690
  $utm_args = array(
691
  'utm_medium' => 'es_form_captcha'
692
  );
693
 
 
694
 
695
+ $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
696
+ $upsell_info = array(
697
+ 'upgrade_title' => __('Secure your list now with PRO', 'email-subscribers'),
698
+ 'pricing_url' => $pricing_url,
699
+ 'upsell_message' => __('Block known spam bot attacker domains, fake email addresses and bot signups with <b class="font-medium text-teal-800">Email Subscribers PRO.</b>', 'email-subscribers'),
700
+ 'cta_html' => false,
701
+ );
702
  ?>
703
 
704
  <div class="flex border-b border-gray-100 ">
705
+ <div class="w-4/6 mr-16">
706
  <div class="flex flex-row w-full">
707
  <div class="flex w-2/4">
708
  <div class="ml-4 mr-8 mr-4 pt-4 mb-2">
709
+ <label for="tag-link" class="ml-4 text-sm font-medium text-gray-500 pb-2 cursor-default"><?php echo esc_html__( 'Enable Captcha' ); ?>
710
+ <span class="premium-icon"></span>
711
+ </label>
712
+ <p class="italic text-xs text-gray-400 mt-2 ml-4 leading-snug pb-4 cursor-default"><?php esc_html_e( 'Show a captcha to protect from bot signups.', 'email-subscribers' ); ?></p>
713
  </div>
714
  </div>
715
  <div class="flex">
716
+ <div class=" mb-4 mr-4 mt-12">
717
+ <label class=" inline-flex items-center cursor-default">
718
  <span class="relative">
719
  <span class="es-mail-toggle-line"></span>
720
  <span class="es-mail-toggle-dot"></span>
725
  </div>
726
  </div>
727
 
728
+ <div class="w-3/6 pr-4 ml-12">
729
+ <?php ES_Common::upsell_description_message_box( $upsell_info ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
730
  </div>
731
  </div>
732
  <?php
733
  }
734
  }
735
 
736
+ function ig_es_additional_multilist_and_post_digest() {
 
 
737
 
738
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
739
+
740
  $utm_args = array(
741
  'utm_medium' => 'post_notifications_multiple_lists'
742
  );
743
 
744
  $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
745
+ $upsell_info = array(
746
+ 'upgrade_title' => __('Enable multiple lists & post digest with PRO', 'email-subscribers'),
747
+ 'pricing_url' => $pricing_url,
748
+ 'upsell_message' => __('<div class="flex items-start space-x-3 -ml-8">
749
+ <div class="flex-shrink-0 h-5 w-5 relative flex justify-center">
750
+ <span class="block h-1.5 w-1.5 mt-2.5 bg-gray-300 rounded-full group-hover:bg-gray-400 group-focus:bg-gray-400 transition ease-in-out duration-150"></span>
751
+ </div>
752
+ <p class="text-sm leading-5 py-0.5 text-gray-500 group-hover:text-gray-900 group-focus:text-gray-900 transition ease-in-out duration-150">Schedule & send campaigns to multiple lists with <b class="font-medium text-teal-800">Email Subscribers PRO</b>.</p>
753
+ </div>
754
+ <div class="flex items-start space-x-3 -ml-8">
755
+ <div class="flex-shrink-0 h-5 w-5 relative flex justify-center">
756
+ <span class="block h-1.5 w-1.5 mt-2.5 bg-gray-300 rounded-full group-hover:bg-gray-400 group-focus:bg-gray-400 transition ease-in-out duration-150"></span>
757
+ </div>
758
+ <p class="text-sm leading-5 py-0.5 text-gray-500 group-hover:text-gray-900 group-focus:text-gray-900 transition ease-in-out duration-150">Stop creating multiple campaigns for different lists. Select multiple lists with <span class="text-teal-800">Email Subscribers PRO</span>.</p>
759
+ </div>
760
+ <div class="flex items-start space-x-3 -ml-8">
761
+ <div class="flex-shrink-0 h-5 w-5 relative flex justify-center">
762
+ <span class="block h-1.5 w-1.5 mt-2.5 bg-gray-300 rounded-full group-hover:bg-gray-400 group-focus:bg-gray-400 transition ease-in-out duration-150"></span>
763
+ </div>
764
+ <p class="text-sm leading-5 py-0.5 text-gray-500 group-hover:text-gray-900 group-focus:text-gray-900 transition ease-in-out duration-150">Schedule your future campaigns now and feel the peace of mind with <span class="text-teal-800">Email Subscribers PRO</span>.
765
+ </p>
766
+ </div>' , 'email-subscribers'),
767
+ 'cta_html' => false,
768
+ );
769
  ?>
770
+ <table>
771
+ <tr>
772
+ <th scope="row" class="w-3/12 text-left pr-3 -my-4">
773
+ <label for="tag-link" class="ml-6 text-sm font-medium text-gray-500 pb-2 cursor-default"><?php echo esc_html__( 'Is a post digest?', 'email-subscribers' ); ?></label>
774
+ <span class="premium-icon"></span>
775
+ </th>
776
+ <td class="w-4/12">
777
+ <label for="is_post_digest" class="ml-14 inline-flex items-center cursor-default"><span class="relative">
778
+ <span class="es-mail-toggle-line"></span>
779
+ <span class="es-mail-toggle-dot"></span>
780
+ </span></label>
781
+ </td>
782
+ <td rowspan="2" colspan="2" class="w-5/12 border-b border-gray-100">
783
+ <div class="w-full ml-2 py-2">
784
+ <?php ES_Common::upsell_description_message_box( $upsell_info ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
785
  </div>
786
+ </td>
787
+ </tr>
788
+ <tr class="es_post_digest border-b border-gray-100 pt-3">
789
+ <th scope="row" class="text-left">
790
+ <label class="ml-6 text-sm font-medium text-gray-500 pb-2 cursor-default"><?php echo esc_html__( 'Schedules at', 'email-subscribers' ); ?></label>
791
+ <span class="premium-icon"></span>
792
+ <p class="italic text-xs font-normal text-gray-400 mt-2 ml-6 leading-snug"><?php echo esc_html__( 'When to send?', 'email-subscribers' ); ?></p></label>
793
+ </th>
794
+ <td>
795
+ <div class="flex">
796
+ <div class="inline-flex ml-12 relative">
797
+ <label class="ml-2">
798
+ <select class="form-select" disabled="disabled">
799
+ <option><?php echo esc_html__( 'Once a day at', 'email-subscribers' ); ?></option>
800
+ </select>
801
+ <select class="form-select ml-2" disabled="disabled">
802
+ <option><?php echo esc_html__( '12:00 pm', 'email-subscribers' ); ?></option>
803
+ </select>
804
+ </label>
805
+ </div>
806
+ </div>
807
+ </td>
808
+
809
+ </tr>
810
+ </table>
811
  <?php
812
  }
813
 
815
 
816
  function ig_es_additional_send_email_option() {
817
 
818
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
819
  ?>
820
 
821
  <div>
822
+ <input type="radio" name="preview_option" disabled="disabled" class="mt-1 form-radio cursor-default" id="preview_in_email" value="" >
823
+ <label class="mt-1 text-sm font-normal leading-5 text-gray-500 cursor-default"><?php echo esc_html__( 'Email', 'email-subscribers' ); ?>
824
+ <span class="premium-icon"></span>
825
+ </label>
826
  <div id="preview_in_email" class="display_email_field px-4">
827
  <div class="flex py-2" >
828
  <div class="flex w-5/6">
834
  }
835
  }
836
 
837
+ function ig_es_additional_options() {
838
+ ?>
839
+
840
+ <?php
841
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
842
+ $utm_args = array(
843
+ 'utm_medium' => 'broadcast_summary'
844
+ );
845
 
846
+ $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
847
+ $upsell_info = array(
848
+ 'upgrade_title' => __('Reduce the possibility to land in spam with PRO', 'email-subscribers'),
849
+ 'pricing_url' => $pricing_url,
850
+ 'upsell_message' => __('Get key insights about most converting links by tracking link activity, UTM tracking and also prevent your emails land into spam.'),
851
+ 'cta_html' => false,
852
+ );
853
  ?>
854
+ <div class="flex w-full pt-2">
855
+ <div class="w-11/12 text-sm font-normal text-gray-600">
856
+ <label class="pt-3 text-sm leading-5 text-gray-500 cursor-default"><?php echo esc_html__( 'Link tracking', 'email-subscribers'); ?></label>
857
+ <span class="premium-icon"></span>
 
 
 
 
 
 
 
 
 
858
  </div>
859
 
860
+ <div>
861
+ <label for="enable_link_tracking" class=" inline-flex items-center cursor-default">
862
+ <span class="relative">
863
+ <span class="es-mail-toggle-line block w-8 h-5 bg-gray-300 rounded-full shadow-inner"></span>
864
+ <span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-3 h-3 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
865
+ </span>
866
+ </label>
 
 
 
 
 
867
  </div>
868
+ </div>
869
 
870
+
871
  <?php
872
  }
873
 
874
+ if ( ES()->can_upsell_features( array( 'lite', 'starter' ) ) ) {
875
+ ?>
 
876
 
877
+ <div class="flex w-full pt-3 pb-3 border-b border-gray-200">
878
+ <div class="w-11/12 text-sm font-normal text-gray-600">
879
+ <label class="pt-3 text-sm leading-5 text-gray-500 cursor-default"><?php echo esc_html__( 'UTM tracking', 'email-subscribers'); ?></label>
880
+ <span class="premium-icon"></span>
881
+ </div>
882
 
883
+ <div>
884
+ <label for="enable_utm_tracking" class=" inline-flex items-center cursor-default">
885
+ <span class="relative">
886
+ <span class="es-mail-toggle-line block w-8 h-5 bg-gray-300 rounded-full shadow-inner"></span>
887
+ <span class="es-mail-toggle-dot absolute transition-all duration-300 ease-in-out block w-3 h-3 mt-1 ml-1 bg-white rounded-full shadow inset-y-0 left-0 focus-within:shadow-outline"></span>
888
+ </span>
889
+ </label>
890
+ </div>
891
+ </div>
892
 
893
+ <div class="block my-3">
894
+ <label class="pt-3 text-sm leading-5 font-medium text-gray-500 cursor-default"><?php echo esc_html__( 'Get spam score', 'email-subscribers'); ?></label>
895
+ <span class="premium-icon"></span>
896
+ <button type="button" id="spam_score" disabled class="float-right es_spam rounded-md border text-indigo-400 border-indigo-300 text-sm leading-5 font-medium inline-flex justify-center px-3 py-1 cursor-default"><?php echo esc_html__( 'Check', 'email-subscribers' ); ?>
897
+ </button>
898
+ </div>
899
+ <?php
900
+ }
901
+
902
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
903
  ?>
904
+ <div class="block w-full pt-3 pb-2">
905
+ <span class="block text-sm font-medium leading-5 text-gray-500"><?php echo esc_html__( 'Send options', 'email-subscribers' ); ?></span>
906
+ <div class="py-2">
907
+ <input type="radio" class="form-radio" id="schedule_later" checked disabled>
908
+ <label for="schedule_later" class="text-sm font-normal text-gray-500 cursor-default"><?php echo esc_html__( 'Schedule for later', 'email-subscribers' ); ?>
909
+ </label>
910
+ <span class="premium-icon"></span>
911
+ <br>
912
+ <div id="schedule_later" class="px-6">
913
+ <div class="flex pt-4" >
914
+ <div class="flex w-full w-11/12">
915
+ <label class="text-sm font-normal leading-5 text-gray-500 pt-1 cursor-default"><?php echo esc_html__( 'Date', 'email-subscribers' ); ?></label>
916
+ <input class="font-normal text-sm py-1 ml-2 form-input cursor-default" type="text" value="<?php echo esc_attr( date_i18n('Y-m-d') ); ?>" disabled>
 
 
 
 
917
  </div>
918
+ <div>
919
+ <svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="text-gray-500 w-5 h-5 my-1 ml-2"><path d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"></path></svg>
920
+ </div>
921
+ </div>
922
+ <div class="flex pt-3" >
923
+ <div class="flex w-11/12">
924
+ <label class="text-sm font-normal leading-5 text-gray-500 pt-1 cursor-default"><?php echo esc_html__( 'Time', 'email-subscribers' ); ?></label>
925
+ <input class=" font-normal text-sm py-1 ml-2 form-input cursor-default" type="text" value="<?php echo esc_attr( date_i18n('h:i A') ); ?>" disabled>
926
 
 
 
 
 
927
  </div>
928
+ <div>
929
+ <svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="text-gray-500 w-5 h-5 my-1 ml-2 float-right"><path d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
 
 
 
 
930
  </div>
931
  </div>
932
+ <div class="pb-3">
933
+ <div class="block px-2 py-2 mt-4 bg-gray-200 rounded-md ">
934
+ <h3 class="text-gray-400 text-sm font-normal cursor-default"><?php echo esc_html__( 'Local Time: ', 'email-subscribers' ); ?>&nbsp;&nbsp;
935
+ <?php echo esc_attr( date_i18n('Y-m-d H:i A' ) ); ?>
936
+ </h3>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
937
  </div>
938
  </div>
939
  </div>
940
+ <div class="block py-2 mt-2 ">
941
+ <?php ES_Common::upsell_description_message_box( $upsell_info ); ?>
942
+ </div>
943
+ </div>
944
+ </div>
945
  <?php
946
  }
947
  }
948
 
 
 
 
 
 
 
 
 
 
 
 
 
 
949
 
950
  /**
951
  * Campaign reports data
954
  */
955
 
956
  function ig_es_view_additional_reports_data() {
957
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
958
  $utm_args = array(
959
  'utm_medium' => 'campaign_insight'
960
  );
961
 
962
  $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
963
+ $upsell_info = array(
964
+ 'upgrade_title' => __('Track campaign insights with PRO', 'email-subscribers'),
965
+ 'pricing_url' => $pricing_url,
966
+ 'upsell_message' => __('Know your subscribers & their behaviour with detailed campaign insights using <b class="font-medium text-teal-800">Email Subscribers Pro</b>.', 'email-subscribers'),
967
+ 'cta_html' => true,
968
+ );
969
  ?>
970
  <div>
971
  <div class="campaign_open_overlay lg:w-3/5 xl:w-2/5 h-0 z-40 sticky">
972
+ <div class="tracking-wide campaign-report">
973
+ <?php ES_Common::upsell_description_message_box( $upsell_info ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
974
  </div>
975
  </div>
976
  <div class="wrap max-w-7xl cursor-default campaign_open_blur font-sans">
lite/includes/services/class-es-service-css-inliner.php DELETED
@@ -1,57 +0,0 @@
1
- <?php
2
-
3
- class ES_Service_CSS_Inliner extends ES_Services {
4
-
5
- /**
6
- * Service command
7
- *
8
- * @var string
9
- *
10
- * @sinc 4.6.1
11
- */
12
- public $cmd = '/email/process/';
13
-
14
- /**
15
- * ES_Service_CSS_Inliner constructor.
16
- *
17
- * @since 4.6.1
18
- */
19
- public function __construct() {
20
- parent::__construct();
21
- }
22
-
23
- /**
24
- * Get inline CSS
25
- *
26
- * @param array $data
27
- *
28
- * @return array
29
- *
30
- * @since 4.6.1
31
- */
32
- public function get_inline_css( $data = array() ) {
33
-
34
- if ( ES()->validate_service_request( array( 'css_inliner' ) ) ) {
35
- if ( ! empty( $data ) ) {
36
- $meta = ! empty( $data['campaign_id'] ) ? ES()->campaigns_db->get_campaign_meta_by_id( $data['campaign_id'] ) : '';
37
- $data['html'] = $data['content'];
38
- $data['css'] = ! empty( $meta['es_custom_css'] ) ? $meta['es_custom_css'] : get_post_meta( $data['tmpl_id'], 'es_custom_css', true );
39
- $data['tasks'][] = 'css-inliner';
40
- $options = array(
41
- 'timeout' => 15,
42
- 'method' => 'POST',
43
- 'body' => $data
44
- );
45
-
46
- $response = $this->send_request( $options );
47
-
48
- // Change data only if we have got a valid response from the service.
49
- if ( ! $response instanceof WP_Error ) {
50
- $data = $response;
51
- }
52
- }
53
- }
54
-
55
- return $data;
56
- }
57
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lite/includes/services/{class-es-service-send-cron-data.php → class-es-service-handle-cron-data.php} RENAMED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- class ES_Service_Send_Cron_Data extends ES_Services {
4
 
5
  /**
6
  * Service command
@@ -12,7 +12,7 @@ class ES_Service_Send_Cron_Data extends ES_Services {
12
  public $cmd = '/store/cron/';
13
 
14
  /**
15
- * ES_Service_Send_Cron_Data constructor.
16
  *
17
  * @since 4.6.1
18
  */
@@ -25,15 +25,16 @@ class ES_Service_Send_Cron_Data extends ES_Services {
25
  *
26
  * @since 4.6.1
27
  */
28
- public function maybe_send_cron_data( $options = array() ) {
29
 
30
- $ig_es_set_cron_data = get_option( 'ig_es_set_cron_data', 'no' );
31
- $ig_es_set_cron_data = ( ! empty( $options ) && 'email_subscribers_settings' === $options['option_page'] ) ? 'no' : $ig_es_set_cron_data;
32
- if ( 'yes' === $ig_es_set_cron_data ) {
33
- return;
34
- }
 
 
35
 
36
- if ( ES()->validate_service_request( array( 'external_cron' ) ) ) {
37
  // send url and limit to server
38
  $es_cron_url_data = array();
39
  $es_cron_url_data['es_cronurl'] = get_option( 'ig_es_cronurl' );
@@ -43,6 +44,24 @@ class ES_Service_Send_Cron_Data extends ES_Services {
43
  $this->send_cron_data( $es_cron_url_data );
44
 
45
  update_option( 'ig_es_set_cron_data', 'yes' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
47
  }
48
 
@@ -58,7 +77,7 @@ class ES_Service_Send_Cron_Data extends ES_Services {
58
  $es_cron_url_data['es_cronurl'] = ES()->cron->url();
59
  $es_cron_url_data['es_enable_background'] = false;
60
 
61
- $this->send_cron_data( $es_cron_url_data );
62
  }
63
 
64
  /**
1
  <?php
2
 
3
+ class ES_Service_Handle_Cron_Data extends ES_Services {
4
 
5
  /**
6
  * Service command
12
  public $cmd = '/store/cron/';
13
 
14
  /**
15
+ * ES_Service_Handle_Cron_Data constructor.
16
  *
17
  * @since 4.6.1
18
  */
25
  *
26
  * @since 4.6.1
27
  */
28
+ public function handle_es_cron_data( $options = array() ) {
29
 
30
+ if ( ES()->validate_service_request( array( 'es_cron' ) ) ) {
31
+
32
+ $ig_es_set_cron_data = get_option( 'ig_es_set_cron_data', 'no' );
33
+ $ig_es_set_cron_data = ( ! empty( $options ) && 'email_subscribers_settings' === $options['option_page'] ) ? 'no' : $ig_es_set_cron_data;
34
+ if ( 'yes' === $ig_es_set_cron_data ) {
35
+ return;
36
+ }
37
 
 
38
  // send url and limit to server
39
  $es_cron_url_data = array();
40
  $es_cron_url_data['es_cronurl'] = get_option( 'ig_es_cronurl' );
44
  $this->send_cron_data( $es_cron_url_data );
45
 
46
  update_option( 'ig_es_set_cron_data', 'yes' );
47
+ delete_option( 'ig_es_cron_data_deleted' );
48
+ } else {
49
+
50
+ if ( ES()->is_trial() ) {
51
+ $ig_es_cron_data_deleted = get_option( 'ig_es_cron_data_deleted', 'no' );
52
+
53
+ // Check if we have already deleted the cron data.
54
+ if ( 'yes' === $ig_es_cron_data_deleted ) {
55
+ return;
56
+ }
57
+
58
+ $request_response = $this->delete_cron_data();
59
+
60
+ if ( ! $request_response instanceof WP_Error && ! empty( $request_response['status'] ) && 'SUCCESS' === $request_response['status'] ) {
61
+ update_option( 'ig_es_cron_data_deleted', 'yes' );
62
+ }
63
+ }
64
+
65
  }
66
  }
67
 
77
  $es_cron_url_data['es_cronurl'] = ES()->cron->url();
78
  $es_cron_url_data['es_enable_background'] = false;
79
 
80
+ return $this->send_cron_data( $es_cron_url_data );
81
  }
82
 
83
  /**
lite/includes/services/class-es-service-process-email-content.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class ES_Service_Process_Email_Content extends ES_Services {
4
+
5
+ /**
6
+ * Service command
7
+ *
8
+ * @var string
9
+ *
10
+ * @sinc 4.6.1
11
+ */
12
+ public $cmd = '/email/process/';
13
+
14
+ /**
15
+ * ES_Service_Process_Email_Content constructor.
16
+ *
17
+ * @since 4.6.1
18
+ */
19
+ public function __construct() {
20
+ parent::__construct();
21
+ }
22
+
23
+ /**
24
+ * Get inline CSS
25
+ *
26
+ * @param array $data
27
+ *
28
+ * @return array
29
+ *
30
+ * @since 4.6.1
31
+ */
32
+ public function process_email_content( $data = array() ) {
33
+
34
+ $data = apply_filters( 'ig_es_util_data', $data );
35
+
36
+ // Check if we have content to process and task to be performed.
37
+ if ( ! empty( $data['content'] ) && ! empty( $data['tasks'] ) ) {
38
+ $options = array(
39
+ 'timeout' => 15,
40
+ 'method' => 'POST',
41
+ 'body' => $data
42
+ );
43
+ $response = $this->send_request( $options );
44
+
45
+ // Change data only if we have got a valid response from the service.
46
+ if ( ! $response instanceof WP_Error ) {
47
+ $data = $response;
48
+ }
49
+ }
50
+
51
+ return $data;
52
+ }
53
+ }
lite/includes/services/class-es-services.php CHANGED
@@ -46,8 +46,14 @@ class ES_Services {
46
  return new WP_Error( '404', 'Command Not Found' );
47
  }
48
 
49
- // Check if trial is valid or user is on a premium plan, if not, then don't prcess the request.
50
- if ( ! ( ES()->is_trial_valid() || ES()->is_premium() ) ) {
 
 
 
 
 
 
51
  return $options;
52
  }
53
 
46
  return new WP_Error( '404', 'Command Not Found' );
47
  }
48
 
49
+ // Request is valid if trial is valid or user is on a premium plan.
50
+ $is_request_valid = ES()->is_trial_valid() || ES()->is_premium();
51
+
52
+ // Allow custom validation logic for some services e.g. sending es cron delete request even after trial is inactive.
53
+ $is_request_valid = apply_filters( 'ig_es_service_request_custom_validation', $is_request_valid, $options );
54
+
55
+ // Don't process request if request is not valid.
56
+ if ( ! $is_request_valid ) {
57
  return $options;
58
  }
59
 
lite/includes/workflows/admin/class-es-workflow-admin-edit.php CHANGED
@@ -251,15 +251,18 @@ class ES_Workflow_Admin_Edit {
251
 
252
  $page_prefix = 'woo' === IG_ES_PLUGIN_PLAN ? 'marketing-automation_page_' : 'email-subscribers_page_';
253
 
254
- $meta_box_title_for_trigger = __( 'Trigger', 'email-subscribers' );
255
- $meta_box_title_for_actions = __( 'Actions', 'email-subscribers' );
256
- $meta_box_title_for_save = __( 'Save', 'email-subscribers' );
257
- $meta_box_title_for_options = __( 'Options', 'email-subscribers' );
258
  // $meta_box_title_for_timing = __( 'Timing', 'email-subscribers' );
259
 
260
  add_meta_box( 'ig_es_workflow_trigger', $meta_box_title_for_trigger, array( __CLASS__, 'trigger_metabox' ), $page_prefix . 'es_workflows', 'normal', 'default' );
261
  add_meta_box( 'ig_es_workflow_actions', $meta_box_title_for_actions, array( __CLASS__, 'actions_metabox' ), $page_prefix . 'es_workflows', 'normal', 'default' );
262
  add_meta_box( 'ig_es_workflow_save', $meta_box_title_for_save, array( __CLASS__, 'save_metabox' ), $page_prefix . 'es_workflows', 'side', 'default' );
 
 
 
263
  // add_meta_box( 'ig_es_workflow_options', $meta_box_title_for_options, array( __CLASS__, 'options_metabox' ), $page_prefix . 'es_workflows', 'side', 'default' ); // phpcs:ignore
264
  // add_meta_box( 'ig_es_workflow_timing', $meta_box_title_for_timing, array( __CLASS__, 'timing_metabox' ), $page_prefix . 'es_workflows', 'side', 'default' ); // phpcs:ignore
265
  }
@@ -299,6 +302,8 @@ class ES_Workflow_Admin_Edit {
299
  'ig_es_workflow_save',
300
  );
301
 
 
 
302
  // Check if user has hidden metaboxes from the screen options.
303
  if ( ! empty( $hidden ) ) {
304
  // Remove ES workflows metaboxes from the user's hidden metabox list.
251
 
252
  $page_prefix = 'woo' === IG_ES_PLUGIN_PLAN ? 'marketing-automation_page_' : 'email-subscribers_page_';
253
 
254
+ $meta_box_title_for_trigger = __( 'Trigger', 'email-subscribers' );
255
+ $meta_box_title_for_actions = __( 'Actions', 'email-subscribers' );
256
+ $meta_box_title_for_save = __( 'Save', 'email-subscribers' );
257
+ $meta_box_title_for_options = __( 'Options', 'email-subscribers' );
258
  // $meta_box_title_for_timing = __( 'Timing', 'email-subscribers' );
259
 
260
  add_meta_box( 'ig_es_workflow_trigger', $meta_box_title_for_trigger, array( __CLASS__, 'trigger_metabox' ), $page_prefix . 'es_workflows', 'normal', 'default' );
261
  add_meta_box( 'ig_es_workflow_actions', $meta_box_title_for_actions, array( __CLASS__, 'actions_metabox' ), $page_prefix . 'es_workflows', 'normal', 'default' );
262
  add_meta_box( 'ig_es_workflow_save', $meta_box_title_for_save, array( __CLASS__, 'save_metabox' ), $page_prefix . 'es_workflows', 'side', 'default' );
263
+ if ( ES()->can_upsell_features( array( 'lite', 'trial' ) ) ) {
264
+ do_action( 'ig_es_workflows_integration', $page_prefix );
265
+ }
266
  // add_meta_box( 'ig_es_workflow_options', $meta_box_title_for_options, array( __CLASS__, 'options_metabox' ), $page_prefix . 'es_workflows', 'side', 'default' ); // phpcs:ignore
267
  // add_meta_box( 'ig_es_workflow_timing', $meta_box_title_for_timing, array( __CLASS__, 'timing_metabox' ), $page_prefix . 'es_workflows', 'side', 'default' ); // phpcs:ignore
268
  }
302
  'ig_es_workflow_save',
303
  );
304
 
305
+ $es_workflow_metaboxes = apply_filters( 'ig_es_display_hidden_workflow_metabox', $es_workflow_metaboxes );
306
+
307
  // Check if user has hidden metaboxes from the screen options.
308
  if ( ! empty( $hidden ) ) {
309
  // Remove ES workflows metaboxes from the user's hidden metabox list.
readme.txt CHANGED
@@ -6,7 +6,7 @@ Tags: email marketing, subscription, autoresponder, post notification, welcome e
6
  Requires at least: 3.9
7
  Tested up to: 5.5.1
8
  Requires PHP: 5.6
9
- Stable tag: 4.6.1
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
@@ -304,6 +304,10 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
304
 
305
  == Changelog ==
306
 
 
 
 
 
307
  **4.6.1 (19.10.2020)**
308
 
309
  * New: UI improvements
6
  Requires at least: 3.9
7
  Tested up to: 5.5.1
8
  Requires PHP: 5.6
9
+ Stable tag: 4.6.2
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
304
 
305
  == Changelog ==
306
 
307
+ **4.6.2 (27.10.2020)**
308
+
309
+ * Fix: UTM tracking related issue [PRO]
310
+
311
  **4.6.1 (19.10.2020)**
312
 
313
  * New: UI improvements