Email Subscribers & Newsletters - Version 4.6.7

Version Description

Download this release

Release Info

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

Code changes from version 4.6.6 to 4.6.7

Files changed (34) hide show
  1. email-subscribers.php +3 -2
  2. lite/admin/class-email-subscribers-admin.php +2 -2
  3. lite/admin/css/email-subscribers-admin.css +37 -1
  4. lite/admin/dist/main.css +1 -1
  5. lite/admin/images/aws.svg +1 -0
  6. lite/admin/js/email-subscribers-admin.js +5 -3
  7. lite/admin/js/subscribers.js +74 -5
  8. lite/includes/class-email-subscribers.php +1 -1
  9. lite/includes/class-es-common.php +1 -0
  10. lite/includes/class-es-install.php +6 -1
  11. lite/includes/classes/class-es-admin-settings.php +9 -2
  12. lite/includes/classes/class-es-contacts-table.php +1 -1
  13. lite/includes/classes/class-es-cron.php +3 -0
  14. lite/includes/classes/class-es-handle-post-notification.php +6 -7
  15. lite/includes/classes/class-es-handle-subscription.php +19 -0
  16. lite/includes/classes/class-es-import-subscribers.php +124 -46
  17. lite/includes/classes/class-es-mailer.php +37 -10
  18. lite/includes/classes/class-es-message.php +20 -0
  19. lite/includes/classes/class-es-newsletters.php +31 -15
  20. lite/includes/classes/class-es-queue.php +3 -6
  21. lite/includes/classes/class-es-reports-table.php +56 -8
  22. lite/includes/classes/class-es-tools.php +5 -1
  23. lite/includes/classes/class-ig-es-background-process-helper.php +5 -3
  24. lite/includes/db/class-es-db-contacts.php +5 -1
  25. lite/includes/db/class-es-db-sending-queue.php +115 -0
  26. lite/includes/libraries/class-es-html2text.php +9 -2
  27. lite/includes/mailers/class-es-pepipost-mailer.php +14 -0
  28. lite/includes/mailers/class-es-phpmail-mailer.php +59 -7
  29. lite/includes/mailers/class-es-wpmail-mailer.php +1 -1
  30. lite/includes/pro-features.php +76 -2
  31. lite/includes/upgrade/es-update-functions.php +41 -0
  32. lite/public/js/email-subscribers-public.js +23 -0
  33. lite/public/partials/class-es-shortcode.php +0 -1
  34. readme.txt +10 -1
email-subscribers.php CHANGED
@@ -3,13 +3,14 @@
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.6
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
10
  * Tested up to: 5.6
11
  * WC requires at least: 3.6.0
12
  * WC tested up to: 4.6.2
 
13
  * Requires PHP: 5.6
14
  * Text Domain: email-subscribers
15
  * Domain Path: /lite/languages/
@@ -177,7 +178,7 @@ if ( 'premium' === $ig_es_plan ) {
177
  /* ***************************** Initial Compatibility Work (End) ******************* */
178
 
179
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
180
- define( 'ES_PLUGIN_VERSION', '4.6.6' );
181
  }
182
 
183
  // 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.7
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
10
  * Tested up to: 5.6
11
  * WC requires at least: 3.6.0
12
  * WC tested up to: 4.6.2
13
+ * ES WOO: 7120515:9f4c7f8bb491260ef19edf9699db73e6
14
  * Requires PHP: 5.6
15
  * Text Domain: email-subscribers
16
  * Domain Path: /lite/languages/
178
  /* ***************************** Initial Compatibility Work (End) ******************* */
179
 
180
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
181
+ define( 'ES_PLUGIN_VERSION', '4.6.7' );
182
  }
183
 
184
  // Plugin Folder Path.
lite/admin/class-email-subscribers-admin.php CHANGED
@@ -135,7 +135,7 @@ class Email_Subscribers_Admin {
135
  wp_enqueue_style( 'ig-es-style', plugin_dir_url( __FILE__ ) . 'dist/main.css', array(), $this->version, 'all' );
136
 
137
  $get_page = ig_es_get_request_data( 'page' );
138
- if ( ! empty( $get_page ) && 'es_reports' === $get_page ) {
139
  wp_enqueue_style( 'flag-icon-css', 'https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.5.0/css/flag-icon.min.css', array(), $this->version, 'all' );
140
  }
141
  }
@@ -198,7 +198,7 @@ class Email_Subscribers_Admin {
198
  'security' => wp_create_nonce( 'ig-es-admin-ajax-nonce' ),
199
  'i18n' => array(
200
  'select_status' => esc_html__( 'Please select the status for the importing contacts!', 'email-subscribers' ),
201
- 'select_emailcolumn' => esc_html__( 'Please select at least the column with the email addresses!', 'email-subscribers' ),
202
  'prepare_data' => esc_html__( 'Preparing Data', 'email-subscribers' ),
203
  /* translators: %s: Upload progress */
204
  'uploading' => esc_html__( 'Uploading...%s', 'email-subscribers' ),
135
  wp_enqueue_style( 'ig-es-style', plugin_dir_url( __FILE__ ) . 'dist/main.css', array(), $this->version, 'all' );
136
 
137
  $get_page = ig_es_get_request_data( 'page' );
138
+ if ( ! empty( $get_page ) && ( 'es_reports' === $get_page || 'es_subscribers' === $get_page ) ) {
139
  wp_enqueue_style( 'flag-icon-css', 'https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.5.0/css/flag-icon.min.css', array(), $this->version, 'all' );
140
  }
141
  }
198
  'security' => wp_create_nonce( 'ig-es-admin-ajax-nonce' ),
199
  'i18n' => array(
200
  'select_status' => esc_html__( 'Please select the status for the importing contacts!', 'email-subscribers' ),
201
+ 'select_email_column' => esc_html__( 'Please select the email address column!', 'email-subscribers' ),
202
  'prepare_data' => esc_html__( 'Preparing Data', 'email-subscribers' ),
203
  /* translators: %s: Upload progress */
204
  'uploading' => esc_html__( 'Uploading...%s', 'email-subscribers' ),
lite/admin/css/email-subscribers-admin.css CHANGED
@@ -1783,6 +1783,19 @@ div.broadcast_side_content{
1783
  height: 1.2rem !important;
1784
  }
1785
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1786
  /* Import Subscriber */
1787
 
1788
  .step2 {
@@ -1827,10 +1840,33 @@ div.broadcast_side_content{
1827
  100%{left:120%;}
1828
  }
1829
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1830
  /* Import Subscriber: end; */
1831
 
1832
 
1833
  .tablenav {
1834
  padding-top: 0px !important;
1835
  clear: none !important;
1836
- }
1783
  height: 1.2rem !important;
1784
  }
1785
 
1786
+
1787
+ #es_country_flag{
1788
+ width:2.3em;
1789
+ }
1790
+
1791
+ #es-flag-icon{
1792
+ width:2.3em !important;
1793
+ }
1794
+
1795
+ .ig-es-attachment-container{
1796
+ margin-left: -120px;
1797
+ margin-right: -200px;
1798
+ }
1799
  /* Import Subscriber */
1800
 
1801
  .step2 {
1840
  100%{left:120%;}
1841
  }
1842
 
1843
+ .upload-method-or {
1844
+ font-size: 23px;
1845
+ text-align: center;
1846
+ line-height: 11em;
1847
+ position: relative;
1848
+ }
1849
+
1850
+ .upload-method-or::before {
1851
+ content: '';
1852
+ display: block;
1853
+ height: 100%;
1854
+ width: 1px;
1855
+ position: absolute;
1856
+ background-color: #d2d5dc;
1857
+ z-index: 0;
1858
+ left: 50%;
1859
+ }
1860
+
1861
+ .upload-method-or .seperator-text {
1862
+ background: #fff;
1863
+ position: relative;
1864
+ }
1865
+
1866
  /* Import Subscriber: end; */
1867
 
1868
 
1869
  .tablenav {
1870
  padding-top: 0px !important;
1871
  clear: none !important;
1872
+ }
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: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{-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: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,.form-radio:checked{border-color:transparent}.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");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{-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: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:2px solid transparent;outline-offset:2px;-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:2px solid transparent;outline-offset:2px;-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:2px solid transparent!important;outline-offset:2px!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:2px solid transparent;outline-offset:2px;-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:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity));--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity));--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-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:2px solid transparent!important;outline-offset:2px!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:2px solid transparent!important;outline-offset:2px!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:.875rem;height:.875rem;margin-left:.25rem;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:2px solid transparent;outline-offset:2px;-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:1rem;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}.importing-progress,.progress{width:100%;height:2rem;--bg-opacity:1;background-color:#e5e7eb;background-color:rgba(229,231,235,var(--bg-opacity));overflow:hidden;position:relative;text-align:right;line-height:1rem;margin-top:.375rem;border-radius:.25rem}.importing-progress span.bar,.progress span.bar{display:block;position:absolute;line-height:2.5rem;padding-top:.25rem;padding-bottom:.25rem;top:0;bottom:0;left:0;border-radius:.25rem;overflow:hidden;background-image:-webkit-gradient(linear,left top,right top,from(var(--gradient-color-stops)));background-image:linear-gradient(90deg,var(--gradient-color-stops));--gradient-from-color:#42389d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,56,157,0));--gradient-to-color:#6875f5;--bg-opacity:1;background-color:#8da2fb;background-color:rgba(141,162,251,var(--bg-opacity))}.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:2px solid transparent;outline-offset:2px}.overflow-auto{overflow:auto}.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}.pb-1\.5{padding-bottom:.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-yellow-600{--text-opacity:1;color:#9f580a;color:rgba(159,88,10,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{word-wrap:break-word;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-24{width:6rem}.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-10\/12{width:83.333333%}.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: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{-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: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,.form-radio:checked{border-color:transparent}.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");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{-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: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:2px solid transparent;outline-offset:2px;-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:2px solid transparent;outline-offset:2px;-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:2px solid transparent!important;outline-offset:2px!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:2px solid transparent;outline-offset:2px;-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:#d2d6dc;background-color:rgba(210,214,220,var(--bg-opacity));--text-opacity:1;color:#374151;color:rgba(55,65,81,var(--text-opacity));--border-opacity:1;border-color:#d2d6dc;border-color:rgba(210,214,220,var(--border-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:2px solid transparent!important;outline-offset:2px!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:2px solid transparent!important;outline-offset:2px!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:.875rem;height:.875rem;margin-left:.25rem;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:2px solid transparent;outline-offset:2px;-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:1rem;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}.importing-progress,.progress{width:100%;height:2rem;--bg-opacity:1;background-color:#e5e7eb;background-color:rgba(229,231,235,var(--bg-opacity));overflow:hidden;position:relative;text-align:right;line-height:1rem;margin-top:.375rem;border-radius:.25rem}.importing-progress span.bar,.progress span.bar{display:block;position:absolute;line-height:2.5rem;padding-top:.25rem;padding-bottom:.25rem;top:0;bottom:0;left:0;border-radius:.25rem;overflow:hidden;background-image:-webkit-gradient(linear,left top,right top,from(var(--gradient-color-stops)));background-image:linear-gradient(90deg,var(--gradient-color-stops));--gradient-from-color:#42389d;--gradient-color-stops:var(--gradient-from-color),var(--gradient-to-color,rgba(66,56,157,0));--gradient-to-color:#6875f5;--bg-opacity:1;background-color:#8da2fb;background-color:rgba(141,162,251,var(--bg-opacity))}.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))}.divide-y>:not(template)~:not(template){--divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--divide-y-reverse)));border-bottom-width:calc(1px*var(--divide-y-reverse))}.divide-gray-200>:not(template)~:not(template){--divide-opacity:1;border-color:#e5e7eb;border-color:rgba(229,231,235,var(--divide-opacity))}.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}.clearfix:after{content:"";display:table;clear:both}.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}.mx-10{margin-left:2.5rem;margin-right:2.5rem}.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}.mt-10{margin-top:2.5rem}.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}.-mb-4{margin-bottom:-1rem}.-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:2px solid transparent;outline-offset:2px}.overflow-auto{overflow:auto}.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}.pb-1\.5{padding-bottom:.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-300{--text-opacity:1;color:#d2d6dc;color:rgba(210,214,220,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-yellow-600{--text-opacity:1;color:#9f580a;color:rgba(159,88,10,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-500:hover{--text-opacity:1;color:#6b7280;color:rgba(107,114,128,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{word-wrap:break-word;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-24{width:6rem}.w-40{width:10rem}.w-48{width:12rem}.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-10\/12{width:83.333333%}.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\:ml-32{margin-left:8rem}.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/aws.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 180"><path d="M84.4 65.4c0 3.7.4 6.7 1.1 8.9.8 2.2 1.8 4.6 3.2 7.2.5.8.7 1.6.7 2.3 0 1-.6 2-1.9 3L81.2 91c-.9.6-1.8.9-2.6.9-1 0-2-.5-3-1.4a31 31 0 01-3.6-4.7l-3.1-5.9a37 37 0 01-29.4 13.8c-8.4 0-15.1-2.4-20-7.2a25.7 25.7 0 01-7.4-19.2c0-8.5 3-15.4 9.1-20.6s14.2-7.8 24.5-7.8c3.4 0 6.9.3 10.6.8s7.5 1.3 11.5 2.2v-7.3c0-7.6-1.6-12.9-4.7-16-3.2-3.1-8.6-4.6-16.3-4.6-3.5 0-7.1.4-10.8 1.3A79.7 79.7 0 0021.7 20l-1.6.3c-1.4 0-2.1-1-2.1-3.1v-4.9c0-1.6.2-2.8.7-3.5s1.4-1.4 2.8-2.1A60.6 60.6 0 0149.7.3C61.6.3 70.3 3 75.9 8.4c5.5 5.4 8.3 13.6 8.3 24.6v32.4h.2zM43.8 80.6c3.3 0 6.7-.6 10.3-1.8 3.6-1.2 6.8-3.4 9.5-6.4 1.6-1.9 2.8-4 3.4-6.4.6-2.4 1-5.3 1-8.7v-4.2a83.5 83.5 0 00-18.6-2.3c-6.7 0-11.6 1.3-14.9 4-3.3 2.7-4.9 6.5-4.9 11.5 0 4.7 1.2 8.2 3.7 10.6 2.4 2.5 5.9 3.7 10.5 3.7zm80.3 10.8c-1.8 0-3-.3-3.8-1-.8-.6-1.5-2-2.1-3.9L94.7 9.2c-.6-2-.9-3.3-.9-4 0-1.6.8-2.5 2.4-2.5h9.8c1.9 0 3.2.3 3.9 1 .8.6 1.4 2 2 3.9l16.8 66.2 15.6-66.2c.5-2 1.1-3.3 1.9-3.9.8-.6 2.2-1 4-1h8c1.9 0 3.2.3 4 1 .8.6 1.5 2 1.9 3.9l15.8 67 17.3-67c.6-2 1.3-3.3 2-3.9.8-.6 2.1-1 3.9-1h9.3c1.6 0 2.5.8 2.5 2.5l-.2 1.6-.7 2.5-24.1 77.3c-.6 2-1.3 3.3-2.1 3.9s-2.1 1-3.8 1h-8.6c-1.9 0-3.2-.3-4-1-.8-.7-1.5-2-1.9-4L154 22l-15.4 64.4c-.5 2-1.1 3.3-1.9 4-.8.7-2.2 1-4 1h-8.6zm128.5 2.7a66.2 66.2 0 01-26.9-5.8c-1.6-.9-2.7-1.9-3.1-2.8a7 7 0 01-.6-2.8v-5.1c0-2.1.8-3.1 2.3-3.1l1.8.3 2.5 1a54.4 54.4 0 0022.9 4.7 27 27 0 0014.6-3.3c3.4-2.2 5.2-5.4 5.2-9.5 0-2.8-.9-5.1-2.7-7a25 25 0 00-10.1-5.2L244 51a30.5 30.5 0 01-16-10.2A23.8 23.8 0 01232.9 7c3-2.3 6.4-4 10.4-5.2A43.6 43.6 0 01262.6.5l6.5 1.1 5.7 1.6c1.8.6 3.2 1.2 4.2 1.8 1.4.8 2.4 1.6 3 2.5.6.8.9 1.9.9 3.3v4.7c0 2.1-.8 3.2-2.3 3.2-.8 0-2.1-.4-3.8-1.2a45.7 45.7 0 00-19.2-3.9c-5.7 0-10.2.9-13.3 2.8-3.1 1.9-4.7 4.8-4.7 8.9 0 2.8 1 5.2 3 7.1 2 1.9 5.7 3.8 11 5.5l14.2 4.5c7.2 2.3 12.4 5.5 15.5 9.6s4.6 8.8 4.6 14c0 4.3-.9 8.2-2.6 11.6a26.9 26.9 0 01-7.3 8.8 32.2 32.2 0 01-11.1 5.6 47.6 47.6 0 01-14.3 2.1z" fill="#262f3e"/><path d="M271.5 142.7c-32.9 24.3-80.7 37.2-121.8 37.2A220.3 220.3 0 011 123.2c-3.1-2.8-.3-6.6 3.4-4.4a299.9 299.9 0 00148.8 39.5 297 297 0 00113.5-23.2c5.5-2.5 10.2 3.6 4.8 7.6zm13.7-15.6c-4.2-5.4-27.8-2.6-38.5-1.3-3.2.4-3.7-2.4-.8-4.5 18.8-13.2 49.7-9.4 53.3-5 3.6 4.5-1 35.4-18.6 50.2-2.7 2.3-5.3 1.1-4.1-1.9 4-9.9 12.9-32.2 8.7-37.5z" fill="#f59931"/></svg>
lite/admin/js/email-subscribers-admin.js CHANGED
@@ -373,8 +373,9 @@
373
  //es mailer settings
374
  jQuery(document).on('change', '.es_mailer', function (e) {
375
  var val = jQuery('.es_mailer:checked').val();
376
- jQuery('[name*="ig_es_mailer_settings"], .es_sub_headline').not('.es_mailer').hide();
377
- jQuery(document).find('.' + val).show();
 
378
  });
379
  jQuery('.es_mailer').trigger('change');
380
 
@@ -450,7 +451,7 @@
450
 
451
  let form_data = $(this).closest('form').serialize();
452
  // Add action to form data
453
- form_data += form_data + '&action=ig_es_draft_broadcast&security=' + ig_es_js_data.security;
454
  jQuery.ajax({
455
  method: 'POST',
456
  url: ajaxurl,
@@ -654,6 +655,7 @@
654
  jQuery('#ig-es-optin-trial-to-premium-offer').on('click', function(){
655
  jQuery(this).closest('.notice').hide('slow');
656
  });
 
657
  });
658
 
659
  })(jQuery);
373
  //es mailer settings
374
  jQuery(document).on('change', '.es_mailer', function (e) {
375
  var val = jQuery('.es_mailer:checked').val();
376
+ var wrapper_row = jQuery(this).closest('tr');
377
+ jQuery(wrapper_row).find('[name*="ig_es_mailer_settings"], .es_sub_headline, .field-desciption').not('.es_mailer').hide();
378
+ jQuery(wrapper_row).find('.' + val).show();
379
  });
380
  jQuery('.es_mailer').trigger('change');
381
 
451
 
452
  let form_data = $(this).closest('form').serialize();
453
  // Add action to form data
454
+ form_data += '&action=ig_es_draft_broadcast&security=' + ig_es_js_data.security;
455
  jQuery.ajax({
456
  method: 'POST',
457
  url: ajaxurl,
655
  jQuery('#ig-es-optin-trial-to-premium-offer').on('click', function(){
656
  jQuery(this).closest('.notice').hide('slow');
657
  });
658
+
659
  });
660
 
661
  })(jQuery);
lite/admin/js/subscribers.js CHANGED
@@ -1,7 +1,7 @@
1
  jQuery(document).ready(function ($) {
2
  "use strict"
3
 
4
- let importstatus = $('.step1 .import-status'),
5
  progress = $('#progress'),
6
  progressbar = progress.find('.bar'),
7
  importprogress = $('#importing-progress'),
@@ -96,8 +96,8 @@ jQuery(document).ready(function ($) {
96
  dataType: 'json'
97
  }, function( response ) {
98
  progress.addClass('hidden');
99
-
100
- $('.step1').slideUp();
101
  $('.step2-body').html(response.html).parent().show();
102
  $('.step2-status,.step2-list').show();
103
 
@@ -121,7 +121,7 @@ jQuery(document).ready(function ($) {
121
 
122
 
123
  if ( ! is_email_field_set ) {
124
- alert(ig_es_subscribers_data.i18n.select_emailcolumn);
125
  return false;
126
  }
127
 
@@ -146,7 +146,8 @@ jQuery(document).ready(function ($) {
146
 
147
  progress.removeClass('hidden');
148
  progressbar.stop().width(0);
149
- $('.step1').slideUp();
 
150
  $('.step2-body').html('<br><br>').parent().show();
151
  $('.step2-status,.step2-list, .es-import-processing ').hide();
152
 
@@ -272,9 +273,77 @@ jQuery(document).ready(function ($) {
272
  return str;
273
  }
274
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  if ( 'object' === typeof (wpUploaderInit) ) {
276
  uploader_init();
277
  }
278
 
279
  $('#form_import_subscribers').on('submit', start_import );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  });
1
  jQuery(document).ready(function ($) {
2
  "use strict"
3
 
4
+ let importstatus = $('.es-import-step1 .import-status'),
5
  progress = $('#progress'),
6
  progressbar = progress.find('.bar'),
7
  importprogress = $('#importing-progress'),
96
  dataType: 'json'
97
  }, function( response ) {
98
  progress.addClass('hidden');
99
+ $(".es-import-step1").slideUp();
100
+ $('.es-import-option').hide();
101
  $('.step2-body').html(response.html).parent().show();
102
  $('.step2-status,.step2-list').show();
103
 
121
 
122
 
123
  if ( ! is_email_field_set ) {
124
+ alert(ig_es_subscribers_data.i18n.select_email_column);
125
  return false;
126
  }
127
 
146
 
147
  progress.removeClass('hidden');
148
  progressbar.stop().width(0);
149
+ $('.es-import-step1').slideUp();
150
+ $('.es-import-option').hide();
151
  $('.step2-body').html('<br><br>').parent().show();
152
  $('.step2-status,.step2-list, .es-import-processing ').hide();
153
 
273
  return str;
274
  }
275
 
276
+ let _ajax = function(action, data, callback, errorCallback) {
277
+
278
+ if ($.isFunction(data)) {
279
+ if ($.isFunction(callback)) {
280
+ errorCallback = callback;
281
+ }
282
+ callback = data;
283
+ data = {};
284
+ }
285
+ $.ajax({
286
+ type: 'POST',
287
+ url: ajaxurl,
288
+ data: $.extend({
289
+ action: 'ig_es_' + action,
290
+ security: wpnonce
291
+ }, data),
292
+ success: function (data, textStatus, jqXHR) {
293
+ callback && callback.call(this, data, textStatus, jqXHR);
294
+ },
295
+ error: function (jqXHR, textStatus, errorThrown) {
296
+ if (textStatus == 'error' && !errorThrown) return;
297
+ if (console) console.error($.trim(jqXHR.responseText));
298
+ errorCallback && errorCallback.call(this, jqXHR, textStatus, errorThrown);
299
+ },
300
+ dataType: "JSON"
301
+ });
302
+ }
303
+
304
  if ( 'object' === typeof (wpUploaderInit) ) {
305
  uploader_init();
306
  }
307
 
308
  $('#form_import_subscribers').on('submit', start_import );
309
+
310
+ $('#import_wordpress')
311
+ .on('click', function () {
312
+
313
+ let selected_roles = [];
314
+ $('#ig-es-wordpress-user-roles input[name="roles[]"]:checked').each(function(){
315
+ let selected_role = $(this).val();
316
+ selected_roles.push(selected_role);
317
+ });
318
+ _ajax('import_subscribers_upload_handler', {
319
+ selected_roles: selected_roles
320
+ }, function (response) {
321
+
322
+ if (response.success) {
323
+ importidentifier = response.identifier;
324
+ $('#wordpress-users').fadeOut();
325
+ get_import_data();
326
+ } else {
327
+ importstatus.html(response.message);
328
+ progress.addClass('error');
329
+ }
330
+ }, function () {
331
+
332
+ importstatus.html('Error');
333
+ });
334
+
335
+ return false;
336
+ });
337
+
338
+ $("input:radio[name='es-import-subscribers']").click(function() {
339
+ let import_option = $(this).attr("value");
340
+ if( "es-sync-wordpress-users" === import_option ){
341
+ $(".es-sync-wordpress-users").show();
342
+ $(".es-import-with-csv").hide();
343
+ }
344
+ else{
345
+ $(".es-import-with-csv").show();
346
+ $(".es-sync-wordpress-users").hide();
347
+ }
348
+ });
349
  });
lite/includes/class-email-subscribers.php CHANGED
@@ -749,7 +749,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
749
  // Pro Feature
750
  'lite/includes/pro-features.php',
751
  // End-IG-Code.
752
-
753
  // Feedback Class
754
  'lite/includes/feedback/class-ig-tracker.php',
755
  // Start-IG-Code.
749
  // Pro Feature
750
  'lite/includes/pro-features.php',
751
  // End-IG-Code.
752
+
753
  // Feedback Class
754
  'lite/includes/feedback/class-ig-tracker.php',
755
  // Start-IG-Code.
lite/includes/class-es-common.php CHANGED
@@ -1158,6 +1158,7 @@ class ES_Common {
1158
 
1159
  /**
1160
  * Get all restricted settings which we can't share
 
1161
  * @return array
1162
  *
1163
  * @since 4.6.6
1158
 
1159
  /**
1160
  * Get all restricted settings which we can't share
1161
+ *
1162
  * @return array
1163
  *
1164
  * @since 4.6.6
lite/includes/class-es-install.php CHANGED
@@ -235,11 +235,15 @@ if ( ! class_exists( 'ES_Install' ) ) {
235
  'ig_es_update_465_create_tables',
236
  'ig_es_update_465_db_version',
237
  ),
238
-
239
  '4.6.6' => array(
240
  'ig_es_update_466_create_temp_import_table',
241
  'ig_es_update_466_db_version',
242
  ),
 
 
 
 
 
243
 
244
  );
245
 
@@ -889,6 +893,7 @@ if ( ! class_exists( 'ES_Install' ) ) {
889
  `email` varchar(50) NOT NULL,
890
  `source` varchar(50) DEFAULT NULL,
891
  `ip_address` varchar(50) DEFAULT NULL,
 
892
  `form_id` int(10) NOT NULL DEFAULT '0',
893
  `status` varchar(10) DEFAULT NULL,
894
  `unsubscribed` tinyint(1) NOT NULL DEFAULT '0',
235
  'ig_es_update_465_create_tables',
236
  'ig_es_update_465_db_version',
237
  ),
 
238
  '4.6.6' => array(
239
  'ig_es_update_466_create_temp_import_table',
240
  'ig_es_update_466_db_version',
241
  ),
242
+ '4.6.7' => array(
243
+ 'ig_es_update_467_alter_contacts_table',
244
+ 'ig_es_add_country_code_to_contacts_table',
245
+ 'ig_es_update_467_db_version',
246
+ ),
247
 
248
  );
249
 
893
  `email` varchar(50) NOT NULL,
894
  `source` varchar(50) DEFAULT NULL,
895
  `ip_address` varchar(50) DEFAULT NULL,
896
+ `country_code` varchar(50) DEFAULT NULL,
897
  `form_id` int(10) NOT NULL DEFAULT '0',
898
  `status` varchar(10) DEFAULT NULL,
899
  `unsubscribed` tinyint(1) NOT NULL DEFAULT '0',
lite/includes/classes/class-es-admin-settings.php CHANGED
@@ -714,7 +714,7 @@ class ES_Admin_Settings {
714
  // If there is help text
715
  if ( ! empty( $arguments['desc'] ) ) {
716
  $helper = $arguments['desc'];
717
- $field_html .= sprintf( '<p class="mb-2 text-xs italic font-normal leading-snug text-gray-500 helper"> %s</p>', $helper ); // Show it
718
  }
719
 
720
  return $field_html;
@@ -874,7 +874,14 @@ class ES_Admin_Settings {
874
  if ( ! empty( $mailer['is_premium'] ) ) {
875
  $html .= '<span class="premium-icon"></span>';
876
  }
877
- $html .= '</div></label>';
 
 
 
 
 
 
 
878
  }
879
 
880
  return $html;
714
  // If there is help text
715
  if ( ! empty( $arguments['desc'] ) ) {
716
  $helper = $arguments['desc'];
717
+ $field_html .= sprintf( '<p class="field-desciption mb-2 text-xs italic font-normal leading-snug text-gray-500 helper %s"> %s</p>', $class, $helper ); // Show it
718
  }
719
 
720
  return $field_html;
874
  if ( ! empty( $mailer['is_premium'] ) ) {
875
  $html .= '<span class="premium-icon"></span>';
876
  }
877
+
878
+ $html .= '</div>';
879
+
880
+ if ( ! empty( $mailer['is_premium'] ) ) {
881
+ $html .= '</a>';
882
+ }
883
+
884
+ $html .= '</label>';
885
  }
886
 
887
  return $html;
lite/includes/classes/class-es-contacts-table.php CHANGED
@@ -1000,8 +1000,8 @@ class ES_Contacts_Table extends ES_List_Table {
1000
  $delete_nonce = wp_create_nonce( 'ig_es_delete_subscriber' );
1001
 
1002
  $name = ES_Common::prepare_name_from_first_name_last_name( $item['first_name'], $item['last_name'] );
1003
- $title = '<strong>' . $name . '</strong>';
1004
 
 
1005
  $page = ig_es_get_request_data( 'page' );
1006
 
1007
  $actions = array(
1000
  $delete_nonce = wp_create_nonce( 'ig_es_delete_subscriber' );
1001
 
1002
  $name = ES_Common::prepare_name_from_first_name_last_name( $item['first_name'], $item['last_name'] );
 
1003
 
1004
+ $title = '<strong class="pl-1">' . $name . '</strong>';
1005
  $page = ig_es_get_request_data( 'page' );
1006
 
1007
  $actions = array(
lite/includes/classes/class-es-cron.php CHANGED
@@ -535,6 +535,9 @@ class ES_Cron {
535
  }
536
 
537
  /**
 
 
 
538
  *
539
  */
540
  public function handle_data_request() {
535
  }
536
 
537
  /**
538
+ * Handle Data Request
539
+ *
540
+ * @since 4.6.6
541
  *
542
  */
543
  public function handle_data_request() {
lite/includes/classes/class-es-handle-post-notification.php CHANGED
@@ -113,8 +113,8 @@ class ES_Handle_Post_Notification {
113
  'campaign_id' => $notification['id'],
114
  'subject' => $post_subject,
115
  'body' => $post_content,
116
- 'count' => 0, // Subscribers count would be updated through background process when they are added in the sending_queue table.
117
- 'status' => 'Queueing',
118
  'start_at' => '',
119
  'finish_at' => '',
120
  'created_at' => ig_get_current_date_time(),
@@ -129,12 +129,11 @@ class ES_Handle_Post_Notification {
129
 
130
  // Add entry into mailing queue table
131
  $mailing_queue_id = ES_DB_Mailing_Queue::add_notification( $data );
 
132
  if ( $mailing_queue_id ) {
133
- $action_args = array(
134
- 'mailing_queue_id' => $mailing_queue_id,
135
- 'list_ids' => $list_id,
136
- );
137
- IG_ES_Background_Process_Helper::add_action_scheduler_task( 'ig_es_add_subscribers_to_sending_queue', $action_args );
138
  }
139
  }
140
  }
113
  'campaign_id' => $notification['id'],
114
  'subject' => $post_subject,
115
  'body' => $post_content,
116
+ 'count' => 0,
117
+ 'status' => 'In Queue',
118
  'start_at' => '',
119
  'finish_at' => '',
120
  'created_at' => ig_get_current_date_time(),
129
 
130
  // Add entry into mailing queue table
131
  $mailing_queue_id = ES_DB_Mailing_Queue::add_notification( $data );
132
+
133
  if ( $mailing_queue_id ) {
134
+ $mailing_queue_hash = $guid;
135
+ $campaign_id = $notification['id'];
136
+ ES_DB_Sending_Queue::do_insert_from_contacts_table( $mailing_queue_id, $mailing_queue_hash, $campaign_id, $list_id );
 
 
137
  }
138
  }
139
  }
lite/includes/classes/class-es-handle-subscription.php CHANGED
@@ -132,11 +132,30 @@ if ( ! class_exists( 'ES_Handle_Subscription' ) ) {
132
  add_action( 'wp_ajax_nopriv_es_add_subscriber', array( $this, 'process_request' ), 10 );
133
  }
134
 
 
 
 
135
  $this->from_rainmaker = $from_rainmaker;
136
 
137
  $this->handle_external_subscription();
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  /**
141
  * Process request
142
  *
132
  add_action( 'wp_ajax_nopriv_es_add_subscriber', array( $this, 'process_request' ), 10 );
133
  }
134
 
135
+ add_action( 'wp_ajax_ig_es_get_updated_subscription_nonce', array( $this, 'get_updated_subscription_nonce' ) );
136
+ add_action( 'wp_ajax_nopriv_ig_es_get_updated_subscription_nonce', array( $this, 'get_updated_subscription_nonce' ) );
137
+
138
  $this->from_rainmaker = $from_rainmaker;
139
 
140
  $this->handle_external_subscription();
141
  }
142
 
143
+ /**
144
+ * Get updated nonce for 'es-subscribe' action
145
+ *
146
+ * @since 4.6.7
147
+ */
148
+ public function get_updated_subscription_nonce() {
149
+
150
+ $updated_nonce = wp_create_nonce( 'es-subscribe' );
151
+
152
+ $response = array(
153
+ 'updated_nonce' => $updated_nonce,
154
+ );
155
+
156
+ wp_send_json_success( $response );
157
+ }
158
+
159
  /**
160
  * Process request
161
  *
lite/includes/classes/class-es-import-subscribers.php CHANGED
@@ -74,46 +74,69 @@ class ES_Import_Subscribers {
74
  </script>
75
  <div class="tool-box">
76
  <div class="meta-box-sortables ui-sortable bg-white shadow-md mt-8 rounded-lg">
77
- <form class="ml-7 mr-4 text-left py-4 my-2 item-center" method="post" name="form_import_subscribers" id="form_import_subscribers" action="#" enctype="multipart/form-data">
78
- <div class="step1 flex flex-row">
79
- <div class="es-import-processing flex w-1/4">
80
- <div class="ml-6 pt-6">
81
- <label for="select_csv">
82
- <span class="block pr-4 text-sm font-medium text-gray-600 pb-1">
83
- <?php esc_html_e( 'Select CSV file', 'email-subscribers' ); ?>
84
- </span>
85
- <p class="italic text-xs font-normal text-gray-400 mt-2 leading-snug">
86
- <?php
87
- /* translators: %s: Max upload size */
88
- echo sprintf( esc_html__( 'File size should be less than %s', 'email-subscribers' ), esc_html( size_format( $max_upload_size ) ) );
89
- ?>
90
- </p>
91
- <p class="italic text-xs font-normal text-gray-400 mt-2 leading-snug">
92
- <?php esc_html_e( 'Check CSV structure', 'email-subscribers' ); ?>
93
- <a class="font-medium" target="_blank" href="<?php echo esc_attr( plugin_dir_url( __FILE__ ) ) . '../../admin/partials/sample.csv'; ?>"><?php esc_html_e( 'from here', 'email-subscribers' ); ?></a>
94
- </p>
95
- </label>
96
  </div>
97
- </div>
98
- <div class="w-3/4 ml-12 my-6 mr-4">
99
- <div class="step1-body w-10/12">
100
- <div class="upload-method">
101
- <div id="media-upload-error"></div>
102
- <div id="plupload-upload-ui" class="hide-if-no-js">
103
- <div id="drag-drop-area">
104
- <div class="drag-drop-inside">
105
- <p class="drag-drop-info"><?php esc_html_e( 'Drop your CSV here', 'email-subscribers' ); ?></p>
106
- <p><?php echo esc_html_x( 'or', 'Uploader: Drop files here - or - Select Files', 'email-subscribers' ); ?></p>
107
- <p class="drag-drop-buttons"><input id="plupload-browse-button" type="button" value="<?php esc_attr_e( 'Select File', 'email-subscribers' ); ?>" class="button" /></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  </div>
109
  </div>
110
  </div>
111
-
112
  </div>
 
 
113
  </div>
114
- <p class="import-status pt-4 pb-1 text-base font-medium text-gray-600 tracking-wide hidden">&nbsp;</p>
115
- <div id="progress" class="progress hidden w-10/12"><span class="bar" style="width:0%"><span></span></span></div>
116
  </div>
 
 
 
117
  </div>
118
  <div class="step2 w-full overflow-auto mb-6 mr-4 mt-4 border-b border-gray-100">
119
  <h2 class="import-status text-base font-medium text-gray-600 tracking-wide"></h2>
@@ -173,12 +196,10 @@ class ES_Import_Subscribers {
173
  </div>
174
  </div>
175
  <p style="padding-top:10px;">
176
- <?php wp_nonce_field( 'import-contacts', 'import_contacts' ); ?>
177
- <input type="submit" name="submit" class="start-import cursor-pointer ig-es-primary-button px-4 py-2 ml-6 mr-2 my-4" value="<?php esc_html_e( 'Import', 'email-subscribers' ); ?>" />
178
- </p>
179
  </div>
180
-
181
-
182
  </form>
183
  </div>
184
  <div class="import-progress">
@@ -326,12 +347,14 @@ class ES_Import_Subscribers {
326
  remove_filter( 'ig_es_memory_limit', 'ig_es_increase_memory_limit' );
327
  }
328
 
 
329
  if ( isset( $_FILES['async-upload'] ) ) {
330
 
 
331
  if ( isset( $_FILES['async-upload']['tmp_name'] ) && is_uploaded_file( sanitize_text_field( $_FILES['async-upload']['tmp_name'] ) ) ) {
332
- $tmp_file = sanitize_text_field( $_FILES['async-upload']['tmp_name'] );
333
- $raw_data = file_get_contents( $tmp_file );
334
- $seperator = $this->get_delimiter( $tmp_file );
335
 
336
  $handle = fopen( $tmp_file, 'r' );
337
  // Get Headers.
@@ -357,6 +380,60 @@ class ES_Import_Subscribers {
357
  $raw_data = mb_convert_encoding( $raw_data, 'UTF-8', mb_detect_encoding( $raw_data, 'UTF-8, ISO-8859-1', true ) );
358
  }
359
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
  }
361
 
362
  if ( empty( $raw_data ) ) {
@@ -371,8 +448,9 @@ class ES_Import_Subscribers {
371
  $encoding = 'UTF-8';
372
  }
373
 
374
- $lines = explode( "\n", $raw_data );
375
- if ( $contain_headers ) {
 
376
  array_shift( $lines );
377
  }
378
 
@@ -387,11 +465,11 @@ class ES_Import_Subscribers {
387
  'parts' => $partcount,
388
  'lines' => count( $lines ),
389
  'separator' => $seperator,
390
- 'contain_headers' => $contain_headers,
391
  );
392
 
393
  if ( $contain_headers ) {
394
- $bulkimport['headers'] = $headers;
 
395
  }
396
 
397
  $this->do_cleanup();
@@ -483,7 +561,7 @@ class ES_Import_Subscribers {
483
  $html .= '<thead><tr class="border-b border-gray-200 bg-gray-50 text-left text-sm leading-4 font-medium text-gray-500 tracking-wider"><th class="pl-3 py-4" style="width:20px;">#</th>';
484
  $emailfield = false;
485
  $headers = array();
486
- if ( $response['data']['contain_headers'] ) {
487
  $headers = $response['data']['headers'];
488
  }
489
  for ( $i = 0; $i < $cols; $i++ ) {
74
  </script>
75
  <div class="tool-box">
76
  <div class="meta-box-sortables ui-sortable bg-white shadow-md mt-8 rounded-lg">
77
+ <div class="es-import-option bg-gray-50 rounded-lg">
78
+ <div class="mx-auto flex justify-center pt-2">
79
+ <label class="inline-flex items-center cursor-pointer mr-3 h-22 w-48">
80
+ <input type="radio" class="absolute w-0 h-0 opacity-0 es_mailer" name="es-import-subscribers" value="es-import-with-csv" checked />
81
+ <div class="mt-4 px-3 py-1 border border-gray-200 rounded-lg shadow-md es-mailer-logo h-18 bg-white">
82
+ <div class="border-0 es-logo-wrapper">
83
+ <svg class="w-6 h-6 text-gray-500" 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="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path></svg>
84
+ </div>
85
+ <p class="mb-2 text-sm inline-block font-medium text-gray-600">
86
+ <?php echo esc_html__( 'Import CSV', 'email-subscribers' ); ?>
87
+ </p>
 
 
 
 
 
 
 
 
88
  </div>
89
+ </label>
90
+ <?php
91
+ do_action( 'ig_es_subscriber_import_method_tab_heading' );
92
+ ?>
93
+ </div>
94
+ <hr class="mx-10 border-gray-100 mt-6">
95
+ </div>
96
+ <form class="ml-7 mr-4 text-left py-4 my-2 item-center" method="post" name="form_import_subscribers" id="form_import_subscribers" action="#" enctype="multipart/form-data">
97
+ <div class="es-import-step1 flex flex-row">
98
+ <div class="w-5/6 flex flex-row es-import-with-csv es-import">
99
+ <div class="es-import-processing flex w-1/4">
100
+ <div class="ml-6 pt-6">
101
+ <label for="select_csv">
102
+ <span class="block pr-4 text-sm font-medium text-gray-600 pb-1">
103
+ <?php esc_html_e( 'Select CSV file', 'email-subscribers' ); ?>
104
+ </span>
105
+ <p class="italic text-xs font-normal text-gray-400 mt-2 leading-snug">
106
+ <?php
107
+ /* translators: %s: Max upload size */
108
+ echo sprintf( esc_html__( 'File size should be less than %s', 'email-subscribers' ), esc_html( size_format( $max_upload_size ) ) );
109
+ ?>
110
+ </p>
111
+ <p class="italic text-xs font-normal text-gray-400 mt-2 leading-snug">
112
+ <?php esc_html_e( 'Check CSV structure', 'email-subscribers' ); ?>
113
+ <a class="font-medium" target="_blank" href="<?php echo esc_attr( plugin_dir_url( __FILE__ ) ) . '../../admin/partials/sample.csv'; ?>"><?php esc_html_e( 'from here', 'email-subscribers' ); ?></a>
114
+ </p>
115
+ </label>
116
+ </div>
117
+ </div>
118
+ <div class="w-3/4 ml-12 xl:ml-32 my-6 mr-4">
119
+ <div class="es-import-step1-body">
120
+ <div class="upload-method">
121
+ <div id="media-upload-error"></div>
122
+ <div id="plupload-upload-ui" class="hide-if-no-js">
123
+ <div id="drag-drop-area">
124
+ <div class="drag-drop-inside">
125
+ <p class="drag-drop-info"><?php esc_html_e( 'Drop your CSV here', 'email-subscribers' ); ?></p>
126
+ <p><?php echo esc_html_x( 'or', 'Uploader: Drop files here - or - Select Files', 'email-subscribers' ); ?></p>
127
+ <p class="drag-drop-buttons"><input id="plupload-browse-button" type="button" value="<?php esc_attr_e( 'Select File', 'email-subscribers' ); ?>" class="button" /></p>
128
+ </div>
129
  </div>
130
  </div>
131
  </div>
 
132
  </div>
133
+ <p class="import-status pt-4 pb-1 text-base font-medium text-gray-600 tracking-wide hidden">&nbsp;</p>
134
+ <div id="progress" class="progress hidden"><span class="bar" style="width:0%"><span></span></span></div>
135
  </div>
 
 
136
  </div>
137
+ <?php
138
+ do_action( 'ig_es_subscriber_import_method_tab_content' );
139
+ ?>
140
  </div>
141
  <div class="step2 w-full overflow-auto mb-6 mr-4 mt-4 border-b border-gray-100">
142
  <h2 class="import-status text-base font-medium text-gray-600 tracking-wide"></h2>
196
  </div>
197
  </div>
198
  <p style="padding-top:10px;">
199
+ <?php wp_nonce_field( 'import-contacts', 'import_contacts' ); ?>
200
+ <input type="submit" name="submit" class="start-import cursor-pointer ig-es-primary-button px-4 py-2 ml-6 mr-2 my-4" value="<?php esc_html_e( 'Import', 'email-subscribers' ); ?>" />
201
+ </p>
202
  </div>
 
 
203
  </form>
204
  </div>
205
  <div class="import-progress">
347
  remove_filter( 'ig_es_memory_limit', 'ig_es_increase_memory_limit' );
348
  }
349
 
350
+ $importing_from = '';
351
  if ( isset( $_FILES['async-upload'] ) ) {
352
 
353
+ $importing_from = 'csv';
354
  if ( isset( $_FILES['async-upload']['tmp_name'] ) && is_uploaded_file( sanitize_text_field( $_FILES['async-upload']['tmp_name'] ) ) ) {
355
+ $tmp_file = sanitize_text_field( $_FILES['async-upload']['tmp_name'] );
356
+ $raw_data = file_get_contents( $tmp_file );
357
+ $seperator = $this->get_delimiter( $tmp_file );
358
 
359
  $handle = fopen( $tmp_file, 'r' );
360
  // Get Headers.
380
  $raw_data = mb_convert_encoding( $raw_data, 'UTF-8', mb_detect_encoding( $raw_data, 'UTF-8, ISO-8859-1', true ) );
381
  }
382
  }
383
+ } elseif ( isset( $_POST['selected_roles'] ) ) {
384
+ $importing_from = 'wordpress_users';
385
+
386
+ $roles = ig_es_get_request_data( 'selected_roles' );
387
+
388
+ $users = $wpdb->get_results(
389
+ "SELECT u.user_email, IF(meta_role.meta_value = 'a:0:{}',NULL,meta_role.meta_value) AS '_role', meta_firstname.meta_value AS 'firstname', meta_lastname.meta_value AS 'lastname', u.display_name, u.user_nicename
390
+ FROM {$wpdb->users} AS u
391
+ LEFT JOIN {$wpdb->usermeta} AS meta_role ON meta_role.user_id = u.id AND meta_role.meta_key = '{$wpdb->prefix}capabilities'
392
+ LEFT JOIN {$wpdb->usermeta} AS meta_firstname ON meta_firstname.user_id = u.id AND meta_firstname.meta_key = 'first_name'
393
+ LEFT JOIN {$wpdb->usermeta} AS meta_lastname ON meta_lastname.user_id = u.id AND meta_lastname.meta_key = 'last_name'
394
+ WHERE meta_role.user_id IS NOT NULL"
395
+ );
396
+
397
+ $raw_data = '';
398
+ $seperator = ';';
399
+ $contain_headers = true;
400
+ $headers = array(
401
+ __( 'Email', 'email-subscribers' ),
402
+ __( 'First Name', 'email-subscribers' ),
403
+ __( 'Last Name', 'email-subscribers' ),
404
+ __( 'Nick Name', 'email-subscribers' ),
405
+ __( 'Display Name', 'email-subscribers' ),
406
+ );
407
+
408
+ foreach ( $users as $user ) {
409
+
410
+ // User must have a role assigned.
411
+ if ( ! $user->_role ) {
412
+ continue;
413
+ }
414
+
415
+ // Role is set but not in the list
416
+ if ( $user->_role && ! array_intersect( array_keys( unserialize( $user->_role ) ), $roles ) ) {
417
+ continue;
418
+ }
419
+
420
+ $user_data = array();
421
+
422
+ foreach ( $user as $key => $data ) {
423
+ if ( '_role' === $key ) {
424
+ continue;
425
+ }
426
+
427
+ if ( 'firstname' === $key && ! $data ) {
428
+ $data = $user->display_name;
429
+ }
430
+
431
+ $user_data[] = $data;
432
+ }
433
+
434
+ $raw_data .= implode( ';', $user_data );
435
+ $raw_data .= "\n";
436
+ }
437
  }
438
 
439
  if ( empty( $raw_data ) ) {
448
  $encoding = 'UTF-8';
449
  }
450
 
451
+ $lines = explode( "\n", $raw_data );
452
+
453
+ if ( 'csv' === $importing_from && $contain_headers ) {
454
  array_shift( $lines );
455
  }
456
 
465
  'parts' => $partcount,
466
  'lines' => count( $lines ),
467
  'separator' => $seperator,
 
468
  );
469
 
470
  if ( $contain_headers ) {
471
+ $bulkimport['headers'] = $headers;
472
+ $bulkimport['contain_headers'] = $contain_headers;
473
  }
474
 
475
  $this->do_cleanup();
561
  $html .= '<thead><tr class="border-b border-gray-200 bg-gray-50 text-left text-sm leading-4 font-medium text-gray-500 tracking-wider"><th class="pl-3 py-4" style="width:20px;">#</th>';
562
  $emailfield = false;
563
  $headers = array();
564
+ if ( ! empty( $response['data']['headers'] ) ) {
565
  $headers = $response['data']['headers'];
566
  }
567
  for ( $i = 0; $i < $cols; $i++ ) {
lite/includes/classes/class-es-mailer.php CHANGED
@@ -576,6 +576,7 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
576
  $this->time_start = time();
577
  $message_id = ! empty( $merge_tags['message_id'] ) ? $merge_tags['message_id'] : 0;
578
  $campaign_id = ! empty( $merge_tags['campaign_id'] ) ? $merge_tags['campaign_id'] : 0;
 
579
 
580
  $sender_data = array();
581
  $campaign_type = '';
@@ -591,6 +592,25 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
591
  $sender_data['from_email'] = $from_email;
592
  $sender_data['reply_to_email'] = $reply_to_email;
593
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
594
  }
595
  }
596
 
@@ -695,11 +715,13 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
695
  $sender_name = '';
696
  $sender_email = '';
697
  $reply_to_email = '';
 
698
  // If sender data is passed .i.g. set in the campaign then use it.
699
  if ( ! empty( $sender_data ) ) {
700
- $sender_name = ! empty( $sender_data['from_name'] ) ? $sender_data['from_name'] : '';
701
- $sender_email = ! empty( $sender_data['from_email'] ) ? $sender_data['from_email']: '';
702
- $reply_to_email = ! empty( $sender_data['reply_to_email'] ) ? $sender_data['reply_to_email'] : '';
 
703
  }
704
 
705
  // If sender name is not passed then fetch it from ES settings.
@@ -717,19 +739,24 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
717
  $reply_to_email = $this->get_from_email();
718
  }
719
 
720
- $subject = html_entity_decode( $subject, ENT_QUOTES, get_bloginfo( 'charset' ) );
 
 
721
 
722
- $message->from = $sender_email;
723
- $message->from_name = $sender_name;
724
- $message->to = $email;
725
- $message->subject = $subject;
726
- $message->body = $body;
 
 
 
727
 
728
  $headers = array(
729
  "From: \"$sender_name\" <$sender_email>",
730
  'Return-Path: <' . $sender_email . '>',
731
  'Reply-To: <' . $reply_to_email . '>',
732
- 'Content-Type: text/html; charset="' . get_bloginfo( 'charset' ) . '"'
733
  );
734
 
735
  $message->headers = $headers;
576
  $this->time_start = time();
577
  $message_id = ! empty( $merge_tags['message_id'] ) ? $merge_tags['message_id'] : 0;
578
  $campaign_id = ! empty( $merge_tags['campaign_id'] ) ? $merge_tags['campaign_id'] : 0;
579
+ $attachments = ! empty( $merge_tags['attachments'] ) ? $merge_tags['attachments'] : array();
580
 
581
  $sender_data = array();
582
  $campaign_type = '';
592
  $sender_data['from_email'] = $from_email;
593
  $sender_data['reply_to_email'] = $reply_to_email;
594
  }
595
+
596
+ $campaign_meta = maybe_unserialize( $campaign['meta'] );
597
+ if ( ! empty( $campaign_meta['attachments'] ) ) {
598
+ $sender_data['attachments'] = array();
599
+ $attachments = $campaign_meta['attachments'];
600
+ }
601
+ }
602
+ }
603
+
604
+ if ( ! empty( $attachments ) ) {
605
+ foreach ( $attachments as $attachment_id ) {
606
+ if ( ! $attachment_id ) {
607
+ continue;
608
+ }
609
+ $attached_file = get_attached_file( $attachment_id );
610
+ if ( ! is_file( $attached_file ) ) {
611
+ continue;
612
+ }
613
+ $sender_data['attachments'][ basename( $attached_file ) ] = $attached_file;
614
  }
615
  }
616
 
715
  $sender_name = '';
716
  $sender_email = '';
717
  $reply_to_email = '';
718
+ $attachments = array();
719
  // If sender data is passed .i.g. set in the campaign then use it.
720
  if ( ! empty( $sender_data ) ) {
721
+ $sender_name = ! empty( $sender_data['from_name'] ) ? $sender_data['from_name'] : '';
722
+ $sender_email = ! empty( $sender_data['from_email'] ) ? $sender_data['from_email'] : '';
723
+ $reply_to_email = ! empty( $sender_data['reply_to_email'] ) ? $sender_data['reply_to_email']: '';
724
+ $attachments = ! empty( $sender_data['attachments'] ) ? $sender_data['attachments'] : array();
725
  }
726
 
727
  // If sender name is not passed then fetch it from ES settings.
739
  $reply_to_email = $this->get_from_email();
740
  }
741
 
742
+ $charset = get_bloginfo( 'charset' );
743
+
744
+ $subject = html_entity_decode( $subject, ENT_QUOTES, $charset );
745
 
746
+ $message->from = $sender_email;
747
+ $message->from_name = $sender_name;
748
+ $message->to = $email;
749
+ $message->subject = $subject;
750
+ $message->body = $body;
751
+ $message->attachments = $attachments;
752
+ $message->reply_to_email = $reply_to_email;
753
+ $message->charset = $charset;
754
 
755
  $headers = array(
756
  "From: \"$sender_name\" <$sender_email>",
757
  'Return-Path: <' . $sender_email . '>',
758
  'Reply-To: <' . $reply_to_email . '>',
759
+ 'Content-Type: text/html; charset="' . $charset . '"'
760
  );
761
 
762
  $message->headers = $headers;
lite/includes/classes/class-es-message.php CHANGED
@@ -92,6 +92,26 @@ if ( ! class_exists( 'ES_Message' ) ) {
92
  */
93
  public $from_name = '';
94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
 
96
  public function __construct() {
97
 
92
  */
93
  public $from_name = '';
94
 
95
+ /**
96
+ * Attachments for email
97
+ *
98
+ * @since 4.6.7
99
+ */
100
+ public $attachments = array();
101
+
102
+ /**
103
+ * Reply to email
104
+ *
105
+ * @since 4.6.7
106
+ */
107
+ public $reply_to_email = '';
108
+
109
+ /**
110
+ * Character set
111
+ *
112
+ * @since 4.6.7
113
+ */
114
+ public $charset = '';
115
 
116
  public function __construct() {
117
 
lite/includes/classes/class-es-newsletters.php CHANGED
@@ -568,13 +568,13 @@ class ES_Newsletters {
568
 
569
  // Add notification to mailing queue if not already added.
570
  if ( empty( $notification ) ) {
571
- // We need to set mailing queue status to Queueing to ensure it is not picked by Cron(WP Cron or ES Cron) before all of its subscribers are added to the sending queue.
572
- $data['status'] = 'Queueing';
573
- $data['count'] = 0; // Count would be added in background process after all subscribers are added in the sending_queue table.
574
  $mailing_queue_id = ES_DB_Mailing_Queue::add_notification( $data );
 
575
  $should_queue_emails = true;
576
  } else {
577
- $notification_id = $notification['id'];
 
578
  $notification_status = $notification['status'];
579
  // Check if notification is not sending or already sent then only update the notification.
580
  if ( ! in_array( $notification_status, array( 'Sending', 'Sent' ), true ) ) {
@@ -586,27 +586,43 @@ class ES_Newsletters {
586
  // Check if list has been updated, if yes then we need to delete emails from existing lists and requeue the emails from the updated lists.
587
  if ( $selected_list_ids !== $existing_list_ids ) {
588
  $should_queue_emails = true;
589
- $mailing_queue_id = $notification_id;
590
  $data['count'] = 0;
591
- $data['status'] = 'Queueing';
592
  } else {
593
  $data['count'] = $notification['count'];
594
  }
595
 
596
- $notification = ES_DB_Mailing_Queue::update_notification( $notification_id, $data );
597
  }
598
  }
599
 
600
- if ( ! empty( $mailing_queue_id ) && $should_queue_emails ) {
 
 
601
 
602
- // Delete existing sending queue if any already present.
603
- ES_DB_Sending_Queue::delete_sending_queue_by_mailing_id( array( $mailing_queue_id ) );
604
 
605
- $action_args = array(
606
- 'mailing_queue_id' => $mailing_queue_id,
607
- 'list_ids' => $list_id,
608
- );
609
- IG_ES_Background_Process_Helper::add_action_scheduler_task( 'ig_es_add_subscribers_to_sending_queue', $action_args );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
610
  }
611
  }
612
  }
568
 
569
  // Add notification to mailing queue if not already added.
570
  if ( empty( $notification ) ) {
571
+ $data['count'] = 0;
 
 
572
  $mailing_queue_id = ES_DB_Mailing_Queue::add_notification( $data );
573
+ $mailing_queue_hash = $guid;
574
  $should_queue_emails = true;
575
  } else {
576
+ $mailing_queue_id = $notification['id'];
577
+ $mailing_queue_hash = $notification['hash'];
578
  $notification_status = $notification['status'];
579
  // Check if notification is not sending or already sent then only update the notification.
580
  if ( ! in_array( $notification_status, array( 'Sending', 'Sent' ), true ) ) {
586
  // Check if list has been updated, if yes then we need to delete emails from existing lists and requeue the emails from the updated lists.
587
  if ( $selected_list_ids !== $existing_list_ids ) {
588
  $should_queue_emails = true;
 
589
  $data['count'] = 0;
 
590
  } else {
591
  $data['count'] = $notification['count'];
592
  }
593
 
594
+ $notification = ES_DB_Mailing_Queue::update_notification( $mailing_queue_id, $data );
595
  }
596
  }
597
 
598
+ if ( ! empty( $mailing_queue_id ) ) {
599
+
600
+ if ( $should_queue_emails ) {
601
 
602
+ // Delete existing sending queue if any already present.
603
+ ES_DB_Sending_Queue::delete_sending_queue_by_mailing_id( array( $mailing_queue_id ) );
604
 
605
+ ES_DB_Sending_Queue::do_insert_from_contacts_table( $mailing_queue_id, $mailing_queue_hash, $campaign_id, $list_id );
606
+ }
607
+
608
+ $mailing_queue = ES_DB_Mailing_Queue::get_email_by_id( $mailing_queue_id );
609
+ if ( ! empty( $mailing_queue ) ) {
610
+
611
+ $queue_start_at = $mailing_queue['start_at'];
612
+ $current_timestamp = time();
613
+ $sending_timestamp = strtotime( $queue_start_at );
614
+
615
+ // Check if campaign sending time has come.
616
+ if ( ! empty( $sending_timestamp ) && $sending_timestamp <= $current_timestamp ) {
617
+ $request_args = array(
618
+ 'action' => 'ig_es_trigger_mailing_queue_sending',
619
+ 'campaign_hash' => $mailing_queue_hash,
620
+ );
621
+ // Send an asynchronous request to trigger sending of campaign emails.
622
+ IG_ES_Background_Process_Helper::send_async_ajax_request( $request_args, true );
623
+ }
624
+
625
+ }
626
  }
627
  }
628
  }
lite/includes/classes/class-es-queue.php CHANGED
@@ -168,11 +168,8 @@ if ( ! class_exists( 'ES_Queue' ) ) {
168
  $mailing_queue_id = $result['id'];
169
 
170
  if ( ! empty( $mailing_queue_id ) ) {
171
- $action_args = array(
172
- 'mailing_queue_id' => $mailing_queue_id,
173
- 'list_ids' => $list_id,
174
- );
175
- IG_ES_Background_Process_Helper::add_action_scheduler_task( 'ig_es_add_subscribers_to_sending_queue', $action_args );
176
  }
177
  }
178
  }
@@ -363,7 +360,7 @@ if ( ! class_exists( 'ES_Queue' ) ) {
363
  'subject' => $subject,
364
  'body' => $content,
365
  'count' => 0,
366
- 'status' => 'Queueing',
367
  'start_at' => ! empty( $campaign['start_at'] ) ? $campaign['start_at'] : '',
368
  'finish_at' => '',
369
  'created_at' => ig_get_current_date_time(),
168
  $mailing_queue_id = $result['id'];
169
 
170
  if ( ! empty( $mailing_queue_id ) ) {
171
+ $mailing_queue_hash = $result['hash'];
172
+ ES_DB_Sending_Queue::do_insert_from_contacts_table( $mailing_queue_id, $mailing_queue_hash, $campaign_id, $list_id );
 
 
 
173
  }
174
  }
175
  }
360
  'subject' => $subject,
361
  'body' => $content,
362
  'count' => 0,
363
+ 'status' => 'In Queue',
364
  'start_at' => ! empty( $campaign['start_at'] ) ? $campaign['start_at'] : '',
365
  'finish_at' => '',
366
  'created_at' => ig_get_current_date_time(),
lite/includes/classes/class-es-reports-table.php CHANGED
@@ -124,7 +124,6 @@ class ES_Reports_Table extends ES_List_Table {
124
  <th width="24%" class="py-3 pl-4 es_reports_table_header"><?php esc_html_e( 'Email', 'email-subscribers' ); ?></th>
125
  <th width="12%" class=" py-3 pl-6 es_reports_table_header"><?php esc_html_e( 'Status', 'email-subscribers' ); ?></th>
126
  <th width="22%" class="py-3 pl-2 es_reports_table_header"><?php esc_html_e( 'Sent Date', 'email-subscribers' ); ?></th>
127
- <th width="17%" class="py-3 pl-6 es_reports_table_header"><?php esc_html_e( 'Viewed Status', 'email-subscribers' ); ?></th>
128
  <th width="22%" class=" py-3 pl-6 es_reports_table_header"><?php esc_html_e( 'Viewed Date', 'email-subscribers' ); ?></th>
129
  </tr>
130
 
@@ -199,19 +198,68 @@ class ES_Reports_Table extends ES_List_Table {
199
  $opened = ! empty( $email['opened'] ) ? $email['opened'] : ( ! empty( $email['es_deliver_status'] ) && 'Viewed' === $email['es_deliver_status'] ? 1 : 0 );
200
  $opened_at = ! empty( $email['opened_at'] ) ? $email['opened_at'] : ( ! empty( $email['es_deliver_viewdate'] ) ? $email['es_deliver_viewdate'] : '' );
201
 
 
 
 
 
202
  ?>
203
 
204
  <tr>
205
  <td class="pl-6 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><?php echo esc_html( $i ); ?></td>
206
  <td class="pl-4 py-2 border-b border-gray-200 text-sm leading-5 text-gray-600"><?php echo esc_html( $email_id ); ?></td>
207
- <td class="pl-6 pr-2 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><span style="color:#03a025;font-weight:bold;"><?php echo esc_html( $status ); ?></span></td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  <td class="pl-2 pr-2 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><?php echo wp_kses_post( ig_es_format_date_time( $sent_at ) ); ?></td>
209
- <td class="pl-6 pr-2 py-2 border-b border-gray-200 text-sm leading-5 text-gray-600"><span>
210
- <?php
211
- /* translators: 1: Italic tag 2: Class attribute */
212
- echo ! empty( $opened ) && 1 == $opened ? esc_html__( 'Viewed', 'email-subscribers' ) : wp_kses_post( '<i title="Not yet viewed" class="dashicons dashicons-es dashicons-minus"/>' );
213
- ?>
214
- </span></td>
215
  <td class="pl-6 pr-1 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><?php echo wp_kses_post( ig_es_format_date_time( $opened_at ) ); ?></td>
216
  </tr>
217
 
124
  <th width="24%" class="py-3 pl-4 es_reports_table_header"><?php esc_html_e( 'Email', 'email-subscribers' ); ?></th>
125
  <th width="12%" class=" py-3 pl-6 es_reports_table_header"><?php esc_html_e( 'Status', 'email-subscribers' ); ?></th>
126
  <th width="22%" class="py-3 pl-2 es_reports_table_header"><?php esc_html_e( 'Sent Date', 'email-subscribers' ); ?></th>
 
127
  <th width="22%" class=" py-3 pl-6 es_reports_table_header"><?php esc_html_e( 'Viewed Date', 'email-subscribers' ); ?></th>
128
  </tr>
129
 
198
  $opened = ! empty( $email['opened'] ) ? $email['opened'] : ( ! empty( $email['es_deliver_status'] ) && 'Viewed' === $email['es_deliver_status'] ? 1 : 0 );
199
  $opened_at = ! empty( $email['opened_at'] ) ? $email['opened_at'] : ( ! empty( $email['es_deliver_viewdate'] ) ? $email['es_deliver_viewdate'] : '' );
200
 
201
+ if ( 'Sent' === $status ) {
202
+ $status = ( $opened ) ? 'Opened' : $status;
203
+ }
204
+
205
  ?>
206
 
207
  <tr>
208
  <td class="pl-6 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><?php echo esc_html( $i ); ?></td>
209
  <td class="pl-4 py-2 border-b border-gray-200 text-sm leading-5 text-gray-600"><?php echo esc_html( $email_id ); ?></td>
210
+ <td class="pl-6 pr-2 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500">
211
+ <span style="color:#03a025;font-weight:bold;">
212
+ <?php
213
+ switch ( $status ) {
214
+ case 'Sent':
215
+ ?>
216
+ <svg class="h-6 w-6 text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
217
+ <title><?php echo esc_html__( 'Sent', 'email-subscribers' ); ?></title>
218
+ <path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"></path>
219
+ </svg>
220
+ <?php
221
+ break;
222
+ case 'In Queue':
223
+ ?>
224
+ <svg class=" h-6 w-6 text-orange-400" fill="currentColor" viewBox="0 0 20 20">
225
+ <title><?php echo esc_html__( 'In Queue', 'email-subscribers' ); ?></title>
226
+ <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z" clip-rule="evenodd"/>
227
+ </svg>
228
+ <?php
229
+ break;
230
+ case 'Sending':
231
+ ?>
232
+ <svg class=" h-6 w-6 text-yellow-400" fill="currentColor" viewBox="0 0 20 20">
233
+ <title><?php echo esc_html__( 'Sending', 'email-subscribers' ); ?></title>
234
+ <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-8.707l-3-3a1 1 0 00-1.414 1.414L10.586 9H7a1 1 0 100 2h3.586l-1.293 1.293a1 1 0 101.414 1.414l3-3a1 1 0 000-1.414z" clip-rule="evenodd"/>
235
+ </svg>
236
+ <?php
237
+ break;
238
+ case 'Opened':
239
+ ?>
240
+ <svg xmlns="http://www.w3.org/2000/svg" class="" width="28" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
241
+ <title><?php echo esc_html__( 'Opened', 'email-subscribers' ); ?></title>
242
+ <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
243
+ <path d="M7 12l5 5l10 -10" />
244
+ <path d="M2 12l5 5m5 -5l5 -5" />
245
+ </svg>
246
+ <?php
247
+ break;
248
+ case '':
249
+ ?>
250
+ <i class="dashicons dashicons-es dashicons-minus"/>
251
+ <?php
252
+ break;
253
+ default:
254
+ echo esc_html( $status );
255
+ break;
256
+
257
+ }
258
+ ?>
259
+ </span>
260
+ </td>
261
+
262
  <td class="pl-2 pr-2 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><?php echo wp_kses_post( ig_es_format_date_time( $sent_at ) ); ?></td>
 
 
 
 
 
 
263
  <td class="pl-6 pr-1 py-2 border-b border-gray-200 text-sm leading-5 text-gray-500"><?php echo wp_kses_post( ig_es_format_date_time( $opened_at ) ); ?></td>
264
  </tr>
265
 
lite/includes/classes/class-es-tools.php CHANGED
@@ -49,7 +49,11 @@ class ES_Tools {
49
  $content = str_replace( '{{NAME}}', 'Username', $content );
50
  }
51
 
52
- $response = ES()->mailer->send_test_email( $email, $subject, $content );
 
 
 
 
53
 
54
  if ( $response && 'SUCCESS' === $response['status'] ) {
55
  $response['message'] = __( 'Email has been sent. Please check your inbox', 'email-subscribers' );
49
  $content = str_replace( '{{NAME}}', 'Username', $content );
50
  }
51
 
52
+ $attachments = ig_es_get_data( $_POST, 'attachments', array() );
53
+
54
+ $merge_tags = array( 'attachments' => $attachments );
55
+
56
+ $response = ES()->mailer->send_test_email( $email, $subject, $content, $merge_tags );
57
 
58
  if ( $response && 'SUCCESS' === $response['status'] ) {
59
  $response['message'] = __( 'Email has been sent. Please check your inbox', 'email-subscribers' );
lite/includes/classes/class-ig-es-background-process-helper.php CHANGED
@@ -158,14 +158,16 @@ if ( ! class_exists( 'IG_ES_Background_Process_Helper' ) ) {
158
  *
159
  * @since 4.6.3
160
  */
161
- public static function add_action_scheduler_task( $action = '', $action_args = array(), $process_asynchronously = true, $should_wait = false ) {
162
 
163
- if ( empty( $action ) || empty( $action_args ) ) {
164
  return false;
165
  }
166
 
167
  if ( function_exists( 'as_schedule_single_action' ) ) {
168
- $action_id = as_schedule_single_action( time(), $action, array( $action_args ), 'email-subscribers' );
 
 
169
  if ( ! empty( $action_id ) ) {
170
  if ( $process_asynchronously ) {
171
  $request_args = array(
158
  *
159
  * @since 4.6.3
160
  */
161
+ public static function add_action_scheduler_task( $action = '', $action_args = array(), $process_asynchronously = true, $should_wait = false, $time = 0 ) {
162
 
163
+ if ( empty( $action ) ) {
164
  return false;
165
  }
166
 
167
  if ( function_exists( 'as_schedule_single_action' ) ) {
168
+ $time = ! empty( $time ) ? $time : time();
169
+ $action_id = as_schedule_single_action( $time, $action, array( $action_args ), 'email-subscribers' );
170
+
171
  if ( ! empty( $action_id ) ) {
172
  if ( $process_asynchronously ) {
173
  $request_args = array(
lite/includes/db/class-es-db-contacts.php CHANGED
@@ -66,6 +66,7 @@ class ES_DB_Contacts extends ES_DB {
66
  'email' => '%s',
67
  'source' => '%s',
68
  'ip_address' => '%s',
 
69
  'form_id' => '%d',
70
  'status' => '%s',
71
  'unsubscribed' => '%d',
@@ -95,6 +96,7 @@ class ES_DB_Contacts extends ES_DB {
95
  'email' => '',
96
  'source' => '',
97
  'ip_address' => '',
 
98
  'form_id' => 0,
99
  'status' => 'verified',
100
  'unsubscribed' => 0,
@@ -938,10 +940,12 @@ class ES_DB_Contacts extends ES_DB {
938
  $can_track_ip = apply_filters('ig_es_can_track_subscriber_ip', 'yes' );
939
 
940
  if ( 'no' === $can_track_ip && ES()->is_pro() ) {
941
- $data['ip_address'] = '';
 
942
  } else {
943
  if ( empty( $data['ip_address'] ) && ! in_array( $data['source'], $source ) ) {
944
  $data['ip_address'] = ig_es_get_ip();
 
945
  }
946
  }
947
  return parent::insert( $data, $type );
66
  'email' => '%s',
67
  'source' => '%s',
68
  'ip_address' => '%s',
69
+ 'country_code' => '%s',
70
  'form_id' => '%d',
71
  'status' => '%s',
72
  'unsubscribed' => '%d',
96
  'email' => '',
97
  'source' => '',
98
  'ip_address' => '',
99
+ 'country_code' => '',
100
  'form_id' => 0,
101
  'status' => 'verified',
102
  'unsubscribed' => 0,
940
  $can_track_ip = apply_filters('ig_es_can_track_subscriber_ip', 'yes' );
941
 
942
  if ( 'no' === $can_track_ip && ES()->is_pro() ) {
943
+ $data['ip_address'] = '';
944
+ $data['country_code'] = '';
945
  } else {
946
  if ( empty( $data['ip_address'] ) && ! in_array( $data['source'], $source ) ) {
947
  $data['ip_address'] = ig_es_get_ip();
948
+ $data = apply_filters( 'ig_es_get_country_based_on_ip', $data );
949
  }
950
  }
951
  return parent::insert( $data, $type );
lite/includes/db/class-es-db-sending-queue.php CHANGED
@@ -261,6 +261,121 @@ class ES_DB_Sending_Queue {
261
 
262
  }
263
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  public static function update_viewed_status( $guid = '', $email = '', $message_id = 0 ) {
265
  global $wpdb;
266
 
261
 
262
  }
263
 
264
+ /**
265
+ * Method to insert sending queue data from contact table.
266
+ *
267
+ * @param int $mailing_queue_id Mailing queue ID.
268
+ * @param string $mailing_queue_hash Mailing Hash.
269
+ * @param int $campaign_id Campaign ID.
270
+ * @param array|string $list_ids List IDs seperated by commas if string i.e. '1,2,3' or array( 1, 2, 3 ) if array.
271
+ *
272
+ * @return bool $is_inserted Is contacts inserted into sending_queue table.
273
+ *
274
+ * @since 4.6.4
275
+ */
276
+ public static function do_insert_from_contacts_table( $mailing_queue_id = 0, $mailing_queue_hash = '', $campaign_id = 0, $list_ids = array() ) {
277
+
278
+ global $wpdb;
279
+
280
+ $is_inserted = false;
281
+
282
+ if ( empty( $mailing_queue_id ) || empty( $mailing_queue_hash ) || empty( $campaign_id ) || empty( $list_ids ) ) {
283
+ return $is_inserted;
284
+ }
285
+
286
+ $column_defaults = self::get_column_defaults();
287
+
288
+ $queue_status = 'In Queue';
289
+ $queue_links = isset( $column_defaults['links'] ) ? $column_defaults['links'] : '';
290
+ $queue_opened = isset( $column_defaults['opened'] ) ? $column_defaults['opened'] : 0;
291
+ $queue_sent_at = isset( $column_defaults['sent_at'] ) ? $column_defaults['sent_at']: null;
292
+ $queue_opened_at = isset( $column_defaults['opened_at'] ) ? $column_defaults['opened_at'] : null;
293
+
294
+ // Convert to string if list ids are in array.
295
+ if ( is_array( $list_ids ) ) {
296
+ $list_ids = implode( ',', $list_ids );
297
+ }
298
+
299
+ $total_contacts_added = $wpdb->query(
300
+ $wpdb->prepare(
301
+ "INSERT INTO `{$wpdb->prefix}ig_sending_queue`
302
+ (
303
+ `mailing_queue_id`,
304
+ `mailing_queue_hash`,
305
+ `campaign_id`,
306
+ `contact_id`,
307
+ `contact_hash`,
308
+ `email`,
309
+ `status`,
310
+ `links`,
311
+ `opened`,
312
+ `sent_at`,
313
+ `opened_at`
314
+ )
315
+ SELECT
316
+ %d AS `mailing_queue_id`,
317
+ %s AS `mailing_queue_hash`,
318
+ %d AS `campaign_id`,
319
+ MAX(`ig_contacts`.`id`) AS `contact_id`,
320
+ MAX(`ig_contacts`.`hash`) AS `contact_hash`,
321
+ `ig_contacts`.`email` AS `email`,
322
+ %s AS `status`,
323
+ %s AS `links`,
324
+ %d AS `opened`,
325
+ %s AS `sent_at`,
326
+ %s AS `opened_at`
327
+ FROM `{$wpdb->prefix}ig_contacts` AS `ig_contacts`
328
+ WHERE id IN (
329
+ SELECT `contact_id` FROM `{$wpdb->prefix}ig_lists_contacts`
330
+ WHERE FIND_IN_SET( `list_id`, %s ) AND `status` IN ( 'subscribed', 'confirmed' )
331
+ )
332
+ GROUP BY `ig_contacts`.`email`",
333
+ $mailing_queue_id,
334
+ $mailing_queue_hash,
335
+ $campaign_id,
336
+ $queue_status,
337
+ $queue_links,
338
+ $queue_opened,
339
+ $queue_sent_at,
340
+ $queue_opened_at,
341
+ $list_ids
342
+ )
343
+ );
344
+
345
+ // Check if contacts added.
346
+ if ( ! empty( $total_contacts_added ) ) {
347
+ $is_inserted = true;
348
+ ES_DB_Mailing_Queue::update_subscribers_count( $mailing_queue_hash, $total_contacts_added );
349
+ } else {
350
+
351
+ // If some how above sql query fails then queue emails using old approach.
352
+ // i.e. Preparing data for insert query in PHP and then doing insert.
353
+
354
+ // Converto to an array if already not an array.
355
+ if ( ! is_array( $list_ids ) ) {
356
+ $list_ids = explode( ',', $list_ids );
357
+ }
358
+
359
+ $subscribers = ES()->contacts_db->get_active_contacts_by_list_id( $list_ids );
360
+ $subscribers_count = count( $subscribers );
361
+ if ( $subscribers_count > 0 ) {
362
+ // Add entry into sending queue table
363
+ $delivery_data = array();
364
+ $delivery_data['hash'] = $mailing_queue_hash;
365
+ $delivery_data['status'] = $queue_status;
366
+ $delivery_data['subscribers'] = $subscribers;
367
+ $delivery_data['campaign_id'] = $campaign_id;
368
+ $delivery_data['mailing_queue_id'] = $mailing_queue_id;
369
+ $is_inserted = self::do_batch_insert( $delivery_data );
370
+ if ( $is_inserted ) {
371
+ ES_DB_Mailing_Queue::update_subscribers_count( $mailing_queue_hash, $subscribers_count );
372
+ }
373
+ }
374
+ }
375
+
376
+ return $is_inserted;
377
+ }
378
+
379
  public static function update_viewed_status( $guid = '', $email = '', $message_id = 0 ) {
380
  global $wpdb;
381
 
lite/includes/libraries/class-es-html2text.php CHANGED
@@ -221,9 +221,16 @@ class ES_Html2Text {
221
  * @return unknown
222
  */
223
  public function __construct( $html = '', $options = array() ) {
 
 
 
 
 
 
 
224
  // for backwards compatibility
225
- if ( !is_array( $options ) ) {
226
- return call_user_func_array( array( $this, 'legacyConstruct' ), func_get_args() );
227
  }
228
 
229
  $this->html = $html;
221
  * @return unknown
222
  */
223
  public function __construct( $html = '', $options = array() ) {
224
+
225
+ /**
226
+ * It is a good practice to put func_get_args() at the start of the function to avoid a changed function parameter to leak into the original arguments.
227
+ * By taking the copy early this is avoided. This behavior changed in PHP7: [https://www.php.net/manual/en/function.func-get-args.php#refsect1-function.func-get-args-notes]
228
+ */
229
+ $func_args = func_get_args();
230
+
231
  // for backwards compatibility
232
+ if ( ! is_array( $options ) ) {
233
+ return call_user_func_array( array( $this, 'legacyConstruct' ), $func_args );
234
  }
235
 
236
  $this->html = $html;
lite/includes/mailers/class-es-pepipost-mailer.php CHANGED
@@ -65,6 +65,20 @@ if ( ! class_exists( 'ES_Pepipost_Mailer' ) ) {
65
  $params['from']['fromName'] = $message->from_name;
66
  $params['subject'] = $message->subject;
67
  $params['content'] = $message->body;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
  $headers = array(
70
  'user-agent' => 'APIMATIC 2.0',
65
  $params['from']['fromName'] = $message->from_name;
66
  $params['subject'] = $message->subject;
67
  $params['content'] = $message->body;
68
+
69
+ $attachments = $message->attachments;
70
+ if ( ! empty( $attachments ) ) {
71
+ foreach ( $attachments as $attachment_name => $attachment_path ) {
72
+ if ( is_file( $attachment_path ) ) {
73
+ $attachment_content = file_get_contents( $attachment_path );
74
+ $encoded_content = base64_encode( $attachment_content );
75
+ $params['attachments'][] = array(
76
+ 'fileContent' => $encoded_content,
77
+ 'fileName' => $attachment_name,
78
+ );
79
+ }
80
+ }
81
+ }
82
 
83
  $headers = array(
84
  'user-agent' => 'APIMATIC 2.0',
lite/includes/mailers/class-es-phpmail-mailer.php CHANGED
@@ -29,21 +29,73 @@ if ( ! class_exists( 'ES_Phpmail_Mailer' ) ) {
29
  */
30
  public function send( ES_Message $message ) {
31
 
32
- ES()->logger->info( 'Start Sending Email Using PHP Mail', $this->logger_context );
33
 
34
- $message->headers[] = 'MIME-Version: 1.0';
35
- $message->headers[] = 'X-Mailer: PHP' . phpversion();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
- $headers = implode("\n", $message->headers);
38
- $send = mail( $message->to, $message->subject, $message->body, $headers );
 
 
 
 
 
 
39
 
40
- if ( ! $send ) {
41
- return $this->do_response( 'error', 'Error in Email Sending' );
42
  }
43
 
44
  ES()->logger->info( 'Email Sent Successfully Using PHP Mail', $this->logger_context );
45
 
46
  return $this->do_response( 'success' );
 
47
  }
48
 
49
  }
29
  */
30
  public function send( ES_Message $message ) {
31
 
32
+ global $wp_version;
33
 
34
+ ES()->logger->info( 'Start Sending Email Using PHP Mail', $this->logger_context );
35
+
36
+ if ( version_compare( $wp_version, '5.5', '<' ) ) {
37
+ require_once ABSPATH . WPINC . '/class-phpmailer.php';
38
+ } else {
39
+ require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php';
40
+ require_once ABSPATH . WPINC . '/PHPMailer/Exception.php';
41
+
42
+ // Check if PHPMailer class already exists before creating an alias for it.
43
+ if ( ! class_exists( 'PHPMailer' ) ) {
44
+ class_alias( PHPMailer\PHPMailer\PHPMailer::class, 'PHPMailer' );
45
+ }
46
+
47
+ // Check if phpmailerException class already exists before creating an alias for it.
48
+ if ( ! class_exists( 'phpmailerException' ) ) {
49
+ class_alias( PHPMailer\PHPMailer\Exception::class, 'phpmailerException' );
50
+ }
51
+ }
52
+
53
+ $phpmailer = new PHPMailer( true );
54
+ $phpmailer->From = $message->from;
55
+ $phpmailer->FromName = $message->from_name;
56
+ $phpmailer->CharSet = $message->charset;
57
+ $phpmailer->ClearAllRecipients();
58
+ $phpmailer->clearAttachments();
59
+ $phpmailer->clearCustomHeaders();
60
+ $phpmailer->clearReplyTos();
61
+
62
+ $phpmailer->addAddress( $message->to );
63
+ $phpmailer->addReplyTo( $message->from, $message->from_name );
64
+
65
+ $phpmailer->WordWrap = 50;
66
+ $phpmailer->isHTML( true );
67
+
68
+ $phpmailer->Subject = $message->subject;
69
+ $phpmailer->Body = $message->body;
70
+ $phpmailer->AltBody = $message->body_text; //Text Email Body for non html email client
71
+
72
+ if ( ! empty( $message->attachments ) ) {
73
+ $attachments = $message->attachments;
74
+ foreach ( $attachments as $attachment ) {
75
+ try {
76
+ $phpmailer->addAttachment( $attachment );
77
+ } catch ( phpmailerException $e ) {
78
+ continue;
79
+ }
80
+ }
81
+ }
82
 
83
+ try {
84
+ if ( ! $phpmailer->send() ) {
85
+ ES()->logger->error( '[Error in Email Sending] : ' . $message->to . ' Error: ' . $phpmailer->ErrorInfo, $this->logger_context );
86
+
87
+ return $this->do_response( 'error', $phpmailer->ErrorInfo );
88
+ }
89
+ } catch ( Exception $e ) {
90
+ ES()->logger->error( '[Error in Email Sending] : ' . $message->to . ' Error: ' . $e->getMessage(), $this->logger_context );
91
 
92
+ return $this->do_response( 'error', $e->getMessage() );
 
93
  }
94
 
95
  ES()->logger->info( 'Email Sent Successfully Using PHP Mail', $this->logger_context );
96
 
97
  return $this->do_response( 'success' );
98
+
99
  }
100
 
101
  }
lite/includes/mailers/class-es-wpmail-mailer.php CHANGED
@@ -27,7 +27,7 @@ if ( ! class_exists( 'ES_Wpmail_Mailer' ) ) {
27
 
28
  ES()->logger->info( 'Start Sending Email Using WP Mail', $this->logger_context );
29
 
30
- $send_mail = wp_mail( $message->to, $message->subject, $message->body, $message->headers );
31
 
32
  if ( ! $send_mail ) {
33
  global $phpmailer;
27
 
28
  ES()->logger->info( 'Start Sending Email Using WP Mail', $this->logger_context );
29
 
30
+ $send_mail = wp_mail( $message->to, $message->subject, $message->body, $message->headers, $message->attachments );
31
 
32
  if ( ! $send_mail ) {
33
  global $phpmailer;
lite/includes/pro-features.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  add_filter( 'ig_es_settings_tabs', 'ig_es_add_settings_tabs', 10, 1 );
4
  add_filter( 'ig_es_registered_settings', 'ig_es_add_upsale', 10, 2 );
5
- add_filter( 'ig_es_mailers', 'ig_es_mailers_promo', 10, 1 );
6
 
7
  // Add additional tab "Comments" in Audience > Sync
8
  add_filter( 'ig_es_sync_users_tabs', 'ig_es_add_sync_users_tabs', 11, 1 );
@@ -28,6 +28,12 @@ add_action( 'ig_es_after_broadcast_tracking_options_settings', 'ig_es_additional
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
  /**
32
  * Promote SMTP mailer for free
33
  *
@@ -51,6 +57,17 @@ function ig_es_mailers_promo( $mailers ) {
51
 
52
  }
53
 
 
 
 
 
 
 
 
 
 
 
 
54
  return $mailers;
55
  }
56
 
@@ -675,7 +692,7 @@ function add_spam_score_utm_link() {
675
  }
676
 
677
  /**
678
- * Upsale ES PRO on Form Captcha
679
  *
680
  * @param $form_data
681
  *
@@ -1438,3 +1455,60 @@ function ig_es_view_additional_reports_data() {
1438
  }
1439
  }
1440
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  add_filter( 'ig_es_settings_tabs', 'ig_es_add_settings_tabs', 10, 1 );
4
  add_filter( 'ig_es_registered_settings', 'ig_es_add_upsale', 10, 2 );
5
+ add_filter( 'ig_es_mailers', 'ig_es_mailers_promo', 11, 1 );
6
 
7
  // Add additional tab "Comments" in Audience > Sync
8
  add_filter( 'ig_es_sync_users_tabs', 'ig_es_add_sync_users_tabs', 11, 1 );
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
+ // Upsell add attachment feature.
32
+ add_action( 'media_buttons', 'ig_es_upsell_add_attachment_feature' );
33
+
34
+ // Upsell existing wp user import feature.
35
+ add_action( 'ig_es_subscriber_import_method_tab_heading', 'ig_es_upsell_existing_wp_user_import_feature' );
36
+
37
  /**
38
  * Promote SMTP mailer for free
39
  *
57
 
58
  }
59
 
60
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
61
+
62
+ $mailers['Amazon_SES'] = array(
63
+ 'name' => 'Amazon SES',
64
+ 'logo' => ES_PLUGIN_URL . 'lite/admin/images/aws.svg',
65
+ 'is_premium' => true,
66
+ 'url' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'amazon_ses_mailer' ) )
67
+ );
68
+
69
+ }
70
+
71
  return $mailers;
72
  }
73
 
692
  }
693
 
694
  /**
695
+ * Upsell ES PRO on Form Captcha
696
  *
697
  * @param $form_data
698
  *
1455
  }
1456
  }
1457
 
1458
+
1459
+ /**
1460
+ * Upsell add attachment feature in lite/starter/trial versions.
1461
+ *
1462
+ * @param string $editor_id Editor ID
1463
+ *
1464
+ * @since 4.6.7
1465
+ */
1466
+ function ig_es_upsell_add_attachment_feature( $editor_id ) {
1467
+
1468
+ if ( 'edit-es-boradcast-body' === $editor_id ) {
1469
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
1470
+ ?>
1471
+ <div class="ig-es-attachments-wrapper bg-white inline-block">
1472
+ <button type="button" class="ig-es-add-attachment button" disabled="disabled">
1473
+ <svg class="flex-shrink-0 h-5 text-gray-400 inline-block" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
1474
+ <path fill-rule="evenodd" d="M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z" clip-rule="evenodd"></path>
1475
+ </svg>
1476
+ <?php echo esc_html__( 'Add Attachments', 'email-subscribers' ); ?>
1477
+ </button>
1478
+ <span class="premium-icon"></span>
1479
+ </div>
1480
+ <?php
1481
+ }
1482
+ }
1483
+ }
1484
+
1485
+ /**
1486
+ * Upsell existing wp user import feature
1487
+ *
1488
+ * @since 4.6.7
1489
+ */
1490
+ function ig_es_upsell_existing_wp_user_import_feature() {
1491
+
1492
+ if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
1493
+ $utm_args = array(
1494
+ 'utm_medium' => 'import_existing_wp_users'
1495
+ );
1496
+
1497
+ $pricing_url = ES_Common::get_utm_tracking_url( $utm_args );
1498
+ ?>
1499
+ <a href="<?php echo esc_url( $pricing_url ); ?>" target="_blank">
1500
+ <label class="inline-flex items-center cursor-pointer w-56">
1501
+ <div class="mt-4 px-1 mx-4 border border-gray-200 rounded-lg shadow-md es-mailer-logo bg-white">
1502
+ <div class="border-0 es-logo-wrapper">
1503
+ <svg class="w-6 h-6 text-gray-500 inline-block" 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 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"></path></svg>
1504
+ </div>
1505
+ <p class="mb-2 text-sm inline-block font-medium text-gray-600">
1506
+ <?php echo esc_html__( 'Import existing WordPress users', 'email-subscribers' ); ?>
1507
+ <span class="premium-icon inline-block"></span>
1508
+ </p>
1509
+ </div>
1510
+ </label>
1511
+ </a>
1512
+ <?php
1513
+ }
1514
+ }
lite/includes/upgrade/es-update-functions.php CHANGED
@@ -1325,6 +1325,7 @@ function ig_es_update_465_db_version() {
1325
  /* --------------------- ES 4.6.5(End)--------------------------- */
1326
 
1327
  /* --------------------- ES 4.6.6(Start)--------------------------- */
 
1328
  /**
1329
  * Create table for storing subscribers import CSV data temporarily
1330
  *
@@ -1343,3 +1344,43 @@ function ig_es_update_466_db_version() {
1343
  ES_Install::update_db_version( '4.6.6' );
1344
  }
1345
  /* --------------------- ES 4.6.6(End)--------------------------- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1325
  /* --------------------- ES 4.6.5(End)--------------------------- */
1326
 
1327
  /* --------------------- ES 4.6.6(Start)--------------------------- */
1328
+
1329
  /**
1330
  * Create table for storing subscribers import CSV data temporarily
1331
  *
1344
  ES_Install::update_db_version( '4.6.6' );
1345
  }
1346
  /* --------------------- ES 4.6.6(End)--------------------------- */
1347
+
1348
+ /* --------------------- ES 4.6.7(Start)--------------------------- */
1349
+
1350
+ /**
1351
+ * Add Country column in contacts table
1352
+ *
1353
+ * @since 4.6.7
1354
+ */
1355
+ function ig_es_update_467_alter_contacts_table() {
1356
+ global $wpdb;
1357
+
1358
+ $cols = $wpdb->get_col( "SHOW COLUMNS FROM {$wpdb->prefix}ig_contacts" );
1359
+
1360
+ if ( ! in_array( 'country', $cols, true ) ) {
1361
+ $wpdb->query(
1362
+ "ALTER TABLE {$wpdb->prefix}ig_contacts
1363
+ ADD COLUMN `country_code` varchar(50) NULL AFTER `ip_address`"
1364
+ );
1365
+ }
1366
+ }
1367
+
1368
+ /**
1369
+ * Add country code based on the contacts ip_address
1370
+ *
1371
+ * @since 4.6.7
1372
+ */
1373
+ function ig_es_add_country_code_to_contacts_table() {
1374
+ IG_ES_Background_Process_Helper::add_action_scheduler_task( 'ig_es_add_country_code_to_audience' );
1375
+ }
1376
+
1377
+ /**
1378
+ * Update DB version
1379
+ *
1380
+ * @since 4.6.7
1381
+ */
1382
+ function ig_es_update_467_db_version() {
1383
+ ES_Install::update_db_version( '4.6.7' );
1384
+ }
1385
+
1386
+ /* --------------------- ES 4.6.7(End)--------------------------- */
lite/public/js/email-subscribers-public.js CHANGED
@@ -119,6 +119,29 @@
119
  handleBindFunction(form);
120
  });
121
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  });
123
  // Compatibility of ES with IG
124
  jQuery( window ).on( "init.icegram", function(e, ig) {
119
  handleBindFunction(form);
120
  });
121
 
122
+ let subscription_forms = $('.es_subscription_form');
123
+ // Check if page contains ES subscription form.
124
+ if ( subscription_forms.length > 0 ) {
125
+ // Send an ajax request to get updated nonce value.
126
+ jQuery.ajax({
127
+ type: 'POST',
128
+ url: es_data.es_ajax_url,
129
+ data: {
130
+ action: 'ig_es_get_updated_subscription_nonce',
131
+ },
132
+ dataType: 'json',
133
+ success: function(response) {
134
+ if( true === response.success ) {
135
+ let data = response.data;
136
+ let updated_nonce = data.updated_nonce;
137
+ // Update nonce field in each subscription form.
138
+ jQuery(subscription_forms).find('input[name="es-subscribe"]').each(function(){
139
+ $(this).val(updated_nonce);
140
+ });
141
+ }
142
+ }
143
+ });
144
+ }
145
  });
146
  // Compatibility of ES with IG
147
  jQuery( window ).on( "init.icegram", function(e, ig) {
lite/public/partials/class-es-shortcode.php CHANGED
@@ -250,7 +250,6 @@ class ES_Shortcode {
250
  <span class="es_spinner_image" id="spinner-image"><img src="<?php echo esc_url( $spinner_image_path ); ?>" alt="Loading"/></span>
251
 
252
  </form>
253
-
254
  <span class="es_subscription_message" id="es_subscription_message_<?php echo esc_attr( $unique_id ); ?>"></span>
255
  </div>
256
 
250
  <span class="es_spinner_image" id="spinner-image"><img src="<?php echo esc_url( $spinner_image_path ); ?>" alt="Loading"/></span>
251
 
252
  </form>
 
253
  <span class="es_subscription_message" id="es_subscription_message_<?php echo esc_attr( $unique_id ); ?>"></span>
254
  </div>
255
 
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.6
8
  Requires PHP: 5.6
9
- Stable tag: 4.6.6
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
@@ -304,6 +304,15 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
304
 
305
  == Changelog ==
306
 
 
 
 
 
 
 
 
 
 
307
  **4.6.6 (14.01.2021)**
308
 
309
  * New: Now, able to map fields while importing
6
  Requires at least: 3.9
7
  Tested up to: 5.6
8
  Requires PHP: 5.6
9
+ Stable tag: 4.6.7
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
304
 
305
  == Changelog ==
306
 
307
+ **4.6.7 (21.01.2021)**
308
+
309
+ * New: Show contacts' country on the audience page [PRO]
310
+ * New: Import existing WordPress users [PRO]
311
+ * New: Add attachments to broadcast and sequence campaigns [PRO]
312
+ * New: Send emails using Amazon SES [PRO]
313
+ * Update: Improved campaign report UI
314
+ * Fix: Invalid nonce issue due to caching while subscribing
315
+
316
  **4.6.6 (14.01.2021)**
317
 
318
  * New: Now, able to map fields while importing